o
    Lf~	                     @   sj   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 Z
dd	 Zd
d ZddddZdS )    N)default_backend)load_pem_x509_certificate)get_adapter)OAuth2Errorc                 C   s,   |  |}|rt|dt  }|S dS )zu
    Looks up the key given keys data of the form:

        {"<kid>": "-----BEGIN CERTIFICATE-----
CERTIFICATE"}
    utf8N)getr   encoder   
public_key)	keys_datakidkeyr	    r   f/var/www/html/humari/django-venv/lib/python3.10/site-packages/allauth/socialaccount/internal/jwtkit.pylookup_kid_pem_x509_certificate   s   
r   c                 C   s:   | d D ]}|d |krt jjt|}|  S qdS )a1  
    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	   r   r   r   lookup_kid_jwk   s   r   c           	      C   s`   t | }|d }|d }t  |}|  | }|||}|s,td| d||fS )Nr   algzInvalid 'kid': '')r   get_unverified_headerr   get_requests_sessionr   raise_for_statusr   r   )	
credentialkeys_urllookupheaderr   r   responser
   r   r   r   r   	fetch_key/   s   

r#   T)verify_signaturec              
   C   sp   z%|rt | ||\}}|g}nd}d }tj| ||dddd|||d}	|	W S  tjy7 }
 ztd|
d }
~
ww )N T)r$   
verify_iss
verify_aud
verify_exp)r   optionsissueraudiencer   zInvalid id_token)r#   r   decode
PyJWTErrorr   )r   r   r*   r+   
lookup_kidr$   r   r   r   dataer   r   r   verify_and_decode=   s.   
r1   )r   r   cryptography.hazmat.backendsr   cryptography.x509r   allauth.socialaccount.adapterr   -allauth.socialaccount.providers.oauth2.clientr   r   r   r#   r1   r   r   r   r   <module>   s    