o
    h*                     @   s   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 d d
lmZ d dlmZ d dlmZ G dd deZdS )    )Type)	parse_qsl)ImproperlyConfigured)HttpResponseRedirect)reverse)	urlencode)render_authentication_error)Provider)
AuthAction)OAuth2Error)generate_code_challenge)OAuth2Adapterc                       s   e Zd ZU dZee ed< dZdd Zdd Z	de
fd	d
Zdd Zdd Zdd Zdd Zdd Zdd Z fddZdddZ  ZS )OAuth2ProviderFoauth2_adapter_classTc                 K   s&   t | jd }|r|d t| }|S )N_login?)r   idr   )selfrequestkwargsurl r   f/var/www/html/pos/venv/lib/python3.10/site-packages/allauth/socialaccount/providers/oauth2/provider.pyget_login_url   s   zOAuth2Provider.get_login_urlc                 C   s   t | jd S )N	_callback)r   r   r   r   r   r   get_callback_url   s   zOAuth2Provider.get_callback_urlreturnc                 C   s>   | j jd}|d u r|  }|d| j}|rt }|S i S )Noauth_pkce_enabledOAUTH_PKCE_ENABLED)appsettingsgetget_settingspkce_enabled_defaultr   )r   enabledr!   pkce_code_paramsr   r   r   get_pkce_params   s   zOAuth2Provider.get_pkce_paramsc                 C   s2   | j jd}|du r|  }|di }t|S )
        Returns a dictionary of additional parameters passed to the OAuth2
        redirect URL. Additional -- so no need to pass the standard `client_id`,
        `redirect_uri`, `response_type`.
        auth_paramsNAUTH_PARAMS)r    r!   r"   r#   dict)r   retr!   r   r   r   get_auth_params)   s
   zOAuth2Provider.get_auth_paramsc                 C   s0   |   }|jdd}|r|tt| |S )r(   r)   N)r-   GETr"   updater+   r   )r   r   actionr,   dynamic_auth_paramsr   r   r   get_auth_params_from_request5   s
   z+OAuth2Provider.get_auth_params_from_requestc                 C   s   g S )z3
        Returns the default scope to use.
        r   r   r   r   r   get_default_scopeA   s   z OAuth2Provider.get_default_scopec                 C   s6   | j jd}|du r|  }|d|  }t|S )zW
        Returns the scope to use, taking settings `SCOPE` into consideration.
        scopeNSCOPE)r    r!   r"   r#   r3   list)r   r4   r!   r   r   r   	get_scopeG   s
   zOAuth2Provider.get_scopec                 C   s.   |   }|jdd}|r||d |S )zA
        Returns the scope to use for the given request.
        r4   N,)r7   r.   r"   extendsplit)r   r   r4   dynamic_scoper   r   r   get_scope_from_requestQ   s
   z%OAuth2Provider.get_scope_from_requestc                 C   s"   t | dstd| | |S )Nr   z No oauth2_adapter_class set for )hasattrr   r   )r   r   r   r   r   get_oauth2_adapter[   s   

z!OAuth2Provider.get_oauth2_adapterc                    s>   t  |}| ||d< |jdtj}| |||d< |S )Nr4   r0   r)   )super get_redirect_from_request_kwargsr<   r.   r"   r
   AUTHENTICATEr2   )r   r   r   r0   	__class__r   r   r@   `   s
   z/OAuth2Provider.get_redirect_from_request_kwargsNc              
   K   s   | j }| |}|||}|dd }	|	d u r|  }	|  }
|
dd }|	|
 |dd }|d u r9|  }| j||||fd|i|}||_	zt
||j||	W S  tyq } zt|| d|i|dW  Y d }~S d }~ww )Nr)   code_verifierr4   pkce_code_verifierstate_id)extra_context	exception)r    r>   
get_clientpopr-   r'   r/   r7   stash_redirect_statestater   get_redirect_urlauthorize_urlr   r   )r   r   processnext_urldatar   r    oauth2_adapterclientr)   pkce_paramsrD   r4   rF   er   r   r   redirectg   s@   

zOAuth2Provider.redirect)NN)__name__
__module____qualname__r$   r   r   __annotations__supports_redirectr   r   r+   r'   r-   r2   r3   r7   r<   r>   r@   rV   __classcell__r   r   rB   r   r      s   
 


r   N)typingr   urllib.parser   django.core.exceptionsr   django.httpr   django.urlsr   django.utils.httpr   allauth.socialaccount.helpersr   $allauth.socialaccount.providers.baser	   .allauth.socialaccount.providers.base.constantsr
   -allauth.socialaccount.providers.oauth2.clientr   ,allauth.socialaccount.providers.oauth2.utilsr   ,allauth.socialaccount.providers.oauth2.viewsr   r   r   r   r   r   <module>   s    