
    h                     v   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mZm	Z	 d dl
Z
defdZdeeef   ddfdZde	eeef      fdZdd	Zde	e   fd
Z e
j"                  d      e
j$                  de
j&                  fd              Z e
j"                  d      d        Z e
j"                  d      d        Zy)    N)Path)AnyDictOptionalreturnc                  t    t        j                         } | dz  }|j                  d       t        |dz        S )z.Get the path to store the authentication tokenz.litellmT)exist_okz
token.json)r   homemkdirstr)home_dir
config_dirs     b/var/www/Befach/backend/env/lib/python3.12/site-packages/litellm/proxy/client/cli/commands/auth.pyget_token_file_pathr      s8    yy{HJ&Jd#zL())    
token_datac                     t               }t        |d      5 }t        j                  | |d       ddd       t	        j
                  |d       y# 1 sw Y    xY w)zSave token data to filew   )indentNi  )r   openjsondumposchmod)r   
token_filefs      r   
save_tokenr      sK    $&J	j#	 +!		*a*+ HHZ+ +s   AAc                     t               } t        j                  j                  |       sy	 t	        | d      5 }t        j                  |      cddd       S # 1 sw Y   yxY w# t
        j                  t        f$ r Y yw xY w)zLoad token data from fileNr)	r   r   pathexistsr   r   loadJSONDecodeErrorIOError)r   r   s     r   
load_tokenr&      sj    $&J77>>*%*c" 	 a99Q<	  	  	   '* s.   A# A	A# A A#  A# #A?>A?c                      t               } t        j                  j                  |       rt        j                  |        yy)zClear stored tokenN)r   r   r!   r"   remove)r   s    r   clear_tokenr)   '   s+    $&J	ww~~j!
		* "r   c                  .    t               } | r	d| v r| d   S y)z&Get the stored API key from token filekeyN)r&   )r   s    r   get_stored_api_keyr,   -   s!    Jez)%  r   login)namectxc                    ddl }ddl}ddlm} ddlm} | j                  d   }dt        |j                                }	 | d| d| }t        j                  d	|        t        j                  d
       t        j                  d|        t        j                  |       t        j                  d       | d| }d}	d}
t        |	|
z        D ]J  }	 |j                  |d      }|j                  dk(  r|j!                         }|j                  d      dk(  r|j                  d      }|rt#        |dddddt%        j$                         d       t        j                  d       t        j                  d|dd  d       t        j                  d        t        j                  d!        |         y|j                  dk(  r|dz  dk(  r8t        j                  d"       n"t        j                  d#|j                          t%        j(                  |
       M t        j                  d%       y# |j&                  $ r*}|dz  dk(  rt        j                  d$|        Y d}~bd}~ww xY w# t*        $ r t        j                  d&       Y yt,        $ r"}t        j                  d'|        Y d}~yd}~ww xY w)(z/Login to LiteLLM proxy using SSO authenticationr   N)LITELLM_CLI_SOURCE_IDENTIFIER)show_commandsbase_urlzsk-z/sso/key/generate?source=z&key=zOpening browser to: z9Please complete the SSO authentication in your browser...zSession ID: zWaiting for authentication...z/sso/cli/poll/i,  r   
   )timeout   statusreadyr+   zcli-userunknowncliAuthorization )r+   user_id
user_email	user_roleauth_header_name	jwt_token	timestampu   ✅ Login successful!z	API Key:    z...z4You can now use the CLI without specifying --api-keyz=
============================================================z#Still waiting for authentication...zPolling error: HTTP zConnection error (will retry): u/   ❌ Authentication timed out. Please try again.u&   
❌ Authentication cancelled by user.u   ❌ Authentication failed: )uuidrequestslitellm.constantsr1   "litellm.proxy.client.cli.interfacer2   objr   uuid4clickecho
webbrowserr   rangegetstatus_coder   r   timeRequestExceptionsleepKeyboardInterrupt	Exception)r/   rD   rE   r1   r2   r3   key_idsso_urlpoll_urlr5   poll_intervalattemptresponsedataapi_keyes                   r   r-   r-   6   s    ?@wwz"H 3tzz|$%&FCJ78U7VV[\b[cd

)'34

NO

\&*+ 	  	

23Z~fX6W56G$F#<<"<=''3.#==?Dxx)W4"&((5/"&'.+5.7-24C-/-1YY[(  "JJ'>?!JJ73B<.'DE!JJ']^ "JJ}5)O"))S0|q(

#HIJJ!5h6J6J5KLM JJ}%O 7R 	

DE ,, FR<1$JJ!@DEF  

<= 

045sW   BI3 C H78I3 :AH7	-I3 7I0 I+&I3 +I00I3 3J=J=J88J=logoutc                  B    t                t        j                  d       y)z&Logout and clear stored authenticationu:   ✅ Logged out successfully. Authentication token cleared.N)r)   rJ   rK    r   r   r^   r^      s     M	JJKLr   whoamic                  $   t               } | st        j                  d       yt        j                  d       t        j                  d| j                  dd              t        j                  d| j                  dd              t        j                  d	| j                  d
d              | j                  dd      }t	        j                         |z
  dz  }t        j                  d|dd       |dkD  rt        j                  d       yy)z"Show current authentication statusuA   ❌ Not authenticated. Run 'litellm-proxy login' to authenticate.Nu   ✅ AuthenticatedzUser Email: r>   Unknownz	User ID: r=   zUser Role: r?   rB   r   i  zToken age: z.1fz hours   uE   ⚠️ Warning: Token is more than 24 hours old and may have expired.)r&   rJ   rK   rN   rP   )r   rB   	age_hourss      r   ra   ra      s     J

VW	JJ"#	JJjnn\9EFGH	JJ:>>)Y?@AB	JJZ^^KCDEF {A.Iy(D0I	JJYsO6232~

Z[ r   )r   N)r   r   rP   rL   pathlibr   typingr   r   r   rJ   r   r   r   r&   r)   r,   commandpass_contextContextr-   r^   ra   r`   r   r   <module>rk      s     	    & & *S * 4S>  d  
HT#s(^, 
HSM  GQu}} Q  Qf HM M
 H\ \r   