
    qhrO                    2   S SK Jr  S SKrS SKrS SKJrJrJrJr  S SK	J
r
  S SKJr  S SKJr  SSKJrJrJrJrJrJrJrJr  SS	KJrJrJrJr  S
SKJr  \(       a  S SKJ r   S SK!J"r"  S SK#J$r$   " S S\5      r% " S S\%5      r& " S S\%5      r' " S S\'5      r(g)    )annotationsN)TYPE_CHECKINGAnyLiteralcast)	urlencode)SIGNATURE_TYPE_AUTH_HEADER)OAuth1   )AuthCanceledAuthException
AuthFailedAuthMissingParameterAuthStateForbiddenAuthStateMissingAuthTokenErrorAuthUnknownError)constant_time_comparehandle_http_errorsparse_qsurl_add_parameters   )BaseAuth)Mapping)Response)AuthBasec                  
  ^  \ rS rSr% SrSrSrSrS\S'   Sr	S\S'   Sr
S	\S
'   SrSrSrS\S'   SrSrSrS$U 4S jjrS rS%S jrS rS rS rS$S&S jjrS rS rS'S jrS(S jrS(S jrS(S jrS)S jrS)S  jrS! r S" r!S#r"U =r#$ )*	OAuthAuth$   a  OAuth authentication backend base class.

Settings will be inspected to get more values names that should be
stored on extra_data field. The setting name is created following the
pattern SOCIAL_AUTH_<uppercase current backend name>_EXTRA_DATA.

access_token is always stored.

URLs settings:
    AUTHORIZATION_URL       Authorization service url
    ACCESS_TOKEN_URL        Access token URL
 POSTLiteral['GET', 'POST']ACCESS_TOKEN_METHODstrREVOKE_TOKEN_URL Literal['GET', 'POST', 'DELETE']REVOKE_TOKEN_METHODidscopeNzlist[str] | NoneDEFAULT_SCOPE Fc                   > [         TU ]  " XX4/UQ70 UD6nUR                  SS5      =(       d    UR                  S5      US'   U$ )zHReturn access_token and extra defined names to store in
