U
    c                     @   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!eedi  di  d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_callableZSOCIALACCOUNT_PROVIDERSfacebookVERSIONzv13.0GRAPH_API_URLzhttps://graph.facebook.com/{}Z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   u/var/www/html/crackeverytest/cet_env/lib/python3.8/site-packages/allauth/socialaccount/providers/facebook/provider.pyget_profile_url)   s    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   uidr   )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   Zdflt	__class__r   r   r%   6   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   ZFacebookc                    s   d | _ tt| | d S N)_locale_callable_cacher$   r,   __init__r   requestr&   r   r   r/   @   s    zFacebookProvider.__init__c                 C   s   |   ddS )NZMETHODoauth2get_settingsr   r   r   r   r   
get_methodD   s    zFacebookProvider.get_methodc           
         s   | d|  }|dkrdt|dp(d }dt|dp@tj }dt|dpXtj }dt|dd }d	||||f }d
t|f }	n*|dkrt	t
| j|f|}	ntd| |	S )NmethodZjs_sdkz'%s'next processactionscopez&allauth.facebook.login(%s, %s, %s, %s)zjavascript:%sr2   zInvalid method specified: %s)popr5   r   r   r   ZLOGINr   ZAUTHENTICATEr   r$   r,   get_login_urlRuntimeError)
r   r1   kwargsr6   r7   r9   r:   r;   Zjsretr&   r   r   r=   G   s"    zFacebookProvider.get_login_urlc                 C   s$   |   }|d}|rt|S t S )NZLOCALE_FUNC)r4   r   r   r   )r   r   funcr   r   r   _get_locale_callable[   s    
z%FacebookProvider._get_locale_callablec                 C   s   | j s|  | _ |  |S r-   )r.   rB   r0   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   r;   r   r   r   get_default_scopee   s    
z"FacebookProvider.get_default_scopec                 C   s.   |   }ddddddddd	d
dg}|d|S )NidrD   r#   
first_name	last_nameverifiedlocaletimezoner   ZgenderZupdated_timeZFIELDSr3   )r   r   Zdefault_fieldsr   r   r   
get_fieldsk   s    zFacebookProvider.get_fieldsc                    s<   t t| ||}|tjkr&d|d< n|tjkr8d|d< |S )Nreauthenticate	auth_typeZ	rerequest)r$   r,   get_auth_paramsr   ZREAUTHENTICATEZ	REREQUEST)r   r1   r:   r@   r&   r   r   rP   |   s    


z FacebookProvider.get_auth_paramsc                 C   s*   |j td}|  }||di  |S )N)appIdversionZINIT_PARAMS)	client_idGRAPH_API_VERSIONr4   updater   )r   r1   appZ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 )	NZauthenticate,r;   rO   rN   T)	or_createZ
auth_nonce)rP   joinZ	get_scoper   	get_nonce)r   r1   r@   r   r   r   get_fb_login_options   s
    z%FacebookProvider.get_fb_login_optionsc                 C   sN   |   }|dd}dd t |D }d|krJ| |}|j|d}|S )NZSDK_URLz&//connect.facebook.net/{locale}/sdk.jsc                 S   s    g | ]}|d  dk	r|d  qS )r   Nr   ).0tupr   r   r   
<listcomp>   s     z0FacebookProvider.get_sdk_url.<locals>.<listcomp>rK   )rK   )r4   r   string	FormatterparserC   format)r   r1   r   Zsdk_urlfield_namesrK   r   r   r   get_sdk_url   s    
zFacebookProvider.get_sdk_urlc                    s   ddl m} z|  }W n |jk
r2   Y dS X  fdd}|jt|  |  ||  |d|d|d 	| j
 d	d
|dt d}dtt|i}td| dS )Nr   )	SocialAppr8   c                    s     t| S r-   )build_absolute_urir   )r#   r1   r   r   abs_uri   s    z*FacebookProvider.media_js.<locals>.abs_uriZfacebook_login_by_tokenZsocialaccount_login_cancelledZaccount_logoutr2   )r6   Zsocialaccount_login_error)rQ   rR   ZsdkUrlZ
initParamsZloginOptionsZloginByTokenUrlZ	cancelUrlZ	logoutUrlZloginUrlZerrorUrlZ	csrfTokenfb_datazfacebook/fbconnect.htmlrh   )Zallauth.socialaccount.modelsrf   Zget_appZDoesNotExistrS   rT   re   rW   r\   rg   r=   r   r	   jsondumpsr   )r   r1   rf   rV   ri   rj   ctxr   rh   r   media_js   s,    
zFacebookProvider.media_jsFc                 C   s>   |r|j td }n|j t}|s:|r:tt}||j t< |S r-   )Zsessionr<   NONCE_SESSION_KEYr   r   NONCE_LENGTH)r   r1   rY   r<   Znoncer   r   r   r[      s    
zFacebookProvider.get_noncec                 C   s   |d S )NrG   r   r   datar   r   r   extract_uid   s    zFacebookProvider.extract_uidc                 C   s0   t |d|d|d|d|ddS )NrD   usernamerH   rI   r#   )rD   rt   rH   rI   r#   )dictr   rq   r   r   r   extract_common_fields   s    z&FacebookProvider.extract_common_fieldsc                 C   s*   g }| d}|r&|t|ddd |S )NrD   FT)rD   rJ   Zprimary)r   rE   r
   )r   rr   r@   rD   r   r   r   extract_email_addresses   s
    
z(FacebookProvider.extract_email_addresses)FF)r(   r)   r*   rG   r#   r   Zaccount_classr/   r5   r=   rB   rC   rF   rM   rP   rW   r\   re   rn   r[   rs   rv   rw   r+   r   r   r&   r   r,   ;   s&   !

	r,   ))rk   r`   urllib.parser   Zdjango.confr   Zdjango.middleware.csrfr   Zdjango.template.loaderr   Zdjango.urlsr   Zdjango.utils.cryptor   Zdjango.utils.htmlr   r	   Zallauth.account.modelsr
   Z"allauth.socialaccount.app_settingsr   Z$allauth.socialaccount.providers.baser   r   r   Z/allauth.socialaccount.providers.oauth2.providerr   Zallauth.utilsr   rK   r   getattrr   rT   rc   r   ro   rp   r   r,   Zprovider_classesr   r   r   r   <module>   sH        #