
    6                        d dl Z d dlZd dlZd dlmZ d dlmZ  ej                         Zdddddi d	gd
Z	ddddZ
dZdZdZ G d de      Zd Z ej"                  de      d        Z ej"                  de      d        Z ej"                  de      d        Zd Zd Zd Zd Zd Zd Zd  Zd! Zd" Zd# Zd$ Zd% Z  ej"                  d&e      d'        Z!d( Z"d) Z#d* Z$y)+    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                       e Zd Zd Zd Zy)MockChallengec                 .    || _         || _        || _        y 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__zMockChallenge.__init__3   s    	#3 .    c                     | j                   S r   )r   )r   metadatas     r   obtain_challenge_inputz$MockChallenge.obtain_challenge_input8   s    ###r   N)__name__
__module____qualname__r   r!    r   r   r   r   2   s    /
$r   r   c                      t        j                  dd      5  t        j                         sJ 	 d d d        y # 1 sw Y   y xY w)Nzsys.stdin.isattyTreturn_value)mockpatchr   is_interactiver%   r   r   test_is_interactiver,   <   s/    	&T	:$$&&& 
;	:	:s	   9Az google.auth.metrics.reauth_startr'   c           
          t        j                  d      5 }t        j                  t        dgd       |j                  t        t        j                  dz   ddgidddt        i       d d d        y # 1 sw Y   y xY w)	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_challengesrA   A   sw     
7
	$|fXw?#66)&1 (*KL 	7 	
	
 
 
s   AA11A:c           
         t        j                  d      5 }t        j                  t        dgddg       |j                  t        t        j                  dz   dgdgdddd	t        i
       d d d        y # 1 sw Y   y xY w)Nr.   r/   r0   scoperequested_scopesr1   )r2    oauthScopesForDomainPolicyLookupTr3   r4   r8   r>   s     r    test__get_challenges_with_scopesrG   S   s     
7
	$6(Gwi	
 	$66),285<I !(*KL 	7 
	

 
 
s   AA66A?z#google.auth.metrics.reauth_continuec           
         t        j                  d      5 }t        j                  t        ddddid       |j                  t        t        j                  dz   dddddid	dd
dt        i       d d d        y # 1 sw Y   y xY w)Nr.   r   1
credentialpasswordr0   z/123:continueRESPOND)r   r   actionproposalResponseTr3   r4   )r)   r*   r   _send_challenge_resultr:   r;   r<   $REAUTH_CONTINUE_METRICS_HEADER_VALUEr>   s     r   test__send_challenge_resultrQ   j   s    
 
7
	$%%%|Z&@'	
 	$660""#%1:$>	 !(*NO 	7 	

 
 
s   AA88Bc                      t        j                  t              } d| d   d   d<   t        j                  | t
        d      J y )NSTATUS_UNSPECIFIEDr   r   r
   r0   )copydeepcopyCHALLENGES_RESPONSE_TEMPLATEr   _run_next_challenger:   )challenges_responses    r   "test__run_next_challenge_not_readyrY      sE    --(DE5I%a(2""#6gNVVr   c                     t        j                  t              } d| d   d   d<   t        j                  t
        j                        5 }t        j                  | t        d       d d d        j                  d      sJ y # 1 sw Y   xY w)NCHALLENGE_TYPE_UNSPECIFIEDr   r   r   r0   z5Unsupported challenge type CHALLENGE_TYPE_UNSPECIFIED)rT   rU   rV   pytestraisesr   ReauthFailErrorr   rW   r:   matchrX   excinfos     r   &test__run_next_challenge_not_supportedrb      so    --(DE<X%a(9	z11	2g""#6gN 
3==QRRR 
3	2s   B  B	c                  N   t        ddd      } t        j                  dd| i      5  t        j                  t
        j                        5 }t        j                  t        t        d       d d d        j                  d      sJ 	 d d d        y # 1 sw Y   &xY w# 1 sw Y   y xY w)Nr	   Fr   -google.oauth2.challenges.AVAILABLE_CHALLENGESr0   z*Challenge PASSWORD is not locally eligible)r   r)   r*   r\   r]   r   r^   r   rW   rV   r:   r_   )mock_challengera   s     r   -test__run_next_challenge_not_locally_eligiblerf      s    ":u6GHN	7*n9U
 ]]:556'&&,lG 7 }}JKKK
 
 76
 