extra_data fieldaccess_tokenr    super
extra_dataget	selfuseruidresponsedetailsargskwargsdata	__class__s	           L/var/www/html/env/lib/python3.13/site-packages/social_core/backends/oauth.pyr0   OAuthAuth.extra_data>   sP     w!$XPPP'||NB?  
6::D
^     c                8    U R                   R                  S5      $ )z2Generate csrf token to include as state parameter.    )strategyrandom_stringr3   s    r<   state_tokenOAuthAuth.state_tokenG   s    }}**2..r>   c                   U R                   (       d  U R                  (       aZ  U R                  S-   nU R                  R	                  U5      nUc+  U R                  5       nU R                  R                  X5        U$ S nU$ N_state)STATE_PARAMETERREDIRECT_STATEnamerA   session_getrD   session_set)r3   rK   states      r<   get_or_create_stateOAuthAuth.get_or_create_stateK   so    4#6#6 99x'DMM--d3E}((*))$6  Er>   c                R    U R                   R                  U R                  S-   5      $ rG   )rA   rL   rK   rC   s    r<   get_session_stateOAuthAuth.get_session_state[   s     }}((X)=>>r>   c                    U R                   R                  S5      =(       d    U R                   R                  S5      nU(       a  [        U[        5      (       a  US   nU$ )NrN   redirect_stater   )r:   r1   
isinstancelist)r3   request_states     r<   get_request_stateOAuthAuth.get_request_state^   sF    		g.Q$))--@P2QZt<<)!,Mr>   c                   U R                   (       d  U R                  (       d  gU R                  5       nU R                  5       nU(       d  [	        U S5      eU(       d  [        U S5      e[        X!5      (       d  [        U 5      eU$ )zNValidate state value. Raises exception on error, returns state
value if valid.NrN   )rI   rJ   rR   rY   r   r   r   r   )r3   rN   rX   s      r<   validate_stateOAuthAuth.validate_stated   so     ##D,?,?&&(..0&tW55"411$]::$T**r>   c                ~    [        SU R                  5      nU R                  (       a  U(       a  [        USU05      nU$ )z-Build redirect with redirect_state parameter.r$   rU   )r   redirect_urirJ   r   )r3   rN   uris      r<   get_redirect_uriOAuthAuth.get_redirect_uris   s6    5$++,5$S+;U*CDC
r>   c                    U R                  S/ 5      nU R                  SS5      (       d  XR                  =(       d    / -   nU$ )z$Return list with needed access scopeSCOPEIGNORE_DEFAULT_SCOPEF)settingr*   )r3   r)   s     r<   	get_scopeOAuthAuth.get_scopez   s<    Wb)||2E:://526Er>   c                    0 nU R                  5       nU(       a'  U R                  R                  U5      XR                  '   U$ N)rg   SCOPE_SEPARATORjoinSCOPE_PARAMETER_NAME)r3   paramr)   s      r<   get_scope_argumentOAuthAuth.get_scope_argument   s:     /3/C/C/H/H/OE++,r>   c                    0 $ )z3Loads user data from service. Implement in subclass )r3   r-   r8   r9   s       r<   	user_dataOAuthAuth.user_data   s    	r>   c                    U R                   $ rj   )AUTHORIZATION_URLrC   s    r<   authorization_urlOAuthAuth.authorization_url   s    %%%r>   c                    U R                   $ rj   )ACCESS_TOKEN_URLrC   s    r<   access_token_urlOAuthAuth.access_token_url       $$$r>   c                    U R                   $ rj   )r%   r3   tokenr5   s      r<   revoke_token_urlOAuthAuth.revoke_token_url   r}   r>   c                    0 $ rj   rr   r   s      r<   revoke_token_paramsOAuthAuth.revoke_token_params       	r>   c                    0 $ rj   rr   r   s      r<   revoke_token_headersOAuthAuth.revoke_token_headers   r   r>   c                     UR                   S:H  $ )N   )status_code)r3   r6   s     r<   process_revoke_token_response'OAuthAuth.process_revoke_token_response   s    ##s**r>   c                   U R                  X5      =n(       am  U R                  X5      nU R                  X5      nU R                  S:w  a  [	        U5      OS nU R                  UUUUU R                  S9nU R                  U5      $ g )NGET)paramsheadersr:   method)r   r   r   r'   r   requestr   )r3   r   r5   r   r   r   r:   r6   s           r<   revoke_tokenOAuthAuth.revoke_token   s    #44U@@@--e9F//;G(,(@(@E(I9V$tD|| // $ H 55h??r>   rr   rj   )return
str | None)rN   r   r   r$   )r   zdict[str, Any] | None)r   r$   )r   zdict[str, Any])$__name__
__module____qualname____firstlineno____doc__rv   rz   r#   __annotations__r%   r'   ID_KEYrm   r*   rk   rJ   rI   r0   rD   rO   rR   rY   r\   ra   rg   ro   rs   rw   r{   r   r   r   r   r   __static_attributes____classcell__r;   s   @r<   r   r   $   s     28/8c<B9BF"&*M#*ONO/ ?&%%+ r>   r   c                      \ rS rSr% SrSrSrS\S'   SrSr	S	r
SS
 jrS r\S 5       r\S 5       rS rS rS rS rS rSS\4 SS jjr S       SS jjrSS jrSrg)
BaseOAuth1   zConsumer based mechanism OAuth authentication, fill the needed
parameters to communicate properly with authentication service.

URLs settings:
    REQUEST_TOKEN_URL       Request token URL

