From bb0d1111f0e18a867676cfc4f44e76dbd10a1070 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=AE=D1=80=D0=B8=D0=B9=20=D0=A7=D0=B5=D1=80=D0=BD=D0=B5?= =?UTF-8?q?=D0=BD=D0=BA=D0=BE?= Date: Thu, 23 Apr 2026 12:11:35 +0300 Subject: [PATCH] =?UTF-8?q?=D1=84=D0=B8=D0=BA=D1=81=20=D1=83=D1=87=D0=B5?= =?UTF-8?q?=D1=82=D0=BA=D0=B8=202?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app.py | 109 ++++++++++++++++++++------------------------------------- 1 file changed, 37 insertions(+), 72 deletions(-) diff --git a/app.py b/app.py index 3319c0f..c917311 100644 --- a/app.py +++ b/app.py @@ -815,95 +815,60 @@ def admin_db_create_account( return RedirectResponse(url="/login", status_code=303) username = username.strip() - password = password.strip() role = (role or "operator").strip().lower() if not username: - return render_admin_db_index( - request, - account_output="Логин обязателен.", - account_success=False, - ) + return render_admin_db_index(request, account_output="Логин обязателен.", account_success=False) if not password: - return render_admin_db_index( - request, - account_output="Пароль обязателен.", - account_success=False, - ) + return render_admin_db_index(request, account_output="Пароль обязателен.", account_success=False) + + if len(password) < 6: + return render_admin_db_index(request, account_output="Пароль должен быть не короче 6 символов.", account_success=False) if role not in {"admin", "operator"}: - return render_admin_db_index( - request, - account_output="Роль должна быть admin или operator.", - account_success=False, - ) + return render_admin_db_index(request, account_output="Роль должна быть admin или operator.", account_success=False) password_hash = hash_password(password) conn = get_connection() - success = True - messages: list[str] = [] try: - with conn: - with conn.cursor() as cur: - try: - cur.execute( - """ - INSERT INTO admin_users (username, password_hash, role, is_active) - VALUES (%s, %s, %s, TRUE) - ON CONFLICT (username) DO NOTHING - RETURNING id; - """, - (username, password_hash, role), - ) - except Exception: - conn.rollback() - with conn: - with conn.cursor() as fallback_cur: - fallback_cur.execute( - """ - INSERT INTO admin_users (username, password_hash, is_active) - VALUES (%s, %s, TRUE) - ON CONFLICT (username) DO NOTHING - RETURNING id; - """, - (username, password_hash), - ) - row = fallback_cur.fetchone() - if row: - messages.append(f"Пользователь создан: {username} (id={row[0]})") - messages.append("Примечание: колонка role в БД не найдена, роль не сохранена.") - else: - success = False - messages.append(f"Пользователь '{username}' уже существует.") - return render_admin_db_index( - request, - account_output="\n".join(messages), - account_success=success, - ) + with conn.cursor() as cur: + cur.execute( + """ + INSERT INTO admin_users (username, password_hash, role, is_active) + VALUES (%s, %s, %s, TRUE) + ON CONFLICT (username) DO NOTHING + RETURNING id; + """, + (username, password_hash, role), + ) + row = cur.fetchone() + conn.commit() + + if row: + return render_admin_db_index( + request, + account_output=f"Пользователь создан: {username} (id={row[0]})\nРоль: {role}", + account_success=True, + ) + + return render_admin_db_index( + request, + account_output=f"Пользователь '{username}' уже существует.", + account_success=False, + ) - row = cur.fetchone() - if row: - messages.append(f"Пользователь создан: {username} (id={row[0]})") - messages.append(f"Роль: {role}") - else: - success = False - messages.append(f"Пользователь '{username}' уже существует.") except Exception: - success = False - messages.append("Ошибка при создании аккаунта:") - messages.append(traceback.format_exc()) + conn.rollback() + return render_admin_db_index( + request, + account_output="Ошибка при создании аккаунта:\n" + traceback.format_exc(), + account_success=False, + ) finally: conn.close() - return render_admin_db_index( - request, - account_output="\n".join(messages).strip(), - account_success=success, - ) - - @app.get("/admin/db/players", response_class=HTMLResponse) def admin_db_players(request: Request, q: str = Query(default="")): # denied = require_role(request, {"admin"})