
    qh#                         S r SSKrSSKrSSKrSSKrSSKrSSKJrJrJ	r	J
r
  SSKJrJrJr  SSKJr  Sr " S	 S
\5      r " S S\5      rg)z
Facebook OAuth2, and Canvas Application  backends, docs at:
    https://python-social-auth.readthedocs.io/en/latest/backends/facebook.html
    N   )AuthCanceledAuthExceptionAuthMissingParameterAuthUnknownError)constant_time_comparehandle_http_errorsparse_qs   )
BaseOAuth2g      2@c                      ^  \ rS rSrSrSrSrSrSrSr	Sr
S	rS
rSrSr/ SQrSU 4S jjrS rS rS rS rU 4S jr\S 5       rS rS r\SS j5       rS rS rU 4S jrSrU =r$ )FacebookOAuth2   z&Facebook OAuth2 authentication backendfacebookFN,z0https://www.facebook.com/v{version}/dialog/oauthz8https://graph.facebook.com/v{version}/oauth/access_tokenGETz7https://graph.facebook.com/v{version}/{uid}/permissionsDELETEz(https://graph.facebook.com/v{version}/me))idr   )expiresr   )granted_scopesr   )denied_scopesr   c                 0   > [         TU ]  U5      nSUS'   U$ )Ntruereturn_scopes)superauth_params)selfstateparams	__class__s      O/var/www/html/env/lib/python3.13/site-packages/social_core/backends/facebook.pyr   FacebookOAuth2.auth_params,   s!    $U+"(    c                 `    U R                  S[        5      nU R                  R                  US9$ NAPI_VERSIONversion)settingr&   AUTHORIZATION_URLformatr   r(   s     r!   authorization_url FacebookOAuth2.authorization_url1   s,    ,,}k:%%,,W,==r#   c                 `    U R                  S[        5      nU R                  R                  US9$ r%   )r)   r&   ACCESS_TOKEN_URLr+   r,   s     r!   access_token_urlFacebookOAuth2.access_token_url5   s,    ,,}k:$$++G+<<r#   c                     U R                  UR                  SS5      UR                  SS5      UR                  SS5      5      u  p#nUR                  SUR                  S5      5      UR                  SS5      UUUS.$ )z)Return user details from Facebook accountname 
first_name	last_nameusernameemail)r8   r9   fullnamer6   r7   )get_user_namesget)r   responser:   r6   r7   s        r!   get_user_detailsFacebookOAuth2.get_user_details9   s{    *.*=*=LL$LLr*LLb)+
'i !Zf1EF\\'2. $"
 	
r#   c                    U R                  S0 5      R                  5       nXS'   U R                  SS5      (       ae  U R                  5       u  pV[        R                  " UR                  S5      UR                  S5      [        R                  S9R                  5       US'   U R                  S[        5      nU R                  U R                  R                  US	9US
9$ )zLoads user data from servicePROFILE_EXTRA_PARAMSaccess_tokenAPPSECRET_PROOFTutf8msg	digestmodappsecret_proofr&   r'   )r   )r)   copyget_key_and_secrethmacnewencodehashlibsha256	hexdigestr&   get_jsonUSER_DATA_URLr+   )r   rB   argskwargsr   _secretr(   s           r!   	user_dataFacebookOAuth2.user_dataH   s    4b9>>@!-~<<)400//1IA(,f% ''/!..) ik	 $% ,,}k:}}T//66w6GPV}WWr#   c                    > [         TU ]  U5        UR                  S5      (       a2  [        XR                  S5      =(       d    UR                  S5      5      eg )N
error_codeerror_message)r   process_errorr<   r   )r   datar    s     r!   r\   FacebookOAuth2.process_errorX   sK    d#88L!!hh/I488L3I  "r#   c                 
   U R                  U R                  5        U R                  R                  S5      (       d  [        U S5      eU R	                  5       nU R                  5       u  pEU R                  U R                  5       UU R                  U5      UU R                  S   S.U R                  S9n UR                  5       nUS   nU R                  " Xv/UQ70 UD6$ ! [         a    [        UR                  5      n N<f = f)z2Completes login process, must return user instancecode)	client_idredirect_uriclient_secretr`   )r   methodrB   )r\   r]   r<   r   validate_staterJ   requestr1   get_redirect_uriACCESS_TOKEN_METHODjson
ValueErrorr
   textdo_auth)r   rS   rT   r   keyrV   r=   rB   s           r!   auth_completeFacebookOAuth2.auth_complete_   s     	499%yy}}V$$&tV44##%--/<<!!#  $ 5 5e <!'		&)	 ++   	
	/}}H  /||LDTDVDD  	/.H	/s   5C   DDc                 n     UR                  5       $ ! [         a    [        UR                  5      s $ f = fN)ri   rj   r
   content)r   r=   rS   rT   s       r!   process_refresh_token_response-FacebookOAuth2.process_refresh_token_response{   s3    	.==?" 	.H,,--	.s    44c                 4    U R                  5       u  pEUSUUS.$ )Nfb_exchange_token)rv   
grant_typera   rc   )rJ   )r   tokenrS   rT   ra   rc   s         r!   refresh_token_params#FacebookOAuth2.refresh_token_params   s)    #'#:#:#< 	!&-"*	
 	
