
    f4              
          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        Z0 eddejb                  jd                         G d de)e+             Z3 eddddddii        G d! d"e3             Z4d# Z5ejl                  jo                  d$d%d&g      ejl                  jo                  d'd(dg      d)               Z8ejl                  jo                  d*ddd+d,id-d.fdd(d+d,id-d/fddd0d,id1d/fg      ejl                  jo                  d2d(dg      d3               Z9y)4    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                 $    ddddddii| _         | S )NgoogleAPPapp123iddummy	client_idkeysecretSOCIALACCOUNT_PROVIDERSr   s    g/var/www/cs2snipe.com/venv/lib/python3.12/site-packages/allauth/socialaccount/providers/google/tests.pysettings_with_google_providerr)      s.     	'!
(H$ O    T)SOCIALACCOUNT_AUTO_SIGNUPACCOUNT_SIGNUP_FORM_CLASSACCOUNT_EMAIL_VERIFICATIONc                       e Zd Zej                  Z fdZd Zd ZddZ	 e
d      d        Zd Zd	 Zd
 Zd Z e
d      d        Zd Zd Z e
ej(                  j*                  ej(                  j,                        d        Z e
ej(                  j0                  ej(                  j0                        d        Z xZS )GoogleTestsc                 >    t         |           d| _        i | _        y Nzraymond.penners@example.com)supersetUpemailidentity_overwrites)self	__class__s    r(   r3   zGoogleTests.setUp3   s    2
#% r*   c                      yr1    r6   s    r(   get_expected_to_strzGoogleTests.get_expected_to_str8   s    ,r*   c                     t        j                         }d}d||dd| j                  ddddd	d
d||t        d      z   d}|j	                  | 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hdr4   email_verifiedat_hashnamepicture
given_namefamily_namelocaleiatexp)r   utcnowr4   r   updater5   )r6   nowr#   payloads       r(   get_google_id_token_payloadz'GoogleTests.get_google_id_token_payload;   sn    oo	0*ZZ"/%D#$++
" 	t//0r*   c                 l    ddddt        | j                         d      d}t        j                  |      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   rY   jsondumps)r6   with_refresh_tokendatas      r(   get_login_response_jsonz#GoogleTests.get_login_response_jsonR   s9    $}""4#C#C#ExP
 zz$r*   F)r+   c                 ^    | j                  d       }| j                  |t        d             y )N	resp_mocksocialaccount_signup)loginassertRedirectsr   )r6   resps     r(   
test_loginzGoogleTests.test_login\   s(    zzDz)T7+A#BCr*   c                 H   dt        j                         t        d      z
  dd}|j                         D ]^  \  }}| j	                  |      5  ||i| _        | j                  d       }| j                  |dt        t        dd	      z         d d d        ` y # 1 sw Y   kxY w)
Nz
not-googler   )secondsfoo)rG   rT   rI   rh   z%socialaccount/authentication_error.%sACCOUNT_TEMPLATE_EXTENSIONhtml)
r   rU   r   itemssubTestr5   rk   assertTemplateUsedgetattrr	   )r6   wrong_claim_valuesr$   valuerm   s        r(    test_wrong_id_token_claim_valuesz,GoogleTests.test_wrong_id_token_claim_valuesa   s    ??$y';;

 -224 	JCc" ,/<(zzDz1'';h(DfMN 	 s   A BB!	c                     ddd| _         | j                  d        t        j                  j	                  | j
                        }| j                  |j                  d       y )Nu   明u   小)rP   rQ   rh   r4   zraymond.penners)r5   rk   r
   objectsgetr4   assertEqualusername)r6   users     r(   test_username_based_on_emailz(GoogleTests.test_username_based_on_emailq   sM    27#N 

T
"||djj1(9:r*   c                    ddi| _         | j                  d        t        j                  j	                  | j
                  d      }| j                  t        j                  j                  | j
                        j                                |j                  j                  j                         d   }| j                  |j                  d   d       y )	NrL   Trh   )r4   verifiedemail_address__emailr   rP   rC   )r5   rk   r   r}   r~   r4   assertFalser   filterexistsr   socialaccount_setallr   
extra_data)r6   email_addressaccounts      r(   test_email_verifiedzGoogleTests.test_email_verifiedw   s    $4d#; 

T
"$,,00tzzD0Q%%,,$**,MTTV	
  $$66::<Q?++L99Er*   c                      g  fd}t        j                  |        j                  d         j                  t	              dkD         y )Nc                     |d   }j                  |j                  j                  t        j                         j                  |j                  j
                  |       j                  |        y )Nsociallogin)r   r   providerr   idr   append)senderrequestr   kwargsr   r6   sent_signalss        r(   on_signed_upz<GoogleTests.test_user_signed_up_signal.<locals>.on_signed_up   sY     /K[0099>;L;LM[0055t<'r*   rh   r   )r   connectrk   
assertTruelen)r6   r   r   s   ` @r(   test_user_signed_up_signalz&GoogleTests.test_user_signed_up_signal   sA    	( 	|,

T
"L)A-.r*   )ACCOUNT_EMAIL_CONFIRMATION_HMACc                 v   ddi| _         | j                  d       }t        j                  j	                  | j
                        }| j                  |j                         | j                  t        j                  j                  | j
                        j                                | j                  |d       y )NrL   Frh   r|   r   z3account/email/email_confirmation_signup_subject.txt)r5   rk   r   r}   r~   r4   r   r   r   r   r   r   rv   )r6   rm   r   s      r(   test_email_unverifiedz!GoogleTests.test_email_unverified   s    $4e#< zzDz)$,,00tzz0B//0%%,,$**,MTTV	
 	G	
r*   c                    t        t        j                        }|j                         }|j	                          |j
                  | j                  j                  t        j                  <   t               j                  d      }| j                  j                  |_        t               }|j                  || j                         |j                  j	                          ddi| _        | j!                  d        t"        j$                  j                  | j                        }| j'                  |j(                         | j+                  t,        j$                  j/                  | j                        j1                                y )N/rL   Frh   r|   r   )r   r	   SESSION_ENGINESessionStoresavesession_keyclientcookiesSESSION_COOKIE_NAMEr   r~   sessionget_account_adapterstash_verified_emailr4   r5   rk   r   r}   r   r   r   r   r   r   )r6   enginestorer   adapterr   s         r(   test_email_verified_stashedz'GoogleTests.test_email_verified_stashed   s   x667##%

