T
finnandClaude Opus 5.5 5eea5da396 Hash passwords with bcrypt instead of a single SHA-512 round
New passwords are stored as {BLF-CRYPT} with cost 12, which Dovecot 2.4
verifies. Existing {SSHA512} hashes are still checked and replaced at the
next login. Unknown users are checked against a dummy hash, so the
response time does not reveal whether an email exists.

bcrypt only uses 72 bytes and bcrypt 5 raises for longer passwords, so
validate_password limits passwords to 72 bytes when creating a user,
changing a password and in the CLI.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-22 19:04:04 +00:00
2020-04-13 08:31:44 +02:00
2020-04-13 08:31:44 +02:00
2026-10-21 09:06:51 +00:00
2026-10-19 18:53:59 +02:00
2020-04-13 08:31:44 +02:00

Max

A small little program to manage emails.

Setup

Requirements: Docker, Make

Start with make run-dev

Configuration

  • MAX_ORIGIN (required in production): The public origin of MAX, e.g. https://max.finn.st
  • MAX_PRODUCTION=1 is set in the Docker image and makes MAX refuse to start in debug mode (FLASK_DEBUG). Do not override it.

Reverse proxy

In production, the reverse proxy must set X-Real-IP to the client's address and overwrite any value the client sends. Max uses this address for audit logging. For nginx:

proxy_set_header X-Real-IP $remote_addr;

Dependencies

Direct dependencies are listed in requirements.in (production) and requirements-dev.in (development tools). requirements.txt and requirements-dev.txt are lockfiles with exact versions and hashes

  • After changing a .in file: make lock-deps and make sync-deps
  • Update all dependencies: make update-deps and make sync-deps
  • Check for known vulnerabilities: make audit (before every release)
S
Description
No description provided
Readme MIT
1.2 MiB
0 Stars 1 Watchers 0 Forks
Languages
Python 70.9%
HTML 19.8%
CSS 4.4%
Dockerfile 2.9%
Shell 1%
Other 1%