Skip to content

Harden admin login + admin/UI fixes + guided demo#1

Merged
Neverdecel merged 3 commits into
mainfrom
harden-login-and-demo
May 31, 2026
Merged

Harden admin login + admin/UI fixes + guided demo#1
Neverdecel merged 3 commits into
mainfrom
harden-login-and-demo

Conversation

@Neverdecel
Copy link
Copy Markdown
Owner

Three logical commits:

1. UI fixes

  • Discreet admin link in the public footer + owner hint on the empty storefront, so a freshly set-up operator can find /admin.
  • Fix the product-form License plans block: moved off the uppercase .fieldlabel micro-label onto a normal-case label + helper line (it was rendering as an all-caps sentence breaking out of the fieldset); removed the dead duplicate .fieldlabel rule.

2. Login brute-force hardening

  • Per-IP failed-login throttle — escalating, capped (15m), auto-expiring cooldown. Password is verified before the cooldown is consulted, so a correct password is always accepted (safe on shared Tor/NAT egress) and resets the throttle.
  • Password policy (12-char min + common-password blocklist) at setup and for NEVERPAY_ADMIN_PASSWORD on first run; established installs are warned, not bricked.
  • bcrypt cost 10→12; dummy-compare on the no-admin path (removes a timing oracle); constant jittered failure delay.
  • Active throttling shown on /admin/status; documented in SECURITY.md / DEPLOY.md.
  • Designed + adversarially reviewed via multi-agent workflows; 6 review findings fixed. New throttle/password/handler tests.

3. Guided demo

  • cmd/seeddemo — seeds a realistic store (6 products across all license types, orders in every state, multi-seat/revoked/expired keys, webhooks, a demo HD wallet enabling all 7 coins) via the real db/license/wallet packages.
  • demo/ guided walkthrough (buyer + seller journeys) with 15 screenshots; refreshed the 4 README screenshots.

go build/vet/test ./... all green (CGO_ENABLED=0).

🤖 Generated with Claude Code

Neverdecel and others added 3 commits May 31, 2026 19:19
- Add a discreet "admin" link to the public footer and an owner hint on the empty storefront, so a freshly set-up operator can find /admin (which redirects to login).
- Move the product-form "License plans" header off the uppercase .fieldlabel micro-label onto a normal-case label + helper line so it sits inside the License fieldset; drop the dead duplicate .fieldlabel rule.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- Per-IP failed-login throttle with an escalating, capped, auto-expiring cooldown. The password is verified BEFORE the cooldown is consulted, so a correct password is always accepted (safe on shared Tor/NAT egress) and resets the throttle.
- Enforce a password policy (12-char minimum + common-password blocklist) at setup and for NEVERPAY_ADMIN_PASSWORD on first run; an already-configured install is warned, not bricked, on a weak env value.
- Raise bcrypt cost to 12; dummy-compare when no admin is configured (removes a configured/unconfigured timing oracle); constant jittered delay on the failure path.
- Surface active throttling on /admin/status; document in SECURITY.md and DEPLOY.md. Adds throttle/password/handler tests.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- Add cmd/seeddemo: seeds a realistic store (6 products across all license types, orders in every lifecycle state, multi-seat/revoked/expired keys with activations, webhooks, and a demo HD wallet enabling all 7 coins) using the real db/license/wallet packages.
- Add demo/ guided walkthrough of the buyer and seller journeys with 15 screenshots; refresh the 4 screenshots used by README.
- README docs-table + .gitignore updates for the demo runtime dir.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@Neverdecel Neverdecel merged commit 7b5e312 into main May 31, 2026
1 check passed
@Neverdecel Neverdecel deleted the harden-login-and-demo branch June 1, 2026 10:29
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant