
    )Jf$@                     N   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e(          Z)d Z* G d de(          Z+ G d de+          Z,dS )    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                 x   t                                          d          }t                                          ||           }|r|d         S t          j                            | | d| d          }t          j        j	        r7ddl
m} |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        g/home/alex/cs2snipeproduction/venv/lib/python3.11/site-packages/allauth/socialaccount/tests/__init__.py	setup_appr.      s    ""3''G==""7K88D Aw


"
" #  C ) 2444444	dl..00111J    c                        e Zd Z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 )OAuthTestsMixinNc                     d S N selfs    r-   get_mocked_responsez#OAuthTestsMixin.get_mocked_response0       r/   c                    t          t          |                                            t          | j                  | _        t                                          d          }| j                            |          | _	        d S Nr   )
superr1   setUpr.   r)   r,   r   r   get_providerr   )r6   r*   	__class__s     r-   r<   zOAuthTestsMixin.setUp3   se    ot$$**,,,T-.. ""&&s++--g66r/   FSOCIALACCOUNT_AUTO_SIGNUPc           	         |                                  }|#t          j        d| j        j        z             d S |                     |          }|                     |t          d                     | j        	                    t          d                    }|j
        d         j        }t          t          |j                  t          t!          j        dd                              }| j                            t          d          |          }|                     |dd	
           |j
        d         }|                     |                                           t*          j        	                    || j        j                  }|                                }|                                 |                                 |                                 |                                 |S )N&Cannot test provider %s, no oauth mocksocialaccount_signupformi  i )emailusername)data/accounts/profile/Ffetch_redirect_responseuserrK   r   )r7   warningswarnr   idloginassertRedirectsr	   clientr   contextsociallogindictr   rK   strrandom	randrangepostassertFalsehas_usable_passwordr   r!   get_provider_accountget_avatar_urlget_profile_url	get_brandto_str)r6   
resp_mocksresprT   rG   rK   accountprovider_accounts           r-   
test_loginzOAuthTestsMixin.test_login9   s   --//
MBT]EUUVVVFzz*%%T7+A#B#BCCC{w'=>>??l6*6[-..)$99::
 
 
 {(> ? ?dKKT#7QVWWW|F#1133444'++@P+QQ #7799'')))((***""$$$!!!r/   T)r@   SOCIALACCOUNT_EMAIL_REQUIREDACCOUNT_EMAIL_REQUIREDc                 6   |                                  }|s#t          j        d| j        j        z             d S |                     |          }|                     |dd           |                     |j        d         	                                           d S )NrB   rH   FrI   rK   )
r7   rM   rN   r   rO   rP   rQ   rZ   rS   r[   )r6   ra   rb   s      r-   test_auto_signupz OAuthTestsMixin.test_auto_signupU   s     --//
 	MBT]EUUVVVFzz*%%T#7QVWWWf-AACCDDDDDr/   rP   c           	         t          t          ddddi                    5  | j                            t	          | j        j        dz             dz   t          t          |                    z             }d d d            n# 1 swxY w Y   t          |d                   }t          |j                  }t	          | j        j        d	z             }|                     |d
         d                             |          d           t          |                                 g|R  5  | j                            |          }d d d            n# 1 swxY w Y   |S )N   )oauth_token=token&oauth_token_secret=psstcontent-type	text/html_login?processlocation	_callbackoauth_callbackr   )r   r   rR   rY   r	   r   rO   r
   rU   r   r   queryassertGreaterfindget_access_token_responser   )r6   ra   rr   rb   pqcomplete_urls          r-   rP   zOAuthTestsMixin.loginc   s   ;- 
 
 	 	 ;##(8344D111223 D	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 T*%&&QWt}/+=>>1-.q166|DDaHHHT;;==K
