o
    ˳i+                     @  s   d dl mZ d dlmZmZmZ d dlmZmZ ddl	m
Z
mZmZmZ ddlmZmZmZmZmZmZmZmZmZmZmZmZmZ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& G dd de&Z'dS )    )annotations)DictListOptional)ClientQueryParams   )model_validateparse_link_responseparse_user_responsevalidate_uuid)AdminUserAttributesAuthMFAAdminDeleteFactorParams AuthMFAAdminDeleteFactorResponseAuthMFAAdminListFactorsParamsAuthMFAAdminListFactorsResponseCreateOAuthClientParamsGenerateLinkParamsGenerateLinkResponseInviteUserByEmailOptionsOAuthClientOAuthClientListResponseOAuthClientResponse
PageParamsSignOutScopeUpdateOAuthClientParamsUserUserListUserResponse   )SyncGoTrueAdminMFAAPI)SyncGoTrueAdminOAuthAPI)SyncGoTrueBaseAPIc                   @  s   e Zd ZdddddddRddZdSdTddZ	dUdVddZdWd"d#ZdXd&d'Z	dYdZd,d-Zd[d/d0Z	d\d1d2Z
d]d^d6d7Zd_d:d;Zd`d>d?Z	dUdadBdCZdbdFdGZdcdIdJZdddLdMZdedNdOZdcdPdQZdS )fSyncGoTrueAdminAPI NTurlheadershttp_clientverifyproxyr&   strr'   Optional[Dict[str, str]]r(   Optional[Client]r)   boolr*   Optional[str]returnNonec                C  s   |pi }t j| |||||d t | _| j| j_| j| j_t | _	| j
| j	_| j| j	_| j| j	_| j| j	_| j| j	_| j| j	_d S )Nr%   )r"   __init__r    mfa_list_factorslist_factors_delete_factordelete_factorr!   oauth_list_oauth_clientslist_clients_create_oauth_clientcreate_client_get_oauth_client
get_client_update_oauth_clientupdate_client_delete_oauth_clientdelete_client_regenerate_oauth_client_secretregenerate_client_secret)selfr&   r'   r(   r)   r*   http_headers rG   X/home/ubuntu/.local/lib/python3.10/site-packages/supabase_auth/_sync/gotrue_admin_api.pyr2   '   s&   		






zSyncGoTrueAdminAPI.__init__globaljwtscoper   c                 C  s   | j ddt|d|dd dS )z.
        Removes a logged-in session.
        POSTlogout)rK   T)queryrJ   no_resolve_jsonN)_requestr   )rE   rJ   rK   rG   rG   rH   sign_outE   s   
zSyncGoTrueAdminAPI.sign_outemailoptions"Optional[InviteUserByEmailOptions]r   c                 C  s4   |pi }| j dd||dd|dd}t|S )z;
        Sends an invite link to an email address.
        rL   invitedata)rR   rV   redirect_tobodyrW   )rP   getr   )rE   rR   rS   email_optionsresponserG   rG   rH   invite_user_by_emailQ   s   z'SyncGoTrueAdminAPI.invite_user_by_emailparamsr   r   c                 C  sZ   | j dd|d|d|d|d|di dd	|di d
d}t|S )zX
        Generates email links and OTPs to be sent via a custom email provider.
        rL   zadmin/generate_linktyperR   password	new_emailrS   rV   )r_   rR   r`   ra   rV   rW   rX   )rP   rZ   r
   rE   r^   r\   rG   rG   rH   generate_linkb   s   z SyncGoTrueAdminAPI.generate_link
attributesr   c                 C  s   | j dd|d}t|S )z
        Creates a new user.

        This function should only be called on a server.
        Never expose your `service_role` key in the browser.
        rL   admin/usersrY   )rP   r   )rE   rd   r\   rG   rG   rH   create_userw   s   zSyncGoTrueAdminAPI.create_userpageOptional[int]per_page
List[User]c                 C  s&   | j ddt||dd}tt|jjS )z
        Get a list of users.

        This function should only be called on a server.
        Never expose your `service_role` key in the browser.
        GETre   rh   rj   )rN   )rP   r   r	   r   contentusers)rE   rh   rj   r\   rG   rG   rH   
