
    hb                        d 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 ddl	Z	ej                  j                  ej                  j                  e            Zej                  j                  e      Zej                  j                  e      Zej                  j                  e      Zej                  j%                  eddd      Z ee        ej(                  d	d
      Z ej(                  dd      Z ej(                  dd      Zer.ej1                  d      D  cg c]  } | j3                          c} Zng dZ e	j6                  e      Zej=                  d ee              de de fdZ!dde de de"fdZ#dde de de$fdZ%yc c} w )u   
JWT Validator para servidor asíncrono
Copia de la lógica de jwt_embed.validate_token() sin dependencias del servidor síncrono
    N)jwtJWTError)datetime)load_dotenvcrmconfiguracionesz.envJWT_SECRET_CHATz6TasaChat2024_$ecur3K3y_Pr0duct10n_9X8Z7Y6W5V4U3T2S1Q0PJWT_ALGORITHM_CHATHS256ALLOWED_EMBED_ORIGINS ,)zhttp://localhost:4200zhttps://cliente1.comz+https://dev.ayuda.catastroantioquia-mas.comz+https://pre.ayuda.catastroantioquia-mas.comzhttps://dev.cic-ware.comzhttps://cic-ware.comz,https://dev2.ayuda.catastroantioquia-mas.comz%https://dev.tasa-chat.valormas.gov.coz%https://pru.tasa-chat.valormas.gov.coz!https://tasa-chat.valormas.gov.cozhttp://54.145.182.117zhttps://anttest.valormas.gov.cou7   🔐 JWT Validator inicializado - Dominios permitidos: tokenreturnc                 d    t        j                  | j                               j                         S )u6   Genera hash del token (misma lógica que jwt_embed.py))hashlibsha256encode	hexdigest)r   s    K/var/www/dev.catia.catastroantioquia-mas.com/tasa/security/jwt_validator.py
hash_tokenr   3   s     >>%,,.)3355    originreferrerc                     | t         v ryt         D ]$  }| j                  |j                  d            s$ y |r-t         D ]$  }|j                  |j                  d            s$ y y)u1   Valida el origen (misma lógica que jwt_embed.py)T/F)r   
startswithrstrip)r   r   alloweds      r   validate_originr    7   sj    &&( W^^C01 , 	G""7>>##67	 r   c           	         	 | sddddS t         st        j                  d       ddddS 	 t        j                  | t         t
        g      }|j                  d
      }|j                  d      }|j                  d      }|j                  dd      }|j                  dd      }|j                  d      }	|sB|	r@t        j                         j                         |	kD  rt        j                  d       ddddS t        ||      s!t        j                  d|        dd| ddS |rdnd}
t        j                  d|
 d| d|        ddd||xs d|||d|rdd gndgd!dS # t        $ r=}t        j                  dt        |              dd	t        |       ddcY d}~S d}~ww xY w# t        $ r3}t        j                  d"t        |       d#       dd$ddcY d}~S d}~ww xY w)%u5  
    Valida token JWT localmente (misma lógica que jwt_embed.validate_token)
    
    Args:
        token: Token JWT a validar
        referrer: Referrer HTTP (opcional)
    
    Returns:
        dict: {
            "success": 0 o 1,
            "message": str,
            "data": dict o None
        }
    r   zToken requeridoN)successmessagedatau*   ❌ JWT_SECRET_CHAT no configurado en .envu&   Configuración de seguridad incompleta)
algorithmsu   ⚠️ Token JWT inválido: u   Token inválido: r   clientIdwelcomeMessageaudioEnabledT	permanentFexpu   ⏰ Token temporal expiradozToken expiradou   🚫 Origen no permitido: zOrigen no permitido: 
PermanenteTemporalu   ✅ Token válido - Tipo: z
, Origen: z, Cliente:    u   Token válidou!   ¡Hola! Soy tu asistente de TASA.)r(   r   chataudio)validr&   r'   r)   configpermissionsu'   💥 Error inesperado validando token: )exc_infozError interno validando token)JWT_SECRET_KEYloggererrorr   decodeJWT_ALGORITHMr   warningstrgetr   utcnow	timestampr    info	Exception)r   r   payloader   	client_idwelcome_messageaudio_enabledr)   r*   
token_types              r   validate_jwt_tokenrF   I   s8   U
 ->MMLLEFC 	jj)?G X&KK
+	!++&67ND9KKU3	kk%  S **,s2!<> /   vx0NN7x@A26(;  &/\J
L !h !{$	
 &%"1"X5X&$1$ 5B0x

 	
Y  	NN9#a&BC.s1vh7 	x  
>s1vhGRVW6
 	

s^   F.  F. !E% B+F. 9,F. &>F. %	F+.2F& F+!F. &F++F. .	G*7(G%G*%G*)N)&__doc__osr   joser   r   r   dotenvr   loggingpathdirnameabspath__file__
script_dirtasa_dirapi_dirroot_dirjoinenv_pathgetenvr4   r8   ALLOWED_EMBED_ORIGINS_ENVsplitstripr   	getLogger__name__r5   r>   lenr:   r   boolr    dictrF   )r   s   0r   <module>r_      s   
      WW__RWW__X67
77??:&
''//(
#77??7#77<<%):FC H  ,.fg		.8 &BII&=rB :S:Y:YZ]:^_V\\^_ 
		8	$ EcJ_F`Eab c6c 6c 6C 3 $ $d
c d
S d
D d
Y `s   F