
    Q|i{                     t    d dl Z d dlZd dlZd dlmZ d dlmZmZ  ej        e          Z	 G d d          Z
dS )    N)Optional)datetime	timedeltac                   H     e Zd ZdZdZdZ fdZd ZdefdZ	defdZ
 xZS )AuthServiceNc                 z    | j         -t          t          |                               |           | _         | j         S )N)	_instancesuperr   __new__)cls	__class__s    zC:\Users\Dell Inspiron 16\Desktop\tws\github tws\Agrota\back-agrota-powerbi\mcp-client-agrota\app\services\auth_service.pyr   zAuthService.__new__   s2    = !+s33;;C@@CM}    c                     t          j        d          | _        t          j        d          | _        t          j        d          | _        t          j        d          | _        t          j        d          | _        d S )NKEYCLOAK_URLKEYCLOAK_CLIENT_IDKEYCLOAK_CLIENT_SECRETKEYCLOAK_USERNAMEKEYCLOAK_PASSWORD)osgetenvkeycloak_url	client_idclient_secretusernamepasswordselfs    r   __init__zAuthService.__init__   sa    In55#788Y'?@@	"566	"566r   returnc                    K   | j         r*| j        r#t          j                    | j        k     r| j         S |                                  d{V S )z6Returns a valid access token, refreshing if necessary.N)_token_token_expiryr   now_loginr   s    r   	get_tokenzAuthService.get_token   sU      ; 	4- 	(,..4CU2U2U;[[]]"""""""r   c                   K   t                               d           | j        | j        | j        | j        dd}	 t          j                    4 d{V }|                    | j	        |           d{V }|
                                 |                                }|d         | _        |                    dd          }t          j                    t!          |d	z
  
          z   | _        t                               d           | j        cddd          d{V  S # 1 d{V swxY w Y   dS # t$          $ r#}t                               d|             d}~ww xY w)z0Performs login to Keycloak and stores the token.u%   🔑 Iniciando sesión en Keycloak...r   )r   r   r   r   
grant_typeN)dataaccess_token
expires_ini,  <   )secondsu'   ✅ Autenticación en Keycloak exitosa.u$   ❌ Error autenticando en Keycloak: )loggerinfor   r   r   r   httpxAsyncClientpostr   raise_for_statusjsonr"   getr   r$   r   r#   	Exceptionerror)r   r)   clientresponse
token_datar+   es          r   r%   zAuthService._login"   s     ;<<< !/$
 
	(** # # # # # # #f!'T->T!J!JJJJJJJ))+++%]]__
(8 (^^L#>>
%-\^^i
UW6X6X6X%X"EFFF{# # # # # # # # # # # # # # # # # # # # # # # # # # # # # #  	 	 	LLCCCDDD	s<   D3 B:D D3  
D**D3 -D*.D3 3
E =EE )__name__
__module____qualname__r	   r"   r#   r   r   strr&   r%   __classcell__)r   s   @r   r   r   
   s        IFM    
7 7 7# # # # #c        r   r   )r   r0   loggingtypingr   r   r   	getLoggerr<   r.   r    r   r   <module>rE      s    				         ( ( ( ( ( ( ( (		8	$	$4 4 4 4 4 4 4 4 4 4r   