r    r   r"   REQUEST_TOKEN_METHODoauth_tokenr_   unauthorized_token_namec                D    U R                  5       nU R                  U5      $ zReturn redirect url)set_unauthorized_tokenoauth_authorization_requestr3   r   s     r<   auth_urlBaseOAuth1.auth_url   s!    ++-//66r>   c                ^    SU;   a'  US   S:X  a  [        U S5      e[        U SUS   -   5      eg )Noauth_problemuser_refusedzUser refused the accessz
Error was )r   r   r3   r:   s     r<   process_errorBaseOAuth1.process_error   sA    d"O$6"4)BCC"4_8M)MNN #r>   c                    U R                  U R                  5        U R                  5         U R                  5       nU R	                  U5      nU R
                  " U/UQ70 UD6$ )zReturn user, might be logged in)r   r:   r\   get_unauthorized_tokenr-   do_auth)r3   r8   r9   r   r-   s        r<   auth_completeBaseOAuth1.auth_complete   sY     	499%++-((/||L:4:6::r>   c                    [        U[        5      (       d  [        U5      nU R                  U5      nUb
  SU;  a  XS'   UR	                  X@S.5        U R
                  R                  " U0 UD6$ );Finish the auth process once the access_token was retrievedr-   r6   backend)rV   dictr   rs   updaterA   authenticate)r3   r-   r8   r9   r:   s        r<   r   BaseOAuth1.do_auth   sg     ,--#L1L~~l+d :#/ 49:}}))4:6::r>   c           	        U R                   U R                  -   nU R                  R                  U/ 5      nU(       d  [	        U S5      eU R
                  R                  U R                  5      nUc  [	        U S5      eS nU H{  nUn[        U[        5      (       d  [        U5      nUR                  U R                  5      U:X  d  MF  U R                  R                  U[        [        U5      U1-
  5      5        Un  U$    [	        U S5      e)NzMissing unauthorized tokenzIncorrect tokens)rK   UNATHORIZED_TOKEN_SUFIXrA   rL   r   r:   r1   OAUTH_TOKEN_PARAMETER_NAMErV   r   r   rM   rW   set)r3   rK   unauthed_tokens
data_tokenr   utokenorig_utokens          r<   r   !BaseOAuth1.get_unauthorized_token   s    yy4777--33D"= 'CDDYY]]4#B#BC
 'CDD%F Kfd++!&)zz$99:jH))$s?3{mCD   & !'9::r>   c                    U R                  5       nU R                  U R                  -   n/ U R                  R	                  U/ 5      QUPnU R                  R                  X#5        U$ rj   )unauthorized_tokenrK   r   rA   rL   rM   )r3   r   rK   tokenss       r<   r   !BaseOAuth1.set_unauthorized_token   s[    '')yy4777>4==,,T26>>!!$/r>   c                &    U R                  S0 5      $ )z6Return extra arguments needed on request-token processREQUEST_TOKEN_EXTRA_ARGUMENTS)rf   rC   s    r<   request_token_extra_arguments(BaseOAuth1.request_token_extra_arguments   s    ||;R@@r>   c                   U R                  5       nUR                  U R                  5       5        U R                  5       u  p#U R	                  5       nU R                  U R                  U[        X#U R                  U5      S9U R                  S9nUR                  nUR                  (       d  UR                  (       a0  UR                  UR                  =(       d    UR                  5      nU$ UR                  R                  5       nU$ )z3Return request for unauthorized token (first stage))callback_uri)r   authr   )r   r   ro   get_key_and_secretrO   r   REQUEST_TOKEN_URLr
   ra   r   contentencodingapparent_encodingdecode)r3   r   keysecretrN   r6   r   s          r<   r   BaseOAuth1.unauthorized_token  s    335d--/0--/((*<<""$2G2G2NO,,	   
 "" : :nnX%6%6%T(:T:TUG  &&--/Gr>   c                   [        U[        5      (       d  [        U5      nU R                  5       =(       d    0 nUR	                  U R                  5       5        UR                  U R                  5      X R                  '   U R                  5       nU R                  U5      X R                  '   [        U R                  5       U5      $ )z*Generate OAuth request to authorize token.)rV   r   r   auth_extra_argumentsr   ro   r1   r   rO   ra   REDIRECT_URI_PARAMETER_NAMEr   rw   )r3   r   r   rN   s       r<   r   &BaseOAuth1.oauth_authorization_request  s    %&&UOE**,2d--/027))++3
../ ((*373H3H3O//0!$"8"8":FCCr>   Nc           
     r   U R                  5       u  pEU=(       d    U R                  R                  S5      nU(       aI  UR                  S5      nUR                  S5      nU(       d  [        U S5      eU(       d  [        U S5      eOS nS nU R	                  5       n[        UUUUU R                  U5      UUS9$ )Noauth_verifierr   oauth_token_secretzMissing oauth_tokenzMissing oauth_token_secret)resource_owner_keyresource_owner_secretr   verifiersignature_type)r   r:   r1   r   rO   r
   ra   )	r3   r   r   r   r   r   r   r   rN   s	            r<   
oauth_authBaseOAuth1.oauth_auth"  s     --/'J499==9I+J!&=!9$)II.B$C!%$T+@AA($T+GHH ) "&$(!((*1"7..u5#)
 	
r>   c                @    U R                  X$X0R                  U5      S9$ )z+Generate OAuth request, setups callback url)r   r   r   )r   r   )r3   r   urlr   r   s        r<   oauth_requestBaseOAuth1.oauth_request?  s(     ||vOOE4J  
 	
r>   c                r    U R                  U R                  5       U R                  U5      U R                  S9$ )z%Return request for access token value)r   r   )get_querystringr{   r   r#   r   s     r<   r-   BaseOAuth1.access_tokenG  s;    ##!!#'++ $ 
 	
r>   rr   r   zstr | bytes | None)r   dict | None)Nr   )r   r   r   r$   r   r"   r   r   )r   r   r   dict[str, str])r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r	   r   r   r-   r   rr   r>   r<   r   r      s     3808!."077
O ; ; ; ;4A&D "1	

< TY

 #
:P
	

r>   r   c                    ^  \ rS rSr% SrSrS\S'   SrSrS\S'   S	r	S	r
S
rSS jrSSS jjrSS jrSS jrS rSS jrU 4S jr     S              S!S jjrS r\S 5       r\S 5       rS rS rS rS rSrU =r$ )"
BaseOAuth2iP  zgBase class for OAuth2 providers.

OAuth2 details at:
    https://datatracker.ietf.org/doc/html/rfc6749
Nr   REFRESH_TOKEN_URLr!   codeRESPONSE_TYPETFc                    U R                   $ rj   )USE_BASIC_AUTHrC   s    r<   use_basic_authBaseOAuth2.use_basic_auth^  s    """r>   c                    U R                  5       u  p#X R                  U5      S.nU R                  (       a  U(       a  XS'   U R                  (       a  U R                  US'   U$ )N)	client_idr_   rN   response_type)r   ra   rI   r   )r3   rN   r  client_secretr   s        r<   auth_paramsBaseOAuth2.auth_paramsa  sW    #'#:#:#< 	(:O:OPU:VWE#7O&*&8&8F?#r>   c                   U R                  5       nU R                  U5      nUR                  U R                  5       5        UR                  U R	                  5       5        [        U R                  5       X R                  (       + 5      $ r   )rO   r  r   ro   r   r   rw   rJ   )r3   rN   r   s      r<   r   BaseOAuth2.auth_urlj  sp    ((*!!%(d--/0d//12 """$f2E2E.E
 	
r>   c                    SU R                   R                  SS5      U R                  U5      S.nU R                  5       (       d&  U R	                  5       u  p4UR                  UUS.5        U$ )Nauthorization_coder   r    )
grant_typer   r_   )r  r  )r:   r1   ra   r   r   r   )r3   rN   r   r  r  s        r<   auth_complete_paramsBaseOAuth2.auth_complete_paramsw  sl    .IIMM&"- 11%8

 ""$$'+'>'>'@$IMM!*%2 r>   c                N    U R                  5       (       a  U R                  5       $ g rj   )r   r   rC   s    r<   auth_complete_credentials$BaseOAuth2.auth_complete_credentials  s#      **,,r>   c                    SSS.$ )Nz!application/x-www-form-urlencodedzapplication/json)zContent-TypeAcceptrr   rC   s    r<   auth_headersBaseOAuth2.auth_headers  s    ?(
 	
r>   c                   > [         TU ]  " XU/UQ7SU0UD6nUR                  S5      =(       d    UR                  S5      US'   U$ )zUReturn access_token, token_type, and extra defined names to store in
extra_data fieldr7   
token_typer.   r2   s	           r<   r0   BaseOAuth2.extra_data  sL     w!$XXXwXQWX%\\,7S6::l;S\r>   c           	     $    U R                  XX4XVS9$ )N)r   r   r:   r   r   )get_json)r3   r   r   r   r:   r   r   s          r<   request_access_tokenBaseOAuth2.request_access_token  s!     }}  
 	
