
    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
  G d
 d      Z G d deee      Z G d deeee      Zy)    )HttpResponseRedirect   )BaseApp)OAuth1Mixin)OAuth2Mixin)
OAuthError)OpenIDMixin)OAuth1Session)OAuth2Sessionc                       e Zd Zd ZddZy)DjangoAppMixinc                     |j                  dd       }|r(| j                  j                  |j                  ||       y t	        d      )NstatezMissing state value)pop	frameworkset_state_datasessionRuntimeError)selfrequestkwargsr   s       x/Users/ahmed/devFolder/Ultron/claude-voice/.venv/lib/python3.12/site-packages/authlib/integrations/django_client/apps.pysave_authorize_dataz"DjangoAppMixin.save_authorize_data   s;    

7D)NN))'//5&I455    Nc                 n     | j                   |fi |} | j                  |fd|i| t        |d         S )a$  Create a HTTP Redirect for Authorization Endpoint.

        :param request: HTTP request instance from Django view.
        :param redirect_uri: Callback or redirect URI for authorization.
        :param kwargs: Extra parameters to include.
        :return: A HTTP redirect response.
        redirect_uriurl)create_authorization_urlr   r   )r   r   r   r   rvs        r   authorize_redirectz!DjangoAppMixin.authorize_redirect   sD     +T**<B6B   J|JrJ#BuI..r   )N)__name__
__module____qualname__r   r     r   r   r   r      s    6
/r   r   c                       e Zd ZeZd Zy)DjangoOAuth1Appc                 ~   |j                   j                         }|j                  d      }|st        d      | j                  j                  |j                  |      }|st        d      |d   |d<   |j                  |       | j                  j                  |j                  |        | j                  di |S )Fetch access token in one step.

        :param request: HTTP request instance from Django view.
        :return: A token dict.
        oauth_tokenzMissing "oauth_token" parameterdescriptionz)Missing "request_token" in temporary datarequest_tokenr$   )
GETdictgetr   r   get_state_datar   updateclear_state_datafetch_access_token)r   r   r   paramsr   datas         r   authorize_access_tokenz&DjangoOAuth1App.authorize_access_token$   s     !!#

=))JKK~~,,W__eD)TUU"&"7f''?&t&&000r   N)r!   r"   r#   r
   
client_clsr6   r$   r   r   r&   r&   !   s    J1r   r&   c                   &    e Zd ZeZ	 ddZd Zd Zy)DjangoOAuth2AppNc                      | j                   d||d|}|j                  d      r,| j                  j                  |j                  |d   d|i       t        |d         S )a  Create a HTTP Redirect for End Session Endpoint (RP-Initiated Logout).

        :param request: HTTP request instance from Django 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_hintr   r;   r   r$   )create_logout_urlr/   r   r   r   r   )r   r   r;   r<   r   results         r   logout_redirectzDjangoOAuth2App.logout_redirect<   su     ('' 
%='
 

 ::gNN))w.0H $F5M22r   c                    |j                   j                  d      }|st        d      | j                  j	                  |j
                  |      }|st        d      | j                  j                  |j
                  |       |S )zValidate the state parameter from the logout callback.

        :param request: HTTP request instance from Django view.
        :return: The state data dict.
        :raises OAuthError: If state is missing or invalid.
        r   zMissing "state" parameterr*   zInvalid "state" parameter)r-   r/   r   r   r0   r   r2   )r   r   r   
state_datas       r   validate_logout_responsez(DjangoOAuth2App.validate_logout_responseV   sl     ()DEE^^227??EJ
)DEE''?r   c                 d   |j                   dk(  r}|j                  j                  d      }|r(|j                  j                  d      }t        ||      |j                  j                  d      |j                  j                  d      d}n7|j                  j                  d      |j                  j                  d      d}| j
                  j                  |j                  |j                  d            }| j
                  j                  |j                  |j                  d             | j                  ||      }|j                  dd	      }|j                  d
d	      }|j                  dd      }	 | j                  di ||}
d|
v r"d|v r| j                  |
|d   |||	      }||
d<   |
S )r(   r-   errorerror_description)rD   r+   coder   )rF   r   claims_optionsN
claims_clsleewayx   id_tokennonce)rL   rG   rH   rI   userinfor$   )methodr-   r/   r   POSTr   r0   r   r2   _format_state_paramsr   r3   parse_id_token)r   r   r   rD   r+   r4   rA   rG   rH   rI   tokenrM   s               r   r6   z&DjangoOAuth2App.authorize_access_tokenh   s    >>U"KKOOG,E%kkoo.AB u+FF/ 1F  ((0 ))'2F
 ^^227??FJJwDWX
''G9LM**:v>$4d;ZZd3
Hc*''';&;F;7j#8** )-% + H !)E*r   )NN)r!   r"   r#   r   r7   r?   rB   r6   r$   r   r   r9   r9   9   s    J EI34$'r   r9   N)django.httpr   base_clientr   r   r   r   r	   requests_clientr
   r   r   r&   r9   r$   r   r   <module>rV      sK    , ! % % $ % + +/ /*1nk7 10Vnk; Vr   