- Python 50.3%
- JavaScript 49.7%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
| apps.d | ||
| debian | ||
| src/pmx_cork_ui | ||
| tests | ||
| .gitignore | ||
| LICENSE | ||
| pyproject.toml | ||
| README.md | ||
pmx-cork-ui
The served presentation layer of the suite: the ExtJS UI core (assembled into
pmx-cork-ui.js), the public OpenAPI document, and the API reference
page at /pmx-cork/web/api-docs, rendered by a vendored copy of Redoc so
nothing loads from a CDN.
It is an add-on. app.py registers its public pages through the runtime's
apps.d seam (register_ui_pages), the Redoc bundle over the static lane
(register_static), and the Tasks and Services node tabs (register_ui),
whose widgets are part of the UI core here. The proxy serves the pages
without authentication over its public lane, the way pveproxy serves its
static UI. Without this package the runtime serves the auth gate and the API
only.
Ships /etc/pmx-cork/apps.d/pmx-cork-ui.conf, naming pmx_cork_ui.app, and
the pmx_cork_ui package, one module per served artifact:
| Module | Serves |
|---|---|
app.py |
nothing itself; the apps.d entry point with the registrations |
uicore.py |
/pmx-cork/web/pmx-cork-ui.js, assembled at request time from the sources in uicore-src/ |
openapi.py |
/pmx-cork/api/v1/openapi.json, generated from the registered route tables |
apidocs.py |
/pmx-cork/web/api-docs, Redoc (in vendor/, MIT, see debian/copyright) over the OpenAPI document |
manifest.py |
the window.PmxCork.boot data: the aggregated UI manifest with a ?v= version, and this package's own tab contribution |
A node tab is drawn on the nodes its plugin is enabled on, and the UI core
will draw one for a plugin this node does not have. window.PmxCork.boot
carries entryNodes, the map from an entry to the nodes it belongs under;
when the selected node has an entry whose sources are not loaded here, the
core fetches them from
/pmx-cork/api/v1/manager/nodes/{node}/plugins/{id}/ui, injects the JS and CSS
once and then builds the tab. The API calls that tab makes name that node, so
the proxy forwards them to it and it answers with its own RBAC check.
The UI core provides PmxCork.Utils.openTaskViewer(upid, {taskDone}), the
polling task window with live log and stop button, and
PmxCork.Utils.pollTaskResult(upid, callback) for a dialog that only needs
the final record. Plugin views call the API with Proxmox.Utils.API2Request
against /pmx-cork/api/v1/...; the front routes both that form and the
/api2/extjs/pmx-cork/... form the helper produces.
Depends on pmx-cork-host (the registry seam and the URL layout in
constants) and starlette. Ships as python3-pmx-cork-ui.