B
    od'                 @   s   d Z ddlZddlZddl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mZ ddlmZ ddlmZ d	Zd
Zdd ZG dd dZG dd deZG dd deZG dd deZdS )z]
requests.auth
~~~~~~~~~~~~~

This module contains the authentication handlers for Requests.
    N)	b64encode   )to_native_string)
basestringstrurlparse)extract_cookies_to_jar)parse_dict_headerz!application/x-www-form-urlencodedzmultipart/form-datac             C   s   t | ts&tjd| td t| } t |tsPtjdt|td t|}t | trd| d} t |trx|d}dt	t
d| |f  }|S )zReturns a Basic Auth string.zNon-string usernames will no longer be supported in Requests 3.0.0. Please convert the object you've passed in ({!r}) to a string or bytes object in the near future to avoid problems.)categoryzNon-string passwords will no longer be supported in Requests 3.0.0. Please convert the object you've passed in ({!r}) to a string or bytes object in the near future to avoid problems.latin1zBasic    :)
isinstancer   warningswarnformatDeprecationWarningr   typeencoder   r   joinstrip)usernamepasswordauthstr r   K/var/www/html/venv/lib/python3.7/site-packages/pip/_vendor/requests/auth.py_basic_auth_str   s&    






r   c               @   s   e Zd ZdZdd ZdS )AuthBasez4Base class that all auth implementations derive fromc             C   s   t dd S )NzAuth hooks must be callable.)NotImplementedError)selfrr   r   r   __call__H   s    zAuthBase.__call__N)__name__
__module____qualname____doc__r    r   r   r   r   r   E   s   r   c               @   s0   e Zd ZdZdd Zdd Zdd Zdd	 Zd
S )HTTPBasicAuthz?Attaches HTTP Basic Authentication to the given Request object.c             C   s   || _ || _d S )N)r   r   )r   r   r   r   r   r   __init__O   s    zHTTPBasicAuth.__init__c             C   s(   t | jt|dd k| jt|dd kgS )Nr   r   )allr   getattrr   )r   otherr   r   r   __eq__S   s    zHTTPBasicAuth.__eq__c             C   s
   | |k S )Nr   )r   r)   r   r   r   __ne__[   s    zHTTPBasicAuth.__ne__c             C   s   t | j| j|jd< |S )NAuthorization)r   r   r   headers)r   r   r   r   r   r    ^   s    zHTTPBasicAuth.__call__N)r!   r"   r#   r$   r&   r*   r+   r    r   r   r   r   r%   L   s
   r%   c               @   s   e Zd ZdZdd ZdS )HTTPProxyAuthz=Attaches HTTP Proxy Authentication to a given Request object.c             C   s   t | j| j|jd< |S )NzProxy-Authorization)r   r   r   r-   )r   r   r   r   r   r    f   s    zHTTPProxyAuth.__call__N)r!   r"   r#   r$   r    r   r   r   r   r.   c   s   r.   c               @   sP   e Zd ZdZdd Zdd Zdd Zdd	 Zd
d Zdd Z	dd Z
dd ZdS )HTTPDigestAuthz@Attaches HTTP Digest Authentication to the given Request object.c             C   s   || _ || _t | _d S )N)r   r   	threadinglocal_thread_local)r   r   r   r   r   r   r&   n   s    zHTTPDigestAuth.__init__c             C   s@   t | jds<d| j_d| j_d| j_i | j_d | j_d | j_d S )NinitT r   )hasattrr2   r3   
last_noncenonce_countchalposnum_401_calls)r   r   r   r   init_per_thread_statet   s    z$HTTPDigestAuth.init_per_thread_statec                s  | j jd }| j jd }| j jd}| j jd}| j jd}d |dkrTd}n| }|dksl|dkrzd	d
 }	|	 n@|dkrdd }
|
 n*|dkrdd }| n|dkrdd }|  fdd} dkrdS d}t|}|jpd}|jr|d|j 7 }| j d| d| j }| d| } |} |}|| j j	krT| j  j
