fix: login → /workspaces, workspace tree filtered, sidebar CRUD
- Login redirect (all modes) now goes to /workspaces - Workspace tree API filters by active workspace_id (no leak) - Workspace name in sidebar from cookie (active_ws_name) - Sidebar workspace section: 📄 new page + 📁 new folder buttons - deleteWorkspacePage() in sidebar with confirmation - _load_workspace_pages() helper with workspace_id filter - CSS for sidebar-item-delete button (× on hover)
This commit is contained in:
+2
-2
@@ -99,7 +99,7 @@ async def login(request: Request, provider: str = Query("gitea")):
|
||||
user = conn.execute("SELECT * FROM users WHERE login='admin'").fetchone()
|
||||
user_data = dict(user)
|
||||
session = SessionManager.create_session(user_data)
|
||||
response = RedirectResponse(url="/", status_code=302)
|
||||
response = RedirectResponse(url="/workspaces", status_code=302)
|
||||
response.set_cookie("flowdeck_session", session, httponly=True, max_age=86400 * 7, samesite="lax")
|
||||
return response
|
||||
|
||||
@@ -265,7 +265,7 @@ async def callback(
|
||||
|
||||
# Create session
|
||||
session = SessionManager.create_session(user_data)
|
||||
response = RedirectResponse(url="/", status_code=302)
|
||||
response = RedirectResponse(url="/workspaces", status_code=302)
|
||||
response.set_cookie("flowdeck_session", session, httponly=True, max_age=86400 * 7, samesite="lax")
|
||||
return response
|
||||
|
||||
|
||||
@@ -140,6 +140,22 @@ def _build_page_tree(conn, parent_id: int | None, ws_key: str, depth: int = 0, m
|
||||
return items
|
||||
|
||||
|
||||
def _load_workspace_pages(ws_cookie: str) -> list:
|
||||
"""Load top-level pages for the active workspace."""
|
||||
if not ws_cookie:
|
||||
return []
|
||||
try:
|
||||
ws_id = int(ws_cookie)
|
||||
with get_conn() as conn:
|
||||
rows = conn.execute(
|
||||
"SELECT id, title FROM pages WHERE workspace_id=? AND parent_id IS NULL ORDER BY created_at DESC",
|
||||
(ws_id,),
|
||||
).fetchall()
|
||||
return [{"db_id": r["id"], "name": r["title"] or "Untitled", "id": f"page/{r['id']}"} for r in rows]
|
||||
except (ValueError, Exception):
|
||||
return []
|
||||
|
||||
|
||||
def _sidebar_data(request: Request, owner: str = "", repo: str = "") -> dict:
|
||||
user = SessionManager.decode_session(request.cookies.get("flowdeck_session", ""))
|
||||
ws_name = user.get("login", "Bruno") if user else "Bruno"
|
||||
@@ -229,6 +245,7 @@ def _sidebar_data(request: Request, owner: str = "", repo: str = "") -> dict:
|
||||
|
||||
return {"workspace_name": ws_name, "workspace_initial": ws_name[0].upper() if ws_name else "B",
|
||||
"active_ws_name": active_ws_name,
|
||||
"workspace_pages": _load_workspace_pages(ws_cookie),
|
||||
"current_page": repo or "Dashboard", "last_edited": "now",
|
||||
"recent_pages": recent, "private_pages": private_items,
|
||||
"favorite_pages": favorites, "shared_pages": shared_pages,
|
||||
|
||||
@@ -482,10 +482,13 @@ async def local_workspace_page(request: Request):
|
||||
if not user:
|
||||
return RedirectResponse("/auth/login?provider=local", status_code=302)
|
||||
|
||||
ws = _get_active_workspace(request)
|
||||
ws_id = ws["id"] if ws else None
|
||||
with get_conn() as conn:
|
||||
rows = conn.execute(
|
||||
"SELECT id, title FROM pages WHERE parent_id IS NULL ORDER BY created_at DESC"
|
||||
).fetchall()
|
||||
"SELECT id, title FROM pages WHERE parent_id IS NULL AND workspace_id=? ORDER BY created_at DESC",
|
||||
(ws_id,),
|
||||
).fetchall() if ws_id else []
|
||||
items = [{"id": r["id"], "name": r["title"] or "Untitled", "type": "page"} for r in rows]
|
||||
|
||||
ctx = {**sidebar, "user": user, "workspace_name": sidebar.get("active_ws_name", "My Workspace"), "items": items}
|
||||
@@ -495,11 +498,14 @@ async def local_workspace_page(request: Request):
|
||||
|
||||
@router.get("/api/local-workspace/tree")
|
||||
async def local_workspace_tree(request: Request):
|
||||
"""Return the file/folder tree."""
|
||||
"""Return the file/folder tree filtered by active workspace."""
|
||||
ws = _get_active_workspace(request)
|
||||
ws_id = ws["id"] if ws else None
|
||||
with get_conn() as conn:
|
||||
roots = conn.execute(
|
||||
"SELECT id, title FROM pages WHERE parent_id IS NULL ORDER BY created_at DESC"
|
||||
).fetchall()
|
||||
"SELECT id, title FROM pages WHERE parent_id IS NULL AND workspace_id=? ORDER BY created_at DESC",
|
||||
(ws_id,),
|
||||
).fetchall() if ws_id else []
|
||||
tree = []
|
||||
for r in roots:
|
||||
with get_conn() as conn:
|
||||
|
||||
Reference in New Issue
Block a user