feat: add public h5 dashboard and publish traceability
This commit is contained in:
@@ -2,9 +2,13 @@
|
||||
|
||||
## Web Access Boundary
|
||||
|
||||
1. An anonymous browser requesting `/` or `/h5` is redirected to `/login` with an allowlisted return target; anonymous API/download requests receive JSON `401 AUTH_REQUIRED`.
|
||||
1. An anonymous browser requesting `/` is redirected to `/login` with an allowlisted return target. `/h5` and its H5
|
||||
assets are public; anonymous access is limited to `/api/public/h5/months`, `/api/public/h5/analytics` and the
|
||||
no-detail `/healthz` signal. Other anonymous API/download requests receive JSON `401 AUTH_REQUIRED`.
|
||||
2. `POST /api/login` accepts strict same-origin JSON, verifies runtime-owned credentials under a bounded per-client attempt ledger and issues a random server-side session plus CSRF token in an `HttpOnly`, `SameSite=Strict` cookie.
|
||||
3. Every portal page, detailed health response, read API, upload/mutation, task trace and artifact download validates the authenticated session. Mutations additionally validate the session CSRF token.
|
||||
3. Every desktop portal page, detailed health response, generic read API, upload/mutation, task trace and artifact
|
||||
download validates the authenticated session. Public H5 endpoints return only sanitized aggregate dashboard data;
|
||||
mutations additionally validate the session CSRF token.
|
||||
4. `POST /api/logout` validates CSRF, revokes the server-side session and expires the cookie. `/healthz` remains a no-detail anonymous readiness signal for container orchestration.
|
||||
5. `GET /api/history-months` is an authenticated read-only discovery path. It combines daily processing/monthly publication counts from PostgreSQL with durable company-job counts; each desktop history then reads its selected month through the existing paged list endpoint.
|
||||
|
||||
|
||||
Reference in New Issue
Block a user