o
    ü°“iÂ  ã                   @   sÖ   d dl Z 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mZ d dl	m
Z
 ddlmZ e d¡ZG dd„ de
ƒZd	ed
dfdd„Zddd„Zd
ee fdd„Zd
ee fdd„Zded
efdd„ZG dd„ dƒZdS )é    N)ÚLiteralÚOptional)Ú	BaseModelé   )Úget_auth_pathÚfastapi_clic                   @   s   e Zd ZU eed< dS )Ú
AuthConfigÚaccess_tokenN)Ú__name__Ú
__module__Ú__qualname__ÚstrÚ__annotations__© r   r   úP/home/ubuntu/.local/lib/python3.10/site-packages/fastapi_cloud_cli/utils/auth.pyr      s   
 r   Ú	auth_dataÚreturnc                 C   s2   t ƒ }t d|¡ |j|  ¡ dd t d¡ d S )NzWriting auth config to: %súutf-8©Úencodingz Auth config written successfully)r   ÚloggerÚdebugÚ
write_textÚmodel_dump_json)r   Ú	auth_pathr   r   r   Úwrite_auth_config   s   r   c                  C   s>   t ƒ } t d| ¡ |  ¡ r|  ¡  t d¡ d S t d¡ d S )NzDeleting auth config at: %sz Auth config deleted successfullyz1Auth config file doesn't exist, nothing to delete)r   r   r   ÚexistsÚunlink©r   r   r   r   Údelete_auth_config   s   r   c                  C   sD   t ƒ } t d| ¡ |  ¡ st d¡ d S t d¡ t | jdd¡S )NzReading auth config from: %szAuth config file doesn't existzAuth config loaded successfullyr   r   )r   r   r   r   r   Úmodel_validate_jsonÚ	read_textr   r   r   r   Úread_auth_config'   s   

r"   c                  C   s6   t  d¡ tƒ } | d u rt  d¡ d S t  d¡ | jS )NzGetting auth tokenzNo auth data foundz!Auth token retrieved successfully)r   r   r"   r	   )r   r   r   r   Ú_get_auth_token3   s   


r#   Útokenc           
   
   C   s   zr|   d¡}t|ƒdkrt dt|ƒ¡ W dS |d }t|ƒd  }r+|dd|  7 }| dd	¡ d
d¡}t |¡}t |¡}| 	d¡}|d u rPt d¡ W dS t
|tƒs`t dt|ƒ¡ W dS t ¡ }||k}t d|||¡ |W S  tjtjfy }	 zt d|	¡ W Y d }	~	dS d }	~	ww )NÚ.é   z,Invalid JWT format: expected 3 parts, got %dTr   é   ú=ú-ú+Ú_ú/ÚexpzNo 'exp' claim found in tokenFz)Invalid 'exp' claim: expected int, got %sz6Token expiration check: current=%d, exp=%d, expired=%szError parsing JWT token: %s)ÚsplitÚlenr   r   ÚreplaceÚbase64Ú	b64decodeÚjsonÚloadsÚgetÚ
isinstanceÚintÚtypeÚtimeÚbinasciiÚErrorÚJSONDecodeError)
r$   ÚpartsÚpayloadÚpaddingÚdecoded_bytesÚpayload_datar-   Úcurrent_timeÚ
is_expiredÚer   r   r   Ú_is_jwt_expired?   s@   





ü€ýrE   c                   @   sR   e Zd ZU ed ed< ddd„Zdee fdd„Zde	fd	d
„Z
de	fdd„ZdS )ÚIdentity)r$   ÚuserÚ	auth_moder   Nc                 C   s.   t ƒ | _d| _|  ¡  }r|| _d| _d S d S )NrG   r$   )r#   r$   rH   Ú_get_token_from_env)ÚselfÚ	env_tokenr   r   r   Ú__init__r   s   
þzIdentity.__init__c                 C   s   t j d¡S )NÚFASTAPI_CLOUD_TOKEN)ÚosÚenvironr5   ©rJ   r   r   r   rI   {   s   zIdentity._get_token_from_envc                 C   s   | j sdS t| j ƒS )NT)r$   rE   rP   r   r   r   rC   ~   s   
zIdentity.is_expiredc                 C   sF   | j d u rt d¡ dS | jdkr|  ¡ rt d¡ dS t d¡ dS )NzLogin status: False (no token)FrG   z#Login status: False (token expired)zLogin status: TrueT)r$   r   r   rH   rC   rP   r   r   r   Úis_logged_in„   s   



zIdentity.is_logged_in©r   N)r
   r   r   r   r   rL   r   r   rI   ÚboolrC   rQ   r   r   r   r   rF   o   s   
 
	rF   rR   )r1   r:   r3   ÚloggingrN   r9   Útypingr   r   Úpydanticr   Úconfigr   Ú	getLoggerr   r   r   r   r"   r   r#   rS   rE   rF   r   r   r   r   Ú<module>   s"    

0