feat(mail-admin): read-only account view for mail.produktor.io (#74)

- admin/: Go stdlib-only HTTP viewer, lists accounts from
  config/postfix-accounts.cf with per-mailbox message counts (INBOX and
  total, same numbers doveadm reports) and storage; quota from
  dovecot-quotas.cf; Basic Auth from .env; offline tests vs fixtures
  (go test -race ./...)
- compose: mail-admin service, build admin/Dockerfile, publishes
  127.0.0.1:19945 / 172.17.0.1:19945; config and mail-data mounted :ro,
  no docker socket
- NPM proxy host 66: location /admin/ -> 172.17.0.1:19945
- README: account admin section
This commit is contained in:
2026-09-01 15:07:55 +01:00
parent e00c6950ed
commit 5a46ba4b33
22 changed files with 790 additions and 0 deletions
+7
View File
@@ -0,0 +1,7 @@
# docker-mailserver postfix accounts (synthetic test data, NOT real hashes)
info@produktor.io|{SHA512-CRYPT}$6$aaaaaaaa$fakehashinfo
andriy.oblivantsev@produktor.io|{SHA512-CRYPT}$6$bbbbbbbb$fakehashandriy
postmaster@produktor.io|{SHA512-CRYPT}$6$cccccccc$fakehashpostmaster
postman@produktor.io|{SHA512-CRYPT}$6$dddddddd$fakehashpostman
ano@produktor.io|{SHA512-CRYPT}$6$eeeeeeee$fakehashano
malformed-line-without-pipe
+3
View File
@@ -0,0 +1,3 @@
Subject: ano msg
y
@@ -0,0 +1,3 @@
Subject: sent item
x
+4
View File
@@ -0,0 +1,4 @@
Return-Path: <test@example.org>
Subject: fixture one
body
+4
View File
@@ -0,0 +1,4 @@
Return-Path: <test@example.org>
Subject: fixture two
body body
+4
View File
@@ -0,0 +1,4 @@
Return-Path: <test@example.org>
Subject: fixture three
body
@@ -0,0 +1,3 @@
Subject: pm msg
z
+3
View File
@@ -0,0 +1,3 @@
# dovecot quotas (synthetic)
info@produktor.io:quota=500M
ano@produktor.io:quota=250M