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 %}
+
+ | Username |
+ {{ session.username }} |
+
+ {% endif %}
+ {% if session.email %}
+
+ | E-mail |
+ {{ session.email }} |
+
+ {% endif %}
+
+ | Authenticated via |
+
+ {% for factor in session.auth_factors %}
+ {{ factor }}
+ {% endfor %}
+ |
+
+ {% if session.groups %}
+
+ | Groups |
+
+ {% for group in session.groups %}
+ {{ group }}
+ {% endfor %}
+ |
+
+ {% endif %}
+
+ | 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"