
    fA                     >   d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlmZ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Zd d	lmZ d d
lmZmZ d dlmZ d dlm Z  d dl!m"Z"m#Z# d dl$m%Z%m&Z&m'Z' d Z( G d d      Z)d Z* G d d      Z+ G d de+      Z,y)    N)parse_qsurlparse)settings)get_user_model)RequestFactory)override_settings)reverse)	urlencode)EmailAddress)
user_emailuser_username)app_settings)get_adapter)SocialAccount	SocialApp)MockedResponseTestCasemocked_responsec                 h   t               j                  d      }t               j                  ||       }|r|d   S t        j
                  j                  | | d| d      }t        j                  j                  r9ddl
m} |j                  j                  |j
                  j                                |S )N/r   app123iddummy)providername	client_idkeysecret)Site)r   getr   	list_appsr   objectscreateallauthr   SITES_ENABLEDdjango.contrib.sites.modelsr   sitesaddget_current)provider_idrequestappsappr   s        _/var/www/cs2snipe.com/venv/lib/python3.12/site-packages/allauth/socialaccount/tests/__init__.py	setup_appr.      s    ""3'G=""7K8DAw



"
" # C ))4		dll..01J    c                        e Zd ZU eed<   d Zd Z fdZ ed      d        Z	 eddd	      d
        Z
ddZd Zd Z xZS )OAuthTestsMixinr)   c                      y N selfs    r-   get_mocked_responsez#OAuthTestsMixin.get_mocked_response1       r/   c                     t         r3   NotImplementedErrorr5   s    r-   get_expected_to_strz#OAuthTestsMixin.get_expected_to_str4       !!r/   c                     t         t        |           t        | j                        | _        t               j                  d      }| j
                  j                  |      | _	        y Nr   )
superr1   setUpr.   r)   r,   r   r   get_providerr   )r6   r*   	__class__s     r-   rA   zOAuthTestsMixin.setUp7   sK    ot*,T--. "&&s+--g6r/   FSOCIALACCOUNT_AUTO_SIGNUPc           	         | j                         }|-t        j                  d| j                  j                  z         y | j                  |      }| j                  |t        d             | j                  j                  t        d            }|j                  d   j                  }t        t        |j                        t        t!        j"                  dd                  }| j                  j%                  t        d      |      }| j                  |dd	
       |j                  d   }| j'                  |j)                                t*        j,                  j                  || j                  j                        }|j/                         }| j1                  |j3                         | j5                                |j7                          |j9                          |j;                          |S )N&Cannot test provider %s, no oauth mocksocialaccount_signupformi  i )emailusername)data/accounts/profile/Ffetch_redirect_responseuserrP   r   )r7   warningswarnr   idloginassertRedirectsr	   clientr   contextsociallogindictr   rP   strrandom	randrangepostassertFalsehas_usable_passwordr   r!   get_provider_accountassertEqualto_strr<   get_avatar_urlget_profile_url	get_brand)r6   
