Clear Web UI session on 401 and keep API/Ingress errors as JSON.

Include the missing resource id in not-found messages, expire auth to Guest
after 401, and document Ingress annotations so nginx does not rewrite 404/405
bodies into branded HTML.
This commit is contained in:
2026-07-22 06:52:23 +03:00
parent 147f04c9a2
commit f1289858fd
10 changed files with 172 additions and 24 deletions
+15 -3
View File
@@ -76,7 +76,11 @@ async def require_node(request: Request, node: str) -> None:
node,
)
if not exists:
raise ApiError(404, "node does not exist")
raise ApiError(
404,
f"No such node ('{node}')",
errors={"node": f"No such node ('{node}')"},
)
async def cluster_metadata(request: Request) -> dict[str, Any]:
@@ -105,7 +109,11 @@ async def node_metadata(request: Request, node: str) -> dict[str, Any]:
node,
)
if row is None:
raise ApiError(404, "node does not exist")
raise ApiError(
404,
f"No such node ('{node}')",
errors={"node": f"No such node ('{node}')"},
)
return state(row["metadata"])
@@ -116,7 +124,11 @@ async def save_node_metadata(request: Request, node: str, metadata: dict[str, An
json.dumps(metadata, sort_keys=True),
)
if status != "UPDATE 1":
raise ApiError(404, "node does not exist")
raise ApiError(
404,
f"No such node ('{node}')",
errors={"node": f"No such node ('{node}')"},
)
def storage_payload(row: Any) -> dict[str, Any]: