
    i.                        d dl Z d dlZd dlmZ d dlmZmZ d dlmZm	Z	m
Z
mZmZmZmZ d dlmZmZmZmZmZmZ d dlmZ e j                            e j                            e                    Ze j                            ed          Z eedd	d
          Zdej        d<   dej        d<   dej        d<   dej        d<    e            Z e !                    e           de _"        de _#        de _$         G d de          Z%d Z&d Z'd Z(e j)        d             Z*d Z+e,                    ddg           d!             Z-e,                    d"d#g           d$             Z.e,                    d%          ed&                         Z/e,                    d'           e+d(          d)                         Z0e1                    d*          d+             Z2e,                    d,dd#g           ed-                         Z3ed.k    r> e4e j5        6                    d/d0                    Z7e8                    d1e7d2           dS dS )3    N)wraps)check_password_hashgenerate_password_hash)Flaskrender_templaterequestredirecturl_forflashabort)LoginManager	UserMixin
login_userlogout_usercurrent_userlogin_required)r   zusers.db	templatesstaticz/static)template_folderstatic_folderstatic_url_pathz*SECOS_DATACENTER_2026_super_secret_key_!@#
SECRET_KEYTSESSION_COOKIE_HTTPONLYLaxSESSION_COOKIE_SAMESITEFSESSION_PERMANENTindexu3   Debes iniciar sesión para acceder a esta sección.errorc                       e Zd Zd ZdS )Userc                 t    t          |          | _        || _        || _        || _        || _        || _        d S N)stridnameemailpassword_hashrolestatus)selfid_r%   r&   r'   r(   r)   s          /home/html/datacenter/app.py__init__zUser.__init__3   s7    c((	
*	    N)__name__
__module____qualname__r-    r.   r,   r    r    2   s#            r.   r    c                  Z    t          j        t                    } t           j        | _        | S r"   )sqlite3connectDB_PATHRowrow_factory)conns    r,   get_db_connectionr:   <   s     ?7##D{DKr.   c                     t                      }|                    d| f                                          }|                                 |S )Nz~
        SELECT id, name, email, password_hash, role, status
        FROM users
        WHERE lower(email) = lower(?)
        r:   executefetchoneclose)r&   r9   rows      r,   get_user_by_emailrA   B   sN    D
,,	
 
  hjj  	JJLLLJr.   c                     t                      }|                    d| f                                          }|                                 |S )Nzm
        SELECT id, name, email, password_hash, role, status
        FROM users
        WHERE id = ?
        r<   )user_idr9   r@   s      r,   get_user_by_idrD   P   sN    D
,,	
 

  hjj  	JJLLLJr.   c           	          t          |           }|sd S t          |d         |d         |d         |d         |d         |d                   S )Nr$   r%   r&   r'   r(   r)   )rD   r    )rC   r@   s     r,   	load_userrF   ^   sY    

!
!C tD	FGOFH  r.   c                        fd}|S )Nc                 Z     t                     t           fd                        }|S )Nc                  N    t           j        vrt          d            | i |S )N  )r   r(   r   )argskwargsallowed_roles	view_funcs     r,   wrapperz0require_role.<locals>.decorator.<locals>.wrapperp   s3      55c


9d-f---r.   )r   r   )rN   rO   rM   s   ` r,   	decoratorzrequire_role.<locals>.decoratoro   sF    	y				. 	. 	. 	. 	. 
 
		. r.   r2   )rM   rP   s   ` r,   require_rolerQ   n   s$         r.   /GET)methodsc                      t           j        r1t          dt           j        t           j        t           j                  S t          j                            dd          } t          d|           S )Nzdatacenter.html)	user_name
user_email	user_roler&    z
index.htmlr&   )	r   is_authenticatedr   r%   r&   r(   r   rK   getrZ   s    r,   r   r   z   se    $ 
"'#)"'	
 
 
 	
 LWb))E<u5555r.   z/loginPOSTc            	         t           j                            dd                                          } t           j                            dd                                          }| r|s1t	          dd           t          t          d|           dz             S t          |           }|st          d	d
          dfS |d         dk    rt          d	d
          dfS t          |d         |          s1t	          dd           t          t          d|           dz             S t          |d         |d         |d         |d         |d         |d                   }t          |           t          t          d                    S )Nr&   rY   passwordu$   Debes ingresar correo y contraseña.r   r   rZ   z#login403.htmlT
allow_backrJ   r)   activer'   u   Contraseña incorrecta.r$   r%   r(   )r   formr\   stripr   r	   r
   rA   r   r   r    r   )r&   r_   r@   users       r,   loginrg      s   LWb))//11E|
B//5577H B B4g>>>u555@AAA
E
"
"C  
 
 
  	 8}  
 
 
  	 s?3X>> B'111u555@AAAD	FGOFH D tGG$$%%%r.   z/logoutc                  V    t                       t          t          d                    S )Nr   )r   r	   r
   r2   r.   r,   logoutri      s#     MMMGG$$%%%r.   z/admin/adminc                  (    t          dd          dfS Nr`   Tra   rJ   r   r2   r.   r,   admin_panelrn      s+         r.   rJ   c                 (    t          dd          dfS rl   rm   )r   s    r,   	forbiddenrp      s)        r.   z/change-passwordc                  ~   t           j        dk    rt           j                            dd                                          } t           j                            dd                                          }t           j                            dd                                          }| r|r|s,t          dd           t          t          d                    S t          t          j
        |           s,t          d	d           t          t          d                    S ||k    r,t          d
d           t          t          d                    S t          |          dk     r,t          dd           t          t          d                    S t          |          }t                      }|                    d|t          j        f           |                                 |                                 |t          _
        t          dd           t          t          d                    S t%          d          S )Nr]   current_passwordrY   new_passwordconfirm_passwordz!Debes completar todos los campos.r   change_passwordu$   La contraseña actual es incorrecta.u5   La nueva contraseña y su confirmación no coinciden.   u6   La nueva contraseña debe tener al menos 8 caracteres.z/UPDATE users SET password_hash = ? WHERE id = ?u-   Tu contraseña fue actualizada correctamente.successzchange_password.html)r   methodrd   r\   re   r   r	   r
   r   r   r'   lenr   r:   r=   r$   commitr?   r   )rr   rs   rt   new_hashr9   s        r,   ru   ru      s    ~"<++,>CCIIKK|'';;AACC"<++,>CCIIKK 	8| 	8;K 	85w???G$566777"<#=?OPP 	88'BBBG$566777+++I7SSSG$566777|q  JGTTTG$566777),77 ""=|'	
 	
 	
 	

 &."=yIII 1223331222r.   __main__PORTi|  z0.0.0.0)hostportdebug)9osr4   	functoolsr   werkzeug.securityr   r   flaskr   r   r   r	   r
   r   r   flask_loginr   r   r   r   r   r   pathabspathdirname__file__BASE_DIRjoinr6   r/   appconfiglogin_managerinit_app
login_viewlogin_messagelogin_message_categoryr    r:   rA   rD   user_loaderrF   rQ   router   rg   ri   rn   errorhandlerrp   ru   intenvironr\   r   runr2   r.   r,   <module>r      s   				        I I I I I I I I                                 2 1 1 1 1 1 7??27??84455
',,x
,
,e	   H
< (,
$ %(-
$ %"'
     s   " S '. $    9            	 	 	 3  
6 
6 ! 
6 8fX&&'& '& '&'&T 9& &  &
 9g    #   v77&3 &3  87&3R z3rz~~fd++,,DGGUG33333 r.   