
    f                         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e      Zy)    )Type)	parse_qsl)ImproperlyConfigured)HttpResponseRedirect)reverse)	urlencode)render_authentication_error)Provider)
AuthAction)OAuth2Error)generate_code_challenge)OAuth2Adapterc                   v     e Zd ZU dZee   ed<   dZd Zd Z	d Z
d Zd Zd	 Zd
 Zd Zd Z fdZddZ xZS )OAuth2ProviderFoauth2_adapter_classTc                 \    t        | j                  dz         }|r|dz   t        |      z   }|S )N_login?)r   idr   )selfrequestkwargsurls       j/var/www/cs2snipe.com/venv/lib/python3.12/site-packages/allauth/socialaccount/providers/oauth2/provider.pyget_login_urlzOAuth2Provider.get_login_url   s0    dgg())i//C
    c                 2    t        | j                  dz         S )N	_callback)r   r   r   s    r   get_callback_urlzOAuth2Provider.get_callback_url   s    tww,--r   c                 v    | j                         }|j                  d| j                        rt               }|S i S )NOAUTH_PKCE_ENABLED)get_settingsgetpkce_enabled_defaultr   )r   settingspkce_code_paramss      r   get_pkce_paramszOAuth2Provider.get_pkce_params!   s9    $$&<<,d.G.GH68##	r   c                 \    | j                         }t        |j                  di             }|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_PARAMS)r#   dictr$   )r   r&   rets      r   get_auth_paramszOAuth2Provider.get_auth_params(   s,     $$&8<<r23
r   c                     | j                         }|j                  j                  dd      }|r#|j                  t	        t        |                   |S )r*   auth_paramsN)r.   GETr$   updater,   r   )r   r   actionr-   dynamic_auth_paramss        r   get_auth_params_from_requestz+OAuth2Provider.get_auth_params_from_request2   sF     ""$%kkoomTBJJtI&9:;<
r   c                     g S )z3
        Returns the default scope to use.
         r   s    r   get_default_scopez OAuth2Provider.get_default_scope>   s	     	r   c                 x    | j                         }t        |j                  d| j                                     }|S )zW
        Returns the scope to use, taking settings `SCOPE` into consideration.
        SCOPE)r#   listr$   r8   )r   r&   scopes      r   	get_scopezOAuth2Provider.get_scopeD   s5     $$&X\\'4+A+A+CDEr   c                     | j                         }|j                  j                  dd      }|r |j                  |j	                  d             |S )zA
        Returns the scope to use for the given request.
        r<   N,)r=   r1   r$   extendsplit)r   r   r<   dynamic_scopes       r   get_scope_from_requestz%OAuth2Provider.get_scope_from_requestL   sC      6LL,,S12r   c                 X    t        | d      st        d|       | j                  |      S )Nr   z No oauth2_adapter_class set for )hasattrr   r   )r   r   s     r   get_oauth2_adapterz!OAuth2Provider.get_oauth2_adapterV   s1    t34&)I$'RSS((11r   c                     t         |   |      }| j                  |      |d<   |j                  j	                  dt
        j                        }| j                  ||      |d<   |S )Nr<   r3   r0   )super get_redirect_from_request_kwargsrC   r1   r$   r   AUTHENTICATEr5   )r   r   r   r3   	__class__s       r   rI   z/OAuth2Provider.get_redirect_from_request_kwargs[   s\    9'B55g>w:+B+BC $ A A'6 R}r   c                 0   | j                   }| j                  |      }|j                  ||      }|j                  dd       }	|	| j	                         }	| j                         }
|
j                  dd       }|	j                  |
       |j                  dd       }|| j                         } | j                  ||||fd|i|}||_	        	 t        |j                  |j                  ||	            S # t        $ r}t        || d|i|      cY d }~S d }~ww xY w)Nr0   code_verifierr<   pkce_code_verifierstate_id)extra_context	exception)apprF   
get_clientpopr.   r(   r2   r=   stash_redirect_statestater   get_redirect_urlauthorize_urlr   r	   )r   r   processnext_urldatar   rR   oauth2_adapterclientr0   pkce_paramsrM   r<   rO   es                  r   redirectzOAuth2Provider.redirectb   s,   hh009**7C8jj5..0K**,#>;'

7D)=NN$E,4,,Wh
AN
RX
  		'''"00% 
  	.j(-Cq 	s   %C1 1	D:D
DD)NN)__name__
__module____qualname__r%   r   r   __annotations__supports_redirectr   r    r(   r.   r5   r8   r=   rC   rF   rI   r`   __classcell__)rK   s   @r   r   r      sQ     }--.
2
r   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   r7   r   r   <module>rs      s<     " 7 ,  ' E 9 E E GlX lr   