r>   c                    UR                  S5      (       aS  SUS   ;   d	  SUS   ;   a  [        XR                  SS5      5      e[        XR                  S5      =(       d    US   5      eSU;   a  [        XS   5      eg )Nerrordenied	cancellederror_descriptionr    )r1   r   r   r   s     r<   r   BaseOAuth2.process_error  sy    88G4=(K4=,H"42Er)JKKT88,?#@#QDMRRtt(^44 r>   c           	        U R                  U R                  5        U R                  5       nSu  pEU R                  S:X  a  U R	                  U5      nOU R	                  U5      nU R                  U R                  5       UUU R                  5       U R                  5       U R                  S9nU R                  U5        U R                  " US   /UQ7SU0UD6$ )z2Completes login process, must return user instance)NNr   )r:   r   r   r   r   r-   r6   )
r   r:   r\   r#   r  r  r{   r  r  r   )r3   r8   r9   rN   r:   r   r6   s          r<   r   BaseOAuth2.auth_complete  s     	499%##%!##u,..u5F,,U3D,,!!#%%'//1++ - 
 	8$||^$
:>
/7
BH
 	
r>   c                   U R                   " U/UQ70 UD6nUR                  S5      =(       d    0 nUR                  U=(       d    0 5        SU;  a  XS'   UR                  XPS.5        U R                  R                  " U0 UD6$ )r   r6   r-   r   )rs   r1   r   rA   r   )r3   r-   r8   r9   r:   r6   s         r<   r   BaseOAuth2.do_auth  sx     ~~l<T<V<::j)/R
#)'3^$8=>}}))4:6::r>   c                4    U R                  5       u  pEUSUUS.$ )Nrefresh_token)r&  r
  r  r  )r   )r3   r   r8   r9   r  r  s         r<   refresh_token_paramsBaseOAuth2.refresh_token_params  s)    #'#:#:#< 	")"*	
 	
