
    [j7              	       b   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d	lmZ d
                    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dS )    N)	dataclass)
namedtuple)Optional   )	__title____version__)is_ipv6_address   )
ReplyErrorzPython/{0[0]}.{0[1]} {1}/{2}z
c            	       h     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. latin1loginpasswordencodingreturnc                     |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       `/home/ice/.hermes/hermes-agent/venv/lib/python3.11/site-packages/python_socks/_protocols/http.pyr   zBasicAuth.__new__   sb    =ABBBDEEE%<<TUUU wwsE8X>>>    auth_headerc                    	 |                     dd          \  }}n# t          $ r t          d          w xY w|                                dk    rt          d|z            	 t          j        |                    d          d                              |          }n"# t          j        $ r t          d	          w xY w	 |                     d
d          \  }}n# t          $ r t          d          w xY w | |||          S )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&   sP   	F-8->->sA-F-F*I** 	F 	F 	FDEEE	F ??''>JKKK	9&':'A'A''J'JUYZZZaa GG ~ 	9 	9 	97888	9	5
 ")sA!6!6Hhh 	5 	5 	53444	5 s8X9999s     6$<B! !C C C8c                     | j         d| j                            | j                  }dt	          j        |                              | j                  z  S )zEncode credentials.r   zBasic %s)r   r   r'   r   r%   	b64encoder(   )selfcredss     r   r'   zBasicAuth.encodeD   sL     JJJ6>>t}MMF,U33::4=IIIIr   )r   r   )r   )
__name__
__module____qualname____doc__strr   classmethodr(   r'   __classcell__)r   s   @r   r   r      s        ++? ?C ?3 ?s ?R] ? ? ? ? ? ? : : : :; : : : [::J J J J J J J J Jr   r   )r   r   r   c                   6    e Zd Zd
defdZddefdZdefdZd	S )_Bufferutf-8r   c                 :    || _         t                      | _        d S N)	_encoding	bytearray_buffer)r1   r   s     r   __init__z_Buffer.__init__K   s    ! {{r   r   linec                     |r2| j                             |                    | j                             | j                             t                              d                     d S )Nr!   )rA   extendr'   r?   CRLF)r1   rC   s     r   append_linez_Buffer.append_lineO   sV     	=LDN ; ;<<<DKK0011111r   r   c                 *    t          | j                  S r>   )bytesrA   )r1   s    r   dumpsz_Buffer.dumpsU   s    T\"""r   N)r<   )r   )r3   r4   r5   r7   rB   rG   rI   rJ    r   r   r;   r;   J   so        # # # # # #2 2 2 2 2 2#u # # # # # #r   r;   c                   \    e Zd ZU eed<   eed<   ee         ed<   ee         ed<   defdZdS )ConnectRequesthostportr.   r   r   c                    t                      }t          | j                  rd| j         dn| j        }|                    d| d| j         d           |                    d| d| j                    |                    dt
                      | j        rK| j        rDt          | j        | j                  }|                    d|	                                            |                                 |
                                S )	N[]zCONNECT r   z	 HTTP/1.1zHost: zUser-Agent: zProxy-Authorization: )r;   r	   rN   rG   rO   DEFAULT_USER_AGENTr.   r   r   r'   rJ   )r1   buffrN   auths       r   rJ   zConnectRequest.dumps`   s   yy $349#=#=L4949?D??49???@@@4$4444555<(:<<==== 	FT] 	FT]DM::DDT[[]]DDEEEzz||r   N)	r3   r4   r5   r7   __annotations__intr   rI   rJ   rK   r   r   rM   rM   Y   sc         
III
IIIsmsmu      r   rM   c                   D    e Zd ZU eed<   eed<   ededd fd            ZdS )ConnectReplystatus_codemessagedatar   c                    |st          d          |                    t                              d          d          d         }|                    dd          }	 |                                ^}}}n # t
          $ r t          d|           w xY w	 t          |          }n # t
          $ r t          d|           w xY wd	                    |          }|d
k    r| d	| }t          ||           | ||          S )NzInvalid proxy responser!   r
   r   r<   surrogateescapezInvalid status line: zInvalid status code: r      )
error_code)rZ   r[   )r   r#   rF   r'   r(   r   rW   join)	r   r\   rC   versioncodereasonrZ   status_messagemsgs	            r   loadszConnectReply.loads}   s;    	75666zz$++g..2215{{7$566	=%)ZZ\\"GTFF 	= 	= 	=;T;;<<<	=	=d))KK 	= 	= 	=;T;;<<<	= &))# 33>33CS[9999s{NCCCCs   A5 5BB& &CN)	r3   r4   r5   rW   rV   r7   r8   rI   rg   rK   r   r   rY   rY   x   s_         LLLD D> D D D [D D Dr   rY   c                   .    e Zd ZdedefdZdedefdZdS )
Connectionrequestr   c                 *    |                                 S r>   )rJ   )r1   rj   s     r   sendzConnection.send   s    }}r   r\   c                 6    t                               |          S r>   )rY   rg   )r1   r\   s     r   receivezConnection.receive   s    !!$'''r   N)r3   r4   r5   rM   rI   rl   rY   rn   rK   r   r   ri   ri      sX        N u    (E (l ( ( ( ( ( (r   ri   )sysdataclassesr   r%   r)   collectionsr   typingr   _versionr   r   _helpersr	   errorsr   formatversion_inforS   rF   r   r;   rM   rY   ri   rK   r   r   <module>rx      s   



 ! ! ! ! ! !   " " " " " "       - - - - - - - - & & & & & &      3::   1J 1J 1J 1J 1J

;(I(I(IJJ 1J 1J 1Jh# # # # # # # #        < D D D D D D D D@( ( ( ( ( ( ( ( ( (r   