o
    Lf}                     @   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_callableSOCIALACCOUNT_PROVIDERSfacebookVERSIONzv13.0GRAPH_API_URLz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    r/var/www/html/humari/django-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   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   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   Facebookc                    s   d | _ t j|i | d S N)_locale_callable_cacher'   __init__)r   argskwargsr*   r    r!   r4   @   s   zFacebookProvider.__init__c                 C   s   |   ddS )NMETHODoauth2get_settingsr   r   r    r    r!   
get_methodD   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   requestr6   r<   r>   r@   rA   rB   jsretr*   r    r!   rF   G   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_callable[   s   
z%FacebookProvider._get_locale_callablec                 C   s   | j s|  | _ |  |S r2   )r3   rM   )r   rH   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_scopee   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_fieldsk   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   rH   rA   rJ   r*   r    r!   r`   |   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   rH   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   rH   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   rH   r   sdk_urlfield_namesrV   r    r    r!   get_sdk_url   s   
zFacebookProvider.get_sdk_urlc                    s   |   dkrdS  fdd}| jjt|  |  | j|  |d|d|d | j dd	|d
t	 d}dt
t|i}td| dS )Nr=   r?   c                    s     t| S r2   )build_absolute_urir   )r&   rH   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   )r;   ri   rf   rg   r~   rk   rs   r   rF   r   r	   jsondumpsr   )r   rH   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   rH   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   ;   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   r   r0   provider_classesr    r    r    r!   <module>   s:    

 