s#   $B
 B*BB	BB$c                      t        ddd       } t        j                  dd| i      5  t        j                  t
        t        d      	 J 	 d d d        y # 1 sw Y   y xY w)Nr	   Trd   r0   )r   r)   r*   r   rW   rV   r:   )re   s    r   +test__run_next_challenge_no_challenge_inputrh      sa    ":tT:N	7*n9U
 &&,lG 	
	
 
 
s   #AAc            	      D   t        ddddi      } t        j                  dd| i      5  t        j                  d      5 }t        j                  t
        t        d       |j                  t        dd	ddid       d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)
Nr	   TrJ   rK   rd   z+google.oauth2.reauth._send_challenge_resultr0   r   r   )r   r)   r*   r   rW   rV   r:   r;   )re   mock_send_challenge_results     r    test__run_next_challenge_successrk      s    ":tlJ5OPN	7*n9U
 ZZ9
'&&,lG '99eQz(BG

 

 

 
s"   B;B
9B
B	BBc                      t        j                  dt              5  t        j                  t
        dd       dk(  sJ 	 d d d        y # 1 sw Y   y xY w)N$google.oauth2.reauth._get_challengesr'   r0   r   )r)   r*   !CHALLENGES_RESPONSE_AUTHENTICATEDr   _obtain_raptr:   r%   r   r   test__obtain_rapt_authenticatedrp      sD    	.6
 ""<$?CSSSS	
 
 
s   !AAc                  j   t        j                  dt              5  t        j                  dt        t        g      5  t        j                  dd      5  t	        j
                  t        dd       dk(  sJ 	 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   y xY w)	Nrm   r'   (google.oauth2.reauth._run_next_challenge)side_effect#google.oauth2.reauth.is_interactiveTr0   r   )r)   r*   rV   rn   r   ro   r:   r%   r   r   8test__obtain_rapt_authenticated_after_run_next_challengeru      s    	.1
 ZZ6,1
 APTU''gtDHXXX V
	
 
 VU
 
	
 
s:   "B)B!B8B B)BBB&	"B))B2c                  f   t        j                  t              } d| d<   t        j                  d|       5  t        j                  t        j                        5 }t        j                  t        dd        d d d        j                  d      sJ 	 d d d        y # 1 sw Y   &xY w# 1 sw Y   y xY w)NrS   r
   rm   r'   r0   zAPI error: STATUS_UNSPECIFIEDrT   rU   rV   r)   r*   r\   r]   r   r^   r   ro   r:   r_   r`   s     r   $test__obtain_rapt_unsupported_statusrx      s    --(DE$8!	.=P
 ]]:556'gt< 7}}=>>>
 
 76
 
s#   $B'B6B'B$	 B''B0c            	         t        j                  t              } t        j                  d|       5  t        j                  dd      5  t        j                  dd       5  t        j                  t        j                        5 }t        j                  t        dd        d d d        d d d        d d d        j                  d      sJ 	 d d d        y # 1 sw Y   6xY w# 1 sw Y   :xY w# 1 sw Y   >xY w# 1 sw Y   y xY w)Nrm   r'   rt   Trr   r0   zFailed to obtain rapt tokenrw   r`   s     r   %test__obtain_rapt_no_challenge_outputrz      s    --(DE	.=P
 ZZ=DQ: ]]:#=#=>'''gtD ? R }};<<<
 
 ?>  RQ
 
sS   C:	C.!$C"C	!C")C.1C:CC""C+'C..C7	3C::Dc                     t        j                  dt              5  t        j                  dd      5  t        j                  t
        j                        5 } t        j                  t        dd        d d d         j                  d      sJ 	 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   y xY w)Nrm   r'   rt   Fr0   znot in an interactive sessionr)   r*   rV   r\   r]   r   r^   r   ro   r:   r_   ra   s    r   !test__obtain_rapt_not_interactiver~      s    	.1
 ZZ=ERz99:g##L'4@ ;==!ABBB S	
 

 ;: SR	
 
