
    9-e                        d dl Z d dlZd dlZd dlZd dl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mZ d dlZd dl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mZ d dlmZ 	 ej        Zn$# e $ r e
ee         ge	f         Z!de!de!fdZY nw xY w ej"        e#          Z$dZ%ee&ee&e&f         f         Z'de&de&fdZ( G d de          Z) G d de          Z* G d de          Z+dS )    N)Path)Any)Callable)Dict)Type)Union)	HTTPError)KeyringBackend)
properties)PasswordDeleteErrorPasswordSetError)	BaseModel)
AuthConfig)TokenExpiredError)TokenNotFoundErrormethodreturnc                 D    t          j        t          |                     S N)r   ClassPropertyclassmethod)r   s    9lib/python3.11/site-packages/anaconda_cloud_auth/token.pyclasspropertyr       s    'F(;(;<<<    zAnaconda Cloudpayloadc                 v    t          j        |                     d                                        d          S )z"Encode a string to a base64 stringzutf-8)base64	b64encodeencodedecode)r   s    r   _as_base64_stringr"   ,   s-    GNN73344;;GDDDr   c                       e Zd ZdZedefd            ZdedededdfdZdefd	Z	dedede
edf         fd
ZdededdfdZdS )NavigatorFallbackg?r   c                 2    	 dd l }dS # t          $ r Y dS w xY w)Nr   TF)anaconda_navigatorModuleNotFoundError)clsr&   s     r   viablezNavigatorFallback.viable4   s:    	%%%%4" 	 	 	55	s    
serviceusernamepasswordNc                      t          d          )Nz!This keyring cannot set passwordsr   )selfr*   r+   r,   s       r   set_passwordzNavigatorFallback.set_password=   s    BCCCr   c                 z    ddl m} ddi}|                    ddd                              d          }||         S )Nr   )CONFzhttps://anaconda.cloudzid.anaconda.cloudmaincloud_base_url/)anaconda_navigator.configr1   getstrip)r.   navigator_configknown_mappingr3   s       r   _get_auth_domainz"NavigatorFallback._get_auth_domain@   sX    FFFFFF13FG.22$&>
 

%** 	 ^,,r   c                    	 ddl m} |                                 }n# t          $ r Y d S w xY w|t          k    r||k    rd S |                                }|ddlm} ddlm} t          |          }|j
        s%	  ||j        |          }	n# t          $ r Y d S w xY w|j        }	 ||	          }
|j        |
|j        d}t!          j        |          }t%          |          }t'          j        t          ||           |S d S )Nr   )NucleusToken)_get_api_key)refresh_access_token)domain)auth_config)r+   api_keyr?   )$anaconda_navigator.api.nucleus.tokenr<   r:   ImportErrorKEYRING_NAME	from_fileanaconda_cloud_auth.actionsr=   r>   r   validrefresh_tokenr	   access_tokenr+   r?   jsondumpsr"   keyringr/   )r.   r*   r+   r<   auth_domaintokenr=   r>   r@   rI   rA   
token_infor   encodeds                 r   get_passwordzNavigatorFallback.get_passwordJ   sy   	IIIIII//11KK 	 	 	44	 l""x;'>'>4&&((@@@@@@HHHHHH$K888K; 2 #7#7+$ $ $LL !      44   %1"l<00G!N"%, J
 j,,G'00G {GDDDNts    
++;B 
BBc                     |                                  }	 ddlm} n# t          $ r Y d S w xY w|t          k    r||k    rd S 	 t          j        |           d S # t          $ r Y d S w xY w)Nr   )
TOKEN_FILE)r:   rB   rS   rC   rD   osremoveFileNotFoundError)r.   r*   r+   rM   navigator_token_files        r   delete_passwordz!NavigatorFallback.delete_passwordr   s    ++--	        	 	 	44	 l""x;'>'>4	./////$   tts    
++A 
A&%A&)__name__
__module____qualname__priorityr   boolr)   strr/   r:   r   rQ   rX    r   r   r$   r$   1   s        Ht    ]DC D3 D# D$ D D D D-# - - - -&C &3 &5d;K & & & &Ps c d      r   r$   c                       e Zd Z ed                                          ZdZedefd            Z	de
fdZde
ddfdZd	ed
ededdfdZd	ed
edeedf         fdZd	ed
eddfdZdS )AnacondaKeyringz~/.anaconda/keyring	   r   c                     	 | j         j                            dd           | j                             d          5 }|                                }d d d            n# 1 swxY w Y   |S # t
          $ r Y dS w xY w)NTexist_okparentsaF)keyring_pathparentmkdiropenwritableOSError)r(   frl   s      r   r)   zAnacondaKeyring.viable   s    	#))4)FFF!&&s++ (q::<<( ( ( ( ( ( ( ( ( ( ( ( ( ( (O 	 	 	55	s4   ;A+ AA+ A""A+ %A"&A+ +
