o
    &zh                     @   s   d dl mZmZ d dlmZ d dl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 d	efd
dZd	efddZd	ee fddZd	efddZG dd de	jZG dd de	jjZG dd de	jZdS )    )ListOptional)settings)check_passwordmake_password)models)Q)timezone)gettext_lazy)get_adapterreturnc                  C   s   t  } |  }|S N)r   generate_client_id)adapter	client_id r   R/var/www/html/kangema/venv/lib/python3.10/site-packages/allauth/idp/oidc/models.pydefault_client_id   s   r   c                  C   s   t  } |  }t|S r   )r   generate_client_secretr   )r   client_secretr   r   r   default_client_secret   s   r   c                 C   s   t td dd | dD S )Nc                 S   s   g | ]}|  qS r   )strip).0sr   r   r   
<listcomp>   s    z%_values_from_text.<locals>.<listcomp>
)listfiltersplit)textr   r   r   _values_from_text   s   r    c                 C   s   t | tr	t| d| S )Nr   )
isinstancestr
ValueErrorjoin)valuesr   r   r   _values_to_text   s   

r&   c                   @   s@  e Zd ZG dd dejZG dd dejZejddeddZ	ejdd	Z
ejd
edZejedddZejeddddZejdejejdZejejeddZejddddZejdeddddZejdeddZejejddejdZejdddZej e!j"d Z#ej$ddd!d"Z%G d#d$ d$Z&d%e'e( fd&d'Z)d(e'e( fd)d*Z*d%e'e( fd+d,Z+d(e'e( fd-d.Z,d%e'e( fd/d0Z-d1e'e( d%d!fd2d3Z.d%e'e( fd4d5Z/d1e'e( d%d!fd6d7Z0d%e'e( fd8d9Z1d:e'e( d%d!fd;d<Z2d%e'e( fd=d>Z3d?e'e( fd@dAZ4dIdBdCZ5dDe(d%e6fdEdFZ7d%e(fdGdHZ8d!S )JClientc                   @   s<   e Zd ZdedfZdedfZdedfZdedfZd	S )
zClient.GrantTypeauthorization_codeAuthorization codez,urn:ietf:params:oauth:grant-type:device_codezDevice codeclient_credentialszClient credentialsrefresh_tokenRefresh tokenN)__name__
__module____qualname___AUTHORIZATION_CODEDEVICE_CODECLIENT_CREDENTIALSREFRESH_TOKENr   r   r   r   	GrantType$   s
    r5   c                   @   s$   e Zd ZdedfZdedfZdS )zClient.TypeconfidentialConfidentialpublicPublicN)r-   r.   r/   r0   CONFIDENTIALPUBLICr   r   r   r   Type*   s    r<   Td   z	Client ID)primary_key
max_lengthdefaultverbose_namer?      )r?   r@   zxThe scope(s) the client is allowed to request. Provide one value per line, e.g.: openid(ENTER)profile(ENTER)email(ENTER)openid)	help_textr@   zIn case the client does not specify any scope, these default scopes are used. Provide one value per line, e.g.: openid(ENTER)profile(ENTER)email(ENTER) )rE   r@   blank   )r?   r@   choiceszA list of allowed grant types. Provide one value per line, e.g.: authorization_code(ENTER)client_credentials(ENTER)refresh_token(ENTER))r@   rE   z9A list of allowed redirect (callback) URLs, one per line.)rE   rG   r@   zBA list of allowed origins for cross-origin requests, one per line.zCORS allowed origins)rG   rE   r@   rA   codezdA list of allowed response types. Provide one value per line, e.g.: code(ENTER)id_token token(ENTER))rG   null	on_deleteFz5Flag to allow skip the consent screen for this clientr@   NrG   rK   r@   c                   @   s   e Zd ZedZedZdS )zClient.MetaclientclientsN)r-   r.   r/   r0   rA   verbose_name_pluralr   r   r   r   Metaj   s    rR   r   c                 C   
   t | jS r   )r    redirect_urisselfr   r   r   get_redirect_urisn      
