o
    ˷e                     @   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_inTNPOSTaccess_denied Fc                 C   s
   || _ d S N)request)selfr    r   c/var/www/ideatree/venv/lib/python3.10/site-packages/allauth/socialaccount/providers/oauth2/views.py__init__*   s   
zOAuth2Adapter.__init__c                 C   s   t j| j| jS r   )r
   registryby_idprovider_idr   )r   r   r   r    get_provider-   s   zOAuth2Adapter.get_providerc                 K   s   t )z0
        Returns a SocialLogin instance
        )NotImplementedError)r   r   appaccess_tokenkwargsr   r   r    complete_login0   s   zOAuth2Adapter.complete_loginc                 C   s    t | jd }| j}t|||S )N	_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 }|r#t tt|d |_|S )Nr(   )tokenrefresh_token )seconds)	r   gettoken_secretexpires_in_keyr   nowr   int
expires_at)r   datar0   r   r   r   r    parse_token;   s   zOAuth2Adapter.parse_tokenc                 C   s   t | jd}||S )Ncode)r   r   get_access_token)r   r   r'   clientr<   r   r   r    get_access_token_dataC   s   
z#OAuth2Adapter.get_access_token_data)__name__
__module____qualname__r6   r   client_classsupports_stater,   access_token_methodlogin_cancelled_errorscope_delimiter
basic_authheadersr!   r%   r*   r/   r;   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| g|R i |W S  ty- } z	|jW  Y d }~S d }~ww r   )r   adapterdispatchr	   response)r   argsr)   r   erK   clsr   r    viewK   s   
z%OAuth2View.adapter_view.<locals>.viewr   )rQ   rK   rR   r   rP   r    adapter_viewI   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)rG   rI   rH   )rK   r/   r%   	get_scoperC   r   	client_idsecretrE   access_token_urlrG   rI   rH   )r   r   r'   r-   providerscoper>   r   r   r    
get_clientV   s    

zOAuth2View.get_clientN)r@   rA   rB   classmethodrS   rZ   r   r   r   r    rJ   H   s    
rJ   c                   @      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yL }
 zt||j|
dW  Y d }
~
S d }
~
ww )Naction	exception)rK   r%   get_appr   rZ   GETr4   r   AUTHENTICATEauthorize_urlget_auth_paramsr   stash_statestater   get_redirect_urlr   r   id)r   r   rN   r)   rX   r'   r>   r^   auth_urlauth_paramsrO   r   r   r    loginj   s   
zOAuth2LoginView.loginN)r@   rA   rB   rl   r   r   r   r    r]   i       r]   c                   @   r\   )OAuth2CallbackViewc                 O   s   d|j v s
d|j vr'|j dd }|| jjkrtj}ntj}t|| jj|dS | j	 
| j}| | j|}z9| j|||}| j|}	||	_| jj|||	|d}
|	|
_| jjret|t|d|
_nt||
_t||
W S  ttttfy } zt|| jj|dW  Y d }~S d }~ww )Nerrorr<   )ro   )rM   rg   r_   )rb   r4   rK   rF   r   	CANCELLEDUNKNOWNr   r$   r%   ra   r   rZ   r?   r;   r'   r*   r0   rD   r   verify_and_unstash_stater   rg   unstash_stater   r   r   r   r   )r   r   rN   r)   
auth_errorro   r'   r>   r(   r0   rl   rO   r   r   r    rL   y   sF   


zOAuth2CallbackView.dispatchN)r@   rA   rB   rL   r   r   r   r    rn   x   rm   rn   N)*
__future__r   datetimer   requestsr   django.core.exceptionsr   django.httpr   django.urlsr   django.utilsr   allauth.exceptionsr	   allauth.socialaccountr
   allauth.socialaccount.helpersr   r   allauth.socialaccount.modelsr   r   $allauth.socialaccount.providers.baser   .allauth.socialaccount.providers.base.constantsr   r   +allauth.socialaccount.providers.base.mixinsr   -allauth.socialaccount.providers.oauth2.clientr   r   allauth.utilsr   r   objectr   rJ   r]   rn   r   r   r   r    <module>   s(    )!