o
    Lf                     @   s.  d dl Z d dlZd dlZd dl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mZmZ ddlmZ ddlm Z m!Z!m"Z" e#e$Z%dd Z&dd Z'G dd deZ(e)e(Z*e)e(Z+G dd deZ,e,- Z.dS )    N)	timedelta)forms)cachePermissionDenied)timezone)View)app_settings)get_adapter)complete_social_loginrender_authentication_error)SocialLoginSocialToken)OAuth2AdapterOAuth2CallbackViewOAuth2LoginView   )FacebookConnectForm)GRAPH_API_URLGRAPH_API_VERSIONFacebookProviderc                 C   s2   |j d}| jd}tj||tjd }|S )Nzutf-8)	digestmod)tokenencodesecrethmacnewhashlibsha256	hexdigest)appr   msgkeyappsecret_proof r$   o/var/www/html/humari/django-venv/lib/python3.10/site-packages/allauth/socialaccount/providers/facebook/views.pycompute_appsecret_proof!   s   r&   c                 C   s\   | | }t  jtd d| |jt||dd}|	  |
 }|| |}|S )Nz/me,)fieldsaccess_tokenr#   params)get_providerr
   get_requests_sessiongetr   join
get_fieldsr   r&   raise_for_statusjsonsociallogin_from_response)requestr    r   providerresp
extra_dataloginr$   r$   r%   fb_complete_login*   s   
r9   c                   @   sR   e Zd ZejZdeZe	j
ei ZdZedeZed ZdZdZdd Zd	S )
FacebookOAuth2Adapterz(https://www.facebook.com/{}/dialog/oauthr'   AUTHORIZE_URL/oauth/access_tokenGET
expires_inc                 K   s   t |||S )N)r9   )selfr4   r    r)   kwargsr$   r$   r%   complete_loginK   s   z$FacebookOAuth2Adapter.complete_loginN)__name__
__module____qualname__r   idprovider_idformatr   provider_default_auth_urlr	   	PROVIDERSr.   settingsscope_delimiterauthorize_urlr   access_token_urlaccess_token_methodexpires_in_keyrA   r$   r$   r$   r%   r:   >   s    r:   c                       s<   e Zd Z fddZdd Zdd Zdd Zd	d
 Z  ZS )LoginByTokenViewc              
      sh   t  | _| j|tj| _zt |W S  tj	t
jtfy3 } zt|| j|dW  Y d }~S d }~ww )N)	exception)r
   adapterr,   r   rE   r5   superdispatchrequestsRequestExceptionr   ValidationErrorr   r   )r?   r4   exc	__class__r$   r%   rT   T   s   zLoginByTokenView.dispatchc                 C   s   t d)N405r   )r?   r4   r$   r$   r%   r.   `   s   zLoginByTokenView.getc                 C   sH  t |j}| st | j}||}|j}|jd }| 	|| d }|
ddkrOt  j
td |j|dd }|j|dd}	|	oM|	|
d	k}
nd}
|
r| 
d
rt  j
td d|j|j|dd }|d }|
d}|rt tt|d }|
rt|||d}t|||}||_t||_t||}|S )Nr)   	auth_typereauthenticatez/oauth/access_token_info)	client_idr)   r*   T)pop
auth_nonceEXCHANGE_TOKENr<   fb_exchange_token)
grant_typer^   client_secretrb   r>   )seconds)r    r   
expires_at)r   POSTis_validr   rW   r5   get_fb_login_optionsr    cleaned_datainspect_tokenr.   r
   r-   r   r^   r2   	get_nonceget_settingsr   r   nowr   intr   r9   r   r   state_from_requeststater   )r?   r4   formr5   login_optionsr    r)   rf   infononceokr6   r>   r   r8   retr$   r$   r%   poste   s^   


	

zLoginByTokenView.postc                 C   s   |j }d|j d}t|}|s?t  jtd |j|jddd}|  |	 }|d }|
 dd	}tj|||d
 |S )Nzallauth.facebook.app_token[]r<   client_credentials)r^   rd   rc   r*   r)   APP_TOKEN_CACHE_TIMEOUTi,  )timeout)r    r^   r   r.   r
   r-   r   r   r1   r2   rm   set)r?   r5   r    	cache_key	app_tokenr6   datar|   r$   r$   r%   get_app_token   s(   
zLoginByTokenView.get_app_tokenc                 C   sp   |  |}t  jtd ||dd}|  | d }|d s&td|d |jj	ks2|d s6tdd S )	Nz/debug_token)input_tokenr)   r*   r   rh   ztoken is not validapp_idztoken app_id mismatch)
r   r
   r-   r.   r   r1   r2   r   r    r^   )r?   r5   r   r   r6   r   r$   r$   r%   rk      s   
zLoginByTokenView.inspect_token)	rB   rC   rD   rT   r.   rx   r   rk   __classcell__r$   r$   rY   r%   rP   S   s    9rP   )/r   r   loggingrU   datetimer   djangor   django.core.cacher   django.core.exceptionsr   django.utilsr   django.views.genericr   allauth.socialaccountr	   allauth.socialaccount.adapterr
   allauth.socialaccount.helpersr   r   allauth.socialaccount.modelsr   r   ,allauth.socialaccount.providers.oauth2.viewsr   r   r   r   r5   r   r   r   	getLoggerrB   loggerr&   r9   r:   adapter_viewoauth2_loginoauth2_callbackrP   as_viewlogin_by_tokenr$   r$   r$   r%   <module>   s2    
	

u