<A<M<MH889 "&&s+++--%'$$Wdjj9$4e#< 

T
"$,,00tzz0B../%%,,$**,MTTV	
r*   c                    d}t         j                  j                  dd|      }|j                  d       |j	                          t
        j                  j                  ||dd       | j                  j                  |j                  d       |dd| _	        | j                  d d	
       | j                  t        j                  j                  |t        j                        j                                | j!                  t
        j                  j                  |      j#                         d       | j!                  t
        j                  j                  ||      j#                         d       y )Nzuser@example.comr   T)r   	is_activer4   test)r   r4   primaryr   )r   password)r4   rL   r   )ri   process)r   r   )r   r   )r   r4   )r
   r}   createset_passwordr   r   r   rk   r   r5   r   r   r   r   r   r   r   count)r6   r4   r   s      r(   test_account_connectz GoogleTests.test_account_connect   s"   "||""Fd%"P&!		##UDSW#X4==6B-2d#K 

T9
5!!((d^=N=N(OVVX	
 	--44$4?EEGK--44$e4LRRTVWXr*   )r-    SOCIALACCOUNT_EMAIL_VERIFICATIONc                 R   ddi| _         | j                  d        t        j                  j	                  | j
                        }| j                  |j                         | j                  t        j                  j                  | j
                        j                                y )NrL   Frh   r|   r   )r5   rk   r   r}   r~   r4   r   r   r   r   r   )r6   r   s     r(   &test_social_email_verification_skippedz2GoogleTests.test_social_email_verification_skipped   s    
 %5e#< 

T
"$,,00tzz0B//0%%,,$**,MTTV	
r*   c                    ddi| _         | j                  d        | j                  t        t        j
                        d       | j                  d        | j                  t        t        j
                        d       y )NrL   Frh   r   )r5   rk   r   r   r   outboxr:   s    r(   'test_social_email_verification_optionalz3GoogleTests.test_social_email_verification_optional   s_    
 %5e#< 

T
"T[[)1-

T
"T[[)1-r*   )T)__name__
__module____qualname__r   r   provider_idr3   r;   rY   rf   r   rn   rz   r   r   r   r   r   r   account_settingsEmailVerificationMethod	MANDATORYNONEr   OPTIONALr   __classcell__)r7   s   @r(   r/   r/   +   s     !##K&
-.  7D 8D ;F/ u=

 >


(Y" #3#K#K#U#U)9)Q)Q)V)V
	
 #3#K#K#T#T)9)Q)Q)Z)Z.	.r*   r/   r   r   r    r!   r"   r&   c                       e Zd ZdZy)AppInSettingsTestszI
    Run the same set of tests but without having a SocialApp entry.
    N)r   r   r   __doc__r9   r*   r(   r   r      s     	r*   r   c                    |j                   j                  ddi       t        d      5 }t        ddi      5  t        d      5 }t        d      5 }dd	d
