
    lKj                         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dlm	Z	 ddl
mZ dd	lmZ dd
lmZ  G d d      Z G d deee      Z G d dee	ee      Zy)    )URL)RedirectResponse   )BaseApp)
OAuthError)AsyncOAuth1Mixin)AsyncOAuth2Mixin)AsyncOpenIDMixin)AsyncOAuth1Client)AsyncOAuth2Clientc                       e Zd Zd ZddZy)StarletteAppMixinc                    K   |j                  dd       }|r0| j                  j                  |j                  ||       d {    y t	        d      7 w)NstatezMissing state value)pop	frameworkset_state_datasessionRuntimeError)selfrequestkwargsr   s       {/Users/ahmed/devFolder/Ultron/claude-voice/.venv/lib/python3.12/site-packages/authlib/integrations/starlette_client/apps.pysave_authorize_dataz%StarletteAppMixin.save_authorize_data   sK     

7D)..//OOO455 Ps   ?AAANc                    K   |rt        |t              rt        |      } | j                  |fi | d{   } | j                  |fd|i| d{    t        |d   d      S 7 17 w)a'  Create a HTTP Redirect for Authorization Endpoint.

        :param request: HTTP request instance from Starlette view.
        :param redirect_uri: Callback or redirect URI for authorization.
        :param kwargs: Extra parameters to include.
        :return: A HTTP redirect response.
        Nredirect_uriurl.  status_code)
isinstancer   strcreate_authorization_urlr   r   )r   r   r   r   rvs        r   authorize_redirectz$StarletteAppMixin.authorize_redirect   ss      J|S9|,L0400HHH&d&&wP\PRPPP5	s;; IPs!   4A,A(A,A*A,*A,)N)__name__
__module____qualname__r   r%        r   r   r      s    6<r*   r   c                       e Zd ZeZd Zy)StarletteOAuth1Appc                   K   t        |j                        }|j                  d      }|st        d      | j                  j                  |j                  |       d {   }|st        d      |d   |d<   |j                  |       | j                  j                  |j                  |       d {     | j                  di | d {   S 7 s7  7 w)Noauth_tokenzMissing "oauth_token" parameterdescriptionz)Missing "request_token" in temporary datarequest_tokenr)   )
dictquery_paramsgetr   r   get_state_datar   updateclear_state_datafetch_access_token)r   r   r   paramsr   datas         r   authorize_access_tokenz)StarletteOAuth1App.authorize_access_token(   s     g**+

=))JKK^^227??EJJ)TUU"&"7fnn--goouEEE,T,,6v666 K 	F6s7   AC C!AC5C6CCCCCN)r&   r'   r(   r   
client_clsr;   r)   r*   r   r,   r,   %   s    "J7r*   r,   c                   &    e Zd ZeZ	 ddZd Zd Zy)StarletteOAuth2AppNc                 0  K   |rt        |t              rt        |      } | j                  d||d| d{   }|j	                  d      r4| j
                  j                  |j                  |d   d|i       d{    t        |d   d      S 7 Y7 w)	a  Create a HTTP Redirect for End Session Endpoint (RP-Initiated Logout).

        :param request: HTTP request instance from Starlette view.
        :param post_logout_redirect_uri: URI to redirect after logout.
        :param id_token_hint: ID Token previously issued to the RP.
        :param kwargs: Extra parameters (state, client_id, logout_hint, ui_locales).
        :return: A HTTP redirect response.
        )post_logout_redirect_uriid_token_hintNr   r@   r   r   r   r)   )	r!   r   r"   create_logout_urlr4   r   r   r   r   )r   r   r@   rA   r   results         r   logout_redirectz"StarletteOAuth2App.logout_redirect=   s      $
3KS(Q'*+C'D$-t-- 
%='
 
 

 ::g..//w.0H    u3??
s"   6BBAB=B>BBc                 <  K   |j                   j                  d      }|st        d      | j                  j	                  |j
                  |       d{   }|st        d      | j                  j                  |j
                  |       d{    |S 7 B7 w)zValidate the state parameter from the logout callback.

        :param request: HTTP request instance from Starlette view.
        :return: The state data dict.
        :raises OAuthError: If state is missing or invalid.
        r   zMissing "state" parameterr/   NzInvalid "state" parameter)r3   r4   r   r   r5   r   r7   )r   r   r   
state_datas       r   validate_logout_responsez+StarletteOAuth2App.validate_logout_responseY   s      $$((1)DEE>>88%PP
)DEEnn--goouEEE Q 	Fs$   ABB;BBBBc                 >  K   |j                   j                  dd      dk(  r}|j                  j                  d      }|r(|j                  j                  d      }t        ||      |j                  j                  d      |j                  j                  d      d}nL|j	                         4 d {   }|j                  d      |j                  d      d}d d d       d {    | j
                  j                  |j                  j                  d             d {   }| j
                  j                  |j                  |j                  d             d {    | j                  ||      }|j                  d	d       }|j                  d
d       }	|j                  dd      }
 | j                  di || d {   }d|v r*d|v r&| j                  ||d   ||	|
       d {   }||d<   |S 7 F7 # 1 d {  7  sw Y   'xY w7 7 7 T7 -w)NmethodGETerrorerror_description)rK   r0   coder   )rM   r   claims_options
claims_clsleewayx   id_tokennonce)rS   rN   rO   rP   userinfor)   )scoper4   r3   r   formr   r5   r   r7   _format_state_paramsr   r8   parse_id_token)r   r   r   rK   r0   r9   rV   rF   rN   rO   rP   tokenrT   s                r   r;   z)StarletteOAuth2App.authorize_access_tokenk   s    ==Xu-6((,,W5E%22667JK u+FF  ,,008 --11':F
 ||~~ HHV,!XXg. &~  >>88OOVZZ0
 

 nn--goovzz'?RSSS**:v>$4d;ZZd3
Hc*-d--AA&AA7j#8!00 )-% 1  H !)E*5 &~~~~
 	T Bs   B1H3G94H7$G?H&G<'<H#H$<H H!A#HH(H-H.H<H?HHH	HHHH)NN)r&   r'   r(   r   r<   rD   rG   r;   r)   r*   r   r>   r>   8   s      #J EI@8$&r*   r>   N)starlette.datastructuresr   starlette.responsesr   base_clientr   r   base_client.async_appr   r	   base_client.async_openidr
   httpx_clientr   r   r   r,   r>   r)   r*   r   <module>r`      sS    ( 0 ! $ 4 4 7 , ,< <07*,<g 7&Y')97Yr*   