diff --git a/containers/auth-gateway/auth_gateway/templates/session.html b/containers/auth-gateway/auth_gateway/templates/session.html new file mode 100644 index 0000000..52097dc --- /dev/null +++ b/containers/auth-gateway/auth_gateway/templates/session.html @@ -0,0 +1,64 @@ + + + + + + Session + + + + +
+
+

Auth Gateway

+

Active session

+ + {% if session.username %} + + + + + {% endif %} + {% if session.email %} + + + + + {% endif %} + + + + + {% if session.groups %} + + + + + {% endif %} + + + + +
Username{{ session.username }}
E-mail{{ session.email }}
Authenticated via + {% for factor in session.auth_factors %} + {{ factor }} + {% endfor %} +
Groups + {% for group in session.groups %} + {{ group }} + {% endfor %} +
Expires{{ session.expires_at.strftime('%Y-%m-%d %H:%M UTC') }}
+
+ + +
+
+
+ + diff --git a/containers/auth-gateway/auth_gateway/web/login_routes.py b/containers/auth-gateway/auth_gateway/web/login_routes.py index f4e0094..6b89013 100644 --- a/containers/auth-gateway/auth_gateway/web/login_routes.py +++ b/containers/auth-gateway/auth_gateway/web/login_routes.py @@ -44,6 +44,14 @@ def _redirect_with_cookie(request: Request, destination: str, session) -> Redire return response +@router.get("/", response_class=HTMLResponse) +async def session_page(request: Request): + session = get_session(request) + if not session or not session.auth_factors: + return RedirectResponse(build_external_url(request, "/login"), status_code=303) + return _render(request, "session.html", session=session) + + @router.get("/login", response_class=HTMLResponse) async def login_page(request: Request, next: str = "/"): runtime_config = get_runtime_config(request) @@ -236,10 +244,19 @@ async def login_oidc_callback(request: Request, state: str): return _redirect_with_cookie(request, oidc_state.next_url, session) -@router.post("/logout") -async def logout(request: Request, next: str = Form("/")): +def _do_logout(request: Request, next_url: str = "/") -> RedirectResponse: session_cookie = request.cookies.get(request.app.state.settings.cookie_name) request.app.state.session_service.delete_session(session_cookie) - response = RedirectResponse(next or "/", status_code=303) + response = RedirectResponse(next_url or "/", status_code=303) response.delete_cookie(request.app.state.settings.cookie_name, path="/") return response + + +@router.get("/logout") +async def logout_get(request: Request, next: str = "/"): + return _do_logout(request, next) + + +@router.post("/logout") +async def logout_post(request: Request, next: str = Form("/")): + return _do_logout(request, next) diff --git a/containers/caddy/process_config.py b/containers/caddy/process_config.py index 4c019fa..01b08a2 100644 --- a/containers/caddy/process_config.py +++ b/containers/caddy/process_config.py @@ -15,8 +15,8 @@ from urllib.parse import urlparse JSON_DIR = os.environ.get("JSON_DIR", "/caddy_json_export") CADDYFILE_PATH = os.environ.get("CADDYFILE_PATH", "/etc/caddy/Caddyfile") -AUTH_GATEWAY_INTERNAL_URL = "http://wireguard-webadmin-auth-gateway:9091" -AUTH_GATEWAY_PORTAL_PATH = "/auth-gateway" +AUTH_GATEWAY_INTERNAL_URL = os.environ.get("AUTH_GATEWAY_INTERNAL_URL", "http://wireguard-webadmin-auth-gateway:9091") +AUTH_GATEWAY_PORTAL_PATH = os.environ.get("AUTH_GATEWAY_EXTERNAL_PATH", "/auth-gateway") AUTH_GATEWAY_CHECK_URI = "/auth/check"