U
    H4fP  ã                   @   sR   d Z ddlmZ ddlmZ ddlmZmZ G dd„ dejƒZ	G dd	„ d	e	ƒZ
d
S )z-The module containing the code for GuessAuth.é    )Úauth)Úcookiesé   )Ú_digest_auth_compatÚhttp_proxy_digestc                   @   s8   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ ZdS )Ú	GuessAuthz7Guesses the auth type by the WWW-Authentication header.c                 C   s   || _ || _d | _d | _d S ©N)ÚusernameÚpasswordr   Úpos)Úselfr	   r
   © r   ú@/tmp/pip-unpacked-wheel-_z368jfd/requests_toolbelt/auth/guess.pyÚ__init__   s    zGuessAuth.__init__c                 C   sª   | j d k	r|jj | j ¡ |j |j ¡  |j ¡ }t|dƒsHt	 
¡ |_t	 |j|j|j¡ | |j¡ t | j| j¡| _|  |¡}|jj|f|Ž}|j |¡ ||_|S ©NÚ_cookies)r   ÚrequestÚbodyÚseekÚcontentÚrawÚrelease_connÚcopyÚhasattrr   ÚRequestsCookieJarr   Úextract_cookies_to_jarÚprepare_cookiesr   ÚHTTPBasicAuthr	   r
   Ú
connectionÚsendÚhistoryÚappend©r   ÚrÚkwargsÚprepÚ_rr   r   r   Ú_handle_basic_auth_401   s    





z GuessAuth._handle_basic_auth_401c                 C   sf   t  | j| j¡| _z| j ¡  W n tk
r4   Y nX t| jdƒrV| jjd krVd| j_| jj	|f|ŽS )NÚnum_401_callsr   )
Úauth_compatÚHTTPDigestAuthr	   r
   r   Úinit_per_thread_stateÚAttributeErrorr   r(   Ú
handle_401©r   r#   r$   r   r   r   Ú_handle_digest_auth_401'   s    
ÿz!GuessAuth._handle_digest_auth_401c                 K   s>   |j  dd¡ ¡ }d|kr&|  ||¡S d|kr:|  ||¡S dS )z/Resends a request with auth headers, if needed.zwww-authenticateÚ ÚbasicÚdigestN)ÚheadersÚgetÚlowerr'   r/   )r   r#   r$   Zwww_authenticater   r   r   r-   :   s
    zGuessAuth.handle_401c                 C   sL   | j d k	r|   |¡S z|j ¡ | _W n tk
r8   Y nX | d| j¡ |S ©NÚresponse)r   r   Útellr   r,   Úregister_hookr-   ©r   r   r   r   r   Ú__call__E   s    

zGuessAuth.__call__N)	Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r'   r/   r-   r;   r   r   r   r   r   	   s   r   c                       sF   e Zd ZdZd‡ fdd„	Zdd„ Zdd„ Zd	d
„ Z‡ fdd„Z‡  Z	S )ÚGuessProxyAuthzZ
    Guesses the auth type by WWW-Authentication and Proxy-Authentication
    headers
    Nc                    s(   t t| ƒ ||¡ || _|| _d | _d S r   )Úsuperr@   r   Úproxy_usernameÚproxy_passwordÚ
proxy_auth)r   r	   r
   rB   rC   ©Ú	__class__r   r   r   W   s    zGuessProxyAuth.__init__c                 C   sª   | j d k	r|jj | j ¡ |j |j ¡  |j ¡ }t|dƒsHt	 
¡ |_t	 |j|j|j¡ | |j¡ t | j| j¡| _|  |¡}|jj|f|Ž}|j |¡ ||_|S r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   ÚHTTPProxyAuthrB   rC   rD   r   r   r    r!   r"   r   r   r   Ú_handle_basic_auth_407^   s"    




ÿ
z%GuessProxyAuth._handle_basic_auth_407c                 C   sH   t j| j| jd| _z| j ¡  W n tk
r6   Y nX | jj|f|ŽS )N)r	   r
   )	r   ZHTTPProxyDigestAuthrB   rC   rD   r   r+   r,   Ú
handle_407r.   r   r   r   Ú_handle_digest_auth_407s   s    þz&GuessProxyAuth._handle_digest_auth_407c                 K   s>   |j  dd¡ ¡ }d|kr&|  ||¡S d|kr:|  ||¡S d S )NzProxy-Authenticater0   r1   r2   )r3   r4   r5   rH   rJ   )r   r#   r$   Zproxy_authenticater   r   r   rI      s
    zGuessProxyAuth.handle_407c                    sX   | j d k	r|   |¡}z|j ¡ | _W n tk
r8   Y nX | d| j¡ tt| ƒ 	|¡S r6   )
rD   r   r8   r   r,   r9   rI   rA   r@   r;   r:   rE   r   r   r;   ˆ   s    

zGuessProxyAuth.__call__)NNNN)
r<   r=   r>   r?   r   rH   rJ   rI   r;   Ú__classcell__r   r   rE   r   r@   R   s       ÿ	r@   N)r?   Úrequestsr   r   r0   r   r)   r   ÚAuthBaser   r@   r   r   r   r   Ú<module>   s
   I