d7  _
nd| j _
| j j
d}t| j j
d}||d7 }|t d7 }|td7 }t| dd }|dkr | d| d| }|s||| d| }nD|dksd|dkr<| d| d| d | }|||}ndS || j _	d!| j d"| d#| d$| d%| d&}|r|d'| d&7 }|r|d(| d&7 }|r|d)| d&7 }|r|d*| d+| d&7 }d,| S )-z
        :rtype: str
        realmnonceqop	algorithmopaqueNMD5zMD5-SESSc             S   s"   t | tr| d} t|  S )Nzutf-8)r   r   r   hashlibmd5	hexdigest)xr   r   r   md5_utf8   s    

z4HTTPDigestAuth.build_digest_header.<locals>.md5_utf8SHAc             S   s"   t | tr| d} t|  S )Nzutf-8)r   r   r   rB   sha1rD   )rE   r   r   r   sha_utf8   s    

z4HTTPDigestAuth.build_digest_header.<locals>.sha_utf8zSHA-256c             S   s"   t | tr| d} t|  S )Nzutf-8)r   r   r   rB   sha256rD   )rE   r   r   r   sha256_utf8   s    

z7HTTPDigestAuth.build_digest_header.<locals>.sha256_utf8zSHA-512c             S   s"   t | tr| d} t|  S )Nzutf-8)r   r   r   rB   sha512rD   )rE   r   r   r   sha512_utf8   s    

z7HTTPDigestAuth.build_digest_header.<locals>.sha512_utf8c                s    |  d| S )N:r   )sd)	hash_utf8r   r   <lambda>       z4HTTPDigestAuth.build_digest_header.<locals>.<lambda>/?rN   r   08xzutf-8      auth,z:auth:z
username="z
", realm="z
", nonce="z", uri="z", response=""z
, opaque="z, algorithm="z
, digest="z, qop="auth", nc=z
, cnonce="zDigest )r2   r8   getupperr   pathqueryr   r   r6   r7   r   r   timectimeosurandomrB   rH   rD   split)r   methodurlr<   r=   r>   r?   r@   
_algorithmrF   rI   rK   rM   KDentdigp_parsedr^   A1A2HA1HA2ncvaluerO   cnoncerespdignoncebitbaser   )rQ   r   build_digest_header~   sz    

&z"HTTPDigestAuth.build_digest_headerc             K   s   |j rd| j_dS )z)Reset num_401_calls counter on redirects.r   N)is_redirectr2   r:   )r   r   kwargsr   r   r   handle_redirect   s    zHTTPDigestAuth.handle_redirectc             K   s"  d|j   krdk s$n d| j_|S | jjdk	rB|jj| jj |jdd}d|	 kr| jjdk r| j jd7  _t
jd	t
jd
}t|jd|dd| j_|j |  |j }t|j|j|j ||j | |j|j|jd< |jj|f|}|j| ||_|S d| j_|S )zo
        Takes the given response and tries digest-auth, if needed.

        :rtype: requests.Response
        i  i  r   Nzwww-authenticater4   digest   zdigest )flags)countr,   )status_coder2   r:   r9   requestbodyseekr-   r\   lowerrecompile
IGNORECASEr	   subr8   contentclosecopyr   _cookiesrawprepare_cookiesrt   re   rf   
connectionsendhistoryappend)r   r   rv   s_authpatprep_rr   r   r   
handle_401   s.    	
zHTTPDigestAuth.handle_401c             C   s~   |    | jjr&| |j|j|jd< y|j | j_	W n t
k
rT   d | j_	Y nX |d| j |d| j d| j_|S )Nr,   responser   )r;   r2   r6   rt   re   rf   r-   r~   tellr9   AttributeErrorregister_hookr   rw   r:   )r   r   r   r   r   r      s    zHTTPDigestAuth.__call__c             C   s(   t | jt|dd k| jt|dd kgS )Nr   r   )r'   r   r(   r   )r   r)   r   r   r   r*   2  s    zHTTPDigestAuth.__eq__c             C   s
   | |k S )Nr   )r   r)   r   r   r   r+   :  s    zHTTPDigestAuth.__ne__N)r!   r"   r#   r$   r&   r;   rt   rw   r   r    r*   r+   r   r   r   r   r/   k   s   
n-r/   )r$   rB   rb   r   r0   r`   r   base64r   _internal_utilsr   compatr   r   r   cookiesr   utilsr	   CONTENT_TYPE_FORM_URLENCODEDCONTENT_TYPE_MULTI_PARTr   r   r%   r.   r/   r   r   r   r   <module>   s$   ,