o
    h                     @   s   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 d d	lmZ d d
lmZ G dd deZG dd deZegZdS )    N)reverse)	urlencode)EmailAddress)get_adapter)jwtkit)ProviderAccount)OAuth2Error)OAuth2Provider)OpenIDConnectOAuth2Adapterc                   @   s   e Zd ZdS )OpenIDConnectProviderAccountN)__name__
__module____qualname__ r   r   n/var/www/html/pos/venv/lib/python3.10/site-packages/allauth/socialaccount/providers/openid_connect/provider.pyr      s    r   c                       s   e Zd ZdZdZeZeZdZ	 fddZ
edd Zdd	 Zd
d Zdd Zedd Zdd Zdd Zdd Zdd Zdd Zdd Z  ZS )OpenIDConnectProvideropenid_connectzOpenID ConnectTc                    s    t  j|i | | jj| _d S N)super__init__appname)selfargskwargs	__class__r   r   r      s   zOpenIDConnectProvider.__init__c                 C   s   | j jd }| |S )N
server_url)r   settingswk_server_url)r   urlr   r   r   r       s   
z OpenIDConnectProvider.server_urlc                 C   s   d}d|vr
||7 }|S )Nz!/.well-known/openid-configurationz/.well-known/r   )r   r    well_known_urir   r   r   r   %   s   z#OpenIDConnectProvider.wk_server_urlc                 K   s4   t | jjd d| jjid}|r|d t| }|S )N_loginprovider_idr   ?)r   r   providerr#   r   )r   requestr   r    r   r   r   get_login_url+   s   z#OpenIDConnectProvider.get_login_urlc                 C   s   t | jjd d| jjidS )N	_callbackr#   r$   )r   r   r&   r#   r   r   r   r   get_callback_url3   s   

z&OpenIDConnectProvider.get_callback_urlc                 C   s   | j jdS )Ntoken_auth_method)r   r   getr*   r   r   r   r,   9   s   z'OpenIDConnectProvider.token_auth_methodc                 C   s   g dS )N)openidprofileemailr   r*   r   r   r   get_default_scope=   s   z'OpenIDConnectProvider.get_default_scopec                 C   s   t |d S )Nsub)strr   datar   r   r   extract_uid@   s   z!OpenIDConnectProvider.extract_uidc              
   C   s@   t |d|d|d|d|d|d|ddS )	Nr0   preferred_usernamer   user_idpicturefamily_name
given_name)r0   usernamer   r8   r9   	last_name
first_name)dictr-   r4   r   r   r   extract_common_fieldsC   s   z+OpenIDConnectProvider.extract_common_fieldsc                 C   s2   g }| d}|r|t|| dddd |S )Nr0   email_verifiedFT)r0   verifiedprimary)r-   appendr   )r   r5   	addressesr0   r   r   r   extract_email_addressesN   s   

z-OpenIDConnectProvider.extract_email_addressesc                 C   s   |  || jjS r   )oauth2_adapter_classr   r#   )r   r'   r   r   r   get_oauth2_adapter[   s   z(OpenIDConnectProvider.get_oauth2_adapterc           	   
   C   s   | d}|st dz| |}|j}tj||d |d | jjgtj	d}W n t
tjfy? } zt d|d }~ww | ||}|S )Nid_tokeninvalid_tokenjwks_uriissuer)
credentialkeys_urlrL   audience
lookup_kid)r-   r   validation_errorrH   openid_configr   verify_and_decoder   	client_idlookup_kid_jwkr   requestsRequestExceptionsociallogin_from_response)	r   r'   tokenrI   oauth2_adapterrR   identity_dataeloginr   r   r   verify_token^   s&   


z"OpenIDConnectProvider.verify_token)r   r   r   idr   r   account_classr
   rG   supports_token_authenticationr   propertyr   r   r(   r+   r,   r1   r6   r@   rF   rH   r^   __classcell__r   r   r   r   r      s(    

r   )rV   django.urlsr   django.utils.httpr   allauth.account.modelsr   allauth.socialaccount.adapterr   allauth.socialaccount.internalr   $allauth.socialaccount.providers.baser   -allauth.socialaccount.providers.oauth2.clientr   /allauth.socialaccount.providers.oauth2.providerr	   4allauth.socialaccount.providers.openid_connect.viewsr
   r   r   provider_classesr   r   r   r   <module>   s    
]