
    Tњh                         S SK r S SKrS SKJr  S SKJr  S SKJr  S SKJ	r	  S SK
Jr  S SKJr  S SKJrJr  S S	KJr  S S
KJr  SSSSSSS.rS rS rS rS r  SS\S\S\S\S\4
S jjrS\S\S\4S jrg)     N)	timedelta)cache)HttpRequest)timezone)get_adapter)jwtkit)SocialLoginSocialToken)Provider)GRAPH_API_URLidemail
first_name	last_namenamelink)subr   
given_namefamily_namer   	user_linkc                     UR                   R                  S5      nU R                  R                  S5      n[        R                  " X2[
        R                  S9R                  5       nU$ )Nzutf-8)	digestmod)tokenencodesecrethmacnewhashlibsha256	hexdigest)appr   msgkeyappsecret_proofs        iD:\Anime\Ugyen\janka_web_project\venv\Lib\site-packages\allauth/socialaccount/providers/facebook/flows.pycompute_appsecret_proofr&      sO     ++

W
%C
**

G
$Chhs7>>BLLNO    c           	      @   [        5       R                  5       R                  [        S-   SR	                  UR                  5       5      UR                  [        UR                  U5      S.S9nUR                  5         UR                  5       nUR                  X5      nU$ )Nz/me,)fieldsaccess_tokenr$   params)r   get_requests_sessiongetr   join
get_fieldsr   r&   r!   raise_for_statusjsonsociallogin_from_response)requestproviderr   resp
extra_datalogins         r%   complete_loginr:   $   s    				E!((8#6#6#89 %#:8<<#O 
 

 	 	J..wCELr'   c                    U R                   nSUR                   S3n[        R                  " U5      nU(       d  [	        5       R                  5       R                  [        S-   UR                  UR                  SS.S9nUR                  5         UR                  5       nUS   nU R                  5       R                  SS	5      n[        R                  " X#US
9  U$ )Nzallauth.facebook.app_token[]/oauth/access_tokenclient_credentials)	client_idclient_secret
grant_typer,   r+   APP_TOKEN_CACHE_TIMEOUTi,  )timeout)r!   r?   r   r/   r   r.   r   r   r2   r3   get_settingsset)r6   r!   	cache_key	app_tokenr7   datarC   s          r%   get_app_tokenrI   7   s    
,,C-cmm_A>I		)$IM!!#S 55!$%(ZZ"6   	 	yy{(	'')--.GM		)8r'   c                    [        U 5      n[        5       R                  5       R                  [        S-   XS.S9nUR                  5         UR                  5       S   nUS   (       d  [        5       R                  S5      eUS   U R                  R                  :w  d
  US   (       d  [        5       R                  S5      eg )Nz/debug_token)input_tokenr+   r,   rH   is_validinvalid_tokenapp_id)
rI   r   r.   r/   r   r2   r3   validation_errorr!   r?   )r6   rK   rG   r7   rH   s        r%   inspect_tokenrP   P   s    h'I				N*#.J 
 

 	 	99;vD
m,,_==H~///tJ7Gm,,_== 8Hr'   r6   r+   	auth_type
auth_noncereturnc                 F   UR                   n[        X5        S nUS:X  a  [        5       R                  5       R	                  [
        S-   UR                  US.S9nUR                  5         UR                  5       nU=(       a    XHR	                  S5      :H  n	U	(       d  [        5       R                  S5      eUR                  5       R	                  S5      (       a  [        5       R                  5       R	                  [
        S-   S	UR                  UR                  US
.S9nUR                  5         UR                  5       nUS   nUR	                  S5      n
U
(       a(  [        R                  " 5       [        [        U
5      S9-   n[!        XRUS9n[#        XU5      nXl        U$ )Nreauthenticatez/oauth/access_token_info)r?   r+   r,   rR   rM   EXCHANGE_TOKENr=   fb_exchange_token)rA   r?   r@   rW   r+   
expires_in)seconds)r!   r   
expires_at)r!   rP   r   r.   r/   r   r?   r2   r3   rO   rD   r   r   nowr   intr
   r:   r   )r5   r6   r+   rQ   rR   r!   rZ   r7   infookrX   r   r9   s                r%   verify_tokenr_   b   sp    ,,C()J$$M!!#S ::!$$0   	 	yy{@J((<*@@-00AA""#344M!!#S 55"5!$%(ZZ)5	   	 	yy{N+XXl+
!)C
O*LLJC
KE7e4EKLr'   r5   id_tokenc                 0   [         R                  " UUR                  UR                  UR                  R
                  [         R                  S9n[        R                  5        VVs0 s H  u  pEXC;   d  M  XSU   _M     nnnUR                  X5      $ s  snnf )a4  
Verifies a Facebook Limited Login token.
See https://developers.facebook.com/docs/facebook-login/limited-login/token/validating.

We validate the JWT, then convert its data/claims into
a fake Facebook Graph API response, which is then passed to
`provider.sociallogin_from_response` to be handled as normal.
)
credentialkeys_urlissueraudience
lookup_kid)
r   verify_and_decodelimited_login_jwks_url!limited_login_expected_jwt_issuerr!   r?   lookup_kid_jwk JWT_FIELD_TO_GRAPH_API_FIELD_MAPitemsr4   )r5   r6   r`   jwt_data	jwt_fieldgraph_fieldfake_responses          r%   verify_limited_login_tokenrq      s     ''0099''((H 'G&L&L&N&N"I  	)i((&N   --gEEs   &B5	B) rr   )r   r   datetimer   django.core.cacher   django.httpr   django.utilsr   allauth.socialaccount.adapterr   allauth.socialaccount.internalr   allauth.socialaccount.modelsr	   r
   $allauth.socialaccount.providers.baser   2allauth.socialaccount.providers.facebook.constantsr   rk   r&   r:   rI   rP   strr_   rq    r'   r%   <module>r~      s       # # ! 5 1 A 9 L
 $  &2>, 44 4 	4
 4 4nFF.1FFr'   