
    Dj.                       d Z ddlmZ ddlZddlmZ ddlmZmZm	Z	 ddl
mZmZmZmZmZmZmZmZmZmZmZmZmZmZ ddlmZmZ  ej        d	          Z ej        d
	          ZdZdKdZ e!                    edde            dLdZ"dMdZ#dNdZ$dOd!Z%e&                    d          ddddd"eefdPd1            Z'e&                    d2          dddddd"ddd"eefdQd;            Z(dRd=Z)e&                    d>           ej*        d"d?d@	           ej*        d"dAdB	           ej*        d"dCdD	          ddddd"eef
dSdH            Z+e&                    dI          ddeefdTdJ            Z,dS )Uz$Authentication and session commands.    )annotationsN)PyiCloudService)CLIAbortCLIState	get_state)DEFAULT_LOG_LEVELDEFAULT_OUTPUT_FORMATAcceptTermsOptionChinaMainlandOptionHttpProxyOptionHttpsProxyOptionInteractiveOptionLogLevelOptionNoVerifySslOptionOutputFormatOptionPasswordOptionSessionDirOptionUsernameOptionstore_command_options)console_kv_tableconsole_tablez#Manage authentication and sessions.)helpz"Manage stored keyring credentials.zTrusted Sessionctxtyper.ContextreturnNonec                    | j         9t          j        |                                            t          j                    dS )z5Show subgroup help when invoked without a subcommand.N)invoked_subcommandtyperechoget_helpExit)r   s    U/home/thesage/.hermes/venv/lib/python3.11/site-packages/pyicloud/cli/commands/auth.py_group_rootr$   !   s9     %
3<<>>"""jll &%    keyringT)nameinvoke_without_commandcallbackpathobjectexistsc                    |r| S |  dS )zNRender a canonical storage path with an inline missing marker for text output.z
 (missing) )r*   r,   s     r#   _storage_path_displayr/   1   s       r%   payloaddict[str, object]list[tuple[str, object]]c                    d| d         fd| d         ft           | d         fd| d         fd| d	         fd
| d         fdt          | d         | d                   fdt          | d         | d                   fgS )z1Build text-mode rows for one auth status payload.Accountaccount_nameAuthenticatedauthenticatedtrusted_sessionzRequires 2FArequires_2fazRequires 2SArequires_2saPassword in Keyringhas_keyring_passwordSession Filesession_pathhas_session_file
Cookie Jarcookiejar_pathhas_cookiejar_file)TRUSTED_SESSIONr/   )r0   s    r#   _auth_status_rowsrD   9   s     
GN+,	'/23	'"345	01	01	(> ?@!'*+ 	
 !(),- 	
 r%   stater   statusc                x    |j         |                     |j                   d|                     |          |}|S )N)r5   r<   )r5   r<   auth_storage_info)rE   apirF   r0   s       r#   _auth_payloadrJ   T   sQ    ( % : :3;K L L" " 
!
!#
&
&" 	"G Nr%   boolc           
          j         sT                                 }|sO j        r                     dg d           dS  j                                                                        dS  fd|D             } j        rIt          |          dk    r                     |d                    n                     d|d           dS t          |          dk    r?|d         } j                            t          dt          |                               dS  j                            t          dd	t          d
ddgd |D                                  dS dS )zRCheck if the current state has an authenticated session, and print details if not.Fr7   accountsc                8    g | ]\  }}t          ||          S r.   )rJ   ).0rI   rF   rE   s      r#   
<listcomp>z._auth_status_authenticated.<locals>.<listcomp>i   s)    WWW+#vM%f55WWWr%      r   TAuth StatuszActive iCloud Sessionsr4   r;   zSession File ExistszCookie Jar Existsc                X    g | ]'}|d          |d         |d         |d         |d         f(S )r5   r8   r<   r?   rB   r.   )rP   r0   s     r#   rQ   z._auth_status_authenticated.<locals>.<listcomp>   sX     	 	 	    / 12 67 23 45	 	 	r%   )has_explicit_usernameactive_session_probesjson_output
write_jsonconsoleprintnot_logged_in_messagelenr   rD   r   rC   )rE   active_probespayloadsr0   s   `   r#   _auth_status_authenticatedr_   ^   s   & /3355 	    5b!I!IJJJuM ; ; = =>>>5WWWWWWW 	8}}!!  !----  4X!N!NOOO5x==AqkGM !%g..    5(#))'	 	 $,	 	 	 	
 	
 	
, u4r%   Fusernamer   session_dirr   
http_proxyr   https_proxyr   no_verify_sslr   output_formatr   	log_levelr   c           
        t          | |||||||           t          |           }t          |          sdS |                                }	|	                                }
|
d         r|                    |	           n|                                 t          ||	|
          }|j        r|	                    |           dS |j
                            t          dt          |                               dS )z3Show the current authentication and session status.r`   ra   rb   rc   rd   re   rf   Nr7   rS   )r   r   r_   get_probe_apiget_auth_statusremember_accountprune_local_accountsrJ   rW   rX   rY   rZ   r   rD   )r   r`   ra   rb   rc   rd   re   rf   rE   rI   rF   r0   s               r#   auth_statusrm      s!    ##	 	 	 	 cNNE%e,, 




C  ""Fo %s####""$$$E3//G !!!	Mg&&	
 	
    r%   loginpasswordr   china_mainlandr   interactiver   accept_termsr
   c                   t          | |||||||||	|
|           t          |           }|                                }t          ||d|j        |j        |j        d          }|j        r|                    |           dS |j	        
                    d           |j	        
                    t          dd|d         ft          |d	         fd
|d         fd|d         fg                     dS )z*Authenticate and persist a usable session.)r`   ra   ro   rp   rq   rr   rb   rc   rd   re   rf   T)r7   r8   r9   r:   NzAuthenticated session is ready.zAuth Sessionr4   r5   r8   r=   r>   r@   rA   )r   r   get_login_apirJ   is_trusted_sessionr9   r:   rW   rX   rY   rZ   r   rC   )r   r`   ra   ro   rp   rq   rr   rb   rc   rd   re   rf   rE   rI   r0   s                  r#   
auth_loginrv      s=   " %!##    cNNE




C!"5,,		
 	
	 	G  !!!	M9:::	MGN34 '*;"<=!89w'789		
 	

 
 
 
 
r%   PyiCloudService | Nonec                d   |                                  }|sO| j        r|                     dg d           d S | j                            |                                            d S t          |          dk    r,t          |                     d |D                                 |d         \  }}|S )NFrM   rR   c                "    g | ]\  }}|j         S r.   )r5   )rP   rI   _statuss      r#   rQ   z-_auth_logout_find_account.<locals>.<listcomp>  s    DDDlc7!DDDr%   r   )	rV   rW   rX   rY   rZ   r[   r\   r   #multiple_logged_in_accounts_message)rE   r]   rI   rz   s       r#   _auth_logout_find_accountr|      s    //11M  	u"EEFFFFE7799:::
=A55DDmDDD 
 
 	

 !#LCJr%   logoutz--keep-trustedz2Preserve trusted-browser state for the next login.z--all-sessionsz)Attempt to sign out all browser sessions.z--remove-keyringzADelete the stored password for the selected account after logout.keep_trustedall_sessionsremove_keyringc           
     b   t          | ||||||	|
           t          |           }|j        r)|                                }|                                 nt          |          }|dS |                    |           	 |                    ||d          }n"# t          $ r}t          d          |d}~ww xY wd}|r|
                    |j                  }|                                 |j        |j        j        |j        j        |d|}|j        r|                    |           dS |d         r|r|j                            d	           dS |d         r|j                            d
           dS |r|j                            d           dS |j                            d           dS )z,Log out and clear local session persistence.rh   NT)r~   r   clear_local_sessionz$Failed to clear local session state.F)r5   r>   rA   stored_password_removedremote_logout_confirmedz?Logged out, cleared local session, and removed stored password.z%Logged out and cleared local session.zPCleared local session, removed stored password; remote logout was not confirmed.z7Cleared local session; remote logout was not confirmed.)r   r   rU   ri   rj   r|   rk   r}   OSErrorr   delete_keyring_passwordr5   rl   sessionr>   rA   rW   rX   rY   rZ   )r   r~   r   r   r`   ra   rb   rc   rd   re   rf   rE   rI   resultexckeyring_removedr0   s                    r#   auth_logoutr     sE   8 ##	 	 	 	 cNNE" !!##'..;F	3H%% $  
 

  H H H=>>CGH O J778HII	    (0+4#2	 
 G  !!!() Wo WM	
 	
 	
 	
 	
 
*	+ WCDDDDD	 W^	
 	
 	
 	
 	
 	UVVVVVs    B 
B8#B33B8deletec                8   t          | ||||           t          |           }|j        st          d          |                    |j                  }|j        |d}|j        r|                    |           dS |j        	                    |rdnd           dS )z!Delete a stored keyring password.)r`   ra   re   rf   z:The --username option is required for auth keyring delete.)r5   r   Nz%Deleted stored password from keyring.z.No stored password was found for that account.)
r   r   rU   r   r   r`   rW   rX   rY   rZ   )r   r`   ra   re   rf   rE   deletedr0   s           r#   auth_keyring_deleter   d  s     #    cNNE& USTTT++EN;;G#* G  !!!	M	>//=    r%   )r   r   r   r   )r*   r+   r,   r+   r   r+   )r0   r1   r   r2   )rE   r   rF   r1   r   r1   )rE   r   r   rK   )r   r   r`   r   ra   r   rb   r   rc   r   rd   r   re   r   rf   r   r   r   )r   r   r`   r   ra   r   ro   r   rp   r   rq   r   rr   r
   rb   r   rc   r   rd   r   re   r   rf   r   r   r   )rE   r   r   rw   )r   r   r~   rK   r   rK   r   rK   r`   r   ra   r   rb   r   rc   r   rd   r   re   r   rf   r   r   r   )r   r   r`   r   ra   r   re   r   rf   r   r   r   )-__doc__
__future__r   r   pyicloud.baser   pyicloud.cli.contextr   r   r   pyicloud.cli.optionsr   r	   r
   r   r   r   r   r   r   r   r   r   r   r   pyicloud.cli.outputr   r   Typerappkeyring_apprC   r$   	add_typerr/   rD   rJ   r_   commandrm   rv   r|   Optionr   r   r.   r%   r#   <module>r      s   * * " " " " " "  ) ) ) ) ) ) > > > > > > > > > >                                 @ ? ? ? ? ? ? ?ek<===ekCDDD#    		          6   2 2 2 2j X  $$("&$(',(= 1) ) ) ) )X W  $$(#*.%)&+"&$(',(= 18 8 8 8 8v   $ X &A  
 &8  
 (5<P  
  $$("&$(',(= 1/RW RW RW RW RWj X  $$((= 1             r%   