r>   c                "    UR                  5       $ rj   )json)r3   r6   r8   r9   s       r<   process_refresh_token_response)BaseOAuth2.process_refresh_token_response  s    }}r>   c                    U R                   " U/UQ70 UD6nU R                  5       nU R                  nUS:X  a  SOSnSU R                  5       SXgU0nU R                  " U40 UD6n	U R
                  " U	/UQ70 UD6$ )Nr   r   r:   r   r   )r'  refresh_token_urlREFRESH_TOKEN_METHODr  r   r+  )
r3   r   r8   r9   r   r   r   r   request_argsr   s
             r<   r&  BaseOAuth2.refresh_token  s    **5B4B6B$$&** E/hv!4#4#4#6&vV,,s3l3227LTLVLLr>   c                H    U R                   =(       d    U R                  5       $ rj   )r   r{   rC   s    r<   r.  BaseOAuth2.refresh_token_url  s    %%@)>)>)@@r>   rr   )r   boolrj   )rN   r   r   r   r   )r   zMapping[str, str | bytes])r   NNNN)r   r$   r   r&   r   z Mapping[str, str | bytes] | Noner:   zdict | bytes | str | Noner   z!tuple[str, str] | AuthBase | Noner   r   r   zdict[Any, Any])r   r   r   r   r   r   r   r/  r   rJ   rI   r   r   r  r   r  r  r  r0   r  r   r   r   r   r'  r+  r&  r.  r   r   r   s   @r<   r   r   P  s     %)z(! &M:&NON#
 

 4948*.26"

 1
 2	

 (
 0
 
 

5 
 
. ; ;
MA Ar>   r   c                  ^   ^  \ rS rSrSrSrSrSrS rS r	S r
SU 4S	 jjrSU 4S
 jjrSrU =r$ )BaseOAuth2PKCEi  z
