o
    Lf                     @   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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 )    )	timedelta)RequestException)PermissionDenied)HttpResponseRedirect)reverse)timezone)ImmediateHttpResponse)get_adapter)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| _d S )NF)requestdid_fetch_access_token)selfr    r   m/var/www/html/humari/django-venv/lib/python3.10/site-packages/allauth/socialaccount/providers/oauth2/views.py__init__(   s   
zOAuth2Adapter.__init__c                 C   s   t | jj| j| jdS )N)provider)r	   r   get_providerprovider_id)r   r   r   r   r"   ,   s   
zOAuth2Adapter.get_providerc                 K   s   t )z0
        Returns a SocialLogin instance
        )NotImplementedError)r   r   appaccess_tokenkwargsr   r   r   complete_login1   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_url7   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   datar.   r   r   r   r   parse_token<   s   zOAuth2Adapter.parse_tokenc                 C   s2   t | jd}|jdd }|j||d}d| _|S )Ncodepkce_code_verifier)r;   T)r   r   sessionpopget_access_tokenr   )r   r   r%   clientr:   r;   r8   r   r   r   get_access_token_dataD   s
   z#OAuth2Adapter.get_access_token_data)__name__
__module____qualname__r4   r   client_classsupports_stater*   access_token_methodlogin_cancelled_errorscope_delimiter
basic_authheadersr    r"   r(   r-   r9   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              
      sn    }| |_ t ts | |_n |_z|j| g|R i |W S  ty6 } z	|jW  Y d }~S d }~ww )N)r   
isinstancer   adapterdispatchr   response)r   argsr'   r   erM   clsr   r   viewO   s   
z%OAuth2View.adapter_view.<locals>.viewr   )rS   rM   rT   r   rR   r   adapter_viewM   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)rH   rJ   rI   )rM   r-   r"   	get_scoperD   r   	client_idsecretrF   access_token_urlrH   rJ   rI   )r   r   r%   r+   r!   scoper?   r   r   r   
get_client]   s    

zOAuth2View.get_clientN)rA   rB   rC   classmethodrU   r[   r   r   r   r   rK   L   s    
rK   c                   @      e Zd Zdd ZdS )OAuth2LoginViewc              
   O   s   | j  }|j}| ||}|jdtj}| j j}|	||}	|
 }
|
dd }|	|
 |r6||jd< t||_z	t|||	W S  ty^ } zt|||dW  Y d }~S d }~ww )Nactioncode_verifierr;   	exception)rM   r"   r%   r[   GETr2   r   AUTHENTICATEauthorize_urlget_auth_paramsget_pkce_paramsr=   updater<   r   stash_statestater   get_redirect_urlr   r   )r   r   rP   r'   r!   r%   r?   r_   auth_urlauth_paramspkce_paramsr`   rQ   r   r   r   loginq   s$   


zOAuth2LoginView.loginN)rA   rB   rC   ro   r   r   r   r   r^   p       r^   c                   @   r]   )OAuth2CallbackViewc                 O   s"  | j  }d|jv sd|jvr-|jdd }|| j jkr tj}ntj}t|||d| idS |j	}| 
| j|}z<| j |||}	| j |	}
|jrL||
_	| j j|||
|	d}|
|_| j jrht|t|d|_nt||_t||W S  ttttfy } zt|||dW  Y d }~S d }~ww )Nerrorr:   callback_view)rr   extra_context)rO   rj   ra   )rM   r"   rc   r2   rG   r   	CANCELLEDUNKNOWNr   r%   r[   r   r@   r9   pkr(   r.   rE   r   verify_and_unstash_stater   rj   unstash_stater
   r   r   r   r   )r   r   rP   r'   r!   
auth_errorrr   r%   r?   r&   r.   ro   rQ   r   r   r   rN      sN   

zOAuth2CallbackView.dispatchN)rA   rB   rC   rN   r   r   r   r   rq      rp   rq   N)(datetimer   requestsr   django.core.exceptionsr   django.httpr   django.urlsr   django.utilsr   allauth.core.exceptionsr   allauth.socialaccount.adapterr	   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   rK   r^   rq   r   r   r   r   <module>   s&    /$