Linus Rath
b07aad512a
fix: move the import progress bar message by message for mbox files
2026-11-01 05:45:15 +01:00
Linus Rath
dd1e0e0b13
feat: keep read and flagged state from Thunderbird .eml files on import
2026-11-01 05:34:26 +01:00
Linus Rath
15f0bd198c
feat: export a folder or the whole account as mbox or ZIP
2026-11-01 05:28:58 +01:00
Linus Rath
c43d776b40
fix: keep an mbox message's arrival time and leave its state headers out on import
2026-11-01 05:26:55 +01:00
Linus Rath
a06281f23f
feat: import Outlook PST files into their folders
2026-11-01 05:13:02 +01:00
Linus Rath
d714957f98
feat: import mbox, EML and ZIP mail with progress, pause and resume
2026-11-01 04:58:55 +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
Linus Rath
ff08fe50fe
fix: say when an admin sign-out or password change couldn't be stored instead of answering ok or wrong password #1066
2026-11-01 00:05:15 +01:00
Linus Rath
df1f5cd6a4
fix: give a pair step-up attempt back only to the windows it was counted in #1066
2026-11-01 00:05:09 +01:00