dddddddddddd|_        dddd|_        t               }||_        d|j                  _        |j                  t        d      ddd      }|j                  dk(  sJ t        j                  j                  d
      }|j                  j                  dk(  sJ 	 d d d        d d d        d d d        d d d        y # 1 sw Y   "xY w# 1 sw Y   &xY w# 1 sw Y   *xY w# 1 sw Y   y xY w) 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.decoder=   r#   123subr?   zraymond@example.comTr@   rA   rB   rC   rD   rE   {   i  )rG   rI   rJ   rK   r4   rL   rM   rN   rO   rP   rQ   rR   rS   rT   RS256JWT)algkidtypr$   google_login_by_tokenr!   )
credentialr   i.  )uid)r   loadr   r   return_valuer   
public_keypostr   status_coder   r}   r~   r   r4   )	dbr   r)   g_u_hload_pemdecodepemrm   socialaccounts	            r(   test_login_by_tokenr      s   
NN01	I
 (M	j*GHI %	MQ $MF !M<*'+!6*.#; 1#P&/'0"&""+F'"  ')$*E&
 &C,/H)27CNN/!;; 78'.GD  ++s222$1$9$9$=$=($=$KM(--337LLLLC!M$M%	M(M (M!M !M$M $M%	M %	M(M (MsS   ED7D+B.D	>D+D7ED($D++D40D77E 	<EEzid_key,verified_key)r   rL   )rJ   verified_emailr   Fc                 .   ddi}d|| <   |||<   t               j                  d t        j                        }|j	                  |      dk(  sJ |j                  |      }t        |      dk(  sJ |d   j                  |k(  sJ |d   j                  dk(  sJ y )Nr4   za@b.com123r   r   )	r   get_providerr   r   extract_uidextract_email_addressesr   r   r4   )id_keyverified_keyr   r)   r   re   r   emailss           r(   test_extract_datar     s     	D DL!D}))$0A0ABH%...--d3Fv;!!9)))!9??i'''r*   zKfetch_userinfo,id_token_has_picture,response,expected_uid, expected_picturera   r   uid-from-id-tokenpic-from-id-tokenpic-from-userinfor]   uid-from-userinfodid_fetch_access_tokenc                    t        j                  t        dddd      5  ddi}|rd|d	<   t        d
|      5 }	d }
d }t        |
      }||_        ||_        t               }|j                  |
|||       }|j                  j                  |k(  sJ |j                  j                  d	   |k(  sJ | j                  d      s|	j                  rJ |	j                  d   d   | k(  sJ d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)N_fetch_user_infor   r   )r   rO   )r   rJ   r   r   rO   z?allauth.socialaccount.providers.google.views._verify_and_decodera   r   verify_signature)r   objectr   r   fetch_userinfor   complete_loginr   r   r   r~   called	call_args)responser)   r   r   expected_uidexpected_pictureid_token_has_picturer   ra   decode_mockr   appr   tokenrk   s                  r(   test_complete_login_variantsr  1  s8   & 
%*

  ./"5HYM!
 	 GC)'2G-CG*%3G"ME**7CIE==$$444==++I6:JJJJ<<
+&----",,Q/0BC..  !	 	 	 s#   DB,C6%D6C?	;DD):rb   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  r9   r*   r(   <module>r     s    ( # %   +  - /   < F B 2 5 C C L 8 3 $ 
 
 ""/GGQQ
f."H f.
f.R '!

	 	
	*MZ  ! eT]3( 4(  Q	tj%(*=?RS	uz5)+>@ST	tne,.ACVW 1E4=A' B'r*   