
    ig                     l    d dl Z d dlmZmZ d dlZd dlmZmZ d dlZd dlmZ d dl	Z	 G d d          Z
dS )    N)datetime	timedelta)HTTPExceptionRequest)validatec                       e Zd ZdZ	 edd            Z	 	 d Z	 	 defdZ	 	 ed             Z		 	 ed	             Z
	 	 ed
efd            ZdS )Responseui   Clase para generar respuestas de manera estándar, 
        con su codigo de respuesta y mensaje de errorFNc                     dddddd}| dk    r||d         v r|d         |         }n|                     | |r|nd          }|r| d	z   |d
d|id}n| d	z   |d||dd}|S )Nu   Usuario creado con éxitou   Sesión creada con éxitou!   Usuario o contraseña incorrectoszUsuario no encontrado)     i  )register_userlogin_usersr   u   Operación exitosa_serviceTmessage)servicestatus_codeerrordataF)r   r   )get)function_namer   r   r   custom_messagemessagesr   responses           FC:\Users\USER\Downloads\context-online-360-back\decorador\decorator.pygenerate_responsezResponse.generate_response   s     908, 
 
 M))kXm=T.T.T}-k:GGll=N2l..XlmmG 	(:5*w	 HH ):5*&  	 H     c                    t          j        d          }t          j        d          }t          j                    t	          d          z   }|                                }	|||	|||d}
t          j        |
||          }|S )N
SECRET_KEY	ALGORITHM   )hours)idsubexp
first_name	last_nameemail)	algorithm)osgetenvr   utcnowr   	timestampjwtencode)selfuser_idusernamer%   r&   r'   
secret_keyr(   
expirationexp_timestamppayloadtokens               r   create_jwt_tokenzResponse.create_jwt_token:   s    Y|,,
Ik**	_&&);););;
",,..  $"
 
 
7J)DDDr   r6   c                    	 t          j        d          }t          j        d          }t          j        | ||g          }|d         }t	          j                                                    }t          |          }||k     rt          d          |S # t          j	        $ r t          d          t          j
        $ r}t          d|           Y d }~nd }~ww xY wt          d          )Nr   r   )
algorithmsr$   zToken expiredu   La excepción es)r)   r*   r-   decoder   r+   r,   int	ExceptionExpiredSignatureErrorInvalidTokenErrorprint)r6   r2   r(   decoded_tokenr4   current_timestampes          r   validate_jwt_tokenzResponse.validate_jwt_tokenQ   s   	)<00J	+..IJuji[QQQM)%0M ( 1 1 ; ; = =..M000000  ( 	1 	1 	1000$ 	) 	) 	)$a((((((((	)(((s   BB ,CCCc                  J   t           j                            t           j                            t                    dd          } 	 t          | d          5 }t          j        |          }d d d            n# 1 swxY w Y   |S # t          $ r t          dd|            w xY w)Nz..zschema.jsonri  z3El archivo schema.json no se encuentra en la ruta: r   detail)
r)   pathjoindirname__file__openjsonloadFileNotFoundErrorr   )schema_pathfileschemass      r   load_schemaszResponse.load_schemasj   s    gll27??8#<#<dMRR	}k3'' *4)D//* * * * * * * * * * * * * * *N  	} 	} 	}C8{ny8{8{||||	}s0   B A6*B 6A::B =A:>B B"c                    t                                           }|                    |          }|st          dd          	 t	          | |           n}# t
          j        j        $ rf}|j        d         }|j	        
                                                    dd          
                                }t          d| d	|           d }~ww xY w| S )
Nr   u$   Esquema de validación no encontradorF   )instanceschemar   z400: z
The field z is not valid )r	   rS   r   r   r   
jsonschema
exceptionsValidationErrorrH   r   stripreplacer<   )r   r   rR   rV   ve
field_nameerror_messages          r   validate_input_datazResponse.validate_input_datav   s    ''))]++ 	`C8^____	Td622222$4 	T 	T 	TJJ,,..66vrBBHHJJMRRR=RRSSS	T
 s   A C)A!C

Crequestc                 n   | j                             d          p| j                            d          }|st          dd          |                    d          r
|dd          }	 t
                              |          }|S # t          $ r&}t          ddt          |                     d }~ww xY w)	N	authTokenAuthorizationi  zToken missingrF   zBearer    zInvalid or expired token: )	cookiesr   headersr   
startswithr	   rC   r<   str)ra   r6   r@   rB   s       r   validate_sessionzResponse.validate_session   s    ##K00XGO4G4G4X4X 	ICHHHHI&& 	!""IE	_$77>>M   	_ 	_ 	_C8]UXYZU[U[8]8]^^^^	_s   (B 
B4!B//B4)FN)__name__
__module____qualname____doc__staticmethodr   r7   ri   rC   rS   r`   r   rj    r   r   r	   r	   
   s        9 92 # # # \#J *&  ( ,()# ) ) ) ). :+} } \} 4'  \  *$_' _ _ _ \_ _ _r   r	   )r-   r   r   r)   fastapir   r   rX   r   rM   r	   rp   r   r   <module>rr      s    



 ( ( ( ( ( ( ( ( 				 * * * * * * * *           M_ M_ M_ M_ M_ M_ M_ M_ M_ M_r   