Spaces:
Sleeping
Sleeping
| import sqlite3 | |
| class UsuarioModel: | |
| def __init__(self): | |
| self.db_name = 'database.db' | |
| self.init_db() | |
| def init_db(self): | |
| with sqlite3.connect(self.db_name) as conn: | |
| cursor = conn.cursor() | |
| # Crear tabla usuario con campo password NO ENCRIPTADO solo para efectos educativos simples. | |
| # En un entorno real siempre usar hash (como bcrypt, argon2, etc) para guardar contraseñas. | |
| cursor.execute(''' | |
| CREATE TABLE IF NOT EXISTS usuario ( | |
| idusuario INTEGER PRIMARY KEY AUTOINCREMENT, | |
| usuario TEXT NOT NULL UNIQUE, | |
| password TEXT NOT NULL | |
| ) | |
| ''') | |
| # Crear usuario admin por defecto si no existe al iniciar la app | |
| cursor.execute("SELECT * FROM usuario WHERE usuario = 'admin'") | |
| if not cursor.fetchone(): | |
| cursor.execute("INSERT INTO usuario (usuario, password) VALUES ('admin', 'admin')") | |
| else: | |
| # Sincronizar contraseña si el usuario ya existe (por si se cambió en el código) | |
| cursor.execute("UPDATE usuario SET password = 'admin' WHERE usuario = 'admin'") | |
| conn.commit() | |
| # Método para verificar credenciales de login | |
| def login(self, usuario, password): | |
| try: | |
| with sqlite3.connect(self.db_name) as conn: | |
| conn.row_factory = sqlite3.Row # Para acceder a columnas por nombre | |
| cursor = conn.cursor() | |
| # Buscamos coincidencia exacta de usuario y contraseña (¡OJO! Texto plano no es seguro para prod) | |
| cursor.execute("SELECT * FROM usuario WHERE usuario = ? AND password = ?", (usuario, password)) | |
| return cursor.fetchone() # Retorna el usuario si existe, o None si no | |
| except Exception as e: | |
| print(f"Error en login: {e}") | |
| return None | |
| # Método para registrar un nuevo usuario | |
| def registrar(self, usuario, password): | |
| try: | |
| with sqlite3.connect(self.db_name) as conn: | |
| cursor = conn.cursor() | |
| # Verificar si el usuario ya existe | |
| cursor.execute("SELECT idusuario FROM usuario WHERE usuario = ?", (usuario,)) | |
| if cursor.fetchone(): | |
| return False, "El nombre de usuario ya está en uso." | |
| # Insertar nuevo usuario | |
| cursor.execute("INSERT INTO usuario (usuario, password) VALUES (?, ?)", (usuario, password)) | |
| conn.commit() | |
| return True, "Registro exitoso. Ahora puedes iniciar sesión." | |
| except Exception as e: | |
| print(f"Error en registro: {e}") | |
| return False, f"Error al procesar el registro: {e}" | |