a
    }`                     @   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 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)ImproperlyConfigured)	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v7.0z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   i/var/www/html/Ranjet/env/lib/python3.9/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   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   Zdflt	__class__r   r   r&   3   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   r0   =   s    zFacebookProvider.__init__c                 C   s   |   ddS )NZMETHODoauth2get_settingsr   r   r   r   r   
get_methodA   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i |}	ntd| |	S )NmethodZjs_sdkz'%s'next processactionscopez&allauth.facebook.login(%s, %s, %s, %s)zjavascript:%sr3   zInvalid method specified: %s)popr6   r	   r   r   ZLOGINr   ZAUTHENTICATEr   r%   r-   get_login_urlRuntimeError)
r   r2   kwargsr7   r8   r:   r;   r<   Zjsretr'   r   r   r>   D   s"    zFacebookProvider.get_login_urlc                 C   s$   |   }|d}|rt|S t S )NZLOCALE_FUNC)r5   r   r   r   )r   r   funcr   r   r   _get_locale_callableX   s    
z%FacebookProvider._get_locale_callablec                 C   s   | j s|  | _ |  |S r.   )r/   rC   r1   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_scopeb   s    
z"FacebookProvider.get_default_scopec                 C   s   |   }g d}|d|S )N)idrE   r$   
first_name	last_nameverifiedlocaletimezoner   ZgenderZupdated_timeZFIELDSr4   )r   r   Zdefault_fieldsr   r   r   
get_fieldsh   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   r2   r;   rA   r'   r   r   rQ   y   s    


z FacebookProvider.get_auth_paramsc                 C   s*   |j td}|  }||di  |S )N)appIdversionZINIT_PARAMS)	client_idGRAPH_API_VERSIONr5   updater   )r   r2   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<   rP   rO   T)	or_createZ
auth_nonce)rQ   joinZ	get_scoper   	get_nonce)r   r2   rA   r   r   r   get_fb_login_options   s
    z%FacebookProvider.get_fb_login_optionsc                 C   sN   |   }|dd}dd t |D }d|v rJ| |}|j|d}|S )NZ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>rL   )rL   )r5   r   string	FormatterparserD   format)r   r2   r   Zsdk_urlfield_namesrL   r   r   r   get_sdk_url   s    
zFacebookProvider.get_sdk_urlc                    s   ddl m} z|  }W n |jy6   tdY n0  fdd}|jt|  |  || 	 |d|d|d 
| j d	d
|dt d}dtt|i}td| dS )Nr   )	SocialAppzINo Facebook app configured: please add a SocialApp using the Django adminc                    s     t| S r.   )build_absolute_urir   )r$   r2   r   r   abs_uri   s    z*FacebookProvider.media_js.<locals>.abs_uriZfacebook_login_by_tokenZsocialaccount_login_cancelledZaccount_logoutr3   )r7   Zsocialaccount_login_error)rR   rS   ZsdkUrlZ
initParamsZloginOptionsZloginByTokenUrlZ	cancelUrlZ	logoutUrlZloginUrlZerrorUrlZ	csrfTokenfb_datazfacebook/fbconnect.htmlri   )Zallauth.socialaccount.modelsrg   Zget_appZDoesNotExistr   rT   rU   rf   rX   r]   rh   r>   r   r
   jsondumpsr   )r   r2   rg   rW   rj   rk   ctxr   ri   r   media_js   s0    

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   r2   rZ   r=   Znoncer   r   r   r\      s    
zFacebookProvider.get_noncec                 C   s   |d S )NrH   r   r   datar   r   r   extract_uid   s    zFacebookProvider.extract_uidc                 C   s0   t |d|d|d|d|ddS )NrE   usernamerI   rJ   r$   )rE   ru   rI   rJ   r$   )dictr   rr   r   r   r   extract_common_fields   s    z&FacebookProvider.extract_common_fieldsc                 C   s*   g }| d}|r&|t|ddd |S )NrE   FT)rE   rK   Zprimary)r   rF   r   )r   rs   rA   rE   r   r   r   extract_email_addresses   s
    
z(FacebookProvider.extract_email_addresses)FF)r)   r*   r+   rH   r$   r   Zaccount_classr0   r6   r>   rC   rD   rG   rN   rQ   rX   r]   rf   ro   r\   rt   rw   rx   r,   r   r   r'   r   r-   8   s&   "

	r-   )*rl   ra   urllib.parser   Zdjango.confr   Zdjango.core.exceptionsr   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   rL   r   getattrr   rU   r"   rp   rq   r   r-   Zprovider_classesr   r   r   r   <module>   s8    $