
    i              	       &   d dl Z d dlm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	j                  e j                  e
e      Zd
Z G d d edg d            Z G d d      Ze G d d             Ze G d d             Z G d d      Zy)    N)	dataclass)
namedtuple)Optional   )	__title____version__   )
ReplyErrorzPython/{0[0]}.{0[1]} {1}/{2}z
c            	       b     e Zd ZdZd
dedededd f fdZeddededd fd       Zdefd	Z xZ	S )	BasicAuthz!Http basic authentication helper.loginpasswordencodingreturnc                 z    |t        d      |t        d      d|v rt        d      t        | 	  | |||      S )Nz"None is not allowed as login valuez%None is not allowed as password value:z5A ":" is not allowed in login (RFC 1945#section-11.1))
ValueErrorsuper__new__)clsr   r   r   	__class__s       O/root/searxng-venv/lib/python3.12/site-packages/python_socks/_protocols/http.pyr   zBasicAuth.__new__   sP    =ABBDEE%<TUU wsE8X>>    auth_headerc                    	 |j                  dd      \  }}|j                         dk7  rt        d|z        	 t        j                  |j                  d      d      j                  |      }	 |j                  d
d      \  }} | |||      S # t        $ r t        d      w xY w# t        j                  $ r t        d	      w xY w# t        $ r t        d      w xY w)z<Create a BasicAuth object from an Authorization HTTP header. r	   z%Could not parse authorization header.basiczUnknown authorization method %sasciiT)validatezInvalid base64 encoding.r   zInvalid credentials.)r   )	splitr   lowerbase64	b64decodeencodedecodebinasciiError)r   r   r   	auth_typeencoded_credentialsdecodedusernamer   s           r   r%   zBasicAuth.decode%   s    	F-8->->sA-F*I* ??'>JKK	9&&':'A'A''JUYZaaG	5
 ")sA!6Hh
 8X99/  	FDEE	F ~~ 	9788	9  	5344	5s"   B 5B' /C	 B$'C	Cc                     | j                   d| j                  j                  | j                        }dt	        j
                  |      j                  | j                        z  S )zEncode credentials.r   zBasic %s)r   r   r$   r   r"   	b64encoder%   )selfcredss     r   r$   zBasicAuth.encodeC   sH     JJ6>>t}}MF,,U3::4==IIIr   ) latin1)r1   )
__name__
__module____qualname____doc__strr   classmethodr%   r$   __classcell__)r   s   @r   r   r      s_    +?C ?3 ?s ?R] ? : : :; : ::J Jr   r   )r   r   r   c                   4    e Zd ZddefdZd	defdZdefdZy)
_Bufferr   c                 0    || _         t               | _        y N)	_encoding	bytearray_buffer)r.   r   s     r   __init__z_Buffer.__init__J   s    ! {r   linec                     |r4| j                   j                  |j                  | j                               | j                   j                  t        j                  d             y )Nr   )r?   extendr$   r=   CRLF)r.   rA   s     r   append_linez_Buffer.append_lineN   s?    LLDNN ;<DKK01r   r   c                 ,    t        | j                        S r<   )bytesr?   )r.   s    r   dumpsz_Buffer.dumpsT   s    T\\""r   N)utf-8)r0   )r2   r3   r4   r6   r@   rE   rG   rH    r   r   r:   r:   I   s&    # #2 2#u #r   r:   c                   N    e Zd ZU eed<   eed<   ee   ed<   ee   ed<   defdZy)ConnectRequesthostportr+   r   r   c                    t               }|j                  d| j                   d| j                   d       |j                  d| j                   d| j                          |j                  dt                | j
                  rN| j                  rBt        | j
                  | j                        }|j                  d|j                                 |j                          |j                         S )NzCONNECT r   z	 HTTP/1.1zHost: zUser-Agent: zProxy-Authorization: )
r:   rE   rM   rN   DEFAULT_USER_AGENTr+   r   r   r$   rH   )r.   buffauths      r   rH   zConnectRequest.dumps_   s    y8DII;a		{)DE6$))Adii[9:<(:';<===T]]T]]DMM:D4T[[]ODEzz|r   N)	r2   r3   r4   r6   __annotations__intr   rG   rH   rJ   r   r   rL   rL   X   s,    
I
Ismsmu r   rL   c                   <    e Zd ZU eed<   eed<   ededd fd       Zy)ConnectReplystatus_codemessagedatar   c                    |st        d      |j                  t        j                  d      d      d   }|j	                  dd      }	 |j                         ^}}}	 t        |      }d	j                  |      }|d
k7  r| d	| }t        ||       | ||      S # t
        $ r t        d|       w xY w# t
        $ r t        d|       w xY w)NzInvalid proxy responser   r	   r   rI   surrogateescapezInvalid status line: zInvalid status code: r      )
error_code)rW   rX   )r
   r    rD   r$   r%   r   rT   join)	r   rY   rA   versioncodereasonrW   status_messagemsgs	            r   loadszConnectReply.loadss   s    566zz$++g.215{{7$56	=%)ZZ\"GTF	=d)K &)# M>"23CS[99{NCC  	=4TF;<<	=
  	=4TF;<<	=s   	B B7 B47CN)	r2   r3   r4   rT   rS   r6   r7   rG   rd   rJ   r   r   rV   rV   n   s1    LD D> D Dr   rV   c                   ,    e Zd ZdedefdZdedefdZy)
Connectionrequestr   c                 "    |j                         S r<   )rH   )r.   rg   s     r   sendzConnection.send   s    }}r   rY   c                 ,    t         j                  |      S r<   )rV   rd   )r.   rY   s     r   receivezConnection.receive   s    !!$''r   N)r2   r3   r4   rL   rG   ri   rV   rk   rJ   r   r   rf   rf      s(    N u (E (l (r   rf   )sysdataclassesr   r"   r&   collectionsr   typingr   _versionr   r   errorsr
   formatversion_inforP   rD   r   r:   rL   rV   rf   rJ   r   r   <module>rt      s    
 !   "  - 3::  1J
;(IJ 1Jh# #   * D D D@( (r   