Moved the restricted-api iframe src to /auth/api/restricted and removed the endpoint of the other restricted app.

This commit is contained in:
2025-12-02 18:34:59 +00:00
parent 15916047fa
commit eedbd4aaa4
6 changed files with 14 additions and 17 deletions
+2 -1
View File
@@ -41,7 +41,6 @@ Notes:
| GET | `/auth/` | `/` | Main authentication SPA (non-auth hosts show an account summary view) |
| GET | `/auth/admin/` | `/admin/` | Admin SPA root |
| GET | `/auth/{reset_token}` | `/{reset_token}` | Reset / device addition SPA (token validated) |
| GET | `/auth/restricted` | `/restricted` | Restricted / permission denied SPA |
## Core API (Unrestricted available on all hosts)
@@ -49,6 +48,8 @@ Always under `/auth/api/` (even on auth host):
| Method | Path | Description |
|--------|------|-------------|
| GET | `/auth/api/restricted` | Authentication UI for iframe embedding (supports `?mode=login` or `?mode=reauth`) |
|--------|------|-------------|
| POST | `/auth/api/validate` | Validate & (conditionally) renew session |
| GET | `/auth/api/forward` | Auth proxy endpoint for reverse proxies (204 or 4xx) |
| POST | `/auth/api/set-session` | Set cookie from Bearer token |
+3 -3
View File
@@ -111,7 +111,7 @@
iframe.title = 'Authentication';
document.body.appendChild(iframe);
}
iframe.src = '/auth/restricted-api/?mode=login';
iframe.src = '/auth/api/restricted?mode=login';
showStatus('Login mode loaded - for users who are not authenticated', 'info');
}
@@ -123,7 +123,7 @@
iframe.title = 'Authentication';
document.body.appendChild(iframe);
}
iframe.src = '/auth/restricted-api/?mode=reauth';
iframe.src = '/auth/api/restricted?mode=reauth';
showStatus('Reauth mode loaded - for additional verification of authenticated users', 'info');
}
@@ -133,7 +133,7 @@
iframe = document.createElement('iframe');
iframe.id = 'auth-iframe';
iframe.title = 'Authentication';
iframe.src = '/auth/restricted-api';
iframe.src = '/auth/api/restricted';
document.body.appendChild(iframe);
iframeInitialized = true;
}
+1 -1
View File
@@ -57,7 +57,7 @@ function showAuthIframe() {
authIframe = document.createElement('iframe')
authIframe.id = 'auth-iframe'
authIframe.title = 'Authentication'
authIframe.src = '/auth/restricted-api/?mode=login'
authIframe.src = '/auth/api/restricted?mode=login'
document.body.appendChild(authIframe)
loadingMessage.value = 'Authentication required...'
}
+1 -1
View File
@@ -330,7 +330,7 @@ function showAuthIframe() {
authIframe = document.createElement('iframe')
authIframe.id = 'auth-iframe'
authIframe.title = 'Authentication'
authIframe.src = '/auth/restricted-api/?mode=login'
authIframe.src = '/auth/api/restricted?mode=login'
document.body.appendChild(authIframe)
loadingMessage.value = 'Authentication required...'
}
+7 -1
View File
@@ -10,7 +10,7 @@ from fastapi import (
Request,
Response,
)
from fastapi.responses import JSONResponse
from fastapi.responses import FileResponse, JSONResponse
from fastapi.security import HTTPBearer
from passkey.util import frontend
@@ -36,6 +36,12 @@ app = FastAPI()
app.mount("/user", user.app)
@app.get("/restricted")
async def restricted_view():
"""Serve the restricted/authentication UI for iframe embedding."""
return FileResponse(frontend.file("restricted-api", "index.html"))
@app.exception_handler(HTTPException)
async def http_exception_handler(_request: Request, exc: HTTPException):
"""Ensure auth cookie is cleared on 401 responses (JSON responses only)."""
-10
View File
@@ -89,16 +89,6 @@ async def admin_root(request: Request, auth=AUTH_COOKIE):
return await admin.adminapp(request, auth) # Delegated to admin app
@app.get("/auth/restricted")
async def restricted_view():
return FileResponse(frontend.file("restricted", "index.html"))
@app.get("/auth/restricted-api")
async def restricted_api_view():
return FileResponse(frontend.file("restricted-api", "index.html"))
# Note: this catch-all handler must be the last route defined
@app.get("/{reset}")
@app.get("/auth/{reset}")