o
    Df                     @   st   d dl mZ ddlmZmZ ddlmZmZmZm	Z	m
Z
 G dd dZG dd deeeZG d	d
 d
ee	e
eZdS )    )HttpResponseRedirect   )OAuth1SessionOAuth2Session)BaseApp
OAuthErrorOAuth1MixinOAuth2MixinOpenIDMixinc                   @   s   e Zd Zdd ZdddZdS )DjangoAppMixinc                 K   s.   | dd }|r| j|j|| d S td)NstatezMissing state value)pop	frameworkset_state_datasessionRuntimeError)selfrequestkwargsr    r   `/home/ubuntu/webapp/venv/lib/python3.10/site-packages/authlib/integrations/django_client/apps.pysave_authorize_data
   s   z"DjangoAppMixin.save_authorize_dataNc                 K   s4   | 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   rvr   r   r   authorize_redirect   s   z!DjangoAppMixin.authorize_redirect)N)__name__
__module____qualname__r   r   r   r   r   r   r   	   s    r   c                   @      e Zd ZeZdd ZdS )DjangoOAuth1Appc                 K   sv   |j  }|d}|stdd| j|j|}|s tdd|d |d< || | 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_tokenNr   )
GETdictgetr   r   get_state_datar   updateclear_state_datafetch_access_token)r   r   r   paramsr   datar   r   r   authorize_access_token!   s   




z&DjangoOAuth1App.authorize_access_tokenN)r   r   r   r   
client_clsr/   r   r   r   r   r!          r!   c                   @   r    )DjangoOAuth2Appc           
      K   s   |j dkr'|jd}|r|jd}t||d|jd|jdd}n|jd|jdd}|dd	}| j|j|d}| j	|j|d | 
||}| jdi ||}d
|v rvd|v rv| j||d |d}	|	|d< |S )r"   r&   errorerror_description)r3   r$   coder   )r5   r   claims_optionsNid_tokennonce)r8   r6   userinfor   )methodr&   r(   r   POSTr   r   r)   r   r+   _format_state_paramsr,   parse_id_token)
r   r   r   r3   r$   r-   r6   
state_datatokenr9   r   r   r   r/   9   s(   




z&DjangoOAuth2App.authorize_access_tokenN)r   r   r   r   r0   r/   r   r   r   r   r2   6   r1   r2   N)django.httpr   requests_clientr   r   base_clientr   r   r   r	   r
   r   r!   r2   r   r   r   r   <module>   s    