Upload 12 files
Browse files- database.py +7 -0
- manage_users.py +59 -0
database.py
CHANGED
|
@@ -125,6 +125,13 @@ def get_all_users() -> List[Dict[str, Any]]:
|
|
| 125 |
cur = conn.execute("SELECT id, username, role FROM users ORDER BY username")
|
| 126 |
return cur.fetchall()
|
| 127 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 128 |
# Videos
|
| 129 |
def create_video(filename: str, original_name: str, uploader: str, status: str) -> int:
|
| 130 |
with get_conn() as conn:
|
|
|
|
| 125 |
cur = conn.execute("SELECT id, username, role FROM users ORDER BY username")
|
| 126 |
return cur.fetchall()
|
| 127 |
|
| 128 |
+
def update_user_password(username: str, pw_hash: str):
|
| 129 |
+
with get_conn() as conn:
|
| 130 |
+
conn.execute(
|
| 131 |
+
"UPDATE users SET pw_hash = ? WHERE username = ?",
|
| 132 |
+
(pw_hash, username)
|
| 133 |
+
)
|
| 134 |
+
|
| 135 |
# Videos
|
| 136 |
def create_video(filename: str, original_name: str, uploader: str, status: str) -> int:
|
| 137 |
with get_conn() as conn:
|
manage_users.py
ADDED
|
@@ -0,0 +1,59 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import argparse
|
| 2 |
+
from passlib.hash import bcrypt
|
| 3 |
+
from database import set_db_path, init_schema, get_all_users, create_user, get_user, update_user_password
|
| 4 |
+
|
| 5 |
+
DB_PATH = "/tmp/data/app.db"
|
| 6 |
+
|
| 7 |
+
def hash_password(password: str) -> str:
|
| 8 |
+
return bcrypt.hash(password)
|
| 9 |
+
|
| 10 |
+
def main():
|
| 11 |
+
set_db_path(DB_PATH)
|
| 12 |
+
init_schema()
|
| 13 |
+
|
| 14 |
+
parser = argparse.ArgumentParser(description="Gestionar usuarios de la aplicación Veureu.")
|
| 15 |
+
subparsers = parser.add_subparsers(dest="command", required=True)
|
| 16 |
+
|
| 17 |
+
# Comando para listar usuarios
|
| 18 |
+
parser_list = subparsers.add_parser("list", help="Listar todos los usuarios.")
|
| 19 |
+
|
| 20 |
+
# Comando para añadir un usuario
|
| 21 |
+
parser_add = subparsers.add_parser("add", help="Añadir un nuevo usuario.")
|
| 22 |
+
parser_add.add_argument("username", help="Nombre de usuario.")
|
| 23 |
+
parser_add.add_argument("password", help="Contraseña del usuario.")
|
| 24 |
+
parser_add.add_argument("role", help="Rol del usuario (ej: admin, editor, viewer).")
|
| 25 |
+
|
| 26 |
+
# Comando para resetear la contraseña
|
| 27 |
+
parser_reset = subparsers.add_parser("reset-password", help="Restablecer la contraseña de un usuario.")
|
| 28 |
+
parser_reset.add_argument("username", help="Nombre del usuario a modificar.")
|
| 29 |
+
parser_reset.add_argument("new_password", help="Nueva contraseña.")
|
| 30 |
+
|
| 31 |
+
args = parser.parse_args()
|
| 32 |
+
|
| 33 |
+
if args.command == "list":
|
| 34 |
+
users = get_all_users()
|
| 35 |
+
if not users:
|
| 36 |
+
print("No hay usuarios en la base de datos.")
|
| 37 |
+
return
|
| 38 |
+
print(f"Usuarios encontrados ({len(users)}):")
|
| 39 |
+
for user in users:
|
| 40 |
+
print(f" - ID: {user['id']}, Usuario: {user['username']}, Rol: {user['role']}")
|
| 41 |
+
|
| 42 |
+
elif args.command == "add":
|
| 43 |
+
if get_user(args.username):
|
| 44 |
+
print(f"Error: El usuario '{args.username}' ya existe.")
|
| 45 |
+
return
|
| 46 |
+
pw_hash = hash_password(args.password)
|
| 47 |
+
create_user(args.username, pw_hash, args.role)
|
| 48 |
+
print(f"Usuario '{args.username}' creado con éxito.")
|
| 49 |
+
|
| 50 |
+
elif args.command == "reset-password":
|
| 51 |
+
if not get_user(args.username):
|
| 52 |
+
print(f"Error: El usuario '{args.username}' no existe.")
|
| 53 |
+
return
|
| 54 |
+
pw_hash = hash_password(args.new_password)
|
| 55 |
+
update_user_password(args.username, pw_hash)
|
| 56 |
+
print(f"Contraseña del usuario '{args.username}' actualizada con éxito.")
|
| 57 |
+
|
| 58 |
+
if __name__ == "__main__":
|
| 59 |
+
main()
|