o
    Df
                     @   s:   d dl mZmZmZ d dlmZmZmZ G dd dZdS )    )jwtJsonWebToken
JsonWebKey)UserInfoCodeIDTokenImplicitIDTokenc                   @   s(   e Zd Zd
ddZdd Zddd	ZdS )OpenIDMixinFc                 C   s   |   }|d}|r|s|S |d}|std| jdi | j}|jd|dd}|  | }W d    n1 s>w   Y  || jd< |S )Njwksjwks_urizMissing "jwks_uri" in metadataGETT)withhold_token )	load_server_metadatagetRuntimeError
client_clsclient_kwargsrequestraise_for_statusjsonserver_metadata)selfforcemetadatajwk_seturisessionrespr   r   e/home/ubuntu/webapp/venv/lib/python3.10/site-packages/authlib/integrations/base_client/sync_openid.pyfetch_jwk_set   s   



zOpenIDMixin.fetch_jwk_setc                 K   s6   |   }| j|d fi |}|  | }t|S )z+Fetch user info from ``userinfo_endpoint``.userinfo_endpoint)r   r   r   r   r   )r   kwargsr   r   datar   r   r   userinfo   s
   zOpenIDMixin.userinfoNx   c                    s   d|vrdS  fdd}t | jd}d|v r |d |d< t}nt}  }|du r7d|v r7dd	|d gii}|d
}	|	rCt|	}
nt}
|
j|d ||||d}|ddu r]d|j	d< |j
|d t|S )z9Return an instance of UserInfo from token's ``id_token``.id_tokenNc                    sV   t   }z	|| dW S  ty*   t  jdd}|| d Y S w )NkidT)r   )r   import_key_setr   find_by_kidr   
ValueError)header_r   r   r   r   load_key%   s   z,OpenIDMixin.parse_id_token.<locals>.load_key)nonce	client_idaccess_tokenissuerissvalues%id_token_signing_alg_values_supported)key
claims_clsclaims_optionsclaims_paramsnonce_supportedFr.   )leeway)dictr/   r   r   r   r   r   r   decodeparamsvalidater   )r   tokenr.   r7   r:   r-   r8   r6   r   
alg_values_jwtclaimsr   r,   r   parse_id_token    s8   	


zOpenIDMixin.parse_id_token)F)Nr$   )__name__
__module____qualname__r   r#   rC   r   r   r   r   r      s    
r   N)	authlib.joser   r   r   authlib.oidc.corer   r   r   r   r   r   r   r   <module>   s    