Ë
    rR hˆ  ã                  ó®   — d dl mZ d dlZd dlmZ ddlmZ ddlm	Z	 ddl
mZ dd„Z	 	 d	 	 	 	 	 	 	 	 	 dd	„Z	 	 	 d	 	 	 	 	 	 	 	 	 	 	 dd
„Z	 	 d	 	 	 	 	 dd„Zy)é    )ÚannotationsN)Úquoteé   )Ú
_plain_int)ÚSecurityError)Ú
uri_to_iric                óº  — | sy	 | j                  d«      d   j                  d«      j                  d«      } t	        |t
        «      r|g}|D ]n  }|j                  d«      r|dd }d	}nd}	 |j                  d«      d   j                  d«      j                  d«      }|| k(  s|sŒY| j                  d|› �«      sŒn y	 y# t        $ r Y yw xY w# t        $ r Y  yw xY w)
zôCheck if a host matches a list of trusted names.

    :param hostname: The name to check.
    :param trusted_list: A list of valid names to match. If a name
        starts with a dot it will match all subdomains.

    .. versionadded:: 0.9
    Fú:r   ÚidnaÚasciiú.é   NT)Ú	partitionÚencodeÚdecodeÚUnicodeEncodeErrorÚ
isinstanceÚstrÚ
startswithÚendswith)ÚhostnameÚtrusted_listÚrefÚsuffix_matchs       úM/var/www/timesheet/venv/lib/python3.12/site-packages/werkzeug/sansio/utils.pyÚhost_is_trustedr      sø   € ñ ØðØ×%Ñ% cÓ*¨1Ñ-×4Ñ4°VÓ<×CÑCÀGÓLˆô �,¤Ô$Ø$�~ˆàò ˆØ�>‰>˜#ÔØ�a�b�'ˆCØ‰Là ˆLð	Ø—-‘- Ó$ QÑ'×.Ñ.¨vÓ6×=Ñ=¸gÓFˆCð �(Š?š|°×0AÑ0AÀAÀcÀUÀ)Õ0LÙðð øô+ ò Ùðûô "ò 	Úð	ús#   …2B> Á+2CÂ>	C
Ã	C
Ã	CÃCc                ó  — d}|�|}n(|�&|d   }d|v r|d   dk7  rd|› d�}|d   �
|› d|d   › �}| dv r|j                  d	«      r|dd
 }n| dv r|j                  d«      r|dd }|�t        ||«      st        d|›d�«      ‚|S )a€  Return the host for the given parameters.

    This first checks the ``host_header``. If it's not present, then
    ``server`` is used. The host will only contain the port if it is
    different than the standard port for the protocol.

    Optionally, verify that the host is trusted using
    :func:`host_is_trusted` and raise a
    :exc:`~werkzeug.exceptions.SecurityError` if it is not.

    :param scheme: The protocol the request used, like ``"https"``.
    :param host_header: The ``Host`` header value.
    :param server: Address of the server. ``(host, port)``, or
        ``(path, None)`` for unix sockets.
    :param trusted_hosts: A list of trusted host names.

    :return: Host, with port if necessary.
    :raise ~werkzeug.exceptions.SecurityError: If the host is not
        trusted.

    .. versionchanged:: 3.1.3
        If ``SERVER_NAME`` is IPv6, it is wrapped in ``[]``.
    Ú Nr   r
   ú[ú]r   >   ÚwsÚhttpz:80éýÿÿÿ>   ÚwssÚhttpsz:443éüÿÿÿzHost z is not trusted.)r   r   r   )ÚschemeÚhost_headerÚserverÚtrusted_hostsÚhosts        r   Úget_hostr,   1   sÈ   € ð: €DàÐØ‰Ø	Ð	Ø�a‰yˆð �$‰;˜4 ™7 cš>Ø�t�f˜A�;ˆDà�!‰9Ð Ø�V˜1˜V A™Y˜KÐ(ˆDà�Ñ D§M¡M°%Ô$8Ø�C�Rˆy‰Ø	Ð#Ñ	#¨¯©°fÔ(=Ø�C�RˆyˆàÐ Ü˜t ]Ô3Ü %¨ xÐ/?Ð @ÓAÐAà€Kó    c                óþ  — | d|g}|€+|j                  d«       t        dj                  |«      «      S |j                  t        |j	                  d«      d¬«      «       |j                  d«       |€t        dj                  |«      «      S |j                  t        |j                  d«      d¬«      «       |r-|j                  d«       |j                  t        |d¬«      «       t        dj                  |«      «      S )aƒ  Recreate the URL for a request. If an optional part isn't
    provided, it and subsequent parts are not included in the URL.

    The URL is an IRI, not a URI, so it may contain Unicode characters.
    Use :func:`~werkzeug.urls.iri_to_uri` to convert it to ASCII.

    :param scheme: The protocol the request used, like ``"https"``.
    :param host: The host the request was made to. See :func:`get_host`.
    :param root_path: Prefix that the application is mounted under. This
        is prepended to ``path``.
    :param path: The path part of the URL after ``root_path``.
    :param query_string: The portion of the URL after the "?".
    z://ú/r   z!$&'()*+,/:;=@%)Úsafeú?z!$&'()*+,/:;=?@%)Úappendr   Újoinr   ÚrstripÚlstrip)r'   r+   Ú	root_pathÚpathÚquery_stringÚurls         r   Úget_current_urlr:   i   sÊ   € ð( �5˜$Ð
€CàÐØ�
‰
�3ŒÜ˜"Ÿ'™' #›,Ó'Ð'ð ‡J�JŒu�Y×%Ñ% cÓ*Ð1BÔCÔDØ‡J�Jˆs„Oà€|Ü˜"Ÿ'™' #›,Ó'Ð'à‡J�JŒu�T—[‘[ Ó%Ð,=Ô>Ô?áØ�
‰
�3ŒØ�
‰
”5˜Ð,>Ô?Ô@ä�b—g‘g˜c“lÓ#Ð#r-   c                ó\   — |dk(  s| €y	 t        dt        | «      «      S # t        $ r Y yw xY w)a¥  Return the ``Content-Length`` header value as an int. If the header is not given
    or the ``Transfer-Encoding`` header is ``chunked``, ``None`` is returned to indicate
    a streaming request. If the value is not an integer, or negative, 0 is returned.

    :param http_content_length: The Content-Length HTTP header.
    :param http_transfer_encoding: The Transfer-Encoding HTTP header.

    .. versionadded:: 2.2
    ÚchunkedNr   )Úmaxr   Ú
ValueError)Úhttp_content_lengthÚhttp_transfer_encodings     r   Úget_content_lengthrA   ”   s?   € ð  Ò*Ð.AÐ.IØðÜ�1”jÐ!4Ó5Ó6Ð6øÜò Ùðús   Š Ÿ	+ª+)r   ú
str | Noner   zt.Iterable[str]ÚreturnÚbool)NN)
r'   r   r(   rB   r)   ztuple[str, int | None] | Noner*   zt.Iterable[str] | NonerC   r   )NNN)r'   r   r+   r   r6   rB   r7   rB   r8   zbytes | NonerC   r   )r?   rB   r@   rB   rC   z
int | None)Ú
__future__r   ÚtypingÚtÚurllib.parser   Ú	_internalr   Ú
exceptionsr   Úurlsr   r   r,   r:   rA   © r-   r   ú<module>rM      sÉ   ðÝ "ã Ý å "Ý &Ý ó#ðR -1Ø,0ð	5Øð5àð5ð *ð5ð *ð	5ð
 	ó5ðv !ØØ!%ð($Øð($à
ð($ð ð($ð ð	($ð
 ð($ð 	ó($ðX '+Ø)-ðØ#ðà&ðð ôr-   