o
    ˷e                     @   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	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#dd Z$dS )    N)	timedelta)timezone)app_settings	providers)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   e/var/www/ideatree/venv/lib/python3.10/site-packages/allauth/socialaccount/providers/facebook/views.pycompute_appsecret_proof   s   r!   c                 C   s\   t j|j| }tjtd d| |j	t
||dd}|  | }|| |}|S )Nz/me,)fieldsaccess_tokenr   params)r   registryby_idproviderrequestsgetr   join
get_fieldsr   r!   raise_for_statusjsonsociallogin_from_response)requestr   r   r)   resp
extra_dataloginr   r   r    fb_complete_login%   s   r5   c                   @   sN   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d ZdS )	FacebookOAuth2Adapterz(https://www.facebook.com/{}/dialog/oauthr"   AUTHORIZE_URL/oauth/access_token
expires_inc                 K   s   t |||S )N)r5   )selfr1   r   r$   kwargsr   r   r    complete_loginA   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expires_in_keyr<   r   r   r   r    r6   5   s    r6   c              
   C   s  d }d }| j dkrt| j}| rztjtj| }|	| }|
| }|jd }d }|ddkrStjtd |j|dd }	|j| dd	}
|
oQ|
|	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| |}W n tjy } zt !d |}W Y d }~nd }~ww |st"| tj|d}|S )NPOSTr$   	auth_typereauthenticatez/oauth/access_token_info)	client_idr$   r%   T)pop
auth_nonceEXCHANGE_TOKENr8   fb_exchange_token)
grant_typerM   client_secretrQ   r9   )seconds)r   r   
expires_atzError accessing FB user profile)	exception)#methodr   rJ   is_validr   r'   r(   r   r@   get_fb_login_optionsget_appcleaned_datar+   r*   r   rM   r/   	get_nonceget_settingsr   r   nowr   intr	   r5   r   r   state_from_requeststater   RequestExceptionloggerrV   r   )r1   retauth_exceptionformr)   login_optionsr   r$   rU   infononceokr2   r9   r   r4   er   r   r    login_by_tokenI   sr   




	


rl   )%r   r   loggingr*   datetimer   django.utilsr   allauth.socialaccountr   r   allauth.socialaccount.helpersr   r   allauth.socialaccount.modelsr   r	   ,allauth.socialaccount.providers.oauth2.viewsr
   r   r   formsr   r)   r   r   r   	getLoggerr=   rc   r!   r5   r6   adapter_viewoauth2_loginoauth2_callbackrl   r   r   r   r    <module>   s&    
	

