U
    Zcl                     @   s  d dl mZ d dlmZ d dlmZ d dlmZ d dlm	Z	 d dl
mZ d dlmZ d dlmZ d d	lmZ d d
lmZmZ d dlmZmZ d dlmZ d dlmZmZ d dlmZ d dlm Z 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e'Z(G dd de'Z)dS )    )absolute_import)	timedelta)RequestException)PermissionDenied)HttpResponseRedirect)reverse)timezone)ImmediateHttpResponse)	providers)complete_social_loginrender_authentication_error)SocialLoginSocialToken)ProviderException)
AuthAction	AuthError)OAuthLoginMixin)OAuth2ClientOAuth2Error)build_absolute_uriget_request_paramc                   @   s`   e Zd ZdZeZdZdZdZdZ	dZ
dZdZdd	 Zd
d Zdd Zdd Zdd Zdd ZdS )OAuth2Adapter
expires_inTNZPOSTZaccess_denied Fc                 C   s
   || _ d S N)request)selfr    r   p/var/www/html/crackeverytest/cet_env/lib/python3.8/site-packages/allauth/socialaccount/providers/oauth2/views.py__init__*   s    zOAuth2Adapter.__init__c                 C   s   t j| j| jS r   )r
   registryZby_idprovider_idr   )r   r   r   r   get_provider-   s    zOAuth2Adapter.get_providerc                 K   s   t dS )z0
        Returns a SocialLogin instance
        N)NotImplementedError)r   r   appaccess_tokenkwargsr   r   r   complete_login0   s    zOAuth2Adapter.complete_loginc                 C   s    t | jd }| j}t|||S )NZ	_callback)r   r!   redirect_uri_protocolr   )r   r   r$   callback_urlprotocolr   r   r   get_callback_url6   s    zOAuth2Adapter.get_callback_urlc                 C   sJ   t |d d}|dd|_|| jd }|rFt tt|d |_|S )Nr%   )tokenZrefresh_token )seconds)	r   getZtoken_secretexpires_in_keyr   nowr   intZ
expires_at)r   datar,   r   r   r   r   parse_token;   s    zOAuth2Adapter.parse_tokenc                 C   s(   t | jd}|jdd }|j||dS )Ncodepkce_code_verifier)r6   )r   r   sessionpopZget_access_token)r   r   r$   clientr5   r6   r   r   r   get_access_token_dataC   s    z#OAuth2Adapter.get_access_token_data)__name__
__module____qualname__r0   r   client_classsupports_stater(   access_token_methodlogin_cancelled_errorscope_delimiter
basic_authheadersr   r"   r'   r+   r4   r:   r   r   r   r   r      s   r   c                   @   s    e Zd Zedd Zdd ZdS )
OAuth2Viewc                    s    fdd}|S )Nc              
      s\    }| |_  | |_z|j| f||W S  tk
rV } z|j W Y S d }~X Y nX d S r   )r   adapterdispatchr	   response)r   argsr&   r   erF   clsr   r   viewL   s    
z%OAuth2View.adapter_view.<locals>.viewr   )rL   rF   rM   r   rK   r   adapter_viewJ   s    	zOAuth2View.adapter_viewc                 C   s`   | j ||}| j  }||}| j j| j|j|j| j j| j j	||| j j
| j j| j jd
}|S )N)rB   rD   rC   )rF   r+   r"   Z	get_scoper>   r   Z	client_idZsecretr@   Zaccess_token_urlrB   rD   rC   )r   r   r$   r)   providerZscoper9   r   r   r   
get_clientW   s     

zOAuth2View.get_clientN)r;   r<   r=   classmethodrN   rP   r   r   r   r   rE   I   s   
rE   c                   @   s   e Zd Zdd ZdS )OAuth2LoginViewc              
   O   s   | j  }|| j}| ||}|jdtj}| j j	}|
||}	| }
|
dd }|	|
 |rr||jd< t||_zt|||	W S  tk
r } zt||j|d W Y S d }~X Y nX d S )Nactioncode_verifierr6   	exception)rF   r"   get_appr   rP   GETr/   r   ZAUTHENTICATEZauthorize_urlZget_auth_paramsZget_pkce_paramsr8   updater7   r   Zstash_statestater   Zget_redirect_urlr   r   id)r   r   rI   r&   rO   r$   r9   rS   Zauth_urlZauth_paramsZpkce_paramsrT   rJ   r   r   r   logink   s     


zOAuth2LoginView.loginN)r;   r<   r=   r\   r   r   r   r   rR   j   s   rR   c                   @   s   e Zd Zdd ZdS )OAuth2CallbackViewc                 O   s(  d|j ksd|j krN|j dd }|| jjkr6tj}ntj}t|| jj|dS | j	 
| j}| | j|}zr| j|||}| j|}	||	_| jj|||	|d}
|	|
_| jjrt|t|d|
_nt||
_t||
W S  ttttfk
r" } zt|| jj|d W Y S d }~X Y nX d S )Nerrorr5   )r^   )rH   rZ   rU   )rX   r/   rF   rA   r   Z	CANCELLEDUNKNOWNr   r!   r"   rW   r   rP   r:   r4   r$   r'   r,   r?   r   Zverify_and_unstash_stater   rZ   Zunstash_stater   r   r   r   r   )r   r   rI   r&   Z
auth_errorr^   r$   r9   r%   r,   r\   rJ   r   r   r   rG      sR            zOAuth2CallbackView.dispatchN)r;   r<   r=   rG   r   r   r   r   r]      s   r]   N)*
__future__r   datetimer   requestsr   Zdjango.core.exceptionsr   Zdjango.httpr   Zdjango.urlsr   Zdjango.utilsr   Zallauth.exceptionsr	   Zallauth.socialaccountr
   Zallauth.socialaccount.helpersr   r   Zallauth.socialaccount.modelsr   r   Z$allauth.socialaccount.providers.baser   Z.allauth.socialaccount.providers.base.constantsr   r   Z+allauth.socialaccount.providers.base.mixinsr   Z-allauth.socialaccount.providers.oauth2.clientr   r   Zallauth.utilsr   r   objectr   rE   rR   r]   r   r   r   r   <module>   s&   *!