Ë
    ûûàgˆ  ã                   óä   — 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dddddœZd„ Zd„ Zd„ Zd„ Z	 	 ddededededef
d„Zdededefd„Zy) é    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                 óÚ   — |j                   j                  d«      }| j                  j                  d«      }t        j                  ||t
        j                  ¬«      j                  «       }|S )Nzutf-8)Ú	digestmod)ÚtokenÚencodeÚsecretÚhmacÚnewÚhashlibÚsha256Ú	hexdigest)Úappr   ÚmsgÚkeyÚappsecret_proofs        úl/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/allauth/socialaccount/providers/facebook/flows.pyÚcompute_appsecret_proofr&      sQ   € ð �+‰+×
Ñ
˜WÓ
%€CØ
�*‰*×
Ñ
˜GÓ
$€CÜ—h‘h˜s C´7·>±>ÔB×LÑLÓN€OØÐó    c           	      óH  — t        «       j                  «       j                  t        dz   dj	                  |j                  «       «      |j                  t        |j                  |«      dœ¬«      }|j                  «        |j                  «       }|j                  | |«      }|S )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¸
ÓC€EØ€Lr'   c                 ó¶  — | j                   }d|j                  › d�}t        j                  |«      }|s¥t	        «       j                  «       j                  t        dz   |j                  |j                  ddœ¬«      }|j                  «        |j                  «       }|d   }| j                  «       j                  dd	«      }t        j                  |||¬
«       |S )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Ø-¨c¯m©m¨_¸AÐ>€IÜ—	‘	˜)Ó$€IÙä‹Mß!Ñ!Ó#ß‰SÜÐ 5Ñ5à!$§¡Ø%(§Z¡ZØ"6ñð ó ð 	ð 	×ÑÔØ�y‰y‹{ˆØ˜Ñ(ˆ	Ø×'Ñ'Ó)×-Ñ-Ð.GÈÓMˆÜ�	‰	�)˜Y°Õ8ØÐr'   c                 óv  — t        | «      }t        «       j                  «       j                  t        dz   ||dœ¬«      }|j                  «        |j                  «       d   }|d   st        «       j                  d«      ‚|d   | j                  j                  k7  s|d   st        «       j                  d«      ‚y )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ð 
ó 

ð 	ð 	×ÑÔØ�9‰9‹;�vÑ€DØ�
ÒÜ‹m×,Ñ,¨_Ó=Ð=ØˆH�~˜Ÿ™×/Ñ/Ò/°t¸JÒ7GÜ‹m×,Ñ,¨_Ó=Ð=ð 8Hr'   r6   r+   Ú	auth_typeÚ
auth_nonceÚreturnc                 ó<  — |j                   }t        ||«       d }|dk(  r�t        «       j                  «       j	                  t
        dz   |j                  |dœ¬«      }|j                  «        |j                  «       }|xr ||j	                  d«      k(  }	|	st        «       j                  d«      ‚|j                  «       j	                  d«      r«t        «       j                  «       j	                  t
        dz   d	|j                  |j                  |d
œ¬«      }|j                  «        |j                  «       }|d   }|j	                  d«      }
|
r*t        j                  «       t        t        |
«      ¬«      z   }t!        |||¬«      }t#        | ||«      }||_        |S )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   sw  € ð �,‰,€CÜ�(˜LÔ)Ø€JØÐ$Ò$ä‹Mß!Ñ!Ó#ß‰SÜÐ :Ñ:à!$§¡Ø$0ñð ó ð 	ð 	×ÑÔØ�y‰y‹{ˆØÒ@˜J¨$¯(©(°<Ó*@Ñ@ˆÙÜ“-×0Ñ0°ÓAÐAà×ÑÓ×"Ñ"Ð#3Ô4ä‹Mß!Ñ!Ó#ß‰SÜÐ 5Ñ5à"5Ø!$§¡Ø%(§Z¡ZØ)5ñ	ð ó ð 	ð 	×ÑÔØ�y‰y‹{ˆØ˜NÑ+ˆØ—X‘X˜lÓ+ˆ
ÙÜ!Ÿ™›¬)¼CÀ
»OÔ*LÑLˆJä˜C |À
ÔK€EÜ˜7 H¨eÓ4€EØ€E„KØ€Lr'   r5   Úid_tokenc                 ó.  — t        j                  ||j                  |j                  |j                  j
                  t         j                  ¬«      }t        j                  «       D ��ci c]  \  }}||v r|||   “Œ }}}|j                  | |«      S c c}}w )aL  
    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÷á"ˆI�{Ø˜Ñ ð 	�X˜iÑ(Ñ(ð€Mñ ð ×-Ñ-¨g°}ÓEÐEùós   Á(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'   