
    E d                        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e	dej
        e	         d	efd
Z	 	 dde	dej        e	         dej        ej        e	ej        e         f                  dej        ej
        e	                  d	e	f
dZ	 	 	 dde	de	dej        e	         dej        e	         dej        e         d	e	fdZ	 	 ddej        e	df         dej        e	df         d	ej        e         fdZdS )    N   )_encode_idna)SecurityError)
uri_to_iri)	url_quotehostnametrusted_listreturnc                 z   | sdS t          |t                    r|g}dt          dt          fd}	  ||           }n# t          $ r Y dS w xY w|D ]k}|                    d          r|dd         }d}nd}	  ||          }n# t          $ r Y  dS w xY w||k    r dS |r|                    d	|z             r dS ldS )
zCheck 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
    Fr   r
   c                 `    d| v r|                      dd          d         } t          |           S )N:   r   )rsplitr   )r   s    ^C:\Users\ChattiNader\Documents\MyHotelMatch\api\dev\Lib\site-packages\werkzeug/sansio/utils.py
_normalizez#host_is_trusted.<locals>._normalize   s1    (??sA..q1HH%%%    .r   NT   .)
isinstancestrbytesUnicodeError
startswithendswith)r   r	   r   hostname_bytesrefsuffix_match	ref_bytess          r   host_is_trustedr   	   s=     u,$$ &$~&S &U & & & &#H--   uu   >># 	!abb'CLL L	"
3II 	 	 	555	 &&44 	N33D94DEE 	445s!   < 
A
	A
6B
BBschemehost_headerservertrusted_hostsc                 *   d}||}n||d         }|d         | d|d          }| dv r |                     d          r|dd         }n#| d	v r|                     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.
     Nr   r   r   >   wshttpz:80>   wsshttpsz:443zHost z is not trusted.)r   r   r   )r    r!   r"   r#   hosts        r   get_hostr-   8   s    4 D		ay!9 ((VAY((DDMM%$8$8CRCy	#	#	#f(=(=	#CRCy t]33 	B @ @ @ @AAAKr   r,   	root_pathpathquery_stringc                 ~   | d|g}|7|                     d           t          d                    |                    S |                     t          |                    d                               |                     d           |"t          d                    |                    S |                     t          |                    d                               |r9|                     d           |                     t          |d                     t          d                    |                    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://N/r%   ?z:&%=+$!*'(),)safe)appendr   joinr   rstriplstrip)r    r,   r.   r/   r0   urls         r   get_current_urlr:   h   s   ( 5$
C

3"''#,,'''JJy))#..//000JJsOOO|"''#,,'''JJyS))**+++ A

3

9\???@@@bggcll###r   r%   http_content_lengthhttp_transfer_encodingc                     |dk    rdS | 5	 t          dt          |                     S # t          t          f$ r Y nw xY wdS )a  Returns the content length as an integer or ``None`` if
    unavailable or chunked transfer encoding is used.

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

    .. versionadded:: 2.2
    chunkedNr   )maxint
ValueError	TypeError)r;   r<   s     r   get_content_lengthrC      sb     **t&	q#122333I& 	 	 	D	4s   ) ==)NN)NNN)Nr%   )typingt	_internalr   
exceptionsr   urlsr   r   r   Iterableboolr   OptionalTupler@   r-   r   r:   UnionrC    r   r   <module>rO      s       $ $ $ $ $ $ & & & & & &            ,c ,C ,T , , , ,d 9=15	- --C- JqwsAJsO345- :ajo.	-
 	- - - -f "& &*&$ &$&$
&$ z#&$ *S/	&$
 *U#&$ 	&$ &$ &$ &$T /313 d+GCI. Z_     r   