o
    b                     @   sX   d dl mZmZmZmZ d dlmZmZ d dlm	Z	 d dl
mZmZ G dd de	ZdS )    )ColumnStringTextInteger)
json_loads
json_dumps)ClientMixin)scope_to_listlist_to_scopec                   @   sj  e Zd ZeedddZeedZeedddZeedddZ	ede
Zed	d
 Zedd Zdd Zedd Zedd Zedd Zedd Zedd Zedd Zedd Zedd Zedd  Zed!d" Zed#d$ Zed%d& Zed'd( Zed)d* Zed+d, Zd-d. Zd/d0 Z d1d2 Z!d3d4 Z"d5d6 Z#d7d8 Z$d9d: Z%d;d< Z&d=d> Z'd?S )@OAuth2ClientMixin0   T)indexx   Fr   )Znullabledefaultclient_metadatac                 C   s   t | j| j| j| jdS )zImplementation for Client Info in OAuth 2.0 Dynamic Client
        Registration Protocol via `Section 3.2.1`_.

        .. _`Section 3.2.1`: https://tools.ietf.org/html/rfc7591#section-3.2.1
        )	client_idclient_secretclient_id_issued_atclient_secret_expires_at)dictr   r   r   r   self r   l/var/www/secure340b-portal/env/lib/python3.10/site-packages/authlib/integrations/sqla_oauth2/client_mixin.pyclient_info   s   zOAuth2ClientMixin.client_infoc                 C   s6   d| j v r
| j d S | jrt| j}|| j d< |S i S )Nr   )__dict___client_metadatar   )r   datar   r   r   r      s   



z!OAuth2ClientMixin.client_metadatac                 C   s   t || _d S N)r   r   )r   valuer   r   r   set_client_metadata&   s   z%OAuth2ClientMixin.set_client_metadatac                 C      | j dg S )Nredirect_urisr   getr   r   r   r   r"   )      zOAuth2ClientMixin.redirect_urisc                 C      | j ddS )Ntoken_endpoint_auth_methodZclient_secret_basicr#   r   r   r   r   r'   -   s   z,OAuth2ClientMixin.token_endpoint_auth_methodc                 C   r!   )Ngrant_typesr#   r   r   r   r   r(   4   r%   zOAuth2ClientMixin.grant_typesc                 C   r!   )Nresponse_typesr#   r   r   r   r   r)   8   r%   z OAuth2ClientMixin.response_typesc                 C      | j dS )Nclient_namer#   r   r   r   r   r+   <      zOAuth2ClientMixin.client_namec                 C   r*   )N
client_urir#   r   r   r   r   r-   @   r,   zOAuth2ClientMixin.client_uric                 C   r*   )Nlogo_urir#   r   r   r   r   r.   D   r,   zOAuth2ClientMixin.logo_uric                 C   r&   )Nscope r#   r   r   r   r   r/   H   r%   zOAuth2ClientMixin.scopec                 C   r!   )Ncontactsr#   r   r   r   r   r1   L   r%   zOAuth2ClientMixin.contactsc                 C   r*   )Ntos_urir#   r   r   r   r   r2   P   r,   zOAuth2ClientMixin.tos_uric                 C   r*   )N
policy_urir#   r   r   r   r   r3   T   r,   zOAuth2ClientMixin.policy_uric                 C   r*   )Njwks_urir#   r   r   r   r   r4   X   r,   zOAuth2ClientMixin.jwks_uric                 C   r!   )Njwksr#   r   r   r   r   r5   \   r%   zOAuth2ClientMixin.jwksc                 C   r*   )Nsoftware_idr#   r   r   r   r   r6   `   r,   zOAuth2ClientMixin.software_idc                 C   r*   )Nsoftware_versionr#   r   r   r   r   r7   d   r,   z"OAuth2ClientMixin.software_versionc                 C   s   | j S r   )r   r   r   r   r   get_client_idh   s   zOAuth2ClientMixin.get_client_idc                 C   s   | j r| j d S d S )Nr   r"   r   r   r   r   get_default_redirect_urik   s   
z*OAuth2ClientMixin.get_default_redirect_uric                    s4   |sdS t | j  t|}t fdd|D S )Nr0   c                    s   g | ]}| v r|qS r   r   ).0sallowedr   r   
<listcomp>t   s    z7OAuth2ClientMixin.get_allowed_scope.<locals>.<listcomp>)setr/   splitr	   r
   )r   r/   Zscopesr   r=   r   get_allowed_scopeo   s
   z#OAuth2ClientMixin.get_allowed_scopec                 C   
   || j v S r   r9   )r   Zredirect_urir   r   r   check_redirect_uriv      
z$OAuth2ClientMixin.check_redirect_uric                 C   s
   t | jS r   )boolr   r   r   r   r   has_client_secrety   rE   z#OAuth2ClientMixin.has_client_secretc                 C   
   | j |kS r   )r   )r   r   r   r   r   check_client_secret|   rE   z%OAuth2ClientMixin.check_client_secretc                 C   rH   r   )r'   )r   methodr   r   r    check_token_endpoint_auth_method   rE   z2OAuth2ClientMixin.check_token_endpoint_auth_methodc                 C   rC   r   )r)   )r   Zresponse_typer   r   r   check_response_type   rE   z%OAuth2ClientMixin.check_response_typec                 C   rC   r   )r(   )r   Z
grant_typer   r   r   check_grant_type   rE   z"OAuth2ClientMixin.check_grant_typeN)(__name__
__module____qualname__r   r   r   r   r   r   r   r   r   propertyr   r   r    r"   r'   r(   r)   r+   r-   r.   r/   r1   r2   r3   r4   r5   r6   r7   r8   r:   rB   rD   rG   rI   rK   rL   rM   r   r   r   r   r      sd    


	














r   N)Z
sqlalchemyr   r   r   r   Zauthlib.common.encodingr   r   Zauthlib.oauth2.rfc6749r   Zauthlib.oauth2.rfc6749.utilr	   r
   r   r   r   r   r   <module>   s
    