resp_mocksresprY   rL   rP   accountprovider_accounts           r-   
test_loginzOAuthTestsMixin.test_login=   s   --/
MMBT]]EUEUUVzz*%T7+A#BC{{w'=>?ll6*66[--.))$9:
 {{(> ?dKT#7QVW||F#1134''++@P@P+Q"779)002D4L4L4NO 	'')((*""$r/   T)rE   SOCIALACCOUNT_EMAIL_REQUIREDACCOUNT_EMAIL_REQUIREDc                 $   | j                         }|s-t        j                  d| j                  j                  z         y | j                  |      }| j                  |dd       | j                  |j                  d   j                                y )NrG   rM   FrN   rP   )
r7   rR   rS   r   rT   rU   rV   r_   rX   r`   )r6   rg   rh   s      r-   test_auto_signupz OAuthTestsMixin.test_auto_signupY   sy     --/
MMBT]]EUEUUVzz*%T#7QVWf-AACDr/   c           	      v   t        t        ddddi            5  | j                  j                  t	        | j
                  j                  dz         dz   t        t        |            z         }d d d        t        d         }t        |j                        }t	        | j
                  j                  d	z         }| j                  |d
   d   j                  |      d       t        | j                         g| 5  | j                  j                  |      }d d d        |S # 1 sw Y   xY w# 1 sw Y   |S xY w)N   )oauth_token=token&oauth_token_secret=psstcontent-type	text/html_login?processlocation	_callbackoauth_callbackr   )r   r   rW   r^   r	   r   rT   r
   rZ   r   r   queryassertGreaterfindget_access_token_responser   )r6   rg   rx   rh   pqcomplete_urls          r-   rU   zOAuthTestsMixin.loging   s   ;-
 	 ;;##((834D123D	 T*%&QWWt}}//+=>1-.q166|DaHT;;=K
K 	1;;??<0D	1%	 	 	1s   AD"<D."D+.D8c                      t        ddddi      S )Nrq   rr   rs   rt   )r   r5   s    r-   r   z)OAuthTestsMixin.get_access_token_response|   s    7[)
 	
r/   c           	          | j                   j                  t        | j                  j                  dz               }| j                  |dt        t        dd      z         y )Nrz   %socialaccount/authentication_error.%sACCOUNT_TEMPLATE_EXTENSIONhtml)rW   r   r	   r   rT   assertTemplateUsedgetattrr   r6   rh   s     r-   test_authentication_errorz)OAuthTestsMixin.test_authentication_error   sO    {{wt}}'7'7+'EFG3h <fEF	
r/   )rU   )__name__
__module____qualname__r[   __annotations__r7   r<   rA   r   rk   ro   rU   r   r   __classcell__rC   s   @r-   r1   r1   .   sd    "7 7 86 "&%*$
E
E*

r/   r1   c                 \      G  fddt         t              }d j                  z   |_        |S )Nc                   (    e Zd ZW  j                  Zy)!create_oauth_tests.<locals>.ClassN)r   r   r   rT   r)   r   s   r-   Classr      s    kkr/   r   OAuthTests_)r1   r   rT   r   )r   r   s   ` r-   create_oauth_testsr      s(    " " #X[[0ENLr/   c                       e Zd ZU eed<   d Zd ZdefdZdefdZddZ	d	 Z
 fd
Zd Zd Zd Z ed      d        Z ed      d        Z ed      d        Z ed      dd       Z ed      d        ZddZd Zd Z xZS )OAuth2TestsMixinr)   c                      y r3   r4   r5   s    r-   r7   z$OAuth2TestsMixin.get_mocked_response   r8   r/   c                     t         r3   r:   r5   s    r-   r<   z$OAuth2TestsMixin.get_expected_to_str   r=   r/   returnc                      y)Ntestacr4   r5   s    r-   get_access_tokenz!OAuth2TestsMixin.get_access_token       r/   c                      y)Ntestrfr4   r5   s    r-   get_refresh_tokenz"OAuth2TestsMixin.get_refresh_token   r   r/   Tc                     t        j                         j                  | j                         d}|r| j	                         |d<   t        j                  |      S )N)uidaccess_tokenrefresh_token)uuiduuid4hexr   r   jsondumps)r6   with_refresh_tokenresponses      r-   get_login_response_jsonz(OAuth2TestsMixin.get_login_response_json   sK    ::<## 113
 (,(>(>(@H_%zz(##r/   c                     t        | S r3   )r   r6   	responsess     r-   r   z OAuth2TestsMixin.mocked_response   s    	**r/   c                 J    t         t        |           | j                          y r3   )r@   r   rA   setup_provider)r6   rC   s    r-   rA   zOAuth2TestsMixin.setUp   s    +-r/   c                     t        | j                        | _        t               j	                  d      | _        | j                  j                  | j
                        | _        y r?   )r.   r)   r,   r   r   r*   rB   r   r5   s    r-   r   zOAuth2TestsMixin.setup_provider   sC    T--.%'++C0--dll;r/   c                 d   t         j                  j                  | j                  j                  i       }|j                         }d|d<   | j                  | j                  j                  |i      5  | j                  | j                  j                         i        d d d        y # 1 sw Y   y xY w)NFOAUTH_PKCE_ENABLEDSOCIALACCOUNT_PROVIDERS)	r   	PROVIDERSr   r,   r   copyr   rb   get_pkce_params)r6   provider_settingsprovider_settings_with_pkce_sets      r-    test_provider_has_no_pkce_paramsz1OAuth2TestsMixin.test_provider_has_no_pkce_params   s    (2266txx7H7H"M*;*@*@*B'@E'(<=]]%)XX%6%68W$X  
 	B T]]::<bA	B 	B 	Bs   2+B&&B/c                 f   t         j                  j                  | j                  j                  i       }|j                         }d|d<   | j                  | j                  j                  |i      5  | j                  j                         }| j                  t        |j                               h d       t        j                  |d   j                  d            }t        j                  |j!                               }|j#                  d      }|d   |k(  sJ 	 d d d        y # 1 sw Y   y xY w)	NTr   r   >   code_verifiercode_challengecode_challenge_methodr   ascii   =r   )r   r   r   r,   r   r   r   r   rb   setkeyshashlibsha256encodebase64urlsafe_b64encodedigestrstrip)r6   r   r   pkce_paramshashed_verifierr   code_challenge_without_paddings          r-   test_provider_has_pkce_paramsz.OAuth2TestsMixin.test_provider_has_pkce_params   s   (2266txx7H7H"M*;*@*@*B'@D'(<=]]%)XX%6%68W$X  
 	S --779KK$$&'L &nnO,33G<O $55o6L6L6NON-;-B-B4-H*/04RRRR	S 	S 	Ss   2B+D''D0FrD   c                     | j                         }|s-t        j                  d| j                  j                  z         y | j                  |      }| j                  |t        d             y )NrG   rH   )r7   rR   rS   r   rT   rU   rV   r	   )r6   	resp_mockrh   s      r-   rk   zOAuth2TestsMixin.test_login   s[    ,,.	MMBT]]EUEUUVzz
 	T7+A#BCr/   c                    t         j                  j                  | j                  j                  i       }|j                         }d|d<   | j                  | j                  j                  |i      5  | j                         }|s6t        j                  d| j                  j                  z         	 d d d        y | j                  |      }| j                  |t        d             d d d        y # 1 sw Y   y xY w)NFr   r   rG   rH   r   r   r   r,   r   r   r   r7   rR   rS   rT   rU   rV   r	   )r6   r   $provider_settings_with_pkce_disabledr   rh   s        r-   test_login_with_pkce_disabledz.OAuth2TestsMixin.test_login_with_pkce_disabled   s    (2266txx7H7H"M/@/E/E/G,EJ,-AB]]!!#G%  
 	H
 002I<t}}?O?OO 	H 	H ::D   w/E'FG	H 	H 	H   2A C0;,C00C9c                    t         j                  j                  | j                  j                  i       }|j                         }d|d<   | j                  | j                  j                  |i      5  | j                         }|s6t        j                  d| j                  j                  z         	 d d d        y | j                  |      }| j                  |t        d             d d d        y # 1 sw Y   y xY w)NTr   r   rG   rH   r   )r6   r   #provider_settings_with_pkce_enabledr   rh   s        r-   test_login_with_pkce_enabledz-OAuth2TestsMixin.test_login_with_pkce_enabled   s    (2266txx7H7H"M.?.D.D.F+DH+,@A]]!!#F%  
 	H
 002I<t}}?O?OO 	H 	H ::D   w/E'FG	H 	H 	Hr   )SOCIALACCOUNT_STORE_TOKENSc                    d} t               d      }t        ||       t        |d       |j                  d       |j	                          t
        j                  j                  ||dd       | j                  j                  |j                  d       | j                  | j                         d	       |r"| j                  | j                         d
