This commit is contained in:
2026-07-15 11:25:21 +07:00
parent e846e2f963
commit ccd8e8eb1b
3 changed files with 20 additions and 1 deletions
+1 -1
View File
@@ -48,7 +48,7 @@ gofmt -l . # список неотформатированных файл
1. `parseCSV``validateRow` — структурная проверка без сети (email, пароль, дубликаты в файле).
2. `enrichRow` — сверка с живым mailcow: несуществующий домен → `error`, существующий ящик → `exists` (пропуск). Работает только если заданы креды.
3. `checkDomainQuota` — воспроизводит проверку mailcow: свободная квота домена = `max_quota_for_domain` − Σ(выделенных квот существующих ящиков). Если Σ квот импортируемых строк домена превышает свободную — возвращает `quotaWarn` (в МиБ). UI показывает предупреждение и **блокирует** импорт до подъёма квоты домена (домены с квотой 0 = безлимит пропускаются).
4. `handleImport` — POST на `/api/v1/add/mailbox`, ответ разбирается `parseMailcowMsg`. Используется **только** `add` — существующие ящики никогда не модифицируются (идемпотентность).
4. `handleImport` — POST на `/api/v1/add/mailbox`, ответ разбирается `parseMailcowMsg`. Используется **только** `add` — существующие ящики никогда не модифицируются (идемпотентность). Payload **явно** задаёт `imap_access`/`pop3_access`/`smtp_access`/`sieve_access`/`sogo_access` = `1`: иначе mailcow берёт их из серверного `$MAILBOX_DEFAULT_ATTRIBUTES`, и при переопределённых дефолтах ящик создаётся, но логин не проходит (симптом «пароль не подходит»). Пароль mailcow хеширует как есть — искажения нет.
### Ключевые соглашения