o
    q>eV                     @  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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
isinstancer	   
startswithendswith)r   r
   refsuffix_match r   V/var/www/bmteknikk.ddns.net/venv/lib/python3.10/site-packages/werkzeug/sansio/utils.pyhost_is_trusted   s.   	

r   schemehost_header
str | Noneservertuple[str, int | None] | Nonetrusted_hostst.Iterable[str] | Nonec                 C  s   d}|dur	|}n|dur |d }|d dur | d|d  }| dv r0| dr0|dd }n| d	v r?| d
r?|dd }|durPt||sPt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$   hostr   r   r   get_host1   s   
r.   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-   r/   r0   r1   urlr   r   r   get_current_urla   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   rB   )r   r	   r
   r   r   r   )NN)
r   r	   r    r!   r"   r#   r$   r%   r   r	   )NNN)r   r	   r-   r	   r/   r!   r0   r!   r1   r2   r   r	   )r<   r!   r=   r!   r   r>   )
__future__r   typingturllib.parser   	_internalr   
exceptionsr   urlsr   r   r.   r;   rB   r   r   r   r   <module>   s"    
)3,