diff --git a/web/messages/en/docs/monitor/access-auth.json b/web/messages/en/docs/monitor/access-auth.json index 1787f106..a610df40 100644 --- a/web/messages/en/docs/monitor/access-auth.json +++ b/web/messages/en/docs/monitor/access-auth.json @@ -284,7 +284,7 @@ "heading": "API tokens (long-lived)", "intro": "Browser sessions expire after 24 hours. For unattended integrations (Homepage widgets, Home Assistant sensors, Grafana scrapers, Uptime Kuma probes…) you generate a separate API token that lives 365 days. The token is a JWT signed with the same secret as the session token, but its token_name claim makes it easy to track and revoke individually.", "imageAlt": "API tokens panel showing the token list with name, prefix, created date and expiry", - "imageCaption": "The API tokens list under Settings — name, prefix (last 4 chars are shown for identification), created and expiry dates, revoke action.", + "imageCaption": "The API tokens list under Admin → Security — name, prefix (last 4 chars are shown for identification), created and expiry dates, revoke action.", "generateTitle": "Generate a token", "generateIntro": "From the dashboard:", "generateSteps": [ @@ -310,7 +310,7 @@ "intro": "Two paths to TLS:", "items": [ "Reverse proxy (recommended). Terminate TLS on Nginx / Caddy / Traefik and forward HTTP on port 8008 to the Flask process. Snippets below.", - "Direct HTTPS in the AppImage. Configure a certificate with POST /api/ssl/configure (UI: Settings → SSL). The HTTPS path uses gevent.pywsgi with its standard handler; flask-sock handles WebSocket upgrades for WSS. Certificate paths are stored in the SSL configuration." + "Direct HTTPS in the AppImage. Configure a certificate with POST /api/ssl/configure (UI: Admin → Security → SSL / HTTPS). The HTTPS path uses gevent.pywsgi with its standard handler; flask-sock handles WebSocket upgrades for WSS. Certificate paths are stored in the SSL configuration." ], "calloutTitle": "Direct HTTPS limitations", "calloutBody": "The Monitor can use a Proxmox-managed certificate or custom certificate files. It does not issue ACME certificates itself. For automatic issuance and renewal, use Proxmox ACME or a reverse proxy such as Caddy, Traefik or Nginx, and ensure renewed certificates are loaded." diff --git a/web/messages/en/docs/monitor/dashboard/security.json b/web/messages/en/docs/monitor/dashboard/security.json index 36ac8340..c6873cb6 100644 --- a/web/messages/en/docs/monitor/dashboard/security.json +++ b/web/messages/en/docs/monitor/dashboard/security.json @@ -183,7 +183,7 @@ }, { "card": "SSL / HTTPS", - "endpoint": "/api/auth/ssl/*", + "endpoint": "/api/ssl/*", "source": "openssl x509 on /etc/pve/local/pve-ssl.pem + /etc/proxmenux/ssl_config.json." }, { diff --git a/web/messages/en/docs/monitor/dashboard/settings.json b/web/messages/en/docs/monitor/dashboard/settings.json index d7d5107e..9d10a0ce 100644 --- a/web/messages/en/docs/monitor/dashboard/settings.json +++ b/web/messages/en/docs/monitor/dashboard/settings.json @@ -304,7 +304,7 @@ }, { "card": "Storage / interface exclusions", - "endpoint": "/api/storage/exclusions, /api/network/exclusions", + "endpoint": "/api/health/storage-exclusions, /api/health/interface-exclusions", "source": "SQLite tables excluded_storages and excluded_interfaces." }, { diff --git a/web/messages/en/docs/monitor/index.json b/web/messages/en/docs/monitor/index.json index 2613e500..a2635a76 100644 --- a/web/messages/en/docs/monitor/index.json +++ b/web/messages/en/docs/monitor/index.json @@ -113,7 +113,7 @@ "api": { "heading": "REST API and integrations", "intro": "The dashboard’s REST endpoints expose monitoring data as JSON over HTTP/HTTPS for Homepage widgets, Home Assistant sensors, Uptime Kuma probes and custom scripts. Grafana can use the separate Prometheus text exporter at /api/prometheus. Requests can be made with curl.", - "tokens": "Long-lived API tokens (365 days) are generated from Settings → API Access Tokens or via POST /api/auth/generate-api-token.", + "tokens": "Long-lived API tokens (365 days) are generated from Admin → Security → API Tokens or via POST /api/auth/generate-api-token.", "bearer": "Send tokens as Authorization: Bearer …. /api/health also expects the bearer header, so uptime probes need a read_only token. Routes under /api/auth/* include both public setup/login/status routes and protected account/token management routes; they are not all anonymous.", "catalog": "The full endpoint catalog, token rotation guidance and security best-practices live in API Reference; ready-made examples for Homepage, Home Assistant, Grafana, Uptime Kuma and a generic cURL pattern are in Integrations." }, diff --git a/web/messages/en/docs/monitor/integrations.json b/web/messages/en/docs/monitor/integrations.json index d0b5a0bd..0cebb721 100644 --- a/web/messages/en/docs/monitor/integrations.json +++ b/web/messages/en/docs/monitor/integrations.json @@ -20,13 +20,13 @@ "heading": "Authentication: the one thing every recipe needs", "intro": "Most endpoints used by these integrations are authenticated. You have two ways to satisfy that requirement.", "optAtitle": "Option A — API token (recommended for integrations)", - "optAbody1": "Open the dashboard and go to Settings → Security → API Tokens. Click Generate token, give it a name (e.g. homepage, home-assistant, prometheus), and copy the token — it's shown once. Long-lived (one-year expiry by default), individually revocable, and what you should be using for any non-browser client.", + "optAbody1": "Open the dashboard and go to Admin → Security → API Tokens. Click Generate token, give it a name (e.g. homepage, home-assistant, prometheus), and copy the token — it's shown once. Long-lived (one-year expiry by default), individually revocable, and what you should be using for any non-browser client.", "optAbody2": "From that point every request is just:", "optBtitle": "Option B — login flow (username + password)", "optBbody": "Useful for scripts that authenticate as a human user. The returned token is short-lived; most integrations should prefer Option A.", "outro": "The TOTP field is only required when 2FA is enabled on the account. Token rotation, revocation, password policy and the audit log live in Access & Authentication.", "httpsTitle": "Using HTTPS instead of HTTP", - "httpsIntro": "Every recipe below uses http:// in the URLs to keep the examples short. If you've enabled TLS on the Monitor (Settings → Security → SSL/HTTPS), swap http:// for https:// in every URL — that's the only change. Two notes specific to certain tools:", + "httpsIntro": "Every recipe below uses http:// in the URLs to keep the examples short. If you've enabled TLS on the Monitor (Admin → Security → SSL / HTTPS), swap http:// for https:// in every URL — that's the only change. Two notes specific to certain tools:", "httpsItems": [ "Self-signed certificates. Home Assistant's rest: integration verifies TLS by default. If the Monitor is using its own self-signed cert, add verify_ssl: false to each REST block (alongside scan_interval:), or import the Monitor's CA into HA's trust store. Same for any tool that refuses untrusted certs.", "Prometheus already has scheme: https ready in the scrape config below; uncomment / leave it as https if TLS is enabled on the Monitor." @@ -43,7 +43,7 @@ "basicTitle": "Basic widget — no authentication", "basicIntro": "Use this when ProxMenux Monitor is on a trusted network and you haven't enabled authentication on the Monitor side yet. The simplest possible services.yaml entry:", "authedTitle": "Authenticated widget", - "authedIntro": "Generate an API token in Settings → Security → API Tokens on the Monitor, copy it, and paste it into the Authorization header below — replace the example token shown after Bearer with the one you just copied:", + "authedIntro": "Generate an API token in Admin → Security → API Tokens on the Monitor, copy it, and paste it into the Authorization header below — replace the example token shown after Bearer with the one you just copied:", "authedOutro": "Restart Homepage and the card lights up with live values. Reuse the same token across all Homepage widgets pointing at the same ProxMenux Monitor host.", "multiTitle": "Multi-widget setup — system, storage, network", "multiIntro": "For a richer view, render three separate cards backed by different endpoints — one for system metrics, one for storage, one for network. Use the same token in every card; it's the same Monitor instance.", diff --git a/web/messages/en/docs/security/ssl-letsencrypt.json b/web/messages/en/docs/security/ssl-letsencrypt.json index b5a65563..03be0a63 100644 --- a/web/messages/en/docs/security/ssl-letsencrypt.json +++ b/web/messages/en/docs/security/ssl-letsencrypt.json @@ -12,13 +12,13 @@ }, "intro": { "title": "What this page covers", - "body": "How to switch the Monitor from HTTP to HTTPS in the Settings → Security panel, what each certificate source actually points at on disk, how the Proxmox option behaves when the host has a Let's Encrypt cert, and how to set custom paths if you manage certs outside Proxmox." + "body": "How to switch the Monitor from HTTP to HTTPS in the Admin → Security panel, what each certificate source actually points at on disk, how the Proxmox option behaves when the host has a Let's Encrypt cert, and how to set custom paths if you manage certs outside Proxmox." }, "wheresetting": { "heading": "Where the setting lives", - "body": "Open the Monitor and go to Settings → Security → HTTPS / SSL. The panel shows the current state (HTTP or HTTPS), and on a host without HTTPS yet it lists the certificate sources the Monitor was able to detect.", - "imageAlt": "Settings → Security → HTTPS / SSL panel in the Monitor showing the HTTPS-off state, the auto-detected Proxmox certificate (subject, issuer, expiry) and the Use Custom Certificate option", - "caption": "Settings → Security → HTTPS / SSL panel before activation. The Monitor surfaces the cert Proxmox itself is using and offers it as a one-click source." + "body": "Open the Monitor and go to Admin → Security → SSL / HTTPS. The panel shows the current state (HTTP or HTTPS), and on a host without HTTPS yet it lists the certificate sources the Monitor was able to detect.", + "imageAlt": "Admin → Security → SSL / HTTPS panel in the Monitor showing the HTTPS-off state, the auto-detected Proxmox certificate (subject, issuer, expiry) and the Use Custom Certificate option", + "caption": "Admin → Security → SSL / HTTPS panel before activation. The Monitor surfaces the cert Proxmox itself is using and offers it as a one-click source." }, "twoways": { "heading": "Two ways to enable HTTPS", @@ -117,7 +117,7 @@ }, "switchToHttps": { "heading": "Switch the Monitor to HTTPS", - "bodyRich": "Once /etc/pve/local/pveproxy-ssl.pem is signed by Let's Encrypt, the Monitor side is one click: open Settings → Security → HTTPS / SSL, confirm the issuer shown in the detected-certificate panel reads Let's Encrypt (and not the local Proxmox CA), and click Use Proxmox Certificate. The Monitor service restarts and the next browser load is HTTPS on port 8008 — no certificate warning, since the chain is publicly trusted. Later Proxmox ACME renewals are validated and selected during the next new TLS connection; there is no recurring certificate poller or renewal-time service restart. Update certificate remains available in Security as an explicit diagnostic and recovery action." + "bodyRich": "Once /etc/pve/local/pveproxy-ssl.pem is signed by Let's Encrypt, the Monitor side is one click: open Admin → Security → SSL / HTTPS, confirm the issuer shown in the detected-certificate panel reads Let's Encrypt (and not the local Proxmox CA), and click Use Proxmox Certificate. The Monitor service restarts and the next browser load is HTTPS on port 8008 — no certificate warning, since the chain is publicly trusted. Later Proxmox ACME renewals are validated and selected during the next new TLS connection; there is no recurring certificate poller or renewal-time service restart. Update certificate remains available in Security as an explicit diagnostic and recovery action." }, "custom": { "heading": "Custom certificate — when to use it",