r#   c                    U=(       d    0 nU R                  U5      n[        U[        5      (       d  [        U S5      eXS'   SU;   a  US   US'   U R                  R                  S5      (       a!  U R                  S   R                  S5      US'   U R                  R                  S5      (       a!  U R                  S   R                  S5      US'   UR                  XS.5        U R                  R                  " U0 UD6$ )	Nz6An error occurred while retrieving users Facebook datarB   
expires_inr   r   r   r   )backendr=   )
rW   
isinstancedictr   r]   r<   splitupdatestrategyauthenticate)r   rB   r=   rS   rT   r]   s         r!   rl   FacebookOAuth2.do_auth   s    >r~~l+$%% #N   ,^8#&|4DO99==)**%)YY/?%@%F%Fs%KD!"99==))$(IIo$>$D$DS$ID!$9:}}))4:6::r#   c                 `    U R                  S[        5      nU R                  R                  X2S9$ )Nr&   )r(   uid)r)   r&   REVOKE_TOKEN_URLr+   )r   rx   r   r(   s       r!   revoke_token_urlFacebookOAuth2.revoke_token_url   s,    ,,}k:$$++G+EEr#   c                 
    SU0$ )NrB    )r   rx   r   s      r!   revoke_token_params"FacebookOAuth2.revoke_token_params   s    &&r#   c                 N   > [         TU ]  U5      =(       a    UR                  S:H  $ )Nr   )r   process_revoke_token_responserr   )r   r=   r    s     r!   r   ,FacebookOAuth2.process_revoke_token_response   s(    G1(; +  F*	
r#   r   rq   ) __name__
__module____qualname____firstlineno____doc__r4   REDIRECT_STATERESPONSE_TYPESCOPE_SEPARATORr*   r0   rh   r   REVOKE_TOKEN_METHODrR   
EXTRA_DATAr   r-   r1   r>   rW   r\   r	   rn   rs   ry   rl   r   r   r   __static_attributes____classcell__)r    s   @r!   r   r      s    0DNMOJQP">MJ
>=
X  E E6.
 ; ;8F'
 
r#   r   c                   4    \ rS rSrSrSrS rS rS rS r	Sr
g	)
FacebookAppOAuth2   z+Facebook Application Authentication supportzfacebook-appc                     g)NFr   )r   s    r!   uses_redirectFacebookAppOAuth2.uses_redirect   s    r#   c                 >   U R                   R                  S5      n0 nSU R                   ;   a  U R                  5       u  pVU R                  U R                   S   5      nU(       d   S5       eSU;  a  SU;  a  [	        U 5      eUbK  UR                  S5      =(       d3    UR                  S5      =(       d    U R                   R                  S5      nUc5  U R                   R                  S5      S:X  a  [        U 5      e[	        U 5      eU R                  " X4/UQ70 UD6$ )NrB   signed_requestzMissing signed_request responseuser_idoauth_tokenerroraccess_denied)r]   r<   rJ   load_signed_requestr   r   rl   )r   rS   rT   rB   r=   rm   rV   s          r!   rn   FacebookAppOAuth2.auth_complete   s    yy}}^4tyy(113KC//		:J0KLH>>>8(](-J#D))#LL0 5||M25yy}}^4  yy}}W%8"4((%%||LDTDVDDr#   c                 <   U R                  5       u  pU R                  SS 5      nU R                  SS5      nU(       a  U R                  R                  U5      nU=(       d    UUUU R                  S.nU R                  SS5      nU R
                  R                  XeS9$ )N	NAMESPACESCOPEr5   )FACEBOOK_APP_NAMESPACEFACEBOOK_KEYFACEBOOK_EXTENDED_PERMISSIONSFACEBOOK_COMPLETE_URI
LOCAL_HTMLzfacebook.html)tplcontext)rJ   r)   r   joinrb   r   render_html)r   rm   rV   	namespacescopectxr   s          r!   	auth_htmlFacebookAppOAuth2.auth_html   s    --/LLd3	Wb)((--e4E&/&63-2%)%6%6	
 ll<9}}((S(>>r#   c                    S nU R                  5       u  p4 UR                  SS5      u  pVU" U5      nU" U5      n[        R                  " UR	                  SS5      5      n[
        R                  " UR                  S5      UR                  S5      [        R                  S9R                  5       n	[        XY5      (       a"  US   [        R                  " 5       S	-
  :  a  U$ g g ! [         a     g f = f)
Nc                 ~    U R                  S5      n U SS[        U 5      S-  -
  -  -  n [        R                  " U 5      $ )Nascii   =   )rM   lenbase64urlsafe_b64decode)r]   s    r!   base64_url_decode@FacebookAppOAuth2.load_signed_request.<locals>.base64_url_decode   s=    ;;w'DDATQ/00D++D11r#   .r   zutf-8replacer   rE   	issued_atiQ )rJ   r   ri   loadsdecoderK   rL   rM   rN   rO   digestr   timerj   )
r   r   r   rm   rV   sigpayloadpayload_json_bytesr]   expected_sigs
             r!   r   %FacebookAppOAuth2.load_signed_request   s    	2
 --/	)//Q7LC $C(C!27!;::077KLD88g&NN7+!.. fh	  %S77D<M		e#= =7  		s   C$ $
C10C1r   N)r   r   r   r   r   r4   r   rn   r   r   r   r   r#   r!   r   r      s    5DE0?r#   r   )r   r   rN   rK   ri   r   
exceptionsr   r   r   r   utilsr   r	   r
   oauthr   r&   r   r   r   r#   r!   <module>r      sS   
       H G Z
Z Z
zG Gr#   