
    ((_i~                     N    S r SSKJrJr  SSKJr   " S S\R
                  5      rg)uj   
CLI Token 统一模型

合并了 augment_session_tokens, anyrouter_tokens, agentrouter_tokens 三个表
   )dbget_beijing_now    )datetimec                      \ rS rSrSrSrSrSrSr\	R                  " SSS	S
S94r\	R                  " \	R                  SS9r\	R                  " \	R                  SS9r\	R                  " \	R                   " S5      SS9r\	R                  " \	R$                  SS9r\	R                  " \	R                   " S5      5      r\	R                  " \	R*                  SS9r\	R                  " \	R*                  SS9r\	R                  " \	R0                  5      r\	R                  " \	R0                  \S9r\	R                  " \	R0                  \\S9rS rS r\SS j5       r \S 5       r!\S 5       r"\S S j5       r#\S!S j5       r$\S 5       r%\S 5       r&Sr'g)"CLIToken   ui   CLI 模式 Token 统一模型

支持多种 CLI 模式的 AI 提供商：Augment, AnyRouter, AgentRouter

cli_tokensaugment	anyrouteragentrouteruser_id	is_globalprovider_typeuq_user_provider_token)nameT)primary_keyF)nullable2   d   )default)r   onupdatec                    U R                   U R                  U R                  U R                  [	        U R
                  5      S:  a  U R
                  SS S-   OU R
                  U R                  U R                  U R                  (       a  U R                  R                  5       OSU R                  (       a  U R                  R                  5       OSU R                  (       a  U R                  R                  5       S.
$ SS.
$ )u   转换为字典   Nz...)
idr   r   r   tokenr   	is_active	last_used
created_at
updated_at)r   r   r   r   lenr   r   r   r   	isoformatr   r    selfs    </Users/yu22x/Desktop/ge/ctf/app/models/database/cli_token.pyto_dictCLIToken.to_dict(   s     ''||!//II03DJJ"0DTZZ_u,$**7;~~11349=$//335d9=$//335
 	
 OS
 	
    c                     U R                   $ )u   获取完整的token)r   r#   s    r%   get_full_tokenCLIToken.get_full_token7   s    zzr(   c                     [         R                  R                  U(       d  U OSUUSS9R                  5       nU(       a  UR	                  5       $ S$ )u   获取指定用户和提供商的Token

Args:
    user_id: 用户ID（全局Token时使用0）
    provider_type: 提供商类型
    is_global: 是否为全局Token
    
Returns:
    str: Token字符串，如果不存在返回None
r   T)r   r   r   r   N)r   query	filter_byfirstr*   )r   r   r   token_records       r%   	get_tokenCLIToken.get_token;   sQ      ~~//#,G!'	 0 

 %' 	 1=|**,F$Fr(   c                 *    [         R                  XSS9$ )u   获取用户的TokenFr   r   r1   )r   r   s     r%   get_user_tokenCLIToken.get_user_tokenO   s     !!'E!JJr(   c                 ,    [         R                  SU SS9$ )u   获取全局Tokenr   Tr4   r5   )r   s    r%   get_global_tokenCLIToken.get_global_tokenT   s     !!!]d!CCr(   Nc           	         U(       dD  [         R                  S[         R                  S[         R                  S0nUR	                  US5      n[         R
                  R                  U USS9R                  5       nU(       aB  X%l        X5l	        SUl
        [        5       Ul        [        R                  R                  5         U$ [        U UUUSSS9n[        R                  R!                  U5        [        R                  R                  5         U$ )	u   设置用户的Token

Args:
    user_id: 用户ID
    provider_type: 提供商类型
    token_str: Token字符串
    name: Token名称
    
Returns:
    CLIToken: Token记录
zAugment TokenzAnyRouter TokenzAgentRouter Tokenz	CLI TokenFr   r   r   Tr   r   r   r   r   r   )r   PROVIDER_AUGMENTPROVIDER_ANYROUTERPROVIDER_AGENTROUTERgetr-   r.   r/   r   r   r   r   r    r   sessioncommitadd)r   r   	token_strr   provider_namesexistingr0   s          r%   set_user_tokenCLIToken.set_user_tokenY   s     ))?++->--/BN
 "%%m[AD>>++' , 
 %'	 	 &N M!%H"1"3HJJO#+L JJNN<(JJr(   c           	      :   U(       dD  [         R                  S[         R                  S[         R                  S0nUR	                  U S5      n[         R
                  R                  U SS9R                  5       nU(       aH  Xl        X%l	        [        5       Ul        U(       a  X5l        [        R                  R                  5         U$ [        U(       a  UOSU UUSSS9n[        R                  R!                  U5        [        R                  R                  5         U$ )	u   设置全局Token

Args:
    provider_type: 提供商类型
    token_str: Token字符串
    name: Token名称
    admin_user_id: 设置Token的管理员用户ID
    
Returns:
    CLIToken: Token记录
u   全局 Augment Tokenu   全局 AnyRouter Tokenu   全局 AgentRouter Tokenu   全局 CLI TokenTr   r   r   r=   )r   r>   r?   r@   rA   r-   r.   r/   r   r   r   r    r   r   rB   rC   rD   )r   rE   r   admin_user_idrF   
old_globalr0   s          r%   set_global_tokenCLIToken.set_global_token   s     ))+A++-E--/IN
 "%%m5GHD^^--' . 
 %' 	
 ("O$3$5J!%2"JJ#)6A+L JJNN<(JJr(   c                     [         R                  R                  U USS9R                  5       nU(       a>  [        R
                  R                  U5        [        R
                  R                  5         gg)u   删除用户的TokenFr<   Tr   r-   r.   r/   r   rB   deleterC   )r   r   r0   s      r%   delete_user_tokenCLIToken.delete_user_token   s_      ~~//' 0 
 %'	 	
 JJl+JJr(   c                     [         R                  R                  U SS9R                  5       nU(       a>  [        R
                  R                  U5        [        R
                  R                  5         gg)u   删除全局TokenTrK   FrQ   )r   global_tokens     r%   delete_global_tokenCLIToken.delete_global_token   s\      ~~//' 0 
 %' 	 JJl+JJr(    )F)N)NN)(__name__
__module____qualname____firstlineno____doc____tablename__r>   r?   r@   r   UniqueConstraint__table_args__ColumnIntegerr   r   Stringr   Textr   r   Booleanr   r   DateTimer   r   r   r    r&   r*   staticmethodr1   r6   r9   rH   rN   rS   rW   __static_attributes__rY   r(   r%   r   r      s    !M !$( 	I{O 8	:N
 
2::4	0Bii

U3GIIbiime<MIIbgg.E99RYYs^$D		"**e4I		"**d3I		"++&I2;;@J2;;/ZJ
 G G& K K D D ,  , \ ,  , \   
 
r(   r   N)r^   baser   r   r   Modelr   rY   r(   r%   <module>rl      s$    & Drxx Dr(   