o
    h                     @   s   d dl Z d dlZd dlmZmZmZmZmZ d dlm	Z	 d dl
mZ d dlmZ d dlmZmZ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defddZdS )    N)AnyDictIterableLiteralOptional)get_user_modelget_random_secret_key)gettext_lazy)str_to_user_iduser_id_to_struser_username)EmailAddress)BaseAdaptergenerate_user_code)app_settings)import_attributec                   @   s   e Zd ZdZedededdZdefddZdefd	d
ZdefddZ	dedefddZ
defddZdeddfddZ	d!ded dedee deeef fddZdefddZdefdd ZdS )"DefaultOIDCAdapteraC  The adapter class allows you to override various functionality of the
    ``allauth.idp.oidc`` app.  To do so, point ``settings.IDP_OIDC_ADAPTER`` to
    your own class that derives from ``DefaultOIDCAdapter`` and override the
    behavior by altering the implementation of the methods according to your own
    needs.
    zView your user IDzView your email addressz#View your basic profile information)openidemailprofilereturnc                 C   s
   t  jS )zA
        The client ID to use for newly created clients.
        )uuiduuid4hexself r   O/var/www/html/pos/venv/lib/python3.10/site-packages/allauth/idp/oidc/adapter.pygenerate_client_id#   s   
z%DefaultOIDCAdapter.generate_client_idc                 C   s   t  S )zE
        The client secret to use for newly created clients.
        r   r   r   r   r   generate_client_secret)   s   z)DefaultOIDCAdapter.generate_client_secretc                 C   s
   t ddS )N   )lengthr   r   r   r   r   r   /   s   
z%DefaultOIDCAdapter.generate_user_codetokenc                 C   s   t |d S )zw
        We don't store tokens directly, only the hash of the token. This methods generates
        that hash.
        zutf-8)hashlibsha256encode	hexdigest)r   r$   r   r   r   
hash_token2   s   zDefaultOIDCAdapter.hash_tokenc                 C   s   | j ddS )z0
        Returns the URL of the issuer.
        /)requestbuild_absolute_urirstripr   r   r   r   
get_issuer9   s   zDefaultOIDCAdapter.get_issuerid_tokenNc                 K   s   dS )z
        This method can be used to alter the ID token payload. It is already populated
        with basic values. Depending on the client and requested scopes, you can
        expose additional information here.
        Nr   )r   r/   clientscopeskwargsr   r   r   populate_id_token?   s   z$DefaultOIDCAdapter.populate_id_tokenpurpose)r/   userinfor1   r   c                 K   s   d|  ||i}d|v r4|r"z	tj||}W n tjy!   Y nw tj|}|r4||j|jd d|v rb|	 }	t
|dd}
t
|dd}t|}|	||
|d}| D ]
\}}|ra|||< qW|S )	zX
        Return the claims to be included in the ID token or userinfo response.
        subr   )r   email_verifiedr   	last_nameN
first_name)name
given_namefamily_namepreferred_username)get_user_subr   objectsget_for_userDoesNotExistget_primaryupdater   verifiedget_full_namegetattrr   items)r   r4   userr0   r1   r   r2   claimsaddress	full_namer8   r9   usernameprofile_claims	claim_keyclaim_valuer   r   r   
get_claimsG   s<   zDefaultOIDCAdapter.get_claimsc                 C   s   t |S )zL
        Returns the "sub" (subject identifier) for the given user.
        )r   )r   r0   rH   r   r   r   r>   s   s   zDefaultOIDCAdapter.get_user_subr6   c                 C   sH   zt |}W n
 ty   Y dS w t jj|d }|r |js"dS |S )zr
        Looks up a user, given its subject identifier. Returns `None` if no
        such user was found.
        N)pk)r   
ValueErrorr   r?   filterfirst	is_active)r   r0   r6   rQ   rH   r   r   r   get_user_by_suby   s   
z"DefaultOIDCAdapter.get_user_by_subN)__name__
__module____qualname____doc___scope_displaystrr    r!   r   r)   r.   dictr3   r   r   r   r   r   rP   r>   rV   r   r   r   r   r      s0    

,r   r   c                   C   s   t tj S rW   )r   r   ADAPTERr   r   r   r   get_adapter   s   ra   )r%   r   typingr   r   r   r   r   django.contrib.authr   django.core.management.utilsr	   django.utils.translationr
   r\    allauth.account.internal.userkitr   r   r   allauth.account.modelsr   allauth.core.internal.adapterr   allauth.core.internal.cryptokitr   allauth.idp.oidcr   allauth.utilsr   r   ra   r   r   r   r   <module>   s    s