Commit Graph
27 Commits
Author SHA1 Message Date
Liosha84 eaffffd4cc Merge pull request '75.2 IMAP: новый сервер на Reactor Netty (STARTTLS, 993, IDLE, UIDPLUS, MOVE)' (#10) from feat/75-2-imap into master
Reviewed-on: #10
2026-11-05 20:59:35 +01:00
Liosha84 b72be91a8b 75.2 IMAP: новый сервер на Reactor Netty (STARTTLS, 993, IDLE, UIDPLUS, MOVE)
Старый IMAP (выключен, .block() на сетевом потоке) удалён, написан заново:
- ImapServer: декодер целых команд с литералами ({n} после "+ Ready", {n+}),
  команды по одной на рабочем потоке; STARTTLS (без выполнения открытого текста
  после него) и неявный TLS; IDLE с опросом раз в 5 с до DONE
- ImapSession: IMAP4rev1 + LITERAL+, SASL-IR, IDLE, UIDPLUS, MOVE, UNSELECT,
  NAMESPACE, SPECIAL-USE, ID; FETCH (ENVELOPE, BODYSTRUCTURE, BODY[section]<partial>),
  SEARCH, STORE, COPY/MOVE с COPYUID, APPEND с APPENDUID, EXPUNGE/UID EXPUNGE
- MimeTree: части письма по байтам — размеры BODYSTRUCTURE совпадают с BODY[]
- V4: UID на папку выдаёт триггер (перенос из веба тоже получает новый UID),
  флаги \Answered/\Deleted, message_sources — письмо как пришло (SMTP, APPEND)
  или собранное один раз (MimeSource); правка черновика сбрасывает его
- тесты: настоящий клиент Angus IMAP, сырые литералы/IDLE/подмешивание (47 всего)
- живая проверка: обновление V3 -> V4 на PostgreSQL с письмами, Python imaplib:
  STARTTLS, 993, папки, вложения, поиск, APPEND/COPY/MOVE/EXPUNGE, IDLE — 0 ошибок

α
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-05 20:45:06 +01:00
Liosha84 73c03b1d6d Merge pull request '75.1 TLS для SMTP: STARTTLS и неявный TLS (465)' (#9) from feat/75-1-smtp-starttls into master
Reviewed-on: #9
2026-11-05 19:42:52 +01:00
Liosha84 17d489e400 75.1 TLS для SMTP: STARTTLS и неявный TLS (465)
- SmtpServer: STARTTLS (RFC 3207) — SslHandler ставится сразу после того,
  как ответ 220 ушёл открытым текстом; сессия начинается заново; строки,
  присланные открытым текстом вместе со STARTTLS, не выполняются, соединение
  закрывается (CVE-2011-0411); свежий декодер строк без остатков открытого текста
- неявный TLS на SMTPS_PORT (RFC 8314); AUTH — только внутри TLS
  (или SMTP_AUTH_WITHOUT_TLS); Received: ESMTPS/ESMTPSA
- SmtpTls: свой сертификат (MAIL_TLS_CERT/KEY) или самоподписанный,
  создаётся один раз в MAIL_TLS_DIR (в образе /app/data/tls); TLS 1.2/1.3
- тесты: STARTTLS + AUTH, подмешанный открытый текст, JavaMail со
  starttls.required, порт 465, переиспользование сертификата (38 всего)
- проверено вживую: openssl s_client -starttls smtp и порт 465, TLSv1.3

α
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-05 19:42:10 +01:00
Liosha84 37f6b3ef3d Merge pull request '75.4 Ловушка почты: catch-all только для адресов без своего ящика, файл с паролями' (#8) from feat/75-4-mail-trap into master
Reviewed-on: #8
2026-11-05 18:14:23 +01:00
Liosha84andClaude Opus 5.5 69b62b5769 README: SMTP ловушки для staging — через внутренний TCP-порт Jambotron (#781)
α
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-05 18:10:38 +01:00
Liosha84 12c2223c15 75.4 Ловушка почты: catch-all только для адресов без своего ящика, файл с паролями
- MailRouter: существующий ящик получает свою почту, всё остальное (и чужие домены) —
  в ящик MAIL_CATCH_ALL; раньше ловушка забирала и письма между ящиками стенда
- DataInitializer: ящик-ловушка создаётся при старте; случайные пароли — в
  MAIL_PASSWORDS_FILE (права 600, в образе /app/data/initial-passwords.txt)
- docker-compose.jambotron.yml: MAIL_CATCH_ALL=trap@mail.test по умолчанию
- README: ловушка, файл паролей, что нужно для staging Jambotron (TCP-проброс SMTP)
- тесты: MailRouterTest, DataInitializerTest (33 всего)

α
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-05 17:43:49 +01:00
Liosha84 db0249eb74 Merge pull request 'Почтовый кабинет: регистрация, папки, черновики, вложения, грид, synthwave-интерфейс' (#7) from feat/mail-cabinet into master
Reviewed-on: #7
2026-11-05 16:43:54 +01:00
Liosha84 29b1beabe0 Почтовый кабинет: регистрация, папки, черновики, вложения, грид @jambotron/aria-grid, интерфейс по synthwave-шаблону
Бэкенд: регистрация со входом сразу и /api/config, профиль и смена пароля, свои папки, PATCH письма
(прочитано, флажок, перенос; Спам ставит отметку), корзина и очистка, черновики, несколько адресатов и копия,
вложения черновика уходят с письмом, вложения и заголовки To/Cc входящих сохраняются, письма заблокированных —
в Спам. Исправлено: загрузка файла (415), колонка content_id (500 на любых вложениях), SPA-маршрут с точкой.
Фронтенд переписан: все таблицы — грид, оформление — шаблон synthwave-design-showcase.html.

α
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-05 16:41:29 +01:00
Liosha84 f605fbfd85 Merge pull request 'Вход из браузера: X-Forwarded-* — CORS 403 за Caddy' (#6) from fix/forwarded-headers into master
Reviewed-on: #6
2026-11-05 15:44:28 +01:00
Liosha84 be6fed4986 Вход из браузера: учитывать X-Forwarded-* — за Caddy свой домен считался чужим для CORS (403)
α
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-05 15:43:10 +01:00
Liosha84 44e2ced266 Merge pull request 'Вход без всплывающего окна браузера (Basic) — на форму входа при 401' (#5) from fix/no-basic-auth-popup into master
Reviewed-on: #5
2026-11-05 15:34:40 +01:00
Liosha84 e54e140046 Merge pull request 'Dockerfile без Alpine — curl в healthcheck падал на ВМ staging' (#4) from fix/no-alpine-runtime into master
Reviewed-on: #4
2026-11-05 15:34:32 +01:00
Liosha84 e1427c062c Вход: без всплывающего окна браузера — API без токена отвечает 401 без Basic, интерфейс уводит на форму входа
α
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-05 15:33:58 +01:00
Liosha84 fdd6b8a51f Dockerfile без Alpine: на ВМ staging бинарники Alpine 3.24.3 падают (Bus error), curl в healthcheck тоже
α
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-05 14:36:58 +01:00
Liosha84 f1cf20f439 Merge pull request 'compose для Jambotron: postgres:17 (Debian) вместо -alpine' (#3) from fix/postgres-debian into master
Reviewed-on: #3
2026-11-05 04:07:23 +01:00
Liosha84 5f8a8607a9 compose для Jambotron: postgres:17 (Debian) — Alpine-сборка падает с Bus error на ВМ staging
α
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-05 04:05:50 +01:00
Liosha84 c8cf5c195f Merge pull request 'Dockerfile: свой пользователь app вместо mail' (#2) from fix/dockerfile-user into master
Reviewed-on: #2
2026-11-05 03:54:37 +01:00
Liosha84andClaude Opus 5.5 3805be7b42 Dockerfile: свой пользователь app (uid 10001) — mail в Alpine уже есть, addgroup падал
α
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-05 03:53:55 +01:00
Liosha84 f744def6ed Merge pull request 'Безопасность, SMTP, очередь, DKIM, деплой на Jambotron (75.1–75.3)' (#1) from fix/75-security-smtp into master
Reviewed-on: #1
2026-11-05 03:45:06 +01:00
Liosha84andJunie b6f6d41813 Синхронизация моделей, Docker настройки и исправление Angular шаблонов
- V1__init.sql: синхронизированы таблицы с Java моделями (users, folders, messages, contacts)
- docker-compose.yml: обновлён контекст сборки, переменные R2DBC/Flyway, порты (5433, 3026, 1443)
- backend/Dockerfile: обновлены пути COPY для нового контекста сборки
- settings.gradle: удалён frontend проект из Gradle
- contacts.component.html: исправлен ternary оператор с HTML на Angular @if/@else
- Фронтенд компоненты: обновления compose, inbox, layout, login, message-detail, register
- index.html, styles.css: обновления стилей и мета-данных

Co-authored-by: Junie <junie@jetbrains.com>
2026-11-05 03:08:36 +01:00
Liosha84andJunie 0d16342f9f Fix: Update all components to match Synthwave design showcase
Co-authored-by: Junie <junie@jetbrains.com>
2026-11-05 01:53:51 +01:00
Liosha84andJunie 587ebd86ba Add: Synthwave design showcase reference with metadata
Co-authored-by: Junie <junie@jetbrains.com>
2026-11-05 01:46:55 +01:00
Liosha84andJunie f59a230709 Add: Synthwave design system showcase reference
Co-authored-by: Junie <junie@jetbrains.com>
2026-11-05 01:45:05 +01:00
Liosha84andJunie 6ab189adae Switch to Caddy Docker Proxy labels for automatic HTTPS
Co-authored-by: Junie <junie@jetbrains.com>
2026-11-05 01:32:23 +01:00
Liosha84andJunie a23a020138 Add contacts, reply/forward, pagination, HTML toggle, Docker Compose for VPS
Co-authored-by: Junie <junie@jetbrains.com>
2026-11-05 01:28:24 +01:00
Liosha84andJunie 0339413d6e Initial commit: mail-server with WebFlux backend and Angular v22 Synthwave frontend
Co-authored-by: Junie <junie@jetbrains.com>
2026-11-05 01:07:29 +01:00