a
    Tei#                     @   s   d dl mZ d dl mZmZmZmZmZmZ d dl	Z	d dl
mZ d dlmZ d dlZd dlmZ d dlmZ d dlmZmZ dd	d
ZdS )    )current_app)requestrender_templateredirecturl_forjsonifysessionNwraps)datetime)get_connection)send_activation_email)consultar_usersActualizar_ultimo_loginc                    sp    j ddgddd }  ddd }d	d
 }| _  d|dd } j ddgd fdd}tS )Nz/auth/loginPOST)methodsc               
   S   s  zt  } | s$tddddfW S | d}| d}| dd}|rL|s`tddddfW S t|}t|trt|d	kr|W S |}|d
 }|d }|d }|d }	|	dkrtddddfW S |du rtddddfW S zt|	 }
t
|d|
d}|s"tddddfW W S t|}|s>td|  t  |td< |td< |rbdt_tddddW W S  ty } z.td|  tddddfW  Y d}~W S d}~0 0 W nP ty } z6td|  tddt| ddfW  Y d}~S d}~0 0 dS ) uh   
        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.   UserIDZEmailZPasswordHashZStatusZ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bcryptZcheckpwencoder   printr   clear	permanent	Exception)datar   r   r   result	user_datar   Zdb_emailZpassword_hashstatusZ
clean_hashZis_validZupdate_successe r/   ./var/www/html/src/App/Security_Module/login.py
login_auth   s    

 zauth_routes.<locals>.login_authz/auth/logoutc                   S   s   t   ttdS )u0   
        Cierra la sesión del usuario.
        login)r   r'   r   r   r/   r/   r/   r0   logout_autht   s    z auth_routes.<locals>.logout_authc                    s   t   fdd}|S )Nc                     s"   dt vrttdS  | i |S )Nr   r2   )r   r   r   )argskwargsfr/   r0   decorated_function~   s    z?auth_routes.<locals>.login_required.<locals>.decorated_functionr	   )r7   r8   r/   r6   r0   login_required}   s    z#auth_routes.<locals>.login_requiredz/profilec                   S   s   t dS )Nzprofile.html)r   r/   r/   r/   r0   profile   s    zauth_routes.<locals>.profilez/auth/reset-password-requestc                     s  z~t  } | r| ds.tddddfW S | d}d}t (}| }|||g | }|stdddW  d	   W S |\}}}t |}	t	|	t
rN|	\}
}zFt|
d
r|
 }n|
j}td|ddd|fW W  d	   W S  tyL } z<td|  tddddfW  Y d	}~W  d	   W S d	}~0 0 tdddW  d	   W S 1 st0    Y  W nZ ty } z@td|  dd	l}t|  tddddfW  Y d	}~S d	}~0 0 d	S )u   
        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jsonr)   r&   	traceback
format_exc)r*   r   Zcheck_queryconnr<   r,   r   Z
user_emailr-   token_resultjson_responsestatus_code
error_datar.   rA   appmailr/   r0   auth_request_password_reset   sf    





*.z0auth_routes.<locals>.auth_request_password_reset)router9   auth_routes)rI   rJ   r1   r3   r9   r:   rK   r/   rH   r0   rM      s    
c
	MrM   )N)flaskr   rI   r   r   r   r   r   r   r$   	functoolsr
   r   ZjwtConsultas_SQL.conexionr    App.Security_Module.UserPasswordr   ZConsultas_SQL.Security.loginSQLr   r   rM   r/   r/   r/   r0   <module>   s    