d       t        j                  j                  || j                  j                  j                   xs | j                  j"                        j%                         }|j'                         }| j)                  |j+                         | j-                                |j/                          |j1                          |j3                          | j                  r|j4                  j%                         }| j)                  | j7                         |j8                         t;        j<                  | j?                  d            }d|v r|j%                  d      }nd|v r|j%                  d      }nd}| j)                  |j@                  |       y y )Nzuser@example.comT)	is_activerP   test)rP   rJ   primaryverified)rK   passwordconnectrw   F)r   rx   rQ   r   r   refreshToken )!r   r   r   set_passwordsaver   r!   r"   rW   rU   rK   r7   r   filterr   r,   r)   rT   r   ra   rb   rc   r<   rd   re   rf   socialtoken_setr   tokenr   loadsr   token_secret)	r6   multiple_loginrJ   rP   sarj   trh   r   s	            r-   test_account_tokensz$OAuth2TestsMixin.test_account_tokens  s   "~$/4dF#&!		##UDSW#X4==6B

4++-y
AJJ((*#(!   "")) 1 1 = = QAQAQ * 

#% 	 224)002D4L4L4NO 	'')((*""$88""&&(AT224agg>::d::d:STD$& $ 94' $ 8 "Q^^]; r/   c                 (    | j                  d       y)z
        fails if a login missing a refresh token, deletes the previously
        saved refresh token. Systems such as google's oauth only send
        a refresh token on first login.
        T)r   N)r   r5   s    r-   +test_account_refresh_token_saved_next_loginz<OAuth2TestsMixin.test_account_refresh_token_saved_next_login9  s     	   5r/   c                    | j                         5  | j                  j                  | j                  j	                  | j
                  |            }d d d        t        d         }t        |j                        }t        j                  j                  | j                  j                  i       j                  d| j                  j                        }| j                  d|v |       | j                  d|v |       |r |d   d   }| j                  |d   d   d       | j                  j                         }	| j!                  |d   d   j#                  |	      d       | j%                  |	      }