list_users   s   	
zSyncGoTrueAdminAPI.list_usersuidc                 C  s"   t | | dd| }t|S )z
        Get user by id.

        This function should only be called on a server.
        Never expose your `service_role` key in the browser.
        rl   admin/users/r   rP   r   )rE   rq   r\   rG   rG   rH   get_user_by_id   s   z!SyncGoTrueAdminAPI.get_user_by_idc                 C  s&   t | | jdd| |d}t|S )z
        Updates the user data.

        This function should only be called on a server.
        Never expose your `service_role` key in the browser.
        PUTrr   rf   rs   )rE   rq   rd   r\   rG   rG   rH   update_user_by_id   s   z$SyncGoTrueAdminAPI.update_user_by_idFidshould_soft_deletec                 C  s*   t | d|i}| jdd| |d dS )z
        Delete a user. Requires a `service_role` key.

        This function should only be called on a server.
        Never expose your `service_role` key in the browser.
        rx   DELETErr   rf   Nr   rP   )rE   rw   rx   rY   rG   rG   rH   delete_user   s   zSyncGoTrueAdminAPI.delete_userr   r   c                 C  s4   t |d | dd|d d}tt|jS )Nuser_idrl   rr   z/factors)r   rZ   rP   r	   r   rn   rb   rG   rG   rH   r4      s   z SyncGoTrueAdminAPI._list_factorsr   r   c              	   C  sL   t |d t |d | dd|d d|d }tt|jS )Nr|   rw   ry   rr   z	/factors/)r   rZ   rP   r	   r   rn   rb   rG   rG   rH   r6      s   z!SyncGoTrueAdminAPI._delete_factorPageParams | Noner   c                 C  s   |rt |j|jd}nd}| jdd|dd}tt|j}|jd}|r)t	||_
|jd}|rz|d	D ]C}|d
}t|dkry|d d}	t|	dkryt	|	d dd d}
|d dd d}|dkrr|
|_q6|dkry|
|_q6|S )a  
        Lists all OAuth clients with optional pagination.
        Only relevant when the OAuth 2.1 server is enabled in Supabase Auth.

        This function should only be called on a server.
        Never expose your `service_role` key in the browser.
        rm   Nrl   admin/oauth/clientsT)rN   rO   zx-total-countlink,;r   r   zpage=r   &>="nextlast)r   rh   rj   rP   r	   r   rn   r'   rZ   inttotalsplitlenrstripstrip	next_page	last_page)rE   r^   rN   r\   resultr   linksr   parts
page_matchpage_numrelrG   rG   rH   r9      s8   

z&SyncGoTrueAdminAPI._list_oauth_clientsr   r   c                 C  s"   | j dd|d}ttt|jdS )z
        Creates a new OAuth client.
        Only relevant when the OAuth 2.1 server is enabled in Supabase Auth.

        This function should only be called on a server.
        Never expose your `service_role` key in the browser.
        rL   r~   rf   client)rP   r   r	   r   rn   rb   rG   rG   rH   r;     s   z'SyncGoTrueAdminAPI._create_oauth_client	client_idc                 C  s,   t | | dd| }ttt|jdS )z
        Gets details of a specific OAuth client.
        Only relevant when the OAuth 2.1 server is enabled in Supabase Auth.

        This function should only be called on a server.
        Never expose your `service_role` key in the browser.
        rl   admin/oauth/clients/r   r   rP   r   r	   r   rn   rE   r   r\   rG   rG   rH   r=     s   z$SyncGoTrueAdminAPI._get_oauth_clientr   c                 C  s0   t | | jdd| |d}ttt|jdS )z
        Updates an OAuth client.
        Only relevant when the OAuth 2.1 server is enabled in Supabase Auth.

        This function should only be called on a server.
        Never expose your `service_role` key in the browser.
        ru   r   rf   r   r   )rE   r   r^   r\   rG   rG   rH   r?   +  s   z'SyncGoTrueAdminAPI._update_oauth_clientc                 C  s   t | | dd|  dS )z
        Deletes an OAuth client.
        Only relevant when the OAuth 2.1 server is enabled in Supabase Auth.

        This function should only be called on a server.
        Never expose your `service_role` key in the browser.
        ry   r   Nrz   )rE   r   rG   rG   rH   rA   ?  s
   z'SyncGoTrueAdminAPI._delete_oauth_clientc                 C  s.   t | | dd| d}ttt|jdS )a  
        Regenerates the secret for an OAuth client.
        Only relevant when the OAuth 2.1 server is enabled in Supabase Auth.

        This function should only be called on a server.
        Never expose your `service_role` key in the browser.
        rL   r   z/regenerate_secretr   r   r   rG   rG   rH   rC   P  s   
z2SyncGoTrueAdminAPI._regenerate_oauth_client_secret)r&   r+   r'   r,   r(   r-   r)   r.   r*   r/   r0   r1   )rI   )rJ   r+   rK   r   r0   r1   )N)rR   r+   rS   rT   r0   r   )r^   r   r0   r   )rd   r   r0   r   )NN)rh   ri   rj   ri   r0   rk   )rq   r+   r0   r   )rq   r+   rd   r   r0   r   )F)rw   r+   rx   r.   r0   r1   )r^   r   r0   r   )r^   r   r0   r   )r^   r}   r0   r   )r^   r   r0   r   )r   r+   r0   r   )r   r+   r^   r   r0   r   )r   r+   r0   r1   )__name__
__module____qualname__r2   rQ   r]   rc   rg   rp   rt   rv   r{   r4   r6   r9   r;   r=   r?   rA   rC   rG   rG   rG   rH   r#   &   s4    






-


r#   N)(
__future__r   typingr   r   r   httpxr   r   helpersr	   r
   r   r   typesr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   gotrue_admin_mfa_apir    gotrue_admin_oauth_apir!   gotrue_base_apir"   r#   rG   rG   rG   rH   <module>   s    P