o
    ˷eF                     @   s   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mZ 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eZG dd deZdS )    )absolute_import)reverse)	providers)complete_social_loginrender_authentication_error)SocialLoginSocialToken)
AuthAction	AuthError)OAuthLoginMixin)OAuthClient
OAuthErrorc                   @   s$   e Zd Zdd Zdd Zdd ZdS )OAuthAdapterc                 C   s
   || _ d S N)request)selfr    r   b/var/www/ideatree/venv/lib/python3.10/site-packages/allauth/socialaccount/providers/oauth/views.py__init__   s   
zOAuthAdapter.__init__c                 C   s   t )z0
        Returns a SocialLogin instance
        )NotImplementedError)r   r   appr   r   r   complete_login   s   zOAuthAdapter.complete_loginc                 C   s   t j| j| jS r   )r   registryby_idprovider_idr   )r   r   r   r   get_provider    s   zOAuthAdapter.get_providerN)__name__
__module____qualname__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 )	OAuthViewc                    s    fdd}|S )Nc                    s.    }| |_  | |_|j| g|R i |S r   )r   adapterdispatch)r   argskwargsr   r    clsr   r   view'   s   
z$OAuthView.adapter_view.<locals>.viewr   )r%   r    r&   r   r$   r   adapter_view%   s   zOAuthView.adapter_viewc              
   C   s\   | j  }||}d||}i }|r||d< t||j|j| j j| j j	|||d}|S )N scope)
parametersprovider)
r    r   get_appjoin	get_scoper   	client_idsecretrequest_token_urlaccess_token_url)r   r   callback_urlr+   r   r)   r*   clientr   r   r   _get_client/   s"   


zOAuthView._get_clientN)r   r   r   classmethodr'   r5   r   r   r   r   r   $   s    
	r   c                   @      e Zd Zdd ZdS )OAuthLoginViewc              
   O   s   t | jjd }t| |jdtj}| j	 }|
||p#| jj}|||}| ||}	z|	||W S  tyR }
 zt|| jj|
dW  Y d }
~
S d }
~
ww )N	_callbackaction	exception)r   r    r   r   stash_stateGETgetr	   AUTHENTICATEr   get_auth_urlauthorize_urlget_auth_paramsr5   get_redirectr   r   )r   r   r"   r#   r3   r:   r+   auth_urlauth_paramsr4   er   r   r   loginD   s   


zOAuthLoginView.loginN)r   r   r   rH   r   r   r   r   r8   C       r8   c                   @   r7   )OAuthCallbackViewc              
   C   s   t | jjd }| ||}| s-d|jv rtj}ntj}t	|d}t
|| jj||dS | j |}z*| }t||d |ddd}| jj||||d	}	||	_t||	_t||	W S  tyz }
 zt
|| jj|
d
W  Y d}
~
S d}
~
ww )z
        View to handle final steps of OAuth based authentication where the user
        gets redirected back to from the service provider
        r9   denied)oauth_client)errorextra_contextoauth_tokenoauth_token_secret )r   tokentoken_secret)responser;   N)r   r    r   r5   is_validr>   r
   	CANCELLEDUNKNOWNdictr   r   r,   get_access_tokenr   r?   r   rR   r   unstash_statestater   r   )r   r   login_done_urlr4   rM   rN   r   access_tokenrR   rH   rG   r   r   r   r!   U   sB   



zOAuthCallbackView.dispatchN)r   r   r   r!   r   r   r   r   rJ   T   rI   rJ   N)
__future__r   django.urlsr   allauth.socialaccountr   allauth.socialaccount.helpersr   r   allauth.socialaccount.modelsr   r   .allauth.socialaccount.providers.base.constantsr	   r
   +allauth.socialaccount.providers.base.mixinsr   ,allauth.socialaccount.providers.oauth.clientr   r   objectr   r   r8   rJ   r   r   r   r   <module>   s    