Commit Graph
3968 Commits
Author SHA1 Message Date
Linus Rath 0ed5fb148c fix: never write telemetry defaults over a state file that can't be read #1066 2026-11-01 00:03:34 +01:00
Linus Rath 79e678716e fix: stop running the background jobs while the shared store has lost its data #1066 2026-11-01 00:02:35 +01:00
Linus Rath 48ac0d9196 fix: keep the stored heartbeat schedule when the setup wizard sets telemetry consent #1066 2026-11-01 00:01:14 +01:00
Linus Rath a87a9a5f6a fix: flush account archives to disk before they replace the old file again #1066 2026-10-31 23:59:43 +01:00
Linus Rath 37696f9cf7 fix: answer 503 on the update status routes while the shared store is down #1066 2026-10-31 23:58:21 +01:00
Linus Rath 6d22814e5f fix: move settings and plugin credentials that no longer decrypt aside instead of refusing every save #1066
The earlier fix answered 503 to every read and write of a settings file
or plugin vault that doesn't decrypt, so a rotated SESSION_SECRET left
the user with no way out: even disconnecting a plugin failed. Now such a
document reads as nothing stored, and the next write first moves it
aside, then saves as usual. The bytes are kept unchanged, so the data can
be restored with the old secret:

- local mode renames the file to `<file>.unreadable-<time>` next to it
- shared mode copies the document to `<id>.unreadable-<time>`, then
  deletes the original only if it is still the same document

A settings file too short to hold anything reads as nothing stored and
is written over, as before 585e10041. The 503 is now only for a shared
store that can't be reached or a file that can't be read at all.