t'        |t(              r|}n|g }n|g} | j                   t+        d
|
ddi      g| 5  | j                  j                  |	| j-                  |            }t.        j0                  j
                  j2                  }|D ]  \  }}|j                  di       }|d   dk(  s!t'        |t4              s2|j                  dd      j7                  |	      sT| j                  d|v |       |skt9        j:                  |d   j=                  d            }t?        j@                  |jC                               jE                  d      jG                         }| j                  |        	 d d d        |S # 1 sw Y   xY w# 1 sw Y   |S xY w)Nrw   ry   r   r   r   r   S256redirect_urir   rq   rs   zapplication/jsonrL   POSTr   r   r   r   )$r   rW   r^   r   get_login_urlr*   r   r   r|   r   r   r   r,   pkce_enabled_defaultrb   get_callback_urlr}   r~   r   
isinstancelistr   get_complete_parametersrequestsSessioncall_args_listrZ   endswithr   r   r   r   r   r   r   decode)r6   r   rx   r   rh   r   r   pkce_enabledr   r   response_jsonrg   request_callsargskwargsrL   hashed_code_verifierexpected_code_challenges                     r-   rU   zOAuth2TestsMixin.loginB  s   !!# 	;;##++DLL'+JD	 T*%&QWW#--11$((2C2CRHLL $--"D"D
 	)Q.=0A5|D/03NQ67:FC}}5571^,Q/44\BAF441 5 
 i&"JJ#J!T!!3@R/ST

 	R ;;??<1M1Ma1PQD %,,44CCM - Rfzz&"-Gv%"4.4==lK$$_%<lK#/6~~ 188A0, #445I5P5P5RS#VD\#VX 0
 ((9PQ%R	R: w	 	<	R: s2   AK0-A2K= K=1!K=K=*A;K=0K:=Lc                     d|d   d   dS )Nr   stater   )coder  r4   )r6   r   s     r-   r   z(OAuth2TestsMixin.get_complete_parameters  s    7A77r/   c           	          | j                   j                  | j                  j                               }| j	                  |dt        t        dd      z         y )Nr   r   r   )rW   r   r   r   r   r   r   r   s     r-   r   z*OAuth2TestsMixin.test_authentication_error  sH    {{t}}==?@3h <fEF	
