o
    'h                     @  s   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dZ		d&d'ddZ			d(d)ddZ		d&d*d#d$ZdS )+    )annotationsN)quote   )
_plain_int)SecurityError)
uri_to_irihostname
str | Nonetrusted_listt.Iterable[str]returnboolc              	   C  s   | sdS z|  dd dd} W n
 ty   Y dS w t|tr&|g}|D ]>}|dr8|dd }d	}nd}z| dd dd}W n tyT   Y  dS w || ksc|rf| d| rf d	S q(d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   idnaascii.   NT)	partitionencodedecodeUnicodeEncodeError
isinstancestr
startswithendswith)r   r
   refsuffix_match r   Q/var/www/html/olx_land/venv/lib/python3.10/site-packages/werkzeug/sansio/utils.pyhost_is_trusted   s.   	

r   schemer   host_headerservertuple[str, int | None] | Nonetrusted_hostst.Iterable[str] | Nonec                 C  s   d}|dur	|}n'|dur0|d }d|v r!|d dkr!d| d}|d dur0| d|d  }| dv r@| d	r@|dd
 }n| dv rO| drO|dd }|dur`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:443zHost z is not trusted.)r   r   r   )r    r!   r"   r$   hostr   r   r   get_host1   s"   
r0   r/   	root_pathpathquery_stringbytes | Nonec                 C  s   | d|g}|du r| d td|S | t|ddd | d |du r1td|S | t|ddd |rM| 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?z!$&'()*+,/:;=?@%)appendr   joinr   rstriplstrip)r    r/   r1   r2   r3   urlr   r   r   get_current_urli   s   



r=   http_content_lengthhttp_transfer_encoding
int | Nonec                 C  s:   |dks| du r
dS zt dt| W S  ty   Y dS 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)r>   r?   r   r   r   get_content_length   s   rD   )r   r	   r
   r   r   r   )NN)
r    r   r!   r	   r"   r#   r$   r%   r   r   )NNN)r    r   r/   r   r1   r	   r2   r	   r3   r4   r   r   )r>   r	   r?   r	   r   r@   )
__future__r   typingturllib.parser   	_internalr   
exceptionsr   urlsr   r   r0   r=   rD   r   r   r   r   <module>   s"    
);,