a
    -=ic                     @   s   d dl ZddlmZ ddlmZ ddlmZ ddlmZ e	ej
e	 eddd	Zde	eje	 ejeje	eje f  ejej
e	  e	d
ddZde	e	eje	 eje	 eje e	dddZdeje	df eje	df eje dddZdS )    N   )_encode_idna)SecurityError)
uri_to_iri)	url_quote)hostnametrusted_listreturnc              	   C   s   | sdS t |tr|g}ttddd}z|| }W n tyH   Y dS 0 |D ]n}|drn|dd }d}nd}z||}W n ty   Y  dS 0 ||kr dS |rN|d	| rN dS qNd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
    F)r   r	   c                 S   s    d| v r|  ddd } t| S )N:   r   )rsplitr   )r    r   f/home/droni/.local/share/virtualenvs/DPS-5Je3_V2c/lib/python3.9/site-packages/werkzeug/sansio/utils.py
_normalize   s    z#host_is_trusted.<locals>._normalize.r   NT   .)
isinstancestrbytesUnicodeError
startswithendswith)r   r   r   Zhostname_bytesrefZsuffix_matchZ	ref_bytesr   r   r   host_is_trusted	   s.    	


r   )schemehost_headerservertrusted_hostsr	   c                 C   s   d}|dur|}n.|dur@|d }|d dur@| d|d  }| dv r`| dr`|dd }n| d	v r~| d
r~|dd }|durt||st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
   >   httpwsz:80>   httpswssz:443zHost z is not trusted.)r   r   r   )r   r   r   r   hostr   r   r   get_host8   s    
r&   )r   r%   	root_pathpathquery_stringr	   c                 C   s   | d|g}|du r*| d td|S | t|d | d |du r^td|S | t|d |r| d | t|d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(   r)   urlr   r   r   get_current_urlh   s    



r2   r   )http_content_lengthhttp_transfer_encodingr	   c              	   C   s@   |dkrdS | dur<zt dt| W S  ttfy:   Y n0 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)r3   r4   r   r   r   get_content_length   s    r:   )NN)NNN)Nr   )typingt	_internalr   
exceptionsr   urlsr   r   r   Iterableboolr   OptionalTupler7   r&   r   r2   Unionr:   r   r   r   r   <module>   s@   2  3   *  