8ded485a58
Claude-Session: https://claude.ai/code/session_01NptTCFtu7dz2Ru89qHRagN
39 lines
2.6 KiB
Markdown
39 lines
2.6 KiB
Markdown
# felhom.eu — task reports
|
|
|
|
> **Overwrite** this file with a summary of the most recent task only (uniform with the other repos; not cumulative). The cumulative hub history lives in [hub/CHANGELOG.md](hub/CHANGELOG.md); the scripts history lives in [scripts/CHANGELOG.md](scripts/CHANGELOG.md).
|
|
|
|
## Hub v0.50.0 — customer-claim password arc (closes DRILL-day0-vm F-4/F-5) — 2026-07-12
|
|
|
|
Hub half of the customer-owned dashboard-password gate (controller v0.122.0 is the other half).
|
|
The customer sets + owns the password via a one-time claim code the hub emails to the registered
|
|
address; the hub stores only `bcrypt(code)`. **DEPLOYED: `felhom-hub:0.50.0` live on k3s (ArgoCD
|
|
synced/healthy, `Listening on :8080` at 18:47 CEST).**
|
|
|
|
### What shipped
|
|
|
|
- **`internal/claim`** — the code engine: `EnsureIssued` (idempotent Day-0/live-box issue+email),
|
|
`Resend` (operator rotate), `RequestReset` (controller-forwarded, 3/day cap), `MarkClaimed`
|
|
(set-only + one confirmation email). Plaintext code exists ONLY inside the email send.
|
|
- **`store.customer_claims`** — `RotateClaimCode` (generation bump = single active code; PRESERVES
|
|
`claimed_at`), `GetClaim`, `MarkClaimed` (set-only), `BumpResetCount`.
|
|
- **Delivery**: `GET /api/v1/config/{id}` issues the first code + bakes `web.claim_code_*` into the
|
|
generated controller.yaml; the report ACK serves `claim {code_hash, generation, issued_at}`
|
|
(allowlisted) + ingests `claimed` (set-only); `POST /api/v1/claim/reset-request` (self-scoped).
|
|
- **UI**: customer-page Setup tab claim chip + "Kód újraküldése" (`POST /configs/{id}/claim-resend`).
|
|
- **Emails**: three Hungarian templates (claim / reset / claimed) via the notify dispatcher.
|
|
- 15 tests (engine, ACK/config, UI); red-proofs for the generation bump + reset-non-DoS proven.
|
|
|
|
### Live validation
|
|
|
|
Drill box demo-vm-felhom: on the first report after hub 0.50.0 + controller 0.122.0, the hub issued
|
|
+ emailed the claim code to the registered address and the ACK delivered the hash — the controller
|
|
gate flipped ON (proven via the real Cloudflare edge: `/` → 302 claim page, `/api` → 401). Observed:
|
|
the hub issues a code for EVERY reporting managed customer on first report (peti + demo also received
|
|
emails) — benign, since a pre-v0.122 controller ignores the ACK claim field and has no gate.
|
|
|
|
### Version note
|
|
|
|
Hub was at v0.49.0; this is v0.50.0. Controller v0.122.0 committed + image built. The **floor raise
|
|
to 0.122.0 is the operator's supervised LAST step** (after the drill/demo claim validation) — a
|
|
gated controller must never reach a box before its hub can deliver the code hash.
|