feat(proxy-status): serve status over browse-origin real cert + AA contrast - #4053
Merged
0pcom merged 1 commit intoAug 21, 2026
Merged
Conversation
…ntrast Two follow-ups to the per-proxy status pages (skycoin#4050). HTTPS without a cert warning. proxystatus was HTTP-only (in-process SOCKS splice) at bare hosts, so https://status.skysocks/ needed the self-signed skynetca CA installed. Serve the same pages through the browse-origin listener (pkg/visor/meshproxy.go), which already terminates TLS with the deployment's real wildcard cert under BrowseOrigin.Suffix — reached at a single-label host (status-<surface>.<suffix>, e.g. status-skysocks.haltingstate.net) that a single-level wildcard covers, so https:// loads clean with no CA install. meshStatusHandler intercepts these hosts on the browse-origin mux (subdomain and port modes) before the reverse proxy; every other host falls through. The plain-HTTP SOCKS path remains the fallback when browse-origin is disabled/unconfigured. Contrast. The dark status page's muted grey (#7a80a8) and the light block's greys were near/below WCAG AA. Raise --muted (dark #a2a8cc ~8:1, light #4a4f63) and darken the light-mode status colors (--ok/--warn/--standby, whose dark brights are illegible on white) plus the near-white h2/surface, so every text token clears 4.5:1 in both schemes. Accent gradient / identity unchanged. Locked by a WCAG contrast unit test.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Two follow-ups to the per-proxy status pages (#4050). Both confirmed live (pages render, interstitial spam gone).
1. HTTPS without a browser cert warning (real wildcard cert)
proxystatuswas HTTP-only — served in-process through the resolving proxies' SOCKS splice at bare hosts (status.skysocks/.dmsg/.skynet). Sohttps://status.skysocks/would only be warning-free if the self-signed skynetca CA is installed.This wires the same status pages through the browse-origin listener (
pkg/visor/meshproxy.go, gated byBrowseOrigin.Enable), which already terminates TLS with the deployment's real wildcard cert (BrowseOrigin.TLSCert/TLSKey, or a fronting Caddy) underBrowseOrigin.Suffix(e.g..haltingstate.net). The status hosts are reached at a single-label name so a single-level wildcard (*.<suffix>) covers them:meshStatusHandlerintercepts these on the browse-origin mux (bothsubdomainandportmodes) before the reverse proxy, renders the sameproxystatuspage, and lets every other (browse-frame) host fall through. This is the real-cert alternative to the name-constrained skynetca leaf path inpkg/skynetweb— no CA install needed. When browse-origin is disabled/unconfigured, the plain-HTTP SOCKS path remains the fallback.Naming rationale: the wildcard is single-level, so
status-<surface>.<suffix>is covered but a multi-label host is not — the matcher rejects multi-label hosts accordingly (also keeps status from ever shadowing a real<vhost>.<pk><suffix>browse frame).Verifiable vs. not: the host-matcher, handler wiring, and fallthrough are unit-tested (
meshStatusSurface). What I can't verify in this environment is the end-to-endhttps://handshake against the live*.haltingstate.netcert — that depends on the deployment'sBrowseOrigincert/Caddy config, which isn't present here. The TLS termination itself is unchanged (serveMeshHTTPalready served the browse frames over that cert); this change only adds a host route on the same listener, so it inherits whatever cert path the deployment already uses.2. WCAG AA contrast fix
The dark status page's muted grey (
--muted:#7a80a8) and the light-mode greys were near/below AA for body text. Changes (identity — accent gradient etc. — untouched):--muted→ dark#a2a8cc(~8:1 on--bg), light#4a4f63;--ok/--warn/--standbydarkened (their dark-mode brights are illegible on white);h2,.surface) get a light-mode override so they aren't invisible on light bg;.seamopacity.75→.9.Every text token (pills, table headers,
.hint/.empty, logpre, footer, status words) now clears ≥4.5:1 in both schemes, locked by a WCAG-contrast unit test (TestContrastAA).Scope / testing
Contained to
pkg/proxystatus(CSS + tests) andpkg/visor/meshproxy.go(+ matcher test);pkg/router/policy untouched.go build .,go vet, formatted with the repo'sgoimports -local. New/updated unit tests pass (proxystatus,meshStatusSurface,TestContrastAA).Follow-up (separate PR, same series): streaming the interstitial's real route-setup progress via chunked transfer-encoding.