
    6                        S SK r S SKrS SKrS SKJr  S SKJr  \R                  " 5       rSSSSS0 S	./S
.r	SSSS.r
SrSrSr " S S\5      rS r\R"                  " S\S9S 5       r\R"                  " S\S9S 5       r\R"                  " S\S9S 5       rS rS rS rS rS rS rS  rS! rS" rS# rS$ rS% r \R"                  " S&\S9S' 5       r!S( r"S) r#S* r$g)+    N)
exceptions)reauthCHALLENGE_REQUIRED123READY   PASSWORD)statuschallengeIdchallengeTypesecurityKey)r
   	sessionId
challengesAUTHENTICATEDnew_rapt_token)r
   r   encodedProofOfReauthTokenz1gl-python/3.7 auth/1.1 auth-request-type/re-startz0gl-python/3.7 auth/1.1 auth-request-type/re-contz"gl-python/3.7 auth/1.1 cred-type/uc                        \ rS rSrS rS rSrg)MockChallenge2   c                 (    Xl         X l        X0l        g N)nameis_locally_eligiblechallenge_input)selfr   locally_eligibler   s       Rplatform/gsutil/third_party/google-auth-library-python/tests/oauth2/test_reauth.py__init__MockChallenge.__init__3   s    	#3 .    c                     U R                   $ r   )r   )r   metadatas     r   obtain_challenge_input$MockChallenge.obtain_challenge_input8   s    ###r    )r   r   r   N)__name__
