Commit Graph
1161 Commits
Author SHA1 Message Date
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
Linus Rath 10abf7273c test: check that pairing, the policy Bearer check and the SSO hand-off answer 503 while the shared store is down #1066 2026-11-01 00:03:20 +01:00
Linus Rath 47ec029717 fix: give a hand-off redeem back when the store fails, and hand out a sign-in whose tombstone couldn't be written #1066 2026-11-01 00:03:19 +01:00
Linus Rath fedbd650bf test: type the pinned pairing store in the disposal tests 2026-10-31 23:57:27 +01:00
Linus Rath 933d26f0fe fix: delete an abandoned paired app password even when nobody uses pairing for a while, and finish a sign-out that hit a store outage #1066 2026-10-31 23:56:52 +01:00
Linus Rath af661a06c8 fix: key refused stored passwords by a secret-keyed hash and never hold a JMAP call for the shared store #1066 2026-10-31 23:53:11 +01:00
Linus Rath 25c44e01f8 feat: carry the session-limit start and office editor revocations into the shared store on import #1066 2026-10-31 23:31:00 +01:00
Linus Rath 0261c81b16 feat: keep the session-limit start and office editor sign-outs the same on every instance #1066 2026-10-31 23:29:03 +01:00
Linus Rath c4ccd8f03c feat: refuse an impersonation link on every instance once it was used on one #1066 2026-10-31 23:24:24 +01:00
Linus Rath ca5f2cf09c feat: let the mobile app redeem a sign-in hand-off through any instance #1066 2026-10-31 23:19:36 +01:00
Linus Rath 26cc7c68c3 feat: let a phone pair through any instance and keep pairing secrets sealed in the shared store #1066 2026-10-31 23:16:11 +01:00
Linus Rath ff0d2dc6e1 feat: stop sending a refused stored password from any instance once one has seen it refused #1066 2026-10-31 23:07:12 +01:00
Linus Rath 388daf767b feat: count sign-in, pre-check, pair step-up and hand-off limits across every instance #1066 2026-10-31 23:04:05 +01:00
Linus Rath d28ee361c1 fix: refuse an impersonation link when its use can't be recorded #1066 2026-10-31 22:53:34 +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 088a982218 test: expect 30 locales now that vietnamese is in 2026-10-31 18:50:55 +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 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 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 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 825d6e76f8 fix: let admins switch off usage stats by clearing the collector address 2026-10-31 17:51:09 +01:00
Linus Rath 6aa48c300d fix: keep plugin credentials when the docker container is recreated 2026-10-31 17:50:07 +01:00
Linus Rath f11ddf82dd fix: tell banner plugins when an admin opened the mailbox through impersonation 2026-10-31 17:48:29 +01:00
Linus Rath dcc785690c fix: apply the log level and format set in the setup wizard or admin console 2026-10-31 17:45:06 +01:00
Linus Rath 65ec66b8ef fix: send embedded-mode messages to the parent origin set in the admin console 2026-10-31 17:43:03 +01:00
Linus Rath 9d529ca98f feat: reply from the address a message was delivered to when to, cc and bcc have no match #1353 2026-10-31 16:55:10 +01:00
Linus Rath ea604ab8a1 fix: keep the open folder regular weight in mountain view so bold only means unread #1469 2026-10-31 16:31:15 +01:00
Linus Rath 7341e981c3 fix: limit how often a plugin can open a message in the reader #1466 2026-10-31 16:25:07 +01:00
Linus Rath b8223a4492 Merge pull request #1466 from HOLOEYE-JZ/feat/plugin-open-email
feat(plugins): api.ui.openEmail opens a message in the reader
2026-10-31 16:25:05 +01:00
Linus Rath c09be1cdd3 Merge pull request #1456 from HOLOEYE-JZ/feat/plugin-frame-activity
feat(plugins): input in a plugin frame counts as activity for the idle sign-out
2026-10-31 16:25:03 +01:00
Linus Rath e5ed50dc92 Merge pull request #1467 from HOLOEYE-JZ/feat/plugin-hooks-account-and-composer
feat(plugins): star and after-send hooks name the mail's account
2026-10-31 16:25:00 +01:00
Linus Rath 2ceeef3fb9 Merge pull request #1464 from VasilisNtovolos/fix/xhr-upload-inactivity-timeout
fix: time out stalled XHR uploads after inactivity
2026-10-31 16:24:56 +01:00
Linus Rath 4c53609b1e Merge pull request #1465 from HOLOEYE-JZ/fix/tasks-shared-account-without-calendars
fix(tasks): skip a shared account without calendar access when listing tasks
2026-10-31 16:24:54 +01:00
Linus Rath 1e462fc67e Merge pull request #1436 from shukiv/fix/impersonation-expired-app-passwords
fix: let a mailbox be opened through the handoff more than five times
2026-10-31 16:24:52 +01:00
Linus Rath 2daffe1364 fix: complete the vietnamese strings and register them for plugin controls #1448 2026-10-31 16:24:49 +01:00
Linus Rath 6b94f96e83 fix: redirect the bare base path of a sub-path install to the sign-in page #1455 2026-10-31 16:22:58 +01:00
Linus Rath 3b4a0c4c8e feat: fold the quoted history of iphone mail and outlook replies behind the ••• toggle #1476 2026-10-31 16:21:37 +01:00
Linus Rath 7c88fb8c5b fix: shrink the mail body to its content when it gets shorter after opening #1474 2026-10-31 16:21:35 +01:00
Linus Rath 3cb3a8d33a fix: keep pasted images inside the message body for recipients #1451 2026-10-31 16:14:49 +01:00
Linus Rath 5931cd1678 feat: send an oauth resource indicator when one is configured #1461 2026-10-31 16:14:35 +01:00
Linus Rath 3bdbdb1364 docs: move the mobile hand-off contract to the website 2026-10-31 14:32:39 +01:00
VasilisNtovolos 2e8a73ffd2 fix: time out stalled XHR uploads after inactivity 2026-10-31 15:16:17 +02:00
Jacob Zeitz d5cd3c6e40 feat(plugins): star and after-send hooks name the mail's account
Message ids repeat across accounts, so a hook payload naming only an
emailId could not tell a plugin which mailbox the message lies in when
it is a shared or group account's.