KKK 	1 	1;??<00D	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1s$   ABB
B'EEEc                 (    t          ddddi          S )Nrk   rl   rm   rn   )r   r5   s    r-   ry   z)OAuthTestsMixin.get_access_token_responsex   s"    7[)
 
 	
r/   c           	          | j                             t          | j        j        dz                       }|                     |dt          t          dd          z             d S )Nrt   %socialaccount/authentication_error.%sACCOUNT_TEMPLATE_EXTENSIONhtml)rR   r   r	   r   rO   assertTemplateUsedgetattrr   r6   rb   s     r-   test_authentication_errorz)OAuthTestsMixin.test_authentication_error   se    {wt}'7+'EFFGG3h <fEEF	
 	
 	
 	
 	
r/   )rP   )__name__
__module____qualname__r)   r7   r<   r   re   ri   rP   ry   r   __classcell__r>   s   @r-   r1   r1   -   s        K  7 7 7 7 7 777  876 "&%*$  
E E 
E   *
 
 

 
 
 
 
 
 
r/   r1   c                 \      G  fddt           t                    }d j        z   |_        |S )Nc                       e Zd Z j        ZdS )!create_oauth_tests.<locals>.ClassN)r   r   r   rO   r)   r   s   r-   Classr      s        kr/   r   OAuthTests_)r1   r   rO   r   )r   r   s   ` r-   create_oauth_testsr      sN    " " " " " " " " " " #X[0ENLr/   c                   0    e Zd ZdZ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 )OAuth2TestsMixinNc                     d S r3   r4   r5   s    r-   r7   z$OAuth2TestsMixin.get_mocked_response   r8   r/   Tc                     d}|rd}d|z  S )N z,"refresh_token": "testrf"zQ{
            "uid":"weibo",
            "access_token":"testac"
            %s }r4   )r6   with_refresh_tokenrts      r-   get_login_response_jsonz(OAuth2TestsMixin.get_login_response_json   s(     	.-B 		
r/   c                     t          | S r3   )r   r6   	responsess     r-   r   z OAuth2TestsMixin.mocked_response   s    	**r/   c                 ~    t          t          |                                            |                                  d S r3   )r;   r   r<   setup_provider)r6   r>   s    r-   r<   zOAuth2TestsMixin.setUp   s8    %%++---r/   c                     t          | j                  | _        t                                          d          | _        | j                            | j                  | _        d S r:   )r.   r)   r,   r   r   r*   r=   r   r5   s    r-   r   zOAuth2TestsMixin.setup_provider   sL    T-..%''++C00--dl;;r/   c                 \   t           j                            | j        j        i           }|                                }d|d<   |                     | j        j        |i          5  |                     | j                                        i            d d d            d S # 1 swxY w Y   d S )NFOAUTH_PKCE_ENABLEDSOCIALACCOUNT_PROVIDERS)	r   	PROVIDERSr   r,   r   copyr   assertEqual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66tx7H"MM*;*@*@*B*B'@E'(<=]]%)X%68W$X  
 
 	B 	B T]::<<bAAA	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	Bs   &.B!!B%(B%c                    t           j                            | j        j        i           }|                                }d|d<   |                     | j        j        |i          5  | j                                        }|                     t          |
                                          h d           t          j        |d                             d                    }t          j        |                                          }|                    d          }|d         |k    sJ 	 d d d            d S # 1 swxY w Y   d S )	NTr   r   >   code_verifiercode_challengecode_challenge_methodr   ascii   =r   )r   r   r   r,   r   r   r   r   r   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66tx7H"MM*;*@*@*B*B'@D'(<=]]%)X%68W$X  
 
 	S 	S -7799KK$$&&''LLL   &nO,33G<< O $5o6L6L6N6NOON-;-B-B4-H-H*/04RRRRRR	S 	S 	S 	S 	S 	S 	S 	S 	S 	S 	S 	S 	S 	S 	S 	S 	S 	Ss   &CD;;D?D?Fr?   c                     |                                  }|s#t          j        d| j        j        z             d S |                     |          }|                     |t          d                     d S )NrB   rC   )r7   rM   rN   r   rO   rP   rQ   r	   )r6   	resp_mockrb   s      r-   re   zOAuth2TestsMixin.test_login   sx    ,,..	 	MBT]EUUVVVFzz
 
 	T7+A#B#BCCCCCr/   c                    t           j                            | j        j        i           }|                                }d|d<   |                     | j        j        |i          5  |                                 }|s/t          j	        d| j        j
        z             	 d d d            d S |                     |          }|                     |t          d                     d d d            d S # 1 swxY w Y   d S )NFr   r   rB   rC   r   r   r   r,   r   r   r   r7   rM   rN   rO   rP   rQ   r	   )r6   r   $provider_settings_with_pkce_disabledr   rb   s        r-   test_login_with_pkce_disabledz.OAuth2TestsMixin.test_login_with_pkce_disabled   s   (266tx7H"MM/@/E/E/G/G,EJ,-AB]]!#G%  
 
 	H 	H
 0022I <t}?OO   	H 	H 	H 	H 	H 	H 	H 	H :: D   w/E'F'FGGG	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H   &9C1,8C11C58C5c                    t           j                            | j        j        i           }|                                }d|d<   |                     | j        j        |i          5  |                                 }|s/t          j	        d| j        j
        z             	 d d d            d S |                     |          }|                     |t          d                     d d d            d S # 1 swxY w Y   d S )NTr   r   rB   rC   r   )r6   r   #provider_settings_with_pkce_enabledr   rb   s        r-   test_login_with_pkce_enabledz-OAuth2TestsMixin.test_login_with_pkce_enabled   s   (266tx7H"MM.?.D.D.F.F+DH+,@A]]!#F%  
 
 	H 	H
 0022I <t}?OO   	H 	H 	H 	H 	H 	H 	H 	H :: D   w/E'F'FGGG	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	Hr   )SOCIALACCOUNT_STORE_TOKENSc                    d} t                      d          }t          ||           t          |d           |                    d           |                                 t
          j                            ||dd           | j        	                    |j
        d           | 	                    |                                 d	           |r*| 	                    |                                 d
d           t          j                            || j        j        j        p| j        j                                                  }|                                }|                                 |                                 |                                 |                                 | j        r|j                                        }|                     d|j                   t7          j        |                     d                    }d|v r|                    d          }nd|v r|                    d          }nd}|                     |j        |           d S d S )Nzuser@example.comT)	is_activerK   test)rK   rE   primaryverified)rF   passwordconnectrq   F)r   rr   rL   testacr   refresh_tokenrefreshTokenr   )r   r   r   set_passwordsaver   r!   r"   rR   rP   rF   r7   r   filterr   r,   r)   rO   r   r\   r]   r^   r_   r`   socialtoken_setr   tokenjsonloadsr   token_secret)	r6   multiple_loginrE   rK   sard   trb   r   s	            r-   test_account_tokensz$OAuth2TestsMixin.test_account_tokens  sU   "~$///4dF###&!!!		##UDSW#XXX4=6BBB

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

