o
    d۷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 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dB fddZd
edB fddZded
efddZG dd dZdS )    N)Literal)	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   R/home/ubuntu/vllm_env/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@   





rD   c                   @   sR   e Zd ZU ed ed< dddZdedB 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 )NrF   r#   )r"   r#   rG   _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environr4   rI   r   r   r   rH   {   s   zIdentity._get_token_from_envc                 C   s   | j sdS t| j S )NT)r#   rD   rO   r   r   r   rB   ~   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)FrF   z#Login status: False (token expired)zLogin status: TrueT)r#   r   r   rG   rB   rO   r   r   r   is_logged_in   s   



zIdentity.is_logged_inr   N)r	   r
   r   r   r   rK   r   rH   boolrB   rP   r   r   r   r   rE   o   s   
 
	rE   rQ   )r0   r9   r2   loggingrM   r8   typingr   pydanticr   configr   	getLoggerr   r   r   r   r!   r   r"   rR   rD   rE   r   r   r   r   <module>   s"    

0