onBeforeEmailStarToggle and onEmailStarToggle now carry accountId when
the starred message is not in the user's own account, as the
message-row-actions click context does. Every star (the row's button,
the reader's star, the key, the menu) goes through toggleStar, one
message at a time, so one accountId names it; the account is resolved
before the plugins are asked. An own message's payload is unchanged.

onAfterEmailSend now carries accountId, the JMAP account the sent
message lies in (a mail sent from a shared or group identity lies in
that account), so api.email.get finds it. sendEmail returns that account
as emailAccountId, the S/MIME send too. The hook also carries
composerId, the id the sending composer's slots and actions gave
plugins, so a plugin can act on what the user chose in that composer.
2026-10-31 14:15:06 +01:00
Jacob Zeitz 54ad6390b3 feat(plugins): api.ui.openEmail opens a message in the reader
A plugin opens a message as a click on a list row or on a search result
entry naming one does, also a message of a shared or group account,
reached through the login that reads it. On the mail page it opens in
place, in the Pro shell in an email tab as a message link does there;
elsewhere the tab loads the message's link, at most five times a minute.
A message no login reads, or one its account does not have, is refused
with an error the plugin sees, as is one the mail page could not open.
Needs email:read.
2026-10-31 14:14:48 +01:00
Jacob Zeitz 65f97dc96b fix(tasks): skip a shared account without calendar access when listing tasks
A shared account the calendar fan-out probes on suspicion may list the
calendars capability and still refuse CalendarEvent/query (Stalwart 1.0
answers accountNotSupportedByMethod for a share that grants no calendar
access). queryCalendarEvents remembered such an account and skipped it
from then on, but getCalendarTasks failed as a whole on it, so the task
list and the plugin task API stayed empty after a reload until the
calendar page had run once. Reading an account's tasks now takes that
refusal as no tasks and remembers the account the same way, through one
helper both share; any other failure still fails the read.
2026-10-31 14:14:48 +01:00
Linus Rath fb3ba0275a feat: hand the mobile app a one-time code instead of the sign-in in its link 2026-10-31 14:06:44 +01:00
Linus Rath 6ccd384f35 fix: show replies sent in demo mode in the conversation they answer 2026-10-31 01:55:46 +01:00