zClient.get_redirect_urisurisc                 C      t || _d S r   )r&   rT   rV   rY   r   r   r   set_redirect_urisq      zClient.set_redirect_urisc                 C   rS   r   )r    cors_originsrU   r   r   r   get_cors_originst   rX   zClient.get_cors_originsc                 C   rZ   r   )r&   r^   r[   r   r   r   set_cors_originsw   r]   zClient.set_cors_originsc                 C   rS   r   r    scopesrU   r   r   r   
get_scopesz   rX   zClient.get_scopesrb   c                 C   rZ   r   r&   rb   rV   rb   r   r   r   
set_scopes}   r]   zClient.set_scopesc                 C   rS   r   )r    default_scopesrU   r   r   r   get_default_scopes   rX   zClient.get_default_scopesc                 C   rZ   r   )r&   rg   re   r   r   r   set_default_scopes   r]   zClient.set_default_scopesc                 C   rS   r   )r    response_typesrU   r   r   r   get_response_types   rX   zClient.get_response_typesrj   c                 C   rZ   r   )r&   rj   )rV   rj   r   r   r   set_response_types   r]   zClient.set_response_typesc                 C   rS   r   )r    grant_typesrU   r   r   r   get_grant_types   rX   zClient.get_grant_typesrm   c                 C   rZ   r   )r&   rm   )rV   rm   r   r   r   set_grant_types   r]   zClient.set_grant_typesc                 C   rZ   r   )r   secretrV   rp   r   r   r   
set_secret   r]   zClient.set_secretrp   c                 C   s   t || jS r   )r   rp   rq   r   r   r   check_secret   s   zClient.check_secretc                 C   s   | j S r   )idrU   r   r   r   __str__   s   zClient.__str__)r   N)9r-   r.   r/   r   TextChoicesr5   r<   	CharFieldr   rt   namer   rp   	TextFieldr0   rb   rg   r:   rI   typer1   rm   rT   r^   rj   
ForeignKeyr   AUTH_USER_MODELCASCADEownerBooleanFieldskip_consentDateTimeFieldr	   now
created_at	JSONFielddatarR   r   r"   rW   r\   r_   r`   rc   rf   rh   ri   rk   rl   rn   ro   rr   boolrs   ru   r   r   r   r   r'   #   s    

r'   c                   @   s*   e Zd Zdd ZdefddZdd ZdS )	TokenQuerySetc                 C   s   |  tddtt dB S )NT)expires_at__isnull)expires_at__gt)r   r   r	   r   rU   r   r   r   valid   s   zTokenQuerySet.validvaluec                 C   s   | j t |dS )N)hash)r   r   
hash_token)rV   r   r   r   r   by_value   s   zTokenQuerySet.by_valuec                 C   s   |   |j|d S )N)rz   )r   r   r   first)rV   rz   r   r   r   r   lookup   s   zTokenQuerySet.lookupN)r-   r.   r/   r   r"   r   r   r   r   r   r   r      s    r   c                   @   s  e Zd Ze ZG dd dejZej	dej
dZej	ddZejeejdddZejejejdddZejddd	d
ZejejdZejddddZejddZG dd dZdefddZde e fddZ!de e dd	fddZ"dedd	fddZ#de$e fddZ%d	S )Tokenc                   @   s   e Zd ZdZdZdZdZdS )z
Token.Type)iazInitial access token)atzAccess token)rtr,   )acr)   N)r-   r.   r/   INITIAL_ACCESS_TOKENACCESS_TOKENr4   r1   r   r   r   r   r<      s
    r<      )r?   rI      rB   T)rL   rG   rK   NrN   rM   )rG   rK   db_indexrF   c                   @   s   e Zd ZdZdS )z
Token.Meta))rz   r   N)r-   r.   r/   unique_togetherr   r   r   r   rR      s    rR   r   c                 C   s"   | j r|   d| j  S |  S )Nz for user #)user_idget_type_displayrU   r   r   r   ru      s   zToken.__str__c                 C   rS   r   ra   rU   r   r   r   rc      rX   zToken.get_scopesrb   c                 C   rZ   r   rd   re   r   r   r   rf      r]   zToken.set_scopesemailc                 C   s   | j du ri | _ || j d< dS )zx
        In case a specific email was chosen to be exposed to the client,
        store that using this method.
        Nr   )r   )rV   r   r   r   r   set_scope_email   s   
zToken.set_scope_emailc                 C   s   t | jtsdS | jdS )z
        Returns the email that was selected when the email scope was
        granted.  Note that this may e outdated, as the user can change email
        addresses at any time.
        Nr   )r!   r   dictgetrU   r   r   r   get_scope_email   s   zToken.get_scope_email)&r-   r.   r/   r   
as_managerobjectsr   rv   r<   rw   rI   rz   r   r{   r'   r}   rO   r   r|   userr   r   r   r	   r   r   
expires_atry   rb   rR   r"   ru   r   rc   rf   r   r   r   r   r   r   r   r      s&    	r   N)typingr   r   django.confr   django.contrib.auth.hashersr   r   	django.dbr   django.db.modelsr   django.utilsr	   django.utils.translationr
   r0   allauth.idp.oidc.adapterr   r"   r   r   r    r&   Modelr'   queryQuerySetr   r   r   r   r   r   <module>   s    y