#%% 	
 2244'')))((***""$$$!!!8 	<"&&((AXqw///:d::d:SSTTD$&& $ 9 94'' $ 8 8 "Q^];;;;;	< 	<r/   c                 2    |                      d           dS )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_login/  s!     	   55555r/   rP   c                    |                                  5  | j                            | j                            | j        |                    }d d d            n# 1 swxY w Y   t          |d                   }t          |j                  }t          j
                            | j        j        i                               d| j        j                  }|                     d|v |           |                     d|v |           |r0|d         d         }|                     |d         d         d           | j                                        }	|                     |d         d                             |	          d           |                     |	          }
t'          |t(                    r|}n|g }n|g} | j         t+          d
|
ddi          g|R  5  | j                            |	|                     |                    }t.          j        j        j        }|D ]\  }}|                    di           }|d         dk    rt'          |t4                    r|                    dd                              |	          r|                     d|v |           |rt9          j        |d                             d                    }t?          j         |!                                          "                    d          #                                }|                     ||           	 d d d            n# 1 swxY w Y   |S )Nrq   rs   r   r   r   r   S256redirect_urir   rk   rm   zapplication/jsonrG   POSTr   r   r   r   )$r   rR   rY   r   get_login_urlr*   r   r   rv   r   r   r   r,   pkce_enabled_defaultr   get_callback_urlrw   rx   r   
isinstancelistr   get_complete_parametersrequestsSessioncall_args_listrU   endswithr   r   r   r   r   r   r   decode)r6   r   rr   r   rb   rz   r{   pkce_enabledr   r|   response_jsonra   request_callsargskwargsrG   hashed_code_verifierexpected_code_challenges                     r-   rP   zOAuth2TestsMixin.login8  s   !!## 	 	;##++DL'+JJ D	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 T*%&&QW#-11$(2CRHHLL $-"D
 
 	)Q.===0A5|DDD 	D/03NQ67:FCCC}55771^,Q/44\BBAFFF441 5 
 
 i&& 	%"JJJJ#J!T!3@R/STT

 
 
 	R 	R ;??<1M1Ma1P1PQQD %,4CM - R Rfzz&"--Gv%%"4.. &44==lKK & $$_%<lKKK# 	R/6~ 188AA0 0, #45I5P5P5R5RSS#VD\\#VXX 0
 ((9PQQQ%R	R 	R 	R 	R 	R 	R 	R 	R 	R 	R 	R 	R 	R 	R 	R: s$   :AA"AEM  MMc                 $    d|d         d         dS )Nr   stater   )coder   r4   )r6   r{   s     r-   r   z(OAuth2TestsMixin.get_complete_parametersv  s    7A777r/   c           	          | j                             | j                                                  }|                     |dt          t          dd          z             d S )Nr   r   r   )rR   r   r   r   r   r   r   r   s     r-   r   z*OAuth2TestsMixin.test_authentication_errory  sa    {t}==??@@3h <fEEF	
 	
 	
 	
 	
r/   )T)F)NrP   T)r   r   r   r)   r7   r   r   r<   r   r   r   r   re   r   r   r   r   rP   r   r   r   r   s   @r-   r   r      s       K  

 

 

 

