feat: v4.0.2 — qualité & robustesse (session expiry UX, validation, mobile, tests)

- Session expiry: redirects ajoutent ?expired=1 → bannière "Session expired" sur login
- Page titles: titre vide → 'Untitled' par défaut (au lieu de chaîne vide)
- Error handling: try/catch dans create_page avec message user-friendly (500)
- Mobile responsive: sidebar slide-in, modales centrées, landing page adaptative
- 10 nouveaux tests de non-régression: landing, register, 404, validation, duplicate
- 143 tests passent (133 + 10)
This commit is contained in:
2026-07-20 08:07:22 -04:00
parent a5831456e1
commit ed465333e4
5 changed files with 200 additions and 19 deletions
+2 -2
View File
@@ -27,7 +27,7 @@ def _get_user_or_redirect(request: Request):
return {"id": 1, "login": "admin", "full_name": "Admin", "is_admin": True}
except Exception:
pass
return RedirectResponse("/auth/login?provider=local", status_code=302)
return RedirectResponse("/auth/login?provider=local&expired=1", status_code=302)
return user
@@ -1285,7 +1285,7 @@ async def workspaces_page(request: Request):
sidebar = _sidebar_data(request, [], include_workspace=False)
user = SessionManager.decode_session(request.cookies.get("flowdeck_session", ""))
if not user:
return RedirectResponse("/auth/login?provider=local", status_code=302)
return RedirectResponse("/auth/login?provider=local&expired=1", status_code=302)
ctx = {**sidebar, "user": user}
# Pass active workspace for breadcrumb nav menu (null on workspaces home)
ws = _get_active_workspace(request, user_id=_get_user_id(request))