Commit Graph
1900 Commits
Author SHA1 Message Date
Linus Rath 3ef16f602e fix: keep a message's label through Undo send and take over labels only from internal senders
A sent message brought back by Undo, Cancel and edit or edit-as-new
reopened with the default label, because only drafts carried the
X-Bulwark-Label marker; it now falls back to the SIO-Label it went out
with. A reply, quick reply or plugin forward takes over the original's
label only when an internal sender set it and never one below the
default, since anyone outside can write the header. The tests written
for the earlier rule (any received label counts) now pass an internal
sender, which is why their originals changed.
2026-11-01 06:48:01 +01:00
Linus Rath 128f61646e fix: hold remote content per account and until scoped locks are known, also in previews and drafts 2026-11-01 06:42:46 +01:00
Linus Rath 9c60140e49 fix: write the SIO-Label header without a doubled space after the colon 2026-11-01 06:01:20 +01:00
Linus Rath 1c7f81bcc6 feat: pick a classification label in the composer and stamp it on sent mail 2026-11-01 05:33:12 +01:00
Linus Rath 59f8e462cd feat: let admins define classification labels with presets 2026-11-01 05:07:33 +01:00
Linus Rath 6262e58ef9 feat: offer the ARF report format for phishing reports 2026-11-01 05:02:32 +01:00
Linus Rath 50f95f4463 feat: report a message as phishing and move it to Junk 2026-11-01 04:58:01 +01:00
Linus Rath e66383de5b feat: let admins set an address for phishing reports 2026-11-01 04:33:38 +01:00
Linus Rath bdac27367c fix: keep the organisation's locks when the policy can't be fetched 2026-11-01 04:20:02 +01:00
Linus Rath 123018f322 feat: add the policy sections and admin pages for the enterprise features 2026-11-01 04:20:02 +01:00
Linus Rath d2a83a4ee9 fix: stop proxying locale rewrites back to the server when it listens on 127.0.0.1 #1487 2026-11-01 02:41:42 +01:00
Linus Rath d781e8762e Merge branch 'feat/multi-instance' 2026-11-01 01:43:15 +01:00
Linus Rath eb56ea441f fix: list the User-Agent contact link as a non-request host 2026-11-01 01:22:17 +01:00
Linus Rath acf125a52b test: fail when server state skips the shared store without a listed reason #1066 2026-11-01 01:12:49 +01:00
Linus Rath 3a9aef7c50 feat: move plugins, themes, branding and the signing key with the shared-store import and export #1066 2026-11-01 01:08:34 +01:00
Linus Rath 70a7e1227c fix: drop files of removed plugins on export and read only the approval files on import #1066 2026-11-01 01:07:30 +01:00
Linus Rath ac29a94fc3 fix: cap the plugin packages kept for approval review and sweep broken kept-version folders #1066 2026-11-01 01:04:51 +01:00
Linus Rath dcecd50b7f fix: keep up to 256 rendered branding images per kind, enough for many domains #1066 2026-11-01 01:03:33 +01:00
Linus Rath 38bc06f2d3 fix: answer 503 for plugin lists and marketplace installs while the shared store is down #1066
directory-keys-shared.test.ts: the store-down case now expects the store error instead of an 'invalid' signature, since a store outage no longer counts as a bad signature.
2026-11-01 01:03:13 +01:00
Linus Rath d78ce02f78 fix: refuse a plugin install that can't hold the registry lock and a bundle that doesn't match its entry #1066 2026-11-01 01:01:19 +01:00
Linus Rath 750f3114c1 fix: keep an old plugin's bundle hash when the shared store hiccups while it is fixed #1066 2026-11-01 00:58:33 +01:00
Linus Rath b39e3e27ac fix: cache a plugin signature only when it verifies for the cached bundle #1066 2026-11-01 00:57:21 +01:00
Linus Rath d9f4bdd9be fix: keep serving a plugin unsigned when its first signature can't be stored 2026-11-01 00:55:51 +01:00
Linus Rath 256855b294 fix: refuse to sign plugins on an instance whose signing key differs from the others #1066 2026-11-01 00:54:57 +01:00
Linus Rath 00e28e5f83 Merge branch 'feat/multi-instance' into feat/multi-instance-ext 2026-11-01 00:52:04 +01:00
Linus Rath 23b50f8268 test: read the wrapped mkdir in the Dockerfile as one command 2026-11-01 00:47:30 +01:00
Linus Rath c0c1a8f0fb test: give the config route test the logger calls config-manager now makes 2026-11-01 00:46:42 +01:00
Linus Rath ecdd2b54fe chore: name the app Bulwark Webmail in exported files, outgoing requests and the manifest 2026-11-01 00:41:21 +01:00
Linus Rath 77a06a8aa0 fix: stop logging that the shared store is unreachable while its first connection is still being made 2026-11-01 00:39:01 +01:00
Linus Rath 26f0b72b2e feat: write plugins, themes, approvals and branding back to local files on export #1066 2026-11-01 00:30:41 +01:00
Linus Rath 355e57ca6c Merge branch 'feat/multi-instance' into feat/multi-instance-ext 2026-11-01 00:28:15 +01:00
Linus Rath ad7a8d713c feat: bring plugins, themes, approvals and branding along when moving to a shared store #1066 2026-11-01 00:27:17 +01:00
Linus Rath 3c34eda260 fix: cap the cache of Stalwart admin checks so it can't grow without bound 2026-11-01 00:25:35 +01:00
Linus Rath 5efccb65e0 fix: show a re-uploaded logo or icon at once instead of after a restart 2026-11-01 00:24:07 +01:00
Linus Rath a03f76ec85 feat: send X-Powered-By: bulwarkmail.org on every response 2026-11-01 00:21:32 +01:00
Linus Rath fc7d5617c2 feat: serve uploaded branding from the shared store on every instance #1066 2026-11-01 00:20:24 +01:00
Linus Rath 3ed25e1d95 feat: import an existing install into the shared store on first start and export it back with SHARED_STORE_EXPORT #1066 2026-11-01 00:17:20 +01:00
Linus Rath 51e7999e3c feat: sign plugin bundles with one key on every instance #1066 2026-11-01 00:16:42 +01:00
Linus Rath 2078b0a13f Merge branch 'feat/multi-instance-auth' into feat/multi-instance 2026-11-01 00:13:17 +01:00
Linus Rath 5e4b6465d1 Merge branch 'feat/multi-instance' into feat/multi-instance-ext 2026-11-01 00:13:14 +01:00
Linus Rath e3936287fd feat: share plugin approvals and plugin settings between instances #1066 2026-11-01 00:13:09 +01:00
Linus Rath e75834314d fix: show plugin approval requests and decisions to every part of the server at once 2026-11-01 00:13:08 +01:00
Linus Rath 2944d2797f fix: keep every key when several of a plugin's settings are saved at once 2026-11-01 00:12:26 +01:00
Linus Rath 89f337c0ae Merge branch 'feat/multi-instance-admin' into feat/multi-instance 2026-11-01 00:12:24 +01:00
Linus Rath 8127640acf fix: write an office editor sign-out made during a store outage as soon as the store is back #1066 2026-11-01 00:10:09 +01:00
Linus Rath 40578f039d test: give each replica in the setup token tests a state dir of its own #1066 2026-11-01 00:09:49 +01:00
Linus Rath b880e453a5 fix: import the audit log in batches and finish an import that stopped halfway #1066 2026-11-01 00:08:39 +01:00
Linus Rath 5e73fcbcc1 feat: append lines in batches to the shared log and clear it #1066 2026-11-01 00:08:39 +01:00
Linus Rath 47281e5156 fix: answer 503 when an impersonation link's use can't be recorded and keep used links as expiring keys #1066
The marker-write test from d28ee361c now expects the 503 path (a rejected promise) instead of false: refusing with "Token already used" sent admins looking for a replay that never happened, and the jti is now remembered in memory only after it was recorded, so a retry works once the store or state dir is back.
2026-11-01 00:07:41 +01:00
Linus Rath 8b40cfca90 fix: update the plugin frame origins in the CSP right after an install, also on other instances #1066 2026-11-01 00:06:52 +01:00