o
    ˷e{                     @   s  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mZ d d	lmZ d d
lmZ d dlmZmZmZ d dlmZ d dlmZ ddlmZ eedi  di  ddZ!de! Z"dZ#dZ$G dd deZ%G dd deZ&e&gZ'dS )    N)quote)settings)	get_token)render_to_string)reverse)get_random_string)escapejs	mark_safe)EmailAddress)QUERY_EMAIL)
AuthActionAuthProcessProviderAccount)OAuth2Provider)import_callable   )get_default_locale_callableSOCIALACCOUNT_PROVIDERSfacebookVERSIONzv13.0zhttps://graph.facebook.com/allauth_facebook_nonce    c                       s,   e Zd Zdd Zdd Z fddZ  ZS )FacebookAccountc                 C   s   | j jdS )Nlink)account
extra_datagetself r   h/var/www/ideatree/venv/lib/python3.10/site-packages/allauth/socialaccount/providers/facebook/provider.pyget_profile_url%      zFacebookAccount.get_profile_urlc                 C   s   | j j}td|  S )NzC/%s/picture?type=square&height=600&width=600&return_ssl_resources=1)r   uidGRAPH_API_URL)r   r#   r   r   r    get_avatar_url(   s   zFacebookAccount.get_avatar_urlc                    s   t t|  }| jjd|S )Nname)superr   to_strr   r   r   )r   dflt	__class__r   r    r(   2   s   zFacebookAccount.to_str)__name__
__module____qualname__r!   r%   r(   __classcell__r   r   r*   r    r   $   s    
r   c                       s   e Zd ZdZdZeZ fddZdd Z fddZ	d	d
 Z
dd Zdd Zdd Z fddZdd Zdd Zdd Zdd Zd$ddZdd Zd d! Zd"d# Z  ZS )%FacebookProviderr   Facebookc                    s   d | _ tt| | d S N)_locale_callable_cacher'   r0   __init__r   requestr*   r   r    r4   <   s   zFacebookProvider.__init__c                 C   s   |   ddS )NMETHODoauth2get_settingsr   r   r   r   r    
get_method@   s   zFacebookProvider.get_methodc           
         s   | d|  }|dkrJdt|dpd }dt|dp tj }dt|dp,tj }dt|dd }d	||||f }d
t|f }	|	S |dkr\t	t
| j|fi |}	|	S td| )Nmethodjs_sdkz'%s'next processactionscopez&allauth.facebook.login(%s, %s, %s, %s)zjavascript:%sr8   zInvalid method specified: %s)popr;   r   r   r   LOGINr   AUTHENTICATEr   r'   r0   get_login_urlRuntimeError)
r   r6   kwargsr<   r>   r@   rA   rB   jsretr*   r   r    rF   C   s$   zFacebookProvider.get_login_urlc                 C   s$   |   }|d}|rt|S t S )NLOCALE_FUNC)r:   r   r   r   )r   r   funcr   r   r    _get_locale_callableW   s   
z%FacebookProvider._get_locale_callablec                 C   s   | j s|  | _ |  |S r2   )r3   rM   r5   r   r   r    get_locale_for_request\   s   

z'FacebookProvider.get_locale_for_requestc                 C   s   g }t r	|d |S )Nemail)r   append)r   rB   r   r   r    get_default_scopea   s   
z"FacebookProvider.get_default_scopec                 C   s   |   }g d}|d|S )N)idrO   r&   
first_name	last_nameverifiedlocaletimezoner   genderupdated_timeFIELDSr9   )r   r   default_fieldsr   r   r    
get_fieldsg   s   zFacebookProvider.get_fieldsc                    s>   t t| ||}|tjkrd|d< |S |tjkrd|d< |S )Nreauthenticate	auth_type	rerequest)r'   r0   get_auth_paramsr   REAUTHENTICATE	REREQUEST)r   r6   rA   rJ   r*   r   r    r`   x   s   

z FacebookProvider.get_auth_paramsc                 C   s*   |j td}|  }||di  |S )N)appIdversionINIT_PARAMS)	client_idGRAPH_API_VERSIONr:   updater   )r   r6   appinit_paramsr   r   r   r    get_init_params   s   z FacebookProvider.get_init_paramsc                 C   sD   |  |d}d| ||d< |ddkr | j|dd|d< |S )	Nauthenticate,rB   r^   r]   T)	or_create
auth_nonce)r`   join	get_scoper   	get_nonce)r   r6   rJ   r   r   r    get_fb_login_options   s
   z%FacebookProvider.get_fb_login_optionsc                 C   sN   |   }|dd}dd t |D }d|v r%| |}|j|d}|S )NSDK_URLz&//connect.facebook.net/{locale}/sdk.jsc                 S   s    g | ]}|d  dur|d  qS )r   Nr   ).0tupr   r   r    
<listcomp>   s    z0FacebookProvider.get_sdk_url.<locals>.<listcomp>rV   )rV   )r:   r   string	FormatterparserN   format)r   r6   r   sdk_urlfield_namesrV   r   r   r    get_sdk_url   s   
zFacebookProvider.get_sdk_urlc                    s   ddl m} z|  }W n |jy   Y dS w  fdd}|jt|  |  ||  |d|d|d 	| j
 d	d
|dt d}dtt|i}td| dS )Nr   )	SocialAppr?   c                    s     t| S r2   )build_absolute_urir   )r&   r6   r   r    abs_uri   r"   z*FacebookProvider.media_js.<locals>.abs_urifacebook_login_by_tokensocialaccount_login_cancelledaccount_logoutr8   )r<   socialaccount_login_error)rc   rd   sdkUrl
initParamsloginOptionsloginByTokenUrl	cancelUrl	logoutUrlloginUrlerrorUrl	csrfTokenfb_datazfacebook/fbconnect.htmlr   )allauth.socialaccount.modelsr   get_appDoesNotExistrf   rg   r~   rk   rs   r   rF   r   r	   jsondumpsr   )r   r6   r   ri   r   r   ctxr   r   r    media_js   s.   
zFacebookProvider.media_jsFc                 C   s>   |r
|j td }n|j t}|s|rtt}||j t< |S r2   )sessionrC   NONCE_SESSION_KEYr   r   NONCE_LENGTH)r   r6   rn   rC   noncer   r   r    rr      s   
zFacebookProvider.get_noncec                 C   s   |d S )NrR   r   r   datar   r   r    extract_uid   s   zFacebookProvider.extract_uidc                 C   s0   t |d|d|d|d|ddS )NrO   usernamerS   rT   r&   )rO   r   rS   rT   r&   )dictr   r   r   r   r    extract_common_fields   s   z&FacebookProvider.extract_common_fieldsc                 C   s*   g }| d}|r|t|ddd |S )NrO   FT)rO   rU   primary)r   rP   r
   )r   r   rJ   rO   r   r   r    extract_email_addresses   s
   
z(FacebookProvider.extract_email_addresses)FF)r,   r-   r.   rR   r&   r   account_classr4   r;   rF   rM   rN   rQ   r\   r`   rk   rs   r~   r   rr   r   r   r   r/   r   r   r*   r    r0   7   s(    
!
	r0   )(r   rx   urllib.parser   django.confr   django.middleware.csrfr   django.template.loaderr   django.urlsr   django.utils.cryptor   django.utils.htmlr   r	   allauth.account.modelsr
   "allauth.socialaccount.app_settingsr   $allauth.socialaccount.providers.baser   r   r   /allauth.socialaccount.providers.oauth2.providerr   allauth.utilsr   rV   r   getattrr   rg   r$   r   r   r   r0   provider_classesr   r   r   r    <module>   s4    
 
#