A98A9c                     | j                                         si S 	 | j                             d          5 }t          j        |          }d d d            n# 1 swxY w Y   |S # t          j        $ r i cY S w xY w)Nr)rh   existsrk   rJ   loadJSONDecodeError)r.   fpdatas      r   _readzAnacondaKeyring._read   s     '')) 	I	"'',, %y}}% % % % % % % % % % % % % % %K# 	 	 	III	s4   A% AA% AA% A A% %A98A9ru   Nc                     | j         j                            dd           | j                             d          5 }t	          j        ||           d d d            d S # 1 swxY w Y   d S )NTrd   w)rh   ri   rj   rk   rJ   dump)r.   ru   rt   s      r   _savezAnacondaKeyring._save   s     &&d&CCC##C(( 	 BIdB	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	 s   AA#&A#r*   r+   r,   c                     |                                  }||vri ||<   |||         |<   |                     |           d S r   )rv   rz   )r.   r*   r+   r,   ru   s        r   r/   zAnacondaKeyring.set_password   sI    zz||$DM"*Wh

4r   c                 ~    |                                  }|                    |i                               |d           S r   )rv   r6   r.   r*   r+   ru   s       r   rQ   zAnacondaKeyring.get_password   s3    zz||xx$$((4888r   c                     |                                  }	 |                    |i                               |           |                     |           d S # t          $ r t
          w xY wr   )rv   r6   poprz   KeyErrorr   r}   s       r   rX   zAnacondaKeyring.delete_password   so    zz||	&HHWb!!%%h///JJt 	& 	& 	&%%	&s   >A A()rY   rZ   r[   r   
expanduserrh   r\   r   r]   r)   LocalKeyringDatarv   rz   r^   r/   r   rQ   rX   r_   r   r   ra   ra      s$       4-..99;;LHt    ]	' 	 	 	 	 *  t        C 3 # $    9C 93 95d;K 9 9 9 9&s &c &d & & & & & &r   ra   c                       e Zd ZU dZeedf         ed<   dZeedf         ed<   eed<   ededd fd            Z	ddZ
ddZedefd	            Zdefd
ZdS )	TokenInfoNrA   r+   r?   r   c                     t          j        t          |          }|t          t	          j        |          }t          j        |          }t          	                    d           t          di |S )z3Load the token information from the system keyring.NuD   🔓 Token has been successfully retrieved from system keychain 🎉r_   )rL   rQ   rD   r   r   	b64decoderJ   loadsloggerdebugr   )r(   r?   keyring_datadecoded_bytesdecoded_dicts        r   rr   zTokenInfo.load   sh     +L&AA$$(66z-00[\\\((<(((r   c                     |                                  }t          |          }t          j        t          | j        |           t                              d           dS )z2Write the token information to the system keyring.u9   🔒 Token has been safely stored in system keychain 🎉N)rJ   r"   rL   r/   rD   r?   r   r   )r.   r   rP   s      r   savezTokenInfo.save   sL    ))++#G,,\4;@@@PQQQQQr   c                     	 t          j        t          | j                   t          j        r.t	                                          t          | j                   dS dS # t          $ r t          w xY w)z5Delete the token information from the system keyring.N)rL   rX   rD   r?   r$   r)   r   r   )r.   s    r   deletezTokenInfo.delete   sy    	%#L$+>>> ' O!##33L$+NNNNNO O" 	% 	% 	%$$	%s   AA A/c                 H   | j         dS t          j        | j         dgddi          }t          j                            |d                                       t          j        j                  }|t          j        	                    t          j        j                  k     S )	NTRS256verify_signatureF)
algorithmsoptionsexp)tzinfo)tz)
rA   jwtr!   dtdatetimefromtimestampreplacetimezoneutcnow)r.   decodedexpirys      r   expiredzTokenInfo.expired   s    <4*LgY9KU8S
 
 
 **75>::BB;? C 
 
 2;?;;;;r   c                    | j         X	 t                              | j                  }n# t          $ r d}t	          |          w xY w|j        | _        |j         | _         | j         J | j        rt          d          | j         S )z>Get the access token, ensuring login and refresh if necessary.Nz2No token found, please login with `anaconda login`zNYour login token as expired. Please login again using
  anaconda login --force)rA   r   rr   r?   r   r+   r   r   )r.   new_token_infomessages      r   get_access_tokenzTokenInfo.get_access_token   s    <2!*!<!<% 2 2 2N(1112
 +3DM)1DL|'''< 	#+  
 |s	   ) A)r   N)rY   rZ   r[   rA   r   r^   __annotations__r+   r   rr   r   r   propertyr]   r   r   r_   r   r   r   r      s          $GU39$$$!%HeCI%%%KKK	)# 	)+ 	) 	) 	) [	)R R R R% % % % 
< 
< 
< 
< X
<#      r   r   ),r   r   r   rJ   loggingrT   pathlibr   typingr   r   r   r   r   urllib.errorr	   r   rL   keyring.backendr
   r   keyring.errorsr   r   pydanticr   anaconda_cloud_auth.configr   anaconda_cloud_auth.exceptionsr   r   r   AttributeError_KeyringClassMethod	getLoggerrY   r   rD   r^   r   r"   r$   ra   r   r_   r   r   <module>r      s          				                                     " " " " " " 



  * * * * * * & & & & & & . . . . . . + + + + + +       1 1 1 1 1 1 < < < < < < = = = = = ==,MM = = ="D$8#93#>?=1 =6I = = = = = == 
	8	$	$ T#s(^+, Es Es E E E E
Q Q Q Q Q Q Q Qh3& 3& 3& 3& 3&n 3& 3& 3&lC C C C C	 C C C C Cs   8B   B! B!