a
    /_x                     @   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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&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)OAuth2ClientOAuth2Error)build_absolute_uriget_request_param   )
AuthAction	AuthErrorc                   @   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   d/var/www/html/Ranjet/env/lib/python3.9/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_login-   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_url3   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_token8   s    zOAuth2Adapter.parse_tokenc                 C   s   t | jd}||S )Ncode)r   r   Zget_access_token)r   r   r$   clientr5   r   r   r   get_access_token_data@   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   r7   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| g|R i |W S  tyZ } z|jW  Y d }~S d }~0 0 d S r   )r   adapterdispatchr	   response)r   argsr&   r   erC   clsr   r   viewH   s    
z%OAuth2View.adapter_view.<locals>.viewr   )rI   rC   rJ   r   rH   r   adapter_viewF   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)r?   rA   r@   )rC   r+   r"   Z	get_scoper;   r   Z	client_idZsecretr=   Zaccess_token_urlr?   rA   r@   )r   r   r$   r)   providerZscoper6   r   r   r   
get_clientS   s     

zOAuth2View.get_clientN)r8   r9   r:   classmethodrK   rM   r   r   r   r   rB   E   s   
rB   c                   @   s   e Zd Zdd ZdS )OAuth2LoginViewc              
   O   s   | j  }|| j}| ||}|jdtj}| j j	}|
||}	t||_zt|||	W S  ty }
 zt||j|
dW  Y d }
~
S d }
~
0 0 d S )Naction	exception)rC   r"   get_appr   rM   GETr/   r   ZAUTHENTICATEZauthorize_urlZget_auth_paramsr   Zstash_statestater   Zget_redirect_urlr   r   id)r   r   rF   r&   rL   r$   r6   rP   Zauth_urlZauth_paramsrG   r   r   r   rD   g   s    
zOAuth2LoginView.dispatchNr8   r9   r:   rD   r   r   r   r   rO   f   s   rO   c                   @   s   e Zd Zdd ZdS )OAuth2CallbackViewc                 O   s&  d|j v sd|j v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y  } zt|| jj|dW  Y d }~S d }~0 0 d S )Nerrorr5   )rY   )rE   rU   rQ   )rT   r/   rC   r>   r   Z	CANCELLEDUNKNOWNr   r!   r"   rS   r   rM   r7   r4   r$   r'   r,   r<   r   Zverify_and_unstash_stater   rU   Zunstash_stater   r   r   r   r   )r   r   rF   r&   Z
auth_errorrY   r$   r6   r%   r,   ZloginrG   r   r   r   rD   v   sB    


zOAuth2CallbackView.dispatchNrW   r   r   r   r   rX   u   s   rX   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.oauth2.clientr   r   Zallauth.utilsr   r   baser   r   objectr   rB   rO   rX   r   r   r   r   <module>   s$   )!