From 1079e304d232404db75a97cb17a7645ac1b62af3 Mon Sep 17 00:00:00 2001 From: Khoi Nguyen Date: Sat, 24 Feb 2024 11:32:33 -0800 Subject: [PATCH 1/3] added basic logout functionality --- app/routers/views.py | 14 +++------ templates/include/topnav.html | 55 ++++++++++++++++++++++------------- 2 files changed, 38 insertions(+), 31 deletions(-) diff --git a/app/routers/views.py b/app/routers/views.py index df682c6..29b3b7d 100644 --- a/app/routers/views.py +++ b/app/routers/views.py @@ -91,16 +91,10 @@ async def logout(request: Request, response: Response): I usually open a new tab/window to reset basic auth. We likely need a logout button to be handled somehow in javascript. """ - response.delete_cookie("basic") - response.delete_cookie("bearer") - response.delete_cookie("access_token") - data = helpers.get_page("index.md") - return templates.TemplateResponse( - "index.html", - { - "request": request, - "data": data, - }, + raise HTTPException( + status_code=401, + detail="Logged out successfully", + headers={"WWW-Authenticate": "Basic"}, ) diff --git a/templates/include/topnav.html b/templates/include/topnav.html index 92235ca..c0de09c 100644 --- a/templates/include/topnav.html +++ b/templates/include/topnav.html @@ -1,25 +1,38 @@ From dce06e06784f4d8cd8daf3860518bb902101a1eb Mon Sep 17 00:00:00 2001 From: Khoi Nguyen Date: Sat, 24 Feb 2024 11:32:16 -0800 Subject: [PATCH 2/3] turned exclude into string to get black formatter to work --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 831adc6..5114fa1 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.black] profile = "black" -exclude = ["^env/"] +exclude = "^env/" [tool.isort] profile = "black" # needed for black/isort compatibility From faf7f8def5b8abf79861f4e6a95018368d8eb8f7 Mon Sep 17 00:00:00 2001 From: Khoi Nguyen Date: Wed, 28 Feb 2024 22:01:24 -0800 Subject: [PATCH 3/3] enable conditional logout button in submit and jobs pages --- app/routers/views.py | 33 ++++++++++++++++++++++++++------- templates/include/topnav.html | 10 +++++++--- 2 files changed, 33 insertions(+), 10 deletions(-) diff --git a/app/routers/views.py b/app/routers/views.py index 29b3b7d..d73623a 100644 --- a/app/routers/views.py +++ b/app/routers/views.py @@ -1,7 +1,7 @@ from datetime import timedelta import flux.job -from fastapi import APIRouter, Depends, HTTPException, Request, Response +from fastapi import APIRouter, Depends, HTTPException, Request, Response, FastAPI from fastapi.responses import HTMLResponse, RedirectResponse from fastapi.security import OAuth2PasswordRequestForm from fastapi.templating import Jinja2Templates @@ -66,6 +66,7 @@ async def home(request: Request): { "request": request, "data": data, + "user": None, }, ) @@ -79,18 +80,28 @@ async def jobs_table(request: Request, user=user_auth): { "request": request, "jobs": jobs, + "user": user, }, ) +app = FastAPI() + + +@app.exception_handler(HTTPException) +def logout_exception_handler(request: Request, e): + if e.status_code == 401: + return RedirectResponse(url="/") + else: + return e + + @router.get("/logout") async def logout(request: Request, response: Response): """ - This isn't entirely working yet. - - I usually open a new tab/window to reset basic auth. We likely - need a logout button to be handled somehow in javascript. + Raise HTTPException with 401 status code to clear out credentials. """ + # TODO: Figure out how to redirect response raise HTTPException( status_code=401, detail="Logged out successfully", @@ -126,6 +137,7 @@ async def job_info(request: Request, jobid, msg=None, user=user_auth): "request": request, "job": job, "info": info, + "user": user, }, ) @@ -137,7 +149,12 @@ async def submit_job(request: Request, user=user_auth): form = SubmitForm(request) return templates.TemplateResponse( "jobs/submit.html", - {"request": request, "has_gpus": settings.has_gpus, "form": form}, + { + "request": request, + "has_gpus": settings.has_gpus, + "form": form, + "user": user, + }, ) @@ -180,6 +197,7 @@ async def submit_job_post(request: Request, user=user_auth): "form": form, "messages": messages, "has_gpus": settings.has_gpus, + "user": user, **form.__dict__, }, ) @@ -206,6 +224,7 @@ def submit_job_helper(request, form, user): context={ "request": request, "form": form, + "user": user, "messages": [message], }, ) @@ -218,7 +237,7 @@ def submit_job_helper(request, form, user): "request": request, "form": form, "has_gpus": settings.has_gpus, - **form.__dict__, + "user": user**form.__dict__, }, ) diff --git a/templates/include/topnav.html b/templates/include/topnav.html index c0de09c..906a927 100644 --- a/templates/include/topnav.html +++ b/templates/include/topnav.html @@ -19,16 +19,20 @@

{{ title }}