o
    "4gg4                  
   @   s  d dl 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 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 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$ d dl%m&Z& d dl'm(Z( d dl)m*Z*m+Z+ ddl,m-Z- ej.dd Z/eddej0j1dG dd de(e*Z2eddddddiid G d!d" d"e2Z3d#d$ Z4ej56d%d&d'gej56d(d)dgd*d+ Z7ej56d,ddd-d.id/d0fdd)d-d.id/d1fddd2d.id3d1fgej56d4d)dgd5d6 Z8dS )7    N)import_module)Mockpatchsettings)User)mail)RequestFactory)override_settings)reverse)app_settings)get_adapter)EmailAddressEmailConfirmation)user_signed_up)SocialAccountSocialToken)
jwt_encode)GoogleOAuth2Adapter)OAuth2TestsMixin)TestCasemocked_response   )GoogleProviderc                 C   s   ddddddii| _ | S )NgoogleAPPapp123iddummy	client_idkeysecretSOCIALACCOUNT_PROVIDERSr    r$   u/var/www/html/authentication-server/venv/lib/python3.10/site-packages/allauth/socialaccount/providers/google/tests.pysettings_with_google_provider   s   	r&   T)SOCIALACCOUNT_AUTO_SIGNUPACCOUNT_SIGNUP_FORM_CLASSACCOUNT_EMAIL_VERIFICATIONc                       s   e Zd ZejZ fddZdd Zdd Zd"dd	Z	e
d
ddd Zdd Zdd Zdd Zdd Ze
d
ddd Zdd Zdd Ze
ejjejjddd Ze
ejjejjdd d! Z  ZS )#GoogleTestsc                    s   t    d| _i | _d S Nzraymond.penners@example.com)supersetUpemailidentity_overwritesself	__class__r$   r%   r-   3   s   

zGoogleTests.setUpc                 C   s   dS r+   r$   r0   r$   r$   r%   get_expected_to_str8   s   zGoogleTests.get_expected_to_strc                 C   sJ   t t }d}d||dd| jddddd	d
d||d d}|| j |S )Nr   https://accounts.google.com108204268033311374519example.comTHK6E_P6Dh8Y93mRNtsDB1QRaymond Penners+https://lh5.googleusercontent.com/photo.jpgRaymondPennersen  )issazpaudsubhdr.   email_verifiedat_hashnamepicture
given_namefamily_namelocaleiatexp)inttimer.   updater/   )r1   nowr   payloadr$   r$   r%   get_google_id_token_payload;   s(   z'GoogleTests.get_google_id_token_payloadTc                 C   s$   ddddt |  dd}t|S )Ntestacr>   zfhttps://www.googleapis.com/auth/userinfo.email https://www.googleapis.com/auth/userinfo.profile openidBearerr!   )access_token
expires_inscope
token_typeid_token)r   rR   jsondumps)r1   with_refresh_tokendatar$   r$   r%   get_login_response_jsonR   s   
z#GoogleTests.get_login_response_jsonF)r'   c                 C   s    | j d d}| |td d S )N	resp_mocksocialaccount_signup)loginassertRedirectsr   )r1   respr$   r$   r%   
test_login\   s   zGoogleTests.test_loginc              
   C   s   dt   d dd}| D ]0\}}| | ||i| _| jd d}| |dttdd  W d    n1 s9w   Y  qd S )	Nz
not-googler   foo)r?   rL   rA   r_   z%socialaccount/authentication_error.%sACCOUNT_TEMPLATE_EXTENSIONhtml)rN   itemssubTestr/   rb   assertTemplateUsedgetattrr   )r1   wrong_claim_valuesr    valuerd   r$   r$   r%    test_wrong_id_token_claim_valuesa   s"   


z,GoogleTests.test_wrong_id_token_claim_valuesc                 C   s:   ddd| _ | jd d tjj| jd}| |jd d S )Nu   明u   小)rH   rI   r_   r.   zraymond.penners)r/   rb   r   objectsgetr.   assertEqualusername)r1   userr$   r$   r%   test_username_based_on_emailq   s   z(GoogleTests.test_username_based_on_emailc                 C   sh   ddi| _ | jd d tjj| jdd}| tjj| jd	  |j
j d }| |jd d d S )	NrD   Tr_   )r.   verifiedemail_address__emailr   rH   r;   )r/   rb   r   rq   rr   r.   assertFalser   filterexistsru   socialaccount_setallrs   
extra_data)r1   email_addressaccountr$   r$   r%   test_email_verifiedw   s   
zGoogleTests.test_email_verifiedc                    s>   g  fdd}t |  jd d  tdk d S )Nc                    s8   |d }  |jjtj   |jj| |  d S )Nsociallogin)rs   r   providerr   idru   append)senderrequestru   kwargsr   r1   sent_signalsr$   r%   on_signed_up   s   z<GoogleTests.test_user_signed_up_signal.<locals>.on_signed_upr_   r   )r   connectrb   
assertTruelen)r1   r   r$   r   r%   test_user_signed_up_signal   s
   
z&GoogleTests.test_user_signed_up_signal)ACCOUNT_EMAIL_CONFIRMATION_HMACc                 C   s\   ddi| _ | jd d}tjj| jd}| |j | t	jj
| jd  | |d d S )NrD   Fr_   rp   rx   z3account/email/email_confirmation_signup_subject.txt)r/   rb   r   rq   rr   r.   rz   rw   r   r   r{   r|   rk   )r1   rd   r   r$   r$   r%   test_email_unverified   s   
z!GoogleTests.test_email_unverifiedc                 C   s   t tj}| }|  |j| jjtj< t	 
d}| jj|_t }||| j |j  ddi| _| jd d tjj
| jd}| |j | tjj| jd  d S )N/rD   Fr_   rp   rx   )r   r   SESSION_ENGINESessionStoresavesession_keyclientcookiesSESSION_COOKIE_NAMEr	   rr   sessionget_account_adapterstash_verified_emailr.   r/   rb   r   rq   r   rw   rz   r   r{   r|   )r1   enginestorer   adapterr   r$   r$   r%   test_email_verified_stashed   s    



