o
    Df                     @   s`   d dl Z 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 )    N)ColumnStringTextInteger)
json_loads
json_dumps)ClientMixin)scope_to_listlist_to_scopec                   @   sb  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=S )>OAuth2ClientMixin0   T)indexx   Fr   )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   f/home/ubuntu/webapp/venv/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| jv r| jd= d S d S r   )r   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_methodclient_secret_basicr$   r   r   r   r   r(   1   s   z,OAuth2ClientMixin.token_endpoint_auth_methodc                 C   r"   )Ngrant_typesr$   r   r   r   r   r*   8   r&   zOAuth2ClientMixin.grant_typesc                 C   r"   )Nresponse_typesr$   r   r   r   r   r+   <   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/   D   r.   zOAuth2ClientMixin.client_uric                 C   r,   )Nlogo_urir$   r   r   r   r   r0   H   r.   zOAuth2ClientMixin.logo_uric                 C   r'   )Nscope r$   r   r   r   r   r1   L   r&   zOAuth2ClientMixin.scopec                 C   r"   )Ncontactsr$   r   r   r   r   r3   P   r&   zOAuth2ClientMixin.contactsc                 C   r,   )Ntos_urir$   r   r   r   r   r4   T   r.   zOAuth2ClientMixin.tos_uric                 C   r,   )N
policy_urir$   r   r   r   r   r5   X   r.   zOAuth2ClientMixin.policy_uric                 C   r,   )Njwks_urir$   r   r   r   r   r6   \   r.   zOAuth2ClientMixin.jwks_uric                 C   r"   )Njwksr$   r   r   r   r   r7   `   r&   zOAuth2ClientMixin.jwksc                 C   r,   )Nsoftware_idr$   r   r   r   r   r8   d   r.   zOAuth2ClientMixin.software_idc                 C   r,   )Nsoftware_versionr$   r   r   r   r   r9   h   r.   z"OAuth2ClientMixin.software_versionc                 C   s   | j S N)r   r   r   r   r   get_client_idl   s   zOAuth2ClientMixin.get_client_idc                 C   s   | j r| j d S d S )Nr   r#   r   r   r   r   get_default_redirect_urio   s   
z*OAuth2ClientMixin.get_default_redirect_uric                    s4   |sdS t | j  t|}t fdd|D S )Nr2   c                    s   g | ]}| v r|qS r   r   ).0sallowedr   r   
<listcomp>x   s    z7OAuth2ClientMixin.get_allowed_scope.<locals>.<listcomp>)setr1   splitr	   r
   )r   r1   scopesr   r@   r   get_allowed_scopes   s
   z#OAuth2ClientMixin.get_allowed_scopec                 C   
   || j v S r:   r<   )r   redirect_urir   r   r   check_redirect_uriz      
z$OAuth2ClientMixin.check_redirect_uric                 C   s   t | j|S r:   )secretscompare_digestr   )r   r   r   r   r   check_client_secret}   s   z%OAuth2ClientMixin.check_client_secretc                 C   s   |dkr	| j |kS dS )NtokenT)r(   )r   methodendpointr   r   r   check_endpoint_auth_method   s   
z,OAuth2ClientMixin.check_endpoint_auth_methodc                 C   rG   r:   )r+   )r   response_typer   r   r   check_response_type   rJ   z%OAuth2ClientMixin.check_response_typec                 C   rG   r:   )r*   )r   
grant_typer   r   r   check_grant_type   rJ   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/   r0   r1   r3   r4   r5   r6   r7   r8   r9   r;   r=   rF   rI   rM   rQ   rS   rU   r   r   r   r   r   	   sb    


	














r   )rK   
sqlalchemyr   r   r   r   authlib.common.encodingr   r   authlib.oauth2.rfc6749r   r	   r
   r   r   r   r   r   <module>   s    