Files
computer-playbook/roles/web-app-stalwart/templates/jmap/milter/create.json.j2
kevinveenbirkenbachandClaude Opus 5.5 c75648ccdd fix(web-app-stalwart): port the role to server v1.0.0 and guard 0.16 stores
Stalwart v1.0.0 rejects unknown JMAP properties ("Invalid property" ->
notCreated/notUpdated), validates OIDC tokens more strictly and refuses to
open a data store from before 1.0. Port the role and protect existing
installs:

- Milter: hostname/timeoutConnect/timeoutCommand/timeoutData become
  host/connectTimeout/commandTimeout/dataTimeout; the existing milter is
  looked up by host.
- Onion relay route: address becomes host.
- OIDC directory: requireAudience is gone. Set skipAudienceValidation and
  unscopedTokens=interoperable on create and update, so Keycloak tokens
  (no Stalwart audience, no mail scope) keep working for the WebUI and
  Roundcube XOAUTH2.
- WebUI: send oauthClientId only with SSO enabled; without SSO the WebUI
  falls back to its own client metadata document.
- Store guard: before anything changes, a running Stalwart whose table u
  still has the 0.16 bigint layout stops the deploy and points to the
  stalwart-migrate steps, which the README now documents under
  "Upgrading from 0.16".
- Updater: pin the WebUI git_tags source to v2.* to match server 1.x.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-27 13:46:08 +01:00

13 lines
526 B
Django/Jinja

{
"using": ["urn:ietf:params:jmap:core", "urn:stalwart:jmap"],
"methodCalls": [["x:MtaMilter/set", {"create": {"av": {
"host": {{ STALWART_CLAMAV_HOST | to_json }},
"port": {{ STALWART_CLAMAV_MILTER_PORT | int }},
"stages": {"data": true},
"tempFailOnError": false,
"connectTimeout": {{ STALWART_CLAMAV_MILTER_TIMEOUT_CONNECT_MS | int }},
"commandTimeout": {{ STALWART_CLAMAV_MILTER_TIMEOUT_COMMAND_MS | int }},
"dataTimeout": {{ STALWART_CLAMAV_MILTER_TIMEOUT_DATA_MS | int }}
}}}, "c0"]]
}