__module____qualname____firstlineno__r   r#   __static_attributes__ r    r   r   r   2   s    /
$r    r   c                      [         R                  " SSS9   [        R                  " 5       (       d   e S S S 5        g ! , (       d  f       g = f)Nzsys.stdin.isattyTreturn_value)mockpatchr   is_interactiver*   r    r   test_is_interactiver1   <   s2    	&T	:$$&&&& 
;	:	:s	   =
Az google.auth.metrics.reauth_startr,   c           
         [         R                  " S5       n[        R                  " [        S/S5        UR                  [        [        R                  S-   SS/0SSS[        0S9  S S S 5        g ! , (       d  f       g = f)	N-google.oauth2._client._token_endpoint_requestSAMLtoken:startsupportedChallengeTypesTx-goog-api-clientaccess_tokenuse_jsonheadersr.   r/   r   _get_challengesMOCK_REQUESTassert_called_with_REAUTH_API!REAUTH_START_METRICS_HEADER_VALUEmock_metrics_header_valuemock_token_endpoint_requests     r   test__get_challengesrF   A   sw     
7
	$|fXw?#66)&1 (*KL 	7 	
	
 
 
s   AA00
A>c           
         [         R                  " S5       n[        R                  " [        S/SS/S9  UR                  [        [        R                  S-   S/S/S.SSS	[        0S
9  S S S 5        g ! , (       d  f       g = f)Nr3   r4   r5   scoperequested_scopesr6   )r7    oauthScopesForDomainPolicyLookupTr8   r9   r=   rC   s     r    test__get_challenges_with_scopesrL   S   s     
7
	$6(Gwi	
 	$66),285<I !(*KL 	7 
	

 
 
s   AA22
B z#google.auth.metrics.reauth_continuec           
         [         R                  " S5       n[        R                  " [        SSSS0S5        UR                  [        [        R                  S-   SSSSS0S	.SS
S[        0S9  S S S 5        g ! , (       d  f       g = f)Nr3   r   1
credentialpasswordr5   z/123:continueRESPOND)r   r   actionproposalResponseTr8   r9   )r.   r/   r   _send_challenge_resultr?   r@   rA   $REAUTH_CONTINUE_METRICS_HEADER_VALUErC   s     r   test__send_challenge_resultrV   j   s    
 
7
	$%%%|Z&@'	
 	$660""#%1:$>	 !(*NO 	7 	

 
 
s   AA77
Bc                      [         R                  " [        5      n SU S   S   S'   [        R                  " U [
        S5      b   eg )NSTATUS_UNSPECIFIEDr   r   r
   r5   )copydeepcopyCHALLENGES_RESPONSE_TEMPLATEr   _run_next_challenger?   )challenges_responses    r   "test__run_next_challenge_not_readyr^      sE    --(DE5I%a(2""#6gNVVr    c                  2   [         R                  " [        5      n SU S   S   S'   [        R                  " [
        R                  5       n[        R                  " U [        S5        S S S 5        WR                  S5      (       d   eg ! , (       d  f       N'= f)NCHALLENGE_TYPE_UNSPECIFIEDr   r   r   r5   z5Unsupported challenge type CHALLENGE_TYPE_UNSPECIFIED)rY   rZ   r[   pytestraisesr   ReauthFailErrorr   r\   r?   matchr]   excinfos     r   &test__run_next_challenge_not_supportedrg      sr    --(DE<X%a(9	z11	2g""#6gN 
3==QRRRR 
3	2s   
B
Bc                  r   [        SSS5      n [        R                  " SSU 05         [        R                  " [
        R                  5       n[        R                  " [        [        S5        S S S 5        WR                  S5      (       d   e S S S 5        g ! , (       d  f       N0= f! , (       d  f       g = f)Nr	   Fr   -google.oauth2.challenges.AVAILABLE_CHALLENGESr5   z*Challenge PASSWORD is not locally eligible)r   r.   r/   ra   rb   r   rc   r   r\   r[   r?   rd   )mock_challengerf   s     r   -test__run_next_challenge_not_locally_eligiblerk      s    ":u6GHN	7*n9U
 ]]:556'&&,lG 7 }}JKKKK
 
 76
 
s#   %B(!B- B(
B%	!B((
B6c                      [        SSS 5      n [        R                  " SSU 05         [        R                  " [
        [        S5       b   e S S S 5        g ! , (       d  f       g = f)Nr	   Tri   r5   )r   r.   r/   r   r\   r[   r?   )rj   s    r   +test__run_next_challenge_no_challenge_inputrm      sa    ":tT:N	7*n9U
 &&,lG 	
	
 
 
s   %A
A$c            	      ^   [        SSSS05      n [        R                  " SSU 05         [        R                  " S5       n[        R                  " [
        [        S5        UR                  [        SS	SS0S5        S S S 5        S S S 5        g ! , (       d  f       N= f! , (       d  f       g = f)
Nr	   TrO   rP   ri   z+google.oauth2.reauth._send_challenge_resultr5   r   r   )r   r.   r/   r   r\   r[   r?   r@   )rj   mock_send_challenge_results     r    test__run_next_challenge_successrp      s    ":tlJ5OPN	7*n9U
 ZZ9
'&&,lG '99eQz(BG

 

 

 
s#   B <B<B
B	B
B,c                      [         R                  " S[        S9   [        R                  " [
        SS 5      S:X  d   e S S S 5        g ! , (       d  f       g = f)N$google.oauth2.reauth._get_challengesr,   r5   r   )r.   r/   !CHALLENGES_RESPONSE_AUTHENTICATEDr   _obtain_raptr?   r*   r    r   test__obtain_rapt_authenticatedru      sD    	.6
 ""<$?CSSSS	
 
 
s   #A
Ac                     [         R                  " S[        S9   [         R                  " S[        [        /S9   [         R                  " SSS9   [        R
                  " [        SS 5      S:X  d   e S S S 5        S S S 5        S S S 5        g ! , (       d  f       N= f! , (       d  f       N(= f! , (       d  f       g = f)	Nrr   r,   (google.oauth2.reauth._run_next_challenge)side_effect#google.oauth2.reauth.is_interactiveTr5   r   )r.   r/   r[   rs   r   rt   r?   r*   r    r   8test__obtain_rapt_authenticated_after_run_next_challengerz      s    	.1
 ZZ6,1
 APTU''gtDHXXX V
	
 
 VU
 
	
 
s:    B/B#B4B<B/
BB
B,	(B//
B=c                     [         R                  " [        5      n SU S'   [        R                  " SU S9   [
        R                  " [        R                  5       n[        R                  " [        SS 5        S S S 5        WR                  S5      (       d   e S S S 5        g ! , (       d  f       N0= f! , (       d  f       g = f)NrX   r
   rr   r,   r5   zAPI error: STATUS_UNSPECIFIEDrY   rZ   r[   r.   r/   ra   rb   r   rc   r   rt   r?   rd   re   s     r   $test__obtain_rapt_unsupported_statusr}      s    --(DE$8!	.=P
 ]]:556'gt< 7}}=>>>>
 
 76
 
s#   %B2B!7 B2!
B/	+B22
C c            	      8   [         R                  " [        5      n [        R                  " SU S9   [        R                  " SSS9   [        R                  " SS S9   [
        R                  " [        R                  5       n[        R                  " [        SS 5        S S S 5        S S S 5        S S S 5        WR                  S5      (       d   e S S S 5        g ! , (       d  f       N@= f! , (       d  f       NI= f! , (       d  f       NR= f! , (       d  f       g = f)Nrr   r,   ry   Trw   r5   zFailed to obtain rapt tokenr|   re   s     r   %test__obtain_rapt_no_challenge_outputr      s    --(DE	.=P
 ZZ=DQ: ]]:#=#=>'''gtD ? R }};<<<<
 
 ?>  RQ
 
sS   DC:%C)C	C)&C:. D
C&"C))
C73C::
D	D
Dc                     [         R                  " S[        S9   [         R                  " SSS9   [        R                  " [
        R                  5       n [        R                  " [        SS 5        S S S 5        W R                  S5      (       d   e S S S 5        S S S 5        g ! , (       d  f       N8= f! , (       d  f       N(= f! , (       d  f       g = f)Nrr   r,   ry   Fr5   znot in an interactive sessionr.   r/   r[   ra   rb   r   rc   r   rt   r?   rd   rf   s    r   !test__obtain_rapt_not_interactiver      s    	.1
 ZZ=ERz99:g##L'4@ ;==!ABBBB S	
 

 ;: SR	
 
s:   C%B5B$2 B5C$
B2.B55
C	?C
Cc                     [         R                  " S[        S9   [         R                  " SS5         [        R                  " [
        R                  5       n [        R                  " [        SS 5        S S S 5        W R                  S5      (       d   e S S S 5        S S S 5        g ! , (       d  f       N8= f! , (       d  f       N(= f! , (       d  f       g = f)Nrr   r,   z.google.oauth2.reauth.RUN_CHALLENGE_RETRY_LIMITr   r5   zReauthentication failedr   r   s    r   #test__obtain_rapt_not_authenticatedr      s    	.1
 ZZH!Lz99:g##L'4@ ;==!;<<<< M	
 

 ;: ML	
 
s:   C%B7B&4 B7C&
B40B77
C	C
Cc                     [         R                  " SSS9 n [         R                  " SSS9 n[        R                  " [        SSSS	5      S:X  d   eU R                  [        SSSS	[        R                  /S
9  UR                  [        SS S9  S S S 5        S S S 5        g ! , (       d  f       N= f! , (       d  f       g = f)Nz#google.oauth2._client.refresh_grant)r5   NNNr,   z!google.oauth2.reauth._obtain_raptr   	client_idclient_secretrefresh_token	token_uri)requestr   r   r   r   scopesr5   rI   )r.   r/   r   get_rapt_tokenr?   r@   _REAUTH_SCOPE)mock_refresh_grantmock_obtain_rapts     r   test_get_rapt_tokenr     s    	-<W
	ZZ/>N
%% ## $$	$ 11$%--%,,- 2  //g 0 +

 

 

 
s#   B/A!BB/
B,	(B//
B=z&google.auth.metrics.token_request_userc                    [         R                  " S5       nSSS0S4Ul        [        R                  " [
        R                  5       n[        R                  " [        SSSSS	S
/SSS9  S S S 5        WR                  S5      (       d   eUR                  R                  (       a   eUR                  [        SSSSSSSS.S[        0S9  S S S 5        g ! , (       d  f       No= f! , (       d  f       g = f)N6google.oauth2._client._token_endpoint_request_no_throwFerrorzBad requestr   r   r   r   foobar
rapt_tokenTr   r   enable_reauth_refreshzfoo bar)
grant_typer   r   r   rH   raptr8   )r<   )r.   r/   r-   ra   rb   r   RefreshErrorr   refresh_grantr?   rd   value	retryabler@   "TOKEN_REQUEST_METRICS_HEADER_VALUE)rD   mock_token_requestrf   s      r   test_refresh_grant_failedr   $  s    
 
@
	+07M2JE*R']]:223w  u~'&*	 4 }}^,,,,==****---(!0!0"$ )*LM 	. 	
#
 
 43	
 
s$   1C$"C*A C$
C!	C$$
C2c                     [         R                  " S5       n SU l        [        R                  " [
        R                  5       n[        R                  " [        SSSSSS/S	S
S9  S S S 5        WR                  S5      (       d   eUR                  R                  (       a   e S S S 5        g ! , (       d  f       NM= f! , (       d  f       g = f)Nr   )Fstring type errorFr   r   r   r   r   r   r   Tr   r   )r.   r/   r-   ra   rb   r   r   r   r   r?   rd   r   r   r   rf   s     r   3test_refresh_grant_failed_with_string_type_responser   I  s    	@
	*M']]:223w  u~'&*	 4 }}12222==*****!
 
 43	
 
s#   ,B="B,%=B=,
B:	6B==
Cc                  @   [         R                  " S5       n SSSS.S4SSS0S 4/U l        [         R                  " SS	S
9   [        R                  " [
        SSSSSS9SSS SS0S	4:X  d   e S S S 5        S S S 5        g ! , (       d  f       N= f! , (       d  f       g = f)Nr   Finvalid_grantrapt_requiredr   error_subtypeTr:   z#google.oauth2.reauth.get_rapt_tokenr   r,   r   r   r   r   )r   )r.   r/   rx   r   r   r?   )r   s    r   test_refresh_grant_successr   ]  s    	@
	oPRVWNN3T:*
& ZZ1@P
 ''&* 0   

 

 

 
s#   *B+A>-B>
B	B
Bc            	      v   [         R                  " S5       n SSSS.S4SSS0S 4/U l        [        R                  " [
        R                  5       n[        R                  " [        SS	S
S5        S S S 5        WR                  S5      (       d   e S S S 5        g ! , (       d  f       N0= f! , (       d  f       g = f)Nr   Fr   r   r   Tr:   r   r   r   r   zReauthentication is needed)r.   r/   rx   ra   rb   r   r   r   r   r?   rd   r   s     r   *test_refresh_grant_reauth_refresh_disabledr   x  s    	@
	oPRVWNN3T:*
& ]]:223w  k?K 4 }}:;;;;
 
 43
 
s#   9B*B/ B*
B'	#B**
B8)%rY   r.   ra   google.authr   google.oauth2r   Mockr?   r[   rs   rB   rU   r   objectr   r1   r/   rF   rL   rV   r^   rg   rk   rm   rp   ru   rz   r}   r   r   r   r   r   r   r   r   r*   r    r   <module>r      sc      "   yy{" '		
   !1% ! %X !6 % &J "$F $'
 &5V

 &5V

( )5
	
,S	L

 T$?=C=< ,3
	
B+(6<r    