Commit graph

11 commits

Author SHA1 Message Date
e64db9d923 style: improve altcha widget integration and button alignment
Some checks reported errors
continuous-integration/drone/push Build was killed
- Style altcha widget to match theme using CSS variables (border, background, colors, dark mode)
- Make buttons in .btn-group stretch full width to align with inputs
- Center altcha widget with max-width: 100%

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-08 12:38:08 +07:00
20c757cb76 feat: move brand outside card and simplify logo/name display logic
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-08 12:26:26 +07:00
51813d3957 feat: update theme color to green and add sky-inspired background gradient
All checks were successful
continuous-integration/drone/push Build is passing
Replace violet/indigo accent colors with #2fa700 green, and update the
background from a flat color to a diagonal gradient evoking a sky over
green landscape (light: sky blue → meadow green; dark: midnight → forest).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-08 11:55:28 +07:00
99def55e80 feat: replace Bootstrap with custom CSS and add profile page
All checks were successful
continuous-integration/drone/push Build is passing
- Add self-hosted style.css replacing Bootstrap CDN dependency
- Add profile.html with tabbed view (account info, emails/aliases, API token)
- Refactor login handler to pass structured data to template instead of building HTML strings
- Add brand-name and brand-logo flags/env vars for UI customization
- Update CSP to allow brand logo domain and remove CDN references
- Update all templates to pass template vars to header/footer and use new CSS classes

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-08 11:49:51 +07:00
28f55960de feat(security): add altcha proof-of-work CAPTCHA to all sensitive forms
Integrate go-altcha to protect login, change password, lost password,
and reset password forms against automated submissions. Serves the
altcha widget JS from the embedded library, exposes a challenge
endpoint, validates responses server-side with replay prevention, and
updates the CSP to allow self-hosted scripts and WebAssembly.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-08 10:56:16 +07:00
57775bbf89 fix(security): redesign password reset tokens using crypto/rand with server-side storage
- Replace SHA512-based deterministic token with 32-byte crypto/rand token
- Store tokens server-side with 1-hour expiry and single-use semantics
- Remove genToken (previously broken due to time.Add immutability bug)
- Add CSRF double-submit cookie protection to change/lost/reset forms
- Remove token from form action URL (use hidden fields only, POST body)
- Add MailFrom field and SMTP_FROM env var for configurable sender address
- Add SMTP_PASSWORD_FILE env var for secure SMTP password loading
- Add PUBLIC_URL env var and --public-url flag for configurable reset link domain
- Use generic error messages in handlers to avoid information disclosure

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-06 15:30:48 +07:00
907f496b91 Add button to display the password fields
All checks were successful
continuous-integration/drone/push Build is passing
2022-05-29 00:53:20 +02:00
f819320f5a Continue reset form on bad entry 2018-12-31 01:00:24 +01:00
1d3ad672cb Theming 2018-12-31 01:00:24 +01:00
3fd2231721 Use green background when message are not error 2018-11-13 01:19:23 +01:00
b99a321ded Initial commit 2018-11-13 01:14:42 +01:00