Ë
    Eêñiî  ã                  óø   — U d Z ddlmZ ddlZddlmZmZmZ ddlm	Z	m
Z
mZ ddlmZ erddlmZ dZd	ed
<   dZd	ed<   dZd	ed<   dZd	ed<   dZd	ed<   dd„Zdd„Zdd„Zd d„Zd!d„Zdd„Zd"d„Zd#d„Zd$d„Zd%d„Zy)&z!Server related utility functions.é    )ÚannotationsN)ÚTYPE_CHECKINGÚFinalÚcast)ÚconfigÚnet_utilÚurl_util)Úsecrets_singleton)ÚCallablei¸  r   ÚDEVELOPMENT_PORTÚ	VITE_PORTÚVITE_PORT_ENV_VARÚPORTÚPORT_ENV_VARÚ_streamlit_userÚAUTH_COOKIE_NAMEÚ_streamlit_user_tokensÚTOKENS_COOKIE_NAMEc                 ón   — t        j                  d«      D � ch c]  } | j                  «       ’Œ c} S c c} w )Nzserver.corsAllowedOrigins)r   Ú
get_optionÚstrip©Úorigins    úb/var/www/pod-logistic/pod-ai/venv/lib/python3.12/site-packages/streamlit/web/server/server_util.pyÚallowlisted_originsr   %   s(   € Ü)/×):Ñ):Ð;VÓ)WÖX˜vˆF�L‰L�NÒXÐXùÒXs   ˜2c                 ó\   — t        j                  d«       xs t        j                  d«      S )a  True if cross-origin requests from any origin are allowed.

    We allow ALL cross-origin requests when CORS protection has been disabled
    with server.enableCORS=False or when in dev mode (where the Vite dev server
    and backend use different ports, counting as two origins).
    úserver.enableCORSúglobal.developmentMode)r   r   © ó    r   Úallow_all_cross_origin_requestsr!   )   s0   € ô × Ñ Ð!4Ó5Ð5ò ¼×9JÑ9JØ ó:ð r    c                ó   — | t        «       v S )z.Check if origin is in the allowlisted origins.)r   r   s    r   Úis_allowed_originr#   5   s   € àÔ(Ó*Ð*Ð*r    c                óf  — t        j                  d«      syt        j                  | «      }t	        «       D �cg c]  }t        j                  |«      ‘Œ }}dddt
        t        j                  t        j                  g|¢}|D ](  }t        |t        «      s|€|}n |«       }|€Œ"||k(  sŒ( y yc c}w )a  Return True if URL is from allowed origins (for CORS purpose).

    Allowed origins:
    1. localhost
    2. The internal and external IP addresses of the machine where this
       function was called from.

    If `server.enableCORS` is False, this allows all origins.
    r   TÚ	localhostú0.0.0.0z	127.0.0.1F)r   r   r	   Úget_hostnamer   Ú#_get_server_address_if_manually_setr   Úget_internal_ipÚget_external_ipÚ
isinstanceÚstr)ÚurlÚhostnamer   Úallowlisted_domainsÚallowed_domainsÚallowed_domainÚallowed_domain_strs          r   Úis_url_from_allowed_originsr3   :   sÕ   € ô ×ÑÐ0Ô1àä×$Ñ$ SÓ)€Hô 5HÓ4IöØ*0Œ×Ñ˜fÕ%ðÐð ð 	ØØô 	,ä× Ñ Ü× Ñ ðDð 
ðD€Oð *ò 
ˆÜ�n¤cÔ*¨nÐ.DØ!/Ñá!/Ó!1ÐàÐ%ØàÐ)Ó)Ùð
ð ùò=s   ¸B.c                 óª   — t        j                  d«      } t        j                  «       r)t        j                  d«      }|r|j	                  d| «      } | S )zcGet the cookie secret.

    If the user has not set a cookie secret, we generate a random one.
    zserver.cookieSecretÚauthÚcookie_secret)r   r   r
   Úload_if_toml_existsÚget)r6   Úauth_sections     r   Úget_cookie_secretr:   k   sL   € ô
  ×*Ñ*Ð+@ÓA€MÜ×,Ñ,Ô.Ü(×,Ñ,¨VÓ4ˆÙØ(×,Ñ,¨_¸mÓLˆMØÐr    c                 ó¬   — t        j                  d«      } | s2t        j                  «       rt        j                  dd «      }| xs |d u} t        d| «      S )Nzserver.enableXsrfProtectionr5   Úbool)r   r   r
   r7   r8   r   )Úcsrf_enabledr9   s     r   Úis_xsrf_enabledr>   x   sP   € Ü×$Ñ$Ð%BÓC€LÙÔ-×AÑAÔCÜ(×,Ñ,¨V°TÓ:ˆØ#Ò? |¸4Ð'?ˆÜ�˜Ó%Ð%r    c                 ó~   — t        j                  d«      r(t        j                  t        j                  d«      «      S y )Nzbrowser.serverAddress)r   Úis_manually_setr	   r'   r   r   r    r   r(   r(   €   s1   € Ü×ÑÐ5Ô6Ü×$Ñ$¤V×%6Ñ%6Ð7NÓ%OÓPÐPØr    c                ó   — | dv ry| S )a¸  Get a display-friendly address for URLs shown to users.

    Wildcard addresses like "0.0.0.0" (all IPv4) or "::" (all interfaces)
    are not valid browser addresses on all platforms. This translates
    them to "localhost" for display purposes.

    Parameters
    ----------
    address
        The server address (IP or hostname).

    Returns
    -------
    str
        Address suitable for display. Wildcards become "localhost".
    >   ú::r&   r%   r   )Úaddresss    r   Úget_display_addressrD   †   s   € ð" Ð#Ñ#ØØ€Nr    c                óØ   — t        j                  d«      rdnd}t        «       }t        j                  d«      j                  d«      }|rd|z   }| j                  d«      } |› d| › d|› |› �S )zèGet the URL for any app served at the given host_ip.

    Parameters
    ----------
    host_ip : str
        The IP address of the machine that is running the Streamlit Server.

    Returns
    -------
    str
        The URL.
    zserver.sslCertFileÚhttpsÚhttpzserver.baseUrlPathú/z://ú:)r   r   Ú_get_browser_address_bar_portr   )Úhost_ipÚprotocolÚportÚ	base_paths       r   Úget_urlrO   œ   sr   € ô !×+Ñ+Ð,@ÔA‰wÀv€Hä(Ó*€DÜ×!Ñ!Ð"6Ó7×=Ñ=¸cÓB€IáØ˜)‘Oˆ	à�m‰m˜CÓ €GØˆZ�s˜7˜) 1 T F¨9¨+Ð6Ð6r    c                 ó2  — t        j                  d«      rVt        t        fD ]A  } t        j
                  j                  | «      }|sŒ%	 t        |«      }d|cxk  r	dk  sŒ=|c S  ŒC t        S t        t        j                  d«      «      S # t        $ r Y Œsw xY w)zûGet the app URL that will be shown in the browser's address bar.

    That is, this is the port where static assets will be served from. In dev,
    this is different from the URL that will be used to connect to the
    server-browser websocket.

    r   é   iÿÿ  zbrowser.serverPort)
r   r   r   r   ÚosÚenvironr8   ÚintÚ
ValueErrorr   )Úenv_varÚport_strrM   s      r   rJ   rJ   µ   s™   € ô ×ÑÐ1Ô2Ü)¬<Ð8ò 	ˆGÜ—z‘z—~‘~ gÓ.ˆHÙØðÜ˜8“}�ð �DÔ!˜EÓ!Ø’ñ "ð	ô  ÐÜŒv× Ñ Ð!5Ó6Ó7Ð7øô ò Ùðús   ÁB
Â
	BÂB)Úreturnzset[str])rX   r<   )r   r,   rX   r<   )r-   r,   rX   r<   )rX   r,   )rX   z
str | None)rC   r,   rX   r,   )rK   r,   rX   r,   )rX   rT   ) Ú__doc__Ú
__future__r   rR   Útypingr   r   r   Ú	streamlitr   r   r	   Ústreamlit.runtime.secretsr
   Úcollections.abcr   r   Ú__annotations__r   r   r   r   r   r!   r#   r3   r:   r>   r(   rD   rO   rJ   r   r    r   ú<module>r`      s‘   ðò (å "ã 	ß -Ñ -ç 0Ñ 0Ý 7áÝ(ð Ð �%Ó Ø&Ð �5Ó &Ø€ˆeÓ à+Ð �%Ó +Ø4Ð �EÓ 4óYó	ó+ó
.ób
ó&óóó,7ô28r    