+ + +    < < <
B B BS S S( 777D D 87D 777H H 87H* 777H H 87H* $777'< '< '< 87'<R $7776 6 876< < < <|8 8 8
 
 
 
 
 
 
r/   r   c                   |    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	 e
d          d             ZdS )OpenIDConnectTestsz/login	/userinfoz/token)authorization_endpointuserinfo_endpointtoken_endpointz&https://secure.gravatar.com/avatar/123z#ness@some.oidc.server.onett.examplei  Ness)picturerE   sub
identitiesr   c                 $    t          |d| j        iS )Ncallback)r   _mocked_responsesr   s     r-   r   z"OpenIDConnectTests.mocked_response  s    	KD4JKKKr/   c                 T   t          | j                  | _        | j        | j        _        d| j        _        ddi| j        _        | j                                         t                                          d          | _        | j        	                    | j                  | _        d S )Nopenid_connect
server_urlzhttps://unittest.example.comr   )
r.   r)   r,   r   r   r   r   r   r*   r=   r5   s    r-   r   z!OpenIDConnectTests.setup_provider  s    T-..#/,8
 	%''++C00--dl;;r/   c                     dS )NTr4   r5   s    r-   r7   z&OpenIDConnectTests.get_mocked_response  s    tr/   c                     |                     d          r't          dt          j        | j                            S |                     d          r't          dt          j        | j                            S d S )Nz!/.well-known/openid-configurationrk   r   )r   r   r   dumpsoidc_info_contentuserinfo_content)r6   urlr   r   s       r-   r  z$OpenIDConnectTests._mocked_responses  ss    <<;<< 	J!#tz$2H'I'IJJJ\\+&& 	J!#tz$2G'H'HIII	J 	Jr/   Tr?   c                     |                                  }|                     |dd           t          j                            | j        j                  }|                     |j        | j                   d S )NrH   FrI   r   )	rP   rQ   r   r!   r   r,   r)   assertDictEqual
extra_data)r6   rb   r   s      r-   test_login_auto_signupz)OpenIDConnectTests.test_login_auto_signup  sj    zz||T#7QVWWW"&&0D&EER]DO<<<<<r/   N)r   r   r   r  r  r  r   r   r7   r  r   r  r4   r/   r-   r   r     s        "*("  <6  <6 JL L L	< 	< 	<  J J J 666= = 76= = =r/   r   )-r   r   r   rW   r   rM   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.   objectr1   r   r   r   r4   r/   r-   <module>r%     s         + + + + + + + +             . . . . . . & & & & & & / / / / / /       ' ' ' ' ' '     / / / / / / ; ; ; ; ; ; ; ; . . . . . . 5 5 5 5 5 5 A A A A A A A A C C C C C C C C C C  (X
 X
 X
 X
 X
f X
 X
 X
z  m
 m
 m
 m
 m
v m
 m
 m
`2= 2= 2= 2= 2=) 2= 2= 2= 2= 2=r/   