From aeba055e43b2c83b31cf08994ccfb828fddcf1b6 Mon Sep 17 00:00:00 2001 From: Luftmensch Date: Thu, 3 Sep 2026 16:48:05 +0700 Subject: [PATCH] fix: allow dev guest to switch to authenticated account --- app/templates/header.html | 4 ++++ app/web_app_fastapi.py | 6 +++--- tests/test_dev_mode_login.py | 15 +++++++++++++++ 3 files changed, 22 insertions(+), 3 deletions(-) create mode 100644 tests/test_dev_mode_login.py diff --git a/app/templates/header.html b/app/templates/header.html index 8074986..1958614 100644 --- a/app/templates/header.html +++ b/app/templates/header.html @@ -189,7 +189,11 @@ {{ user_info.role|upper }} {% if user_info.unit_name %} | {{ user_info.unit_name }}{% endif %} {% endif %} + {% if user_info.role == 'dev_guest' %} + 🔐 Đăng nhập Admin/Analyzer + {% else %} 🚪 Đăng xuất + {% endif %} {% else %}
👤 Khách diff --git a/app/web_app_fastapi.py b/app/web_app_fastapi.py index b79ff16..323af4b 100644 --- a/app/web_app_fastapi.py +++ b/app/web_app_fastapi.py @@ -845,9 +845,9 @@ def get_current_user(credentials: HTTPBasicCredentials = Depends(security)) -> O @app.get("/login", response_class=HTMLResponse, name="login") async def login_page(request: Request, next: str = "/"): - """Trang đăng nhập — nếu đã login rồi thì redirect ngay""" - # Nếu đã đăng nhập thì không cần vào trang login nữa - if get_session_user(request): + """Trang đăng nhập; dev_guest vẫn được phép chuyển sang tài khoản thật.""" + current_user = get_session_user(request) + if current_user and current_user.get("role") != "dev_guest": return RedirectResponse(url=next, status_code=303) return templates.TemplateResponse( "login.html", diff --git a/tests/test_dev_mode_login.py b/tests/test_dev_mode_login.py new file mode 100644 index 0000000..202f787 --- /dev/null +++ b/tests/test_dev_mode_login.py @@ -0,0 +1,15 @@ +from pathlib import Path + + +ROOT = Path(__file__).resolve().parents[1] +APP = (ROOT / "app" / "web_app_fastapi.py").read_text(encoding="utf-8") +HEADER = (ROOT / "app" / "templates" / "header.html").read_text(encoding="utf-8") + + +def test_dev_guest_is_allowed_to_open_login_page(): + assert 'current_user.get("role") != "dev_guest"' in APP + + +def test_dev_guest_header_offers_real_login_instead_of_logout(): + assert "user_info.role == 'dev_guest'" in HEADER + assert "url_for('login')" in HEADER