53 Commits
Author SHA1 Message Date
glm-5.1 f6e62a37ef Update README for admin HTTP API, mark tasks completed
- Replace admin socket section with admin HTTP API section
- Update config table (admin_socket_path → admin_key_path)
- Update project structure (admin/auth.rs, handler.rs, config/mod.rs)
- Update architecture diagram (Admin HTTP API instead of Unix socket)
- Update Docker compose volume (admin-key instead of socket dir)
- Mark all four task files as status: completed with summaries
2026-06-15 06:34:21 +00:00
glm-5.1 3ea3f56de7 Replace Unix socket admin API with authenticated HTTP admin API (ADR-028)
Remove src/admin/socket.rs and replace with Bearer token HTTP auth on the
health check listener (port 9900). New src/admin/auth.rs provides SHA-256
key hashing with constant-time comparison; src/admin/handler.rs implements
/admin/reload, /admin/status, and /admin/rotate-key. Admin endpoints return
404 when disabled (empty admin_key_path), 401 on bad auth. Config field
renamed admin_socket_path → admin_key_path. Deployment files updated for
key file mount instead of socket directory.
2026-06-15 06:01:35 +00:00
glm-5.1 cfe0ae522d Fix task frontmatter: use pending/open, isolated/docs, review/documentation per taskgraph schema 2026-06-15 05:23:43 +00:00
glm-5.1 161049a17d Add ADR-029/030, implementation tasks, and spec updates for admin socket removal
Security review #005 identified critical vulnerabilities in the Unix domain
socket admin API (C1 symlink race, C2 no auth, C3 info leak, W1-W7, S1-S6).
ADR-028 (already accepted) replaces the socket with an authenticated HTTP
admin API on the health check port. This commit adds the remaining spec work:

- ADR-029: Config file TOCTOU mitigation (mtime check on reload)
- ADR-030: Store cli_allow_wildcard_bind in ConfigReloadHandle for consistent
  reload validation
- Implementation tasks for the admin HTTP migration (fix/admin-http-api),
  TOCTOU fix (fix/config-reload-toctou), and wildcard flag fix
  (fix/wildcard-flag-reload)
- Updated review #005 status to resolved with per-finding disposition
- Resolved OQ-16: POST for state-changing admin endpoints, GET for read-only
- Updated all architecture docs to reference new ADRs, use admin_key_path
  instead of admin_socket_path, and reflect POST method for /admin/reload
2026-06-15 05:19:42 +00:00
glm-5.1 6400c90cb3 Mark review/post-security-fix-review as completed — all 10 criteria PASS 2026-06-12 14:35:34 +00:00
glm-5.1 75d9c263cb Mark fix/upstream-host-validation as completed 2026-06-12 14:34:24 +00:00
glm-5.1 9730d155d2 Mark fix/token-bucket-field-visibility as completed 2026-06-12 14:33:01 +00:00
glm-5.1 a8155d92f9 Mark fix/tls-mode-wildcard-mismatch as completed 2026-06-12 14:31:08 +00:00
glm-5.1 dbedb8846c Mark fix/rename-misleading-test as completed 2026-06-12 14:29:51 +00:00
glm-5.1 8ff8c71783 Mark fix/rate-limiter-connectinfo-tests as completed 2026-06-12 14:27:08 +00:00
glm-5.1 21186b8265 Mark fix/http-port-type-u16 and fix/log-root-cert-count as completed 2026-06-12 14:21:37 +00:00
glm-5.1 9a3b8831c7 Mark fix/json-format-without-logfile as completed 2026-06-12 14:19:49 +00:00
glm-5.1 01e3b1cd9a Mark 6 fix tasks as completed (admin-socket-resource-limits, upstream-uri-error-handling, remove-dead-code-remnants, acme-contact-validation, admin-socket-reload-mutex-visibility, connector-timeout-ceiling) 2026-06-12 14:18:23 +00:00
glm-5.1 db982e9c4d Mark fix/inflight-counter-increment, fix/consolidate-config-types, fix/rate-limiter-ip-source as completed 2026-06-12 14:02:02 +00:00
glm-5.1 54f1725173 Decompose security review #003 findings into 17 fix tasks and 1 review task
Address 4 critical, 8 warning, and 5 suggestion findings from the
security and bug review by creating atomic, dependency-ordered tasks:

