U
    Â½„bè  ã                   @   sP   d dl mZ d dlmZmZ G dd„ deƒZG dd„ deƒZG dd„ deƒZd	S )
é    )Údomain_matches)ÚAuthBaseÚHTTPBasicAuthc                       s.   e Zd ZdZd‡ fdd„	Z‡ fdd„Z‡  ZS )ÚBasicAuthenticationFNc                    s   || _ tt| ƒ ||¡ d S ©N)ÚdomainÚsuperr   Ú__init__)ÚselfÚusernameÚpasswordr   ©Ú	__class__© ú0/tmp/pip-unpacked-wheel-07qh9vnj/coreapi/auth.pyr	      s    zBasicAuthentication.__init__c                    s    t || jƒs|S tt| ƒ |¡S r   )r   r   r   r   Ú__call__©r
   Úrequestr   r   r   r      s    zBasicAuthentication.__call__)N)Ú__name__Ú
__module__Ú__qualname__Úallow_cookiesr	   r   Ú__classcell__r   r   r   r   r      s   r   c                   @   s&   e Zd ZdZdZddd„Zdd„ ZdS )	ÚTokenAuthenticationFZBearerNc                 C   s   || _ || _|dk	r|| _dS )z²
        * Use an unauthenticated client, and make a request to obtain a token.
        * Create an authenticated client using eg. `TokenAuthentication(token="<token>")`
        N)Útokenr   Úscheme)r
   r   r   r   r   r   r   r	      s    zTokenAuthentication.__init__c                 C   s*   t || jƒs|S d| j| jf |jd< |S )Nz%s %sÚAuthorization)r   r   r   r   Úheadersr   r   r   r   r   !   s    zTokenAuthentication.__call__)NN)r   r   r   r   r   r	   r   r   r   r   r   r      s   

r   c                   @   s2   e Zd ZdZdZdZddd„Zdd„ Zd	d
„ ZdS )ÚSessionAuthenticationzy
    Enables session based login.

    * Make an initial request to obtain a CSRF token.
    * Make a login request.
    T)ÚGETÚHEADÚOPTIONSÚTRACENc                 C   s   || _ || _d | _|| _d S r   )Úcsrf_cookie_nameÚcsrf_header_nameÚ
csrf_tokenr   )r
   r#   r$   r   r   r   r   r	   3   s    zSessionAuthentication.__init__c                 K   s   | j |jkr|j| j  | _d S r   )r#   Úcookiesr%   )r
   ÚresponseÚkwargsr   r   r   Ústore_csrf_token9   s    z&SessionAuthentication.store_csrf_tokenc                 C   sV   t || jƒs|S | jr:| jd k	r:|j| jkr:| j|j| j< | jd k	rR| d| j	¡ |S )Nr'   )
r   r   r%   r$   ÚmethodÚsafe_methodsr   r#   Úregister_hookr)   r   r   r   r   r   =   s    
zSessionAuthentication.__call__)NNN)	r   r   r   Ú__doc__r   r+   r	   r)   r   r   r   r   r   r   )   s   
r   N)Zcoreapi.utilsr   Zrequests.authr   r   r   r   r   r   r   r   r   Ú<module>   s   