o
    LfX4                  
   @   s   d dl Z d dlmZ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 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 Z0eddej1j2dG dd de)e+Z3edddddd iid!G d"d# d#e3Z4d$d% Z5ej67d&d'd(gej67d)d*dgd+d, Z8ej67d-ddd.d/id0d1fdd*d.d/id0d2fddd3d/id4d2fgej67d5d*dgd6d7 Z9dS )8    N)datetime	timedelta)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&   m/var/www/html/humari/django-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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   sL   t  }d}d||dd| jddddd	d
d||t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enr   )hours)issazpaudsubhdr/   email_verifiedat_hashnamepicture
given_namefamily_namelocaleiatexp)r   utcnowr/   r   updater0   )r2   nowr!   payloadr&   r&   r'   get_google_id_token_payload8   s(   z'GoogleTests.get_google_id_token_payloadTc                 C   s$   ddddt |  dd}t|S )Ntestaci  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   rQ   jsondumps)r2   with_refresh_tokendatar&   r&   r'   get_login_response_jsonO   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   )r2   respr&   r&   r'   
test_loginY   s   zGoogleTests.test_loginc              
   C   s   dt  tdd dd}| D ]0\}}| | ||i| _| jd d}| |dtt	dd	  W d    n1 s<w   Y  qd S )
Nz
not-googler   )secondsfoo)r?   rL   rA   r^   z%socialaccount/authentication_error.%sACCOUNT_TEMPLATE_EXTENSIONhtml)
r   rM   r   itemssubTestr0   ra   assertTemplateUsedgetattrr   )r2   wrong_claim_valuesr"   valuerc   r&   r&   r'    test_wrong_id_token_claim_values^   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)r0   ra   r	   objectsgetr/   assertEqualusername)r2   userr&   r&   r'   test_username_based_on_emailn   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;   )r0   ra   r   rq   rr   r/   assertFalser   filterexistsru   socialaccount_setallrs   
extra_data)r2   email_addressaccountr&   r&   r'   test_email_verifiedt   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   r2   sent_signalsr&   r'   on_signed_up   s   z<GoogleTests.test_user_signed_up_signal.<locals>.on_signed_upr^   r   )r   connectra   
assertTruelen)r2   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)r0   ra   r   rq   rr   r/   rz   rw   r   r   r{   r|   rk   )r2   rc   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/   r0   ra   r   rq   r   rw   rz   r   r{   r|   )r2   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   ra   rt   r0   r   r   r{   r   r   r|   rs   count)r2   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   )r0   ra   r   rq   rr   r/   rz   rw   r   r{   r|   )r2   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   )r0   ra   rs   r   r
   outboxr1   r&   r&   r'   'test_social_email_verification_optional   s
   
z3GoogleTests.test_social_email_verification_optional)T)__name__
__module____qualname__r   r   provider_idr.   rQ   r]   r   rd   ro   rv   r   r   r   r   r   account_settingsEmailVerificationMethod	MANDATORYNONEr   OPTIONALr   __classcell__r&   r&   r3   r'   r,   +   s2    





	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pemrc   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_picturerX   r   uid-from-id-tokenpic-from-id-tokenpic-from-userinforT   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_decoderX   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   rX   decode_mockr   appr   tokenra   r&   r&   r'   test_complete_login_variants.  sD   
"r   ):rY   r   r   	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    
 '-