s:   B9$B-B!4B-B9!B*&B--B6	2B99Cc                     t        j                  dt              5  t        j                  dd      5  t        j                  t
        j                        5 } t        j                  t        dd        d d d         j                  d      sJ 	 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   y xY w)Nrm   r'   z.google.oauth2.reauth.RUN_CHALLENGE_RETRY_LIMITr   r0   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:   B8$B,B 3B,B8 B)%B,,B5	1B88Cc            
      |   t        j                  dd      5 } t        j                  dd      5 }t        j                  t        dddd	      dk(  sJ | j                  t        dddd	t        j                  g
       |j                  t        dd        d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nz#google.oauth2._client.refresh_grant)r0   NNNr'   z!google.oauth2.reauth._obtain_raptr   	client_idclient_secretrefresh_token	token_uri)requestr   r   r   r   scopesr0   rD   )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#   B2A%B&B2&B/	+B22B;z&google.auth.metrics.token_request_userc                    t        j                  d      5 }dddidf|_        t        j                  t
        j                        5 }t        j                  t        ddddd	d
gdd       d d d        j                  d      sJ |j                  j                  rJ |j                  t        dddddddddt        i       d d d        y # 1 sw Y   cxY w# 1 sw Y   y xY w)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   rC   raptr3   )r7   )r)   r*   r(   r\   r]   r   RefreshErrorr   refresh_grantr:   r_   value	retryabler;   "TOKEN_REQUEST_METRICS_HEADER_VALUE)r?   mock_token_requestra   s      r   test_refresh_grant_failedr   $  s    
 
@
	+07M2JE*R']]:223w  u~'&*	 4 }}^,,,==****---(!0!0"$ )*LM 	. 	
#
 
 43	
 
s$   0C$C*ACC	CC!c                  t   t        j                  d      5 } d| _        t        j                  t
        j                        5 }t        j                  t        ddddddgd	d
       d d d        j                  d      sJ |j                  j                  rJ 	 d d d        y # 1 sw Y   >xY w# 1 sw Y   y xY w)Nr   )Fstring type errorFr   r   r   r   r   r   r   Tr   r   )r)   r*   r(   r\   r]   r   r   r   r   r:   r_   r   r   r   ra   s     r   3test_refresh_grant_failed_with_string_type_responser   I  s    	@
	*M']]:223w  u~'&*	 4 }}1222==*****!
 
 43	
 
s#   +B.$B"%3B."B+	'B..B7c            
      0   t        j                  d      5 } dddddfdddid fg| _        t        j                  dd	
      5  t        j                  t
        ddddd      ddd ddid	f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)Nr   Finvalid_grantrapt_requiredr   error_subtypeTr5   z#google.oauth2.reauth.get_rapt_tokenr   r'   r   r   r   r   )r   )r)   r*   rs   r   r   r:   )r   s    r   test_refresh_grant_successr   ]  s    	@
	oPRVWNN3T:*
& ZZ1@P
 ''&* 0   

 

 

 
s#   ,B,B /B B		BBc            	      R   t        j                  d      5 } dddddfdddid fg| _        t        j                  t
        j                        5 }t        j                  t        dd	d
d       d d d        j                  d      sJ 	 d d d        y # 1 sw Y   &xY w# 1 sw Y   y xY w)Nr   Fr   r   r   Tr5   r   r   r   r   zReauthentication is needed)r)   r*   rs   r\   r]   r   r   r   r   r:   r_   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#   8BB,BB	BB&)%rT   r)   r\   google.authr   google.oauth2r   Mockr:   rV   rn   r=   rP   r   objectr   r,   r*   rA   rG   rQ   rY   rb   rf   rh   rk   rp   ru   rx   rz   r~   r   r   r   r   r   r   r%   r   r   <module>r      sm      "   tyy{" '		
   !1% ! %X !6 % &J "$F $'
 &5V

 &5V

( )5
	
,S	L

 T$?=C=< ,3
	
B+(6<r   