z'GoogleTests.test_email_verified_stashedc                 C   s   d}t jjdd|d}|d |  tjj||ddd | jj|jdd |dd| _	| jd d	d
 | 
tjj|tjd  | tjj|d d | tjj||d d d S )Nzuser@example.comru   T)rt   	is_activer.   test)ru   r.   primaryrw   )rt   password)r.   rD   r   )r`   process)ru   r   )ru   r   )ru   r.   )r   rq   createset_passwordr   r   r   rb   rt   r/   r   r   r{   r   r   r|   rs   count)r1   r.   ru   r$   r$   r%   test_account_connect   s   
 z GoogleTests.test_account_connect)r)    SOCIALACCOUNT_EMAIL_VERIFICATIONc                 C   sP   ddi| _ | jd d tjj| jd}| |j | tjj	| jd
  d S )NrD   Fr_   rp   rx   )r/   rb   r   rq   rr   r.   rz   rw   r   r{   r|   )r1   r   r$   r$   r%   &test_social_email_verification_skipped   s   
z2GoogleTests.test_social_email_verification_skippedc                 C   sJ   ddi| _ | jd d | ttjd | jd d | ttjd d S )NrD   Fr_   r   )r/   rb   rs   r   r   outboxr0   r$   r$   r%   'test_social_email_verification_optional   s
   
z3GoogleTests.test_social_email_verification_optional)T)__name__
__module____qualname__r   r   provider_idr-   r4   rR   r^   r
   re   ro   rv   r   r   r   r   r   account_settingsEmailVerificationMethod	MANDATORYNONEr   OPTIONALr   __classcell__r$   r$   r2   r%   r*   +   s4    





	r*   r   r   r   r   r   r"   c                   @   s   e Zd ZdZdS )AppInSettingsTestszI
    Run the same set of tests but without having a SocialApp entry.
    N)r   r   r   __doc__r$   r$   r$   r%   r      s    r   c           	      C   sR  |j ddi td}tddit td`}tdL}dd	d
dddddddddddd|_dddd|_t }||_d|j_|tdddd}|j	dksSJ t
jjd
d}|jjdksbJ W d    n1 slw   Y  W d    n1 s{w   Y  W d    n1 sw   Y  W d    d S W d    d S 1 sw   Y  d S ) Ng_csrf_tokencsrfz?allauth.socialaccount.internal.jwtkit.jwt.get_unverified_headerdummykidz-----BEGIN CERTIFICATE-----z?allauth.socialaccount.internal.jwtkit.load_pem_x509_certificatez0allauth.socialaccount.internal.jwtkit.jwt.decoder5   r   123subr7   zraymond@example.comTr8   r9   r:   r;   r<   r=   {   i  )r?   rA   rB   rC   r.   rD   rE   rF   rG   rH   rI   rJ   rK   rL   RS256JWT)algkidtypr    google_login_by_tokenr   )
credentialr   i.  )uid)r   loadr   r   return_valuer   
public_keypostr   status_coder   rq   rr   ru   r.   )	dbr   r&   g_u_hload_pemdecodepemrd   socialaccountr$   r$   r%   test_login_by_token   sf   "r   zid_key,verified_key)r   rD   )rB   verified_emailrw   Fc                 C   s|   ddi}d|| < |||< t  d tj}||dksJ ||}t|dks*J |d j|ks3J |d jdks<J d S )Nr.   za@b.com123r   r   )	r   get_providerr   r   extract_uidextract_email_addressesr   rw   r.   )id_keyverified_keyrw   r&   r   r]   r   emailsr$   r$   r%   test_extract_data  s   
r   zKfetch_userinfo,id_token_has_picture,response,expected_uid, expected_picturerY   r   uid-from-id-tokenpic-from-id-tokenpic-from-userinforU   uid-from-userinfodid_fetch_access_tokenc              	   C   s  t jtddddds ddi}|rd|d	< t d
|dJ}	d }
d }t|
}||_||_t }||
||| }|jj|ks>J |jj	d	 |ksHJ | 
dsS|	jrRJ n|	jd d | ks_J W d    n1 siw   Y  W d    d S W d    d S 1 sw   Y  d S )N_fetch_user_infor   r   )r   rG   )r   rB   r   r   rG   z?allauth.socialaccount.providers.google.views._verify_and_decoderY   r   verify_signature)r   objectr   r   fetch_userinfor   complete_loginr   r   r   rr   called	call_args)responser&   r   r   expected_uidexpected_pictureid_token_has_picturer   rY   decode_mockr   appr   tokenrb   r$   r$   r%   test_complete_login_variants1  sD   
"r   )9rZ   rN   	importlibr   unittest.mockr   r   django.confr   django.contrib.auth.modelsr   django.corer   django.test.clientr	   django.test.utilsr
   django.urlsr   pytestallauth.accountr   r   allauth.account.adapterr   r   allauth.account.modelsr   r   allauth.account.signalsr   allauth.socialaccount.adapterallauth.socialaccount.modelsr   r   ,allauth.socialaccount.providers.apple.clientr   ,allauth.socialaccount.providers.google.viewsr   allauth.socialaccount.testsr   allauth.testsr   r   r   r   fixturer&   r   r   r*   r   r   markparametrizer   r   r$   r$   r$   r%   <module>   sx    
 *-