
    Tњh~                         S SK r S SKrS SKJ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 rS rS	 rS
\SS4S jrSS.S jrg)    N)cache)default_backend)load_pem_x509_certificate)get_adapter)OAuth2Errorc                     U R                  U5      nU(       a3  [        UR                  S5      [        5       5      R	                  5       nU$ g)zu
    Looks up the key given keys data of the form:

        {"<kid>": "-----BEGIN CERTIFICATE-----
CERTIFICATE"}
    utf8N)getr   encoder   
public_key)	keys_datakidkeyr   s       `D:\Anime\Ugyen\janka_web_project\venv\Lib\site-packages\allauth/socialaccount/internal/jwtkit.pylookup_kid_pem_x509_certificater      sG     --
C
.JJv 1

*, 	 	     c                     U S    HM  nUS   U:X  d  M  [         R                  R                  R                  [        R
                  " U5      5      nUs  $    g)z
Looks up the key given keys data of the form:

    {
      "keys": [
        {
          "kty": "RSA",
          "kid": "W6WcOKB",
          "use": "sig",
          "alg": "RS256",
          "n": "2Zc5d0-zk....",
          "e": "AQAB"
        }]
    }
keysr   N)jwt
algorithmsRSAAlgorithmfrom_jwkjsondumps)r   r   dr   s       r   lookup_kid_jwkr      sF      vU8s?44==djjmLJ r   c                    [         R                  " U 5      nUS   nUS   n[        5       R                  5       R	                  U5      nUR                  5         UR                  5       nU" Xt5      nU(       d  [        SU S35      eXX4$ )Nr   algzInvalid 'kid': '')r   get_unverified_headerr   get_requests_sessionr
   raise_for_statusr   r   )	
credentialkeys_urllookupheaderr   r   responser   r   s	            r   	fetch_keyr(   2   s    &&z2F
-C
-C}11377AHI

 C,SE3448Or   datareturnc                 
   U R                  S5      nU R                  S5      nU R                  S5      nUb  Ub  Uc  gU[        R                  " 5       -
  nSU SU 3n[        R                  " USUS9(       d  [	        S	5      eg)
z=
Put the JWT token on a blacklist to prevent replay attacks.
issexpjtiNzjwt:iss=z,jti=T)r   valuetimeoutztoken already used)r
   timer   addr   )r)   r,   r-   r.   r0   r   s         r   
verify_jtir3   @   s~     ((5/C
((5/C
((5/C
{ckS[DIIKGSEse
$C99D':.// ;r   T)verify_signaturec           	           U(       a  [        XU5      u  pgU/nOSnS n[        R                  " U UUSSSS.UUUS9n	[        U	5        U	$ ! [        R                   a  n
[        S5      U
eS n
A
ff = f)N T)r4   
verify_iss
verify_aud
verify_exp)r   optionsissueraudiencer   zInvalid id_token)r(   r   decoder3   
PyJWTErrorr   )r#   r$   r;   r<   
lookup_kidr4   r   r   r   r)   es              r   verify_and_decoderA   O   s    5 zBHCJCJzz$4"""	 !
 	4>> 5,-145s   AA
 
A/A**A/)r   r1   django.core.cacher   r   cryptography.hazmat.backendsr   cryptography.x509r   allauth.socialaccount.adapterr   -allauth.socialaccount.providers.oauth2.clientr   r   r   r(   dictr3   rA    r   r   <module>rI      sK      # 
 8 7 5 E,0T 0d 0  MQ5r   