Critical fixes (C1-C4): rate limiter IP source (ADR-025), InFlightCounter
increment + drain interval, connector timeout ceiling (ADR-026), JSON format
without log file.

Validation tightening (W1, W2): upstream host validation, ACME contact email
validation.

Robustness (W3, W4, W5, W12): upstream URI error handling (502 not silent
drop), admin socket resource limits (ADR-027), TlsMode wildcard mismatch,
http_port u32→u16.

Code quality (W6, W10, W11, S1, S3, W8/W9): config type consolidation,
TokenBucket field visibility, reload_mutex #[cfg(test)], dead code removal,
root cert count logging, misleading test names.

Test coverage (S10): rate limiter ConnectInfo tests (depends on C1 fix).

Review: post-security-fix-review checkpoint covering all critical fixes
and sensitive config consolidation path.
2026-06-12 13:42:37 +00:00
glm-5.1 da28ea749d Mark fix/clean-dead-code as completed 2026-06-12 05:13:10 +00:00
glm-5.1 8f3c56e6bc Mark fix/add-code-comments as completed 2026-06-12 05:05:36 +00:00
glm-5.1 516efb0403 Mark fix/connect-timeout as completed 2026-06-12 05:02:41 +00:00
glm-5.1 1da01a2336 Mark fix/graceful-shutdown as completed 2026-06-12 05:00:28 +00:00
glm-5.1 abc8a44134 Mark fix/request-timeout-scope as completed 2026-06-12 04:47:15 +00:00
glm-5.1 f02670d5ef Mark Batch 2 tasks as completed (remove-health, access-logging, acme-contact) 2026-06-12 04:46:34 +00:00
glm-5.1 19efbd42ee Mark fix/normalize-host-ipv6 as completed 2026-06-12 04:41:52 +00:00
glm-5.1 53d601522e Mark fix/config-reload-static-drift as completed 2026-06-12 04:36:34 +00:00
glm-5.1 d7f811ffb5 Mark fix/logging-test-global-subscriber as completed 2026-06-12 04:29:48 +00:00
glm-5.1 c50d2e8d1b Mark fix/http-port-validation as completed 2026-06-12 04:29:02 +00:00
glm-5.1 53ef5b32c3 Mark fix/fragile-error-detection as completed 2026-06-12 04:25:49 +00:00
glm-5.1 4db4ecbeb9 Mark fix/integration-test-toml as completed 2026-06-12 04:23:27 +00:00
glm-5.1 426333eeda Mark fix/token-bucket-nanosecond as completed 2026-06-12 04:22:35 +00:00
glm-5.1 f9d7b8112b Decompose implementation review fixes into 14 atomic tasks with post-fix review
Break down findings from review #002 into dependency-ordered fix tasks:

Critical/High:
- fix/acme-contact-and-challenge (C1+C2): Add acme_contact field, wire to
  ACME, remove unused challenge_config, add validation rule 19
- fix/remove-health-and-hardcode-https (W5+W14+ADR-022): Remove /health
  from main listener, hardcode X-Forwarded-Proto to https
- fix/config-reload-static-drift (C4): Use ArcSwap<StaticConfig> so reload
  diffs against last config, not startup config
- fix/access-logging (W13): Wire up log_request! macro for every proxied
  request with client_ip, host, method, path, status, upstream, duration_ms

Medium:
- fix/graceful-shutdown (W1+W7): Join HTTPS tasks with timeout instead of
  abort, add shutdown signal to admin socket and eviction task
- fix/connect-timeout (W4): Wire upstream_connect_timeout_secs to enforce
  separate connect timeout

