|
38 | 38 | sanitize_input, sanitize_filename, |
39 | 39 | sanitize_message, sanitize_room_code |
40 | 40 | ) |
| 41 | +# Añadir esto al principio del archivo, después de los imports |
| 42 | +print("=== DEBUG ENVIRONMENT ===") |
| 43 | +print(f"USERS_JSON_LAST exists: {'USERS_JSON_LAST' in os.environ}") |
| 44 | +print(f"USERS_JSON_LAST length: {len(os.getenv('USERS_JSON_LAST', ''))}") |
| 45 | +print(f"USERS_JSON_LAST value: {os.getenv('USERS_JSON_LAST', 'EMPTY')[:100]}...") # Primeros 100 chars |
| 46 | +print("=========================") |
41 | 47 |
|
42 | 48 | # --- CONFIGURACIÓN INICIAL --- |
43 | 49 | UPLOAD_FOLDER = './cuarentena' |
|
93 | 99 | os.makedirs(app.config['UPLOAD_FOLDER'], exist_ok=True) |
94 | 100 |
|
95 | 101 | # --- CONFIGURACIÓN DE USUARIOS DEMO - CORREGIDA --- |
96 | | -def load_users_from_env(): |
| 102 | +def load_users_from_env_base(): |
97 | 103 | """Cargar usuarios desde variable de entorno JSON - VERSIÓN CORREGIDA""" |
98 | 104 | users_json = os.getenv("USERS_JSON_LAST", "[]") |
99 | 105 |
|
@@ -143,6 +149,81 @@ def load_users_from_env(): |
143 | 149 | print(f"✅ Usuarios por defecto cargados: {list(users_dict.keys())}") |
144 | 150 | return users_dict |
145 | 151 |
|
| 152 | +def load_users_from_env(): |
| 153 | + """Cargar usuarios desde variable de entorno JSON - CON FALLBACK DE EMERGENCIA""" |
| 154 | + users_json = os.getenv("USERS_JSON_LAST", "[]") |
| 155 | + |
| 156 | + print(f"🔍 DEBUG: Raw USERS_JSON_LAST = {users_json}") |
| 157 | + |
| 158 | + try: |
| 159 | + users_list = json.loads(users_json) |
| 160 | + users_dict = {} |
| 161 | + |
| 162 | + for user in users_list: |
| 163 | + username = user.get('username') |
| 164 | + password = user.get('password') |
| 165 | + role = user.get('role', 'usuario') |
| 166 | + |
| 167 | + if username and password: |
| 168 | + users_dict[username] = { |
| 169 | + "password": ph.hash(password), |
| 170 | + "role": role, |
| 171 | + "failed_attempts": 0, |
| 172 | + "last_attempt": None |
| 173 | + } |
| 174 | + |
| 175 | + # ✅ FALLBACK DE EMERGENCIA SI NO HAY USUARIOS |
| 176 | + if not users_dict: |
| 177 | + print("⚠️ No users found in JSON, creating emergency users...") |
| 178 | + users_dict = { |
| 179 | + "admin": { |
| 180 | + "password": ph.hash("admin123"), |
| 181 | + "role": "administrator", |
| 182 | + "failed_attempts": 0, |
| 183 | + "last_attempt": None |
| 184 | + }, |
| 185 | + "cliente": { |
| 186 | + "password": ph.hash("cliente123"), |
| 187 | + "role": "cliente", |
| 188 | + "failed_attempts": 0, |
| 189 | + "last_attempt": None |
| 190 | + }, |
| 191 | + "usuario": { |
| 192 | + "password": ph.hash("usuario123"), |
| 193 | + "role": "usuario", |
| 194 | + "failed_attempts": 0, |
| 195 | + "last_attempt": None |
| 196 | + }, |
| 197 | + # ✅ AÑADIR USUARIOS DE TU LISTA MANUALMENTE |
| 198 | + "arachne": { |
| 199 | + "password": ph.hash("Um4.PqN+_?7s"), |
| 200 | + "role": "admin", |
| 201 | + "failed_attempts": 0, |
| 202 | + "last_attempt": None |
| 203 | + }, |
| 204 | + "demo1": { |
| 205 | + "password": ph.hash("demo1pass"), |
| 206 | + "role": "usuario", |
| 207 | + "failed_attempts": 0, |
| 208 | + "last_attempt": None |
| 209 | + } |
| 210 | + } |
| 211 | + |
| 212 | + print(f"✅ Usuarios finales cargados: {list(users_dict.keys())}") |
| 213 | + return users_dict |
| 214 | + |
| 215 | + except Exception as e: |
| 216 | + print(f"❌ Error cargando usuarios JSON: {e}") |
| 217 | + # Fallback más robusto |
| 218 | + users_dict = { |
| 219 | + "admin": {"password": ph.hash("admin123"), "role": "administrator", "failed_attempts": 0, "last_attempt": None}, |
| 220 | + "usuario": {"password": ph.hash("usuario123"), "role": "usuario", "failed_attempts": 0, "last_attempt": None}, |
| 221 | + "arachne": {"password": ph.hash("Um4.PqN+_?7s"), "role": "admin", "failed_attempts": 0, "last_attempt": None} |
| 222 | + } |
| 223 | + print(f"✅ Usuarios de emergencia cargados: {list(users_dict.keys())}") |
| 224 | + return users_dict |
| 225 | + |
| 226 | + |
146 | 227 | # --- USUARIOS CARGADOS CORRECTAMENTE --- |
147 | 228 | users = load_users_from_env() |
148 | 229 |
|
@@ -354,6 +435,34 @@ def eliminar(nombre): |
354 | 435 | pass |
355 | 436 | return redirect(url_for('listar')) |
356 | 437 |
|
| 438 | +@app.route('/emergency-setup') |
| 439 | +def emergency_setup(): |
| 440 | + """Ruta temporal para crear usuarios de emergencia""" |
| 441 | + global users |
| 442 | + |
| 443 | + # Crear usuarios manualmente |
| 444 | + emergency_users = { |
| 445 | + "admin": {"password": ph.hash("admin123"), "role": "administrator"}, |
| 446 | + "usuario": {"password": ph.hash("usuario123"), "role": "usuario"}, |
| 447 | + "arachne": {"password": ph.hash("Um4.PqN+_?7s"), "role": "admin"}, |
| 448 | + "demo1": {"password": ph.hash("demo1pass"), "role": "usuario"} |
| 449 | + } |
| 450 | + |
| 451 | + # Actualizar el diccionario global |
| 452 | + for username, data in emergency_users.items(): |
| 453 | + users[username] = { |
| 454 | + "password": data["password"], |
| 455 | + "role": data["role"], |
| 456 | + "failed_attempts": 0, |
| 457 | + "last_attempt": None |
| 458 | + } |
| 459 | + |
| 460 | + return jsonify({ |
| 461 | + "message": "Usuarios de emergencia creados", |
| 462 | + "users": list(users.keys()) |
| 463 | + }) |
| 464 | + |
| 465 | + |
357 | 466 | @app.route('/chat') |
358 | 467 | @login_required |
359 | 468 | def chat(): |
|
0 commit comments