Credentials the admin set up for a plugin no longer read the user's
vault, so they keep working when it can't be read, and the credential
list still reports their status.
2026-10-31 23:57:08 +01:00
Linus Rath 2130716d83 fix: keep the day's heartbeat when its payload can't be built and never report zero accounts while the store is down #1066 2026-10-31 23:51:19 +01:00
Linus Rath 63f4af27f5 fix: send one heartbeat when the scheduler lead moves after a stall or a crash #1066 2026-10-31 23:50:07 +01:00
Linus Rath d425a873e2 fix: keep a replica that lost the scheduler lead from rearming the heartbeat or update check #1066 2026-10-31 23:47:31 +01:00
Linus Rath ff6116e991 refactor: recognise a store outage with the shared-store helper in user data routes 2026-10-31 23:44:26 +01:00
Linus Rath 8b9df1b633 Merge branch 'feat/multi-instance' into feat/multi-instance-data 2026-10-31 23:43:48 +01:00
Linus Rath 9e2b59847f refactor: recognise a shared-store outage by name, so every bundle's module copy sees it 2026-10-31 23:31:02 +01:00
Linus Rath e8be930984 feat: import settings, plugin credentials, archives and telemetry state into the shared store #1066 2026-10-31 23:26:53 +01:00
Linus Rath a0af628a6a feat: run the telemetry heartbeat and update check on one instance of the deployment #1066 2026-10-31 23:25:12 +01:00
Linus Rath fd1d90dc3a fix: stop the old telemetry timer when an admin changes consent, so one heartbeat runs #1066 2026-10-31 23:11:48 +01:00
Linus Rath eb0005f3ef feat: share telemetry and update-check state across instances, with one instance id and login count #1066 2026-10-31 23:10:30 +01:00
Linus Rath a1ce0d7ec8 fix: keep telemetry consent when its state file can't be read #1066 2026-10-31 23:05:14 +01:00
Linus Rath 7148dd2ded feat: keep account archives in the shared store #1066 2026-10-31 23:04:02 +01:00
Linus Rath 741983c53c feat: keep users' plugin credentials in the shared store without losing a concurrent save #1066 2026-10-31 23:00:42 +01:00
Linus Rath 9651098634 fix: keep both templates when two settings saves arrive at once #1066 2026-10-31 22:58:14 +01:00
Linus Rath 79d74d4900 feat: keep synced settings in the shared store so every instance serves the same ones #1066 2026-10-31 22:56:56 +01:00
Linus Rath 585e10041e fix: refuse to save over stored settings or plugin credentials that no longer decrypt #1066 2026-10-31 22:54:35 +01:00
Linus Rath fd4a319eae feat: show the storage and how many instances checked in on the admin overview #1066 2026-10-31 22:46:08 +01:00
Linus Rath c20ecd4b1a refactor: let each store bring its own step for the shared-store import 2026-10-31 22:42:14 +01:00
Linus Rath 1b2d81be27 feat: hold each instance back until it has loaded from the shared store and add a readiness check #1066 2026-10-31 22:40:51 +01:00
Linus Rath df90492258 feat: add a shared store that keeps today's files by default and can use a redis-protocol server #1066 2026-10-31 22:40:44 +01:00
Linus Rath 0571b8f2ec fix: show pictures apple mail sends inline as attachments #1478 2026-10-31 22:08:56 +01:00
Linus Rath 35508913ac feat: show marketplace screenshots above the versions and open them large on click 2026-10-31 18:55:05 +01:00
Linus Rath 5b8cf60bd9 ci: run the integration suite in the playwright image that matches the installed version 2026-10-31 18:53:00 +01:00
Linus Rath 521b0aedab fix: stop naming a jmap metadata property in the demo client 2026-10-31 18:52:29 +01:00
Linus Rath 088a982218 test: expect 30 locales now that vietnamese is in 2026-10-31 18:50:55 +01:00
Linus Rath 1918d1010f fix: word the vietnamese settings discard dialog like calendar and contacts 2026-10-31 18:50:29 +01:00
Linus Rath d23a2869d1 Merge remote-tracking branch 'origin/main' into fix/found-fix-server
# Conflicts:
#	Dockerfile
#	docker-compose.yml
2026-10-31 18:17:39 +01:00
Linus Rath f884ffe441 Merge branch 'fix/found-fix-ui' into fix/found-fix-server 2026-10-31 18:17:13 +01:00
Linus Rath 5fe7d1a65a fix: keep existing compose volumes and add the two that were missing 2026-10-31 18:12:00 +01:00
Linus Rath f6eb34c909 fix: remove the admin switch for user theme uploads, which users can't do 2026-10-31 18:10:03 +01:00
Linus Rath 136e6be8fd refactor: drop the unused draft autosave interval setting 2026-10-31 18:07:16 +01:00
Linus Rath fa9aad95b4 docs: describe where the push relay sends the account label 2026-10-31 18:06:08 +01:00
Linus Rath 9f0413d50b docs: say in the Lite readme that sign-in with SSO works when Stalwart serves Lite 2026-10-31 18:04:57 +01:00
Linus Rath 88351b2333 fix: point the outgoing hosts list at the current usage stats and updates pages 2026-10-31 18:02:01 +01:00
Linus Rath 65015e1630 fix: describe when the unified mailbox section appears instead of the old empty header 2026-10-31 18:00:56 +01:00
Linus Rath 6fc3994aac fix: keep plugin credentials and update-check state across container recreates 2026-10-31 18:00:13 +01:00
Linus Rath 100f6db309 fix: skip the setup wizard in demo mode without a mail server 2026-10-31 18:00:13 +01:00
Linus Rath ae96b9e0aa fix: say what the setup wizard's stalwart features switch turns on 2026-10-31 17:58:34 +01:00
Linus Rath 485e48648e fix: stop promising offline support in the install prompt 2026-10-31 17:57:38 +01:00
Linus Rath 6a1da49f52 fix: let accessibility reset bring back the organisation's defaults and cover every option 2026-10-31 17:57:20 +01:00
Linus Rath ddc24e4fc7 fix: let a browser an admin signed in from before past the shared admin login limit 2026-10-31 17:55:29 +01:00
Linus Rath e15c335bec fix: pick up admin changes saved by another replica without a restart 2026-10-31 17:54:40 +01:00
Linus Rath 48c8d37e37 fix: hide subscribe to calendar in lite, which can't fetch feeds 2026-10-31 17:52:28 +01:00
Linus Rath 825d6e76f8 fix: let admins switch off usage stats by clearing the collector address 2026-10-31 17:51:09 +01:00