
    i#                         S SK Jr  S SK JrJrJrJrJrJr  S SK	r	S SK
Jr  S SKJr  S SKrS SKJr  S SKJr  S SKJrJr  S
S	 jrg)    )current_app)requestrender_templateredirecturl_forjsonifysessionNwraps)datetime)get_connection)send_activation_email)consultar_usersActualizar_ultimo_loginc                    ^ ^ T R                   " SS/S9S 5       nT R                   " S5      S 5       nS nUT l        T R                   " S5      US	 5       5       nT R                   " S
S/S9U U4S j5       n[        $ )Nz/auth/loginPOST)methodsc                  h    [         R                  " 5       n U (       d  [        SSS.5      S4$ U R                  S5      nU R                  S5      nU R                  SS5      nU(       a  U(       d  [        SSS.5      S4$ [	        U5      n[        U[        5      (       a  [        U5      S	:X  a  U$ UnUS
   nUS   nUS   nUS   n	U	S:w  a  [        SSS.5      S4$ Uc  [        SSS.5      S4$  [        U5      R                  5       n
[        R                  " UR                  S5      U
R                  S5      5      nU(       d  [        SSS.5      S4$ [        U5      nU(       d  [        SU 35        [        R                   " 5         U[        S'   U[        S'   U(       a  S[        l        [        SSSS.5      $ ! [$         a(  n[        SU 35        [        SSS.5      S4s SnA$ SnAff = f! [$         a4  n[        SU 35        [        SS[        U5       3S.5      S4s SnA$ SnAff = f) uP   
Autenticación de usuarios.
Verifica las credenciales contra la base de datos.
FzNo se recibieron datos.successmessage  emailpasswordrememberu   Falta correo o contraseña.   UserIDEmailPasswordHashStatusACTIVOu?   Tu cuenta no está activa. Por favor, activa tu cuenta primero.i  Nug   Debes establecer tu contraseña primero. Verifica tu correo electrónico para el enlace de activación.zutf-8uF   Credenciales incorrectas. Por favor, verifica tu correo y contraseña.u?   Advertencia: No se pudo actualizar último login para usuario: user_idTu   Inicio de sesión exitoso.z/index)r   r   r   u    Error al verificar contraseña: u@   Error al verificar credenciales. Por favor, inténtalo de nuevo.  zError en login: u$   Error durante el inicio de sesión: )r   get_jsonr   getr   
isinstancetuplelenstrstripbcryptcheckpwencoder   printr	   clear	permanent	Exception)datar   r   r   result	user_datar"   db_emailpassword_hashstatus
clean_hashis_validupdate_successes                 XC:\Users\victor.barrera\Documents\proyectos\elepV3\Elep\src\App\Security_Module\login.py
login_authauth_routes.<locals>.login_auth   s   \	##%D5=VWXZ]]]HHW%Exx
+Hxx
E2H5=Z[\^aaa$U+F&%((S[A-= I)G )H%n5Mx(F !$`     $$  I    
+ /557
 ">>OOG,%%g.
  "#(#k$    "9!A%[\c[def %,	"#(  (,G%#; (     8<=$a      	$QC() A#a&J   	sg   +G3 AG3  0G3 1+G3 G3 1A$F> A'F> >
G0G+%G0&G3 +G00G3 3
H1=)H,&H1,H1z/auth/logoutc                  T    [         R                  " 5         [        [        S5      5      $ )u    
Cierra la sesión del usuario.
login)r	   r/   r   r        r<   logout_auth auth_routes.<locals>.logout_autht   s    
 	())rB   c                 0   ^  [        T 5      U 4S j5       nU$ )Nc                  P   > S[         ;  a  [        [        S5      5      $ T" U 0 UD6$ )Nr"   r@   )r	   r   r   )argskwargsfs     r<   decorated_function?auth_routes.<locals>.login_required.<locals>.decorated_function~   s+    ' 011d%f%%rB   r
   )rI   rJ   s   ` r<   login_required#auth_routes.<locals>.login_required}   s!    	q	& 
	& "!rB   z/profilec                      [        S5      $ )Nzprofile.html)r   rA   rB   r<   profileauth_routes.<locals>.profile   s     ~..rB   z/auth/reset-password-requestc                    >  [         R                  " 5       n U (       a  U R                  S5      (       d  [        SSS.5      S4$ U R                  S5      nSn[	        5        nUR                  5       nUR                  X!/5        UR                  5       nU(       d  [        SSS.5      sS	S	S	5        $ Uu  pgn[        TTU5      n	[        U	[        5      (       a\  U	u  p [        U
S
5      (       a  U
R                  5       nOU
R                  n[        SUR                  SS5      S.5      U4sS	S	S	5        $ [        SSS.5      sS	S	S	5        $ ! [         a1  n[        SU 35        [        SSS.5      S4s S	nAsS	S	S	5        $ S	nAff = f! , (       d  f       g	= f! [         aE  n[        SU 35        SS	Kn[        UR!                  5       5        [        SSS.5      S4s S	nA$ S	nAff = f)us   
Procesa la solicitud de recuperación de contraseña.
Genera un token y envía un correo electrónico al usuario.
r   Fu   Correo electrónico requeridor   r   zu
                SELECT UserID, Email, Status
                FROM Users
                WHERE Email = ?
            TuT   Si tu correo está registrado, recibirás un enlace para restablecer tu contraseña.Nr$   errorz*Error al enviar correo de restablecimientoz&Error al procesar respuesta de error: r#   ub   Se ha enviado un enlace para restablecer tu contraseña. Por favor, revisa tu correo electrónico.z(Error en solicitud de restablecimiento: r   uA   Error al procesar la solicitud. Por favor, inténtalo más tarde.)r   r$   r%   r   r   cursorexecutefetchoner   r&   r'   hasattrjsonr1   r.   	traceback
format_exc)r2   r   check_queryconnrS   r4   r"   
user_emailr7   token_resultjson_responsestatus_code
error_datar;   rX   appmails                  r<   auth_request_password_reset0auth_routes.<locals>.auth_request_password_reset   s   E	##%Dtxx005=\]^`cccHHW%EK  !T{G4"OO-	  ##'#y$  "! /8+V  5S$H lE221=.M "=*==)6)?)?)AJ)6););J  '','1~~g?k'l(   ( (? "!T #  D  U "!F %   FqcJK&','S(        K "!F G "!^  	<QC@A)&&() ^   		s   AF F "AF)	F 3+FAE,	F 6F	F 
FF4F5F9	F FF
FF F 
G+&:G& G+&G+)routerL   auth_routes)ra   rb   r=   rC   rL   rO   rc   s   ``     r<   rf   rf      s    YY}vh/a 0aF 	YY~* *" (C 	YYz/  / 	YY-x@J AJZ rB   )N)flaskr   ra   r   r   r   r   r   r	   r+   	functoolsr   r   jwtConsultas_SQL.conexionr    App.Security_Module.UserPasswordr   Consultas_SQL.Security.loginSQLr   r   rf   rA   rB   r<   <module>rm      s+   
 % O O    
 1 B TMrB   