r/   )T)F)NrU   T)r   r   r   r[   r   r7   r<   r   r   r   r   rA   r   r   r   r   rk   r   r   r   r   rU   r   r   r   r   s   @r-   r   r      s    "# 3 $+<
BS( 7D 8D 7H 8H* 7H 8H* $7'< 8'<R $76 86<|8
r/   r   c                   t    e Zd ZddddZdddg dd	Zdddg dd	Zd
 Zd Zd Zd Z	d Z
 ed      d        Zy)OpenIDConnectTestsz/login	/userinfoz/token)authorization_endpointuserinfo_endpointtoken_endpointz&https://secure.gravatar.com/avatar/123#ness@some.oidc.server.onett.examplei  Ness)picturerJ   sub
identitiesr   c                 ,    t        |d| j                  iS )Ncallback)r   _mocked_responsesr   s     r-   r   z"OpenIDConnectTests.mocked_response  s    	KD4J4JKKr/   c                      y)Nr  r4   r5   s    r-   r<   z&OpenIDConnectTests.get_expected_to_str  s    4r/   c                 z   t        | j                        | _        | j                  | j                  _        d| j                  _        ddi| j                  _        | j                  j                          t               j                  d      | _        | j                  j                  | j                        | _        y )Nopenid_connect
server_urlzhttps://unittest.example.comr   )
r.   r)   r,   r   r   r   r   r   r*   rB   r5   s    r-   r   z!OpenIDConnectTests.setup_provider  s    T--.#//,8
 	%'++C0--dll;r/   c                      y)NTr4   r5   s    r-   r7   z&OpenIDConnectTests.get_mocked_response  s    r/   c                     |j                  d      r)t        dt        j                  | j                              S |j                  d      r)t        dt        j                  | j
                              S y )Nz!/.well-known/openid-configurationrq   r  )r  r   r   r   oidc_info_contentuserinfo_content)r6   urlr  r	  s       r-   r  z$OpenIDConnectTests._mocked_responses  sX    <<;<!#tzz$2H2H'IJJ\\+&!#tzz$2G2G'HII 'r/   TrD   c                     | j                         }| j                  |dd       t        j                  j	                  | j
                  j                        }| j                  |j                  | j                         y )NrM   FrN   r   )	rU   rV   r   r!   r   r,   r)   assertDictEqual
extra_data)r6   rh   r   s      r-   test_login_auto_signupz)OpenIDConnectTests.test_login_auto_signup  s_    zz|T#7QVW""&&0D0D&ER]]DOO<r/   N)r   r   r   r$  r%  r)  r   r<   r   r7   r  r   r*  r4   r/   r-   r  r    sx    "*(" <6 <6JL5	<J 6= 7=r/   r  )-r   r   r   r\   r   r   rR   urllib.parser   r   django.confr   django.contrib.authr   django.testr   django.test.utilsr   django.urlsr	   django.utils.httpr
   allauth.app_settingsr#   allauth.account.modelsr   allauth.account.utilsr   r   allauth.socialaccountr   allauth.socialaccount.adapterr   allauth.socialaccount.modelsr   r   allauth.testsr   r   r   r.   r1   r   r   r  r4   r/   r-   <module>r9     sx           +   . & /  '  / ; . 5 A C C([
 [
@s
 s
l5=) 5=r/   