Low/Independent:
- fix/token-bucket-nanosecond (W6): Use as_nanos() instead of as_millis()
- fix/normalize-host-ipv6 (S3): Handle IPv6 bracket notation in normalize_host
- fix/http-port-validation (S1): Validate http_port in range 0 or 1-65535
- fix/integration-test-toml (S10): Fix double-nested listeners.listeners.sites
- fix/logging-test-global-subscriber (W9): Use try_init() to avoid test conflicts
- fix/fragile-error-detection (W3): Add typed error matching or documented string match
- fix/add-code-comments (C3,W8,W10,W11,S9): Document correct-but-non-obvious behaviors
- fix/request-timeout-scope (S8): Document full-request timeout scope
- fix/clean-dead-code (S4+S2): Remove dead_code annotations, add #[non_exhaustive]

Review gate:
- review/post-fix-review: Verify all fixes against architecture spec
2026-06-12 04:08:45 +00:00
glm-5.1 57cb071ff2 Fix task status: 'complete' -> 'completed' for taskgraph compatibility 2026-06-11 14:06:20 +00:00
glm-5.1 cf002cc40f Fix spec deviations and implement graceful shutdown drain
- Replace determine_if_https() with ProxyState.is_https field so X-Forwarded-Proto
  reflects the listener's protocol instead of guessing from the Host header
- Return ProxyError::BadGateway with host/upstream context for non-connect upstream
  errors instead of bare StatusCode::BAD_GATEWAY
- Implement InFlightCounter with RAII guard for tracking in-flight connections
- Add drain_in_flight() to wait for connections to complete on shutdown, with
  configurable timeout before forcing exit
- Mark review/core-components and review/integration-readiness as complete
2026-06-11 14:01:55 +00:00
glm-5.1 9e11e755ea Mark integration/startup-orchestration as complete 2026-06-11 13:46:46 +00:00
glm-5.1 3754b40904 Mark deploy/systemd-and-container as complete 2026-06-11 13:42:57 +00:00
glm-5.1 5d1e29fde9 Mark tls/tls-listener-setup as complete 2026-06-11 13:40:14 +00:00
glm-5.1 eb13c8cd9b Mark ops/signals-and-shutdown as complete 2026-06-11 13:34:48 +00:00
glm-5.1 ecdfac1a1f Mark proxy/headers-and-forwarding as complete 2026-06-11 13:24:50 +00:00
glm-5.1 134cb53de0 Mark ops/admin-socket as complete 2026-06-11 13:20:40 +00:00
glm-5.1 bb33dc18e9 Mark tls/http-redirect as complete 2026-06-11 13:18:56 +00:00
glm-5.1 f3ee0b7a97 Mark config/cli-parsing as complete 2026-06-11 13:16:58 +00:00
glm-5.1 05b720eb7a Mark proxy/error-responses as complete 2026-06-11 13:13:59 +00:00
glm-5.1 91f76e9646 Mark ops/body-size-limit as complete 2026-06-11 13:12:50 +00:00
glm-5.1 4b4ff838fe Mark ops/rate-limiting as complete 2026-06-11 13:03:30 +00:00
glm-5.1 f1cada010f Mark proxy/host-routing as complete 2026-06-11 12:59:48 +00:00
glm-5.1 994ce0fb66 Mark config/validation as complete 2026-06-11 12:49:46 +00:00
glm-5.1 07fb4ce411 Mark ops/logging as complete 2026-06-11 12:49:05 +00:00
glm-5.1 30d391b353 Mark config/dynamic-config as complete 2026-06-11 12:48:10 +00:00
glm-5.1 5ca658e8f3 Mark ops/health-check as complete 2026-06-11 12:41:29 +00:00
glm-5.1 468adb21de Mark tls/manual-tls as complete 2026-06-11 11:59:12 +00:00
glm-5.1 ff5112e4d5 Mark tls/acme-tls as complete 2026-06-11 11:56:31 +00:00
glm-5.1 33a448505e Mark setup/test-infrastructure as complete 2026-06-11 11:49:37 +00:00