Document the upload, proof and forecast endpoints
Ten routes shipped over the last few commits without reaching the inventory, which is the file everything else is generated from - openapi.json, the /api/docs browser, and the per-site build. An endpoint absent from it is invisible to anyone integrating against the API even though it answers requests. The auth notes matter more than the paths. API-REFERENCE tells a deployment reviewer that essentially every GET is optional-auth; two of these are not, and an exception buried in a table of 372 operations is one nobody reads. The installer download and the warranty proof are called out with why: one is licensed vendor software, the other carries pricing and a service tag. The application image is listed with the fully public endpoints, since tiles render before login.
This commit is contained in:
@@ -96,6 +96,18 @@ Two auth patterns dominate the reads:
|
||||
Every mutating endpoint (POST / PUT / PATCH / DELETE) requires a JWT and is
|
||||
gated by `require_role` or `require_permission`; none are public.
|
||||
|
||||
Two GETs deliberately break the optional-auth convention and require a
|
||||
permission, because what they return is not asset metadata but a file that
|
||||
carries value or liability of its own:
|
||||
|
||||
| Endpoint | Requires | Why |
|
||||
|---|---|---|
|
||||
| `GET /api/applications/package/<filename>` | `applications.view` | Licensed vendor installers. An anonymous URL is a redistribution channel. |
|
||||
| `GET /api/warranty/proof/<filename>` | `warranty.view` | Invoices and certificates carry pricing and a service tag. |
|
||||
|
||||
Their sibling upload/delete routes are `applications.edit` / `warranty.edit`
|
||||
like any other mutation.
|
||||
|
||||
### Fully public endpoints (auth = none)
|
||||
|
||||
| Endpoint | Purpose |
|
||||
@@ -107,6 +119,7 @@ gated by `require_role` or `require_permission`; none are public.
|
||||
| `GET /api/settings/branding/<filename>` | Serve site branding assets (logo, etc.). |
|
||||
| `GET /api/settings` and `GET /api/settings/<key>` | Read-only, and only the public allowlist: the `branding` and `map` categories, a few named site keys, plus any key a plugin declares `public` in `get_settings_defaults` (e.g. `printedparts_label_prefix`, which the logged-out parts kiosk renders). Every other key answers 404 to an anonymous caller. |
|
||||
| `GET /api/models/image/<filename>` | Serve a model image. |
|
||||
| `GET /api/applications/image/<filename>` | Serve an application image (tiles render before login). |
|
||||
| `GET /api/dashboard/navigation` | Public navigation tree. |
|
||||
| `GET /api/dashboard/health` | Liveness / health probe. |
|
||||
| `GET /api/plugins/enabled` | List enabled plugins (no claims used). |
|
||||
|
||||
Reference in New Issue
Block a user