
    :"rii                        d dl mZ d dlZd dlZd dlZddlmZ ddlm	Z	 ddl
mZmZ ddlmZ ddlmZmZ g d	Zej&                   G d
 d             ZddZddZef	 	 	 	 	 	 	 ddZy)    )annotationsN   )Headers)InvalidProxy)build_authorization_basic
build_host)
USER_AGENT)DELIMSWebSocketURI)	get_proxyparse_proxyProxyc                  ^    e Zd ZU dZded<   ded<   ded<   dZded	<   dZded
<   edd       Zy)r   a  
    Proxy address.

    Attributes:
        scheme: ``"socks5h"``, ``"socks5"``, ``"socks4a"``, ``"socks4"``,
            ``"https"``, or ``"http"``.
        host: Normalized to lower case.
        port: Always set even if it's the default.
        username: Available when the proxy address contains `User Information`_.
        password: Available when the proxy address contains `User Information`_.

    .. _User Information: https://datatracker.ietf.org/doc/html/rfc3986#section-3.2.1

    strschemehostintportN
str | Noneusernamepasswordc                h    | j                   y | j                  J | j                   | j                  fS )N)r   r   )selfs    X/var/www/fortnox.pascalinesoft.com/venv/lib/python3.12/site-packages/websockets/proxy.py	user_infozProxy.user_info(   s2    == }}(((t}}--    )returnztuple[str, str] | None)	__name__
__module____qualname____doc____annotations__r   r   propertyr    r   r   r   r      s>     K
I
IHjHj. .r   r   c                `   t         j                  j                  |       }|j                  dvrt	        | d|j                   d      |j
                  t	        | d      |j                  dvrt	        | d      |j                  dk7  rt	        | d      |j                  dk7  rt	        | d	      |j                  }|j
                  }|j                  xs |j                  d
k(  rdnd}|j                  }|j                  }||t	        | d      	 | j                  d       t#        |||||      S # t        $ rr |j                  d      j                         }|N|J t         j                  j                  |t               }t         j                  j                  |t               }Y w xY w)z
    Parse and validate a proxy.

    Args:
        proxy: proxy.

    Returns:
        Parsed proxy.

    Raises:
        InvalidProxy: If ``proxy`` isn't a valid proxy.

    )socks5hsocks5socks4asocks4httpshttpzscheme z isn't supportedzhostname isn't provided) /zpath is meaninglessr,   zquery is meaninglesszfragment is meaninglessr*   i  P   z"username provided without passwordasciiidna)safe)urllibparseurlparser   r   hostnamepathqueryfragmentr   r   r   encodeUnicodeEncodeErrordecodequoter
   r   )proxyparsedr   r   r   r   r   s          r   r   r   0   s    \\""5)F}}WW5GFMM?:J"KLL5";<<{{)#5"788||r5"899"5";<<]]F??D;;C&--7":3DHH  05"FGG	AW tXx88  A {{6"))+'''||))()@H||))()@HAs   D2 2A8F-,F-c                T   t         j                  j                  | j                   d| j                         ryt         j                  j                         }| j                  rg d}ng d}|D ]7  }|j                  |      }||dk(  r|j                  d      rd|dd z   }|c S  y)	zU
    Return the proxy to use for connecting to the given WebSocket URI, if any.

    :N)wsssocksr*   )wsrB   r*   r+   rB   zhttp://z
socks5h://   )	r2   requestproxy_bypassr   r   
getproxiessecureget
startswith)uriproxiesschemesr   r=   s        r   r   r   b   s    
 ~~""chhZq
#;< nn'')G
zz+2 F# U%5%5i%@$uQRy0L r   c                   t        |j                  |j                  |j                  d      }t	               }t        |j                  |j                  |j                        |d<   |||d<   | j
                  1| j                  J t        | j
                  | j                        |d<   d| dj                         |j                         z   S )NT)always_include_portHostz
User-AgentzProxy-AuthorizationzCONNECT z HTTP/1.1
)
r   r   r   rH   r   r   r   r   r9   	serialize)r=   ws_uriuser_agent_headerr   headerss        r   prepare_connect_requestrU      s    
 fkk6;;SWXDiG fkk6==IGFO$ 1~~!~~))))BNNENN*
%& dV=)002W5F5F5HHHr   )r=   r   r   r   )rK   r   r   r   )r=   r   rR   r   rS   r   r   bytes)
__future__r   dataclassesurllib.parser2   urllib.requestdatastructuresr   
exceptionsr   rT   r   r   http11r	   rK   r
   r   __all__	dataclassr   r   r   rU   r$   r   r   <module>r`      s    "    # $ :  % 0 . . .</9d!N %/III "I 	Ir   