From e34d855f7c95518c3d02a2954a677d2515b41822 Mon Sep 17 00:00:00 2001 From: Tatiana Villa Ema Date: Sun, 3 May 2026 23:51:54 +0200 Subject: [PATCH] Gestion de usuarios --- .gitignore | 1 - app.py | 11 ++++++++--- users.json | 7 +++++++ 3 files changed, 15 insertions(+), 4 deletions(-) create mode 100644 users.json diff --git a/.gitignore b/.gitignore index 8930940..bea0955 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,5 @@ # Datos sensibles — nunca al repo config.ini -users.json *.pdf tickets/ diff --git a/app.py b/app.py index 11fc1fc..26b7704 100644 --- a/app.py +++ b/app.py @@ -139,16 +139,20 @@ def parsear_texto_ticket(texto): # Gestion de usuarios (users.json — NO subir al repo) # ----------------------------------------------------------------------- def cargar_usuarios(): - if not USERS_FILE.exists(): + if not USERS_FILE.exists() or USERS_FILE.is_dir(): return {} try: with open(USERS_FILE, encoding="utf-8") as f: contenido = f.read().strip() return json.loads(contenido) if contenido else {} - except json.JSONDecodeError: + except (json.JSONDecodeError, OSError): return {} def guardar_usuarios(users): + # Si por error Docker creó un directorio en lugar del archivo, lo eliminamos + if USERS_FILE.exists() and USERS_FILE.is_dir(): + import shutil + shutil.rmtree(USERS_FILE) with open(USERS_FILE, "w", encoding="utf-8") as f: json.dump(users, f, indent=2, ensure_ascii=False) @@ -653,7 +657,8 @@ def api_estadisticas(): # ----------------------------------------------------------------------- # Entry point # ----------------------------------------------------------------------- +inicializar_admin() # Necesario tanto para gunicorn como para python app.py + if __name__ == "__main__": - inicializar_admin() debug = os.environ.get("FLASK_DEBUG", "false").lower() == "true" app.run(host="127.0.0.1", port=5000, debug=debug) \ No newline at end of file diff --git a/users.json b/users.json new file mode 100644 index 0000000..955455f --- /dev/null +++ b/users.json @@ -0,0 +1,7 @@ +{ + "admin": { + "password_hash": "scrypt:32768:8:1$lOBFZebKVlP6Q2bH$6e5bffda7080d9b9ae3638ce13e14aae9819e2aeca2ae6809a0b62b93380c939c9ac5bfff9249dc57c4fcc757f8038965b454a9c8715e843c671ace227b7821d", + "nombre": "Admin", + "admin": true + } +} \ No newline at end of file