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