Base class for providers using OAuth2 with Proof Key for Code Exchange (PKCE).

OAuth2 details at:
    https://datatracker.ietf.org/doc/html/rfc6749
PKCE details at:
    https://datatracker.ietf.org/doc/html/rfc7636
s256r@   Tc                    U R                    S3nU R                  SU R                  S9nU R                  R	                  U5      nU R                  R                  X5        U$ )N_code_verifierPKCE_CODE_VERIFIER_LENGTHdefault)rK   rf   !PKCE_DEFAULT_CODE_VERIFIER_LENGTHrA   rB   rM   )r3   rK   code_verifier_lencode_verifiers       r<   create_code_verifier#BaseOAuth2PKCE.create_code_verifier  s`    ))N+ LL'1W1W ) 
 334EF!!$6r>   c                V    U R                    S3nU R                  R                  U5      $ )Nr9  )rK   rA   rL   )r3   rK   s     r<   get_code_verifier BaseOAuth2PKCE.get_code_verifier  s'    ))N+}}((..r>   c                &   UR                  5       nUS:X  ah  [        R                  " UR                  5       5      R	                  5       n[
        R                  " U5      nUR                  5       R                  SS5      $ US:X  a  U$ [        U S5      e)Nr7  =r    plainz"Unsupported code challenge method.)
lowerhashlibsha256encodedigestbase64urlsafe_b64encoder   replacer   )r3   r?  challenge_methodr   hashedencodeds         r<   generate_code_challenge&BaseOAuth2PKCE.generate_code_challenge  s~    !'')V^^M$8$8$:;BBDF..v6G>>#++C44W  D"FGGr>   c                   > [         TU ]  US9nU R                  SU R                  S9(       aC  U R                  SU R                  S9nU R                  5       nU R                  XC5      nX2S'   XRS'   U$ )NrN   USE_PKCEr;  PKCE_CODE_CHALLENGE_METHODcode_challenge_methodcode_challenge)r/   r  rf   DEFAULT_USE_PKCE"PKCE_DEFAULT_CODE_CHALLENGE_METHODr@  rS  )r3   rN   r   rY  r?  rZ  r;   s         r<   r  BaseOAuth2PKCE.auth_params  s    $5$1<<
D,A,A<B$(LL,?? %1 %! !557M!99N /D*+'5#$r>   c                   > [         TU ]  US9nU R                  SU R                  S9(       a  U R	                  5       nX2S'   U$ )NrV  rW  r;  r?  )r/   r  rf   r[  rC  )r3   rN   r   r?  r;   s       r<   r  #BaseOAuth2PKCE.auth_complete_params  sF    -E-:<<
D,A,A<B 224M&3?#r>   rr   rj   )r   r   r   r   r   r\  r=  r[  r@  rC  rS  r  r  r   r   r   s   @r<   r6  r6    s;     *0&(*%/H  r>   r6  ))
__future__r   rM  rI  typingr   r   r   r   urllib.parser   oauthlib.oauth1r	   requests_oauthlibr
   
exceptionsr   r   r   r   r   r   r   r   utilsr   r   r   r   baser   collections.abcr   requestsr   requests.authr   r   r   r   r6  rr   r>   r<   <module>rk     s    "   4 4 " 6 $	 	 	  '!&G GT_
 _
DWA WAt<Z <r>   