Commit Graph
4174 Commits
Author SHA1 Message Date
Linus Rath 91be465cbc feat: version the service worker by build and offer a reload after a deploy 2026-11-01 11:13:31 +01:00
Linus Rath a480ddb6d1 Merge branch 'feat/enterprise-pack-e' 2026-11-01 10:52:08 +01:00
Linus Rath 465320dbfb test: say no plugin checks sends in the composer draft-login test
The test's mocked onBeforeEmailSend had no size, so the composer took
it for a listening send check and built the check's message, which
reads the sending login's identities from a client the test mocks
without getIdentities; the send stopped there. The real bus without a
plugin has size 0, which the mock now says too.
2026-11-01 10:51:54 +01:00
Linus Rath 0401352e6e Merge branch 'feat/enterprise-pack-d'
# Conflicts:
#	components/email/thread-conversation-view.tsx
#	lib/admin/outgoing-hosts-registry.ts
2026-11-01 10:48:21 +01:00
Linus Rath 1aed3eaf59 Merge branch 'feat/enterprise-pack-e' 2026-11-01 10:42:46 +01:00
Linus Rath 5b50a23390 test: wait for the message list and a finished Go back before sending in the plugin spec 2026-11-01 10:38:32 +01:00
Linus Rath bb29d919e6 docs: say link checks get the address the browser opens 2026-11-01 10:24:37 +01:00
Linus Rath 0a319cde2e test: fix the quote in a spec title 2026-11-01 10:15:22 +01:00
Linus Rath b9630959b9 test: cover blocked links, held sends and admin-page rules, and wait on conditions instead of clocks 2026-11-01 10:12:49 +01:00
Linus Rath 27e4f0cbac test: cover the file type the composer tells upload checks 2026-11-01 10:09:20 +01:00
Linus Rath 2cd1baa594 feat: let plugin frames run work they can stop in a worker 2026-11-01 10:07:41 +01:00
Linus Rath 6b3a220d44 fix: let only a server the admin typed through with no third-party traffic 2026-11-01 10:06:00 +01:00
Linus Rath 9b9cbccea9 test: cover another account's folder in the Pro shell, a policy changed while the tab is open, and that blocked paths start no download 2026-11-01 10:05:32 +01:00
Linus Rath 0c8d4ad93e fix: hold sends until required send checks have started, and check what really goes out
- The message for send checks is built after waiting for required
  checks that are still starting: a send right after sign-in gave them
  no external recipients and no file types.
- A plugin's forward is held too while a required check is down, also
  with no plugin listening.
- A plugin the admin forces on that hasn't reached this browser yet (a
  new device, a failed plugin sync) counts as starting.
- A check that stopped working says to reload or tell the admin.
- The files that were checked are the ones sent, and recipients a
  plugin adds after the check are checked again.
- A file Bulwark couldn't read is marked unreadable; a text file
  starting with "MZ" is text, Java and Android apps are told from ZIPs.

Changed assertions: runPluginSendCheck takes a builder and reports
guard-loading or guard-failed instead of guard-down; the composer test
of an auto-disabled guard expects the stopped_working text; the sniff
tests give programs a zero byte, as real ones have, and expect
unreadable on a file that can't be read.
2026-11-01 10:02:58 +01:00
Linus Rath fbf85972c5 fix: check links in plain-text mail and the address the browser really opens
Plain-text bodies render in the page, not in the body iframe, so their
links opened without the link check. Plugins now get each link as the
browser parses it (new URL(href).href) and that same string opens, so a
link check can't judge one host while another opens. With no link check
listening, clicks and middle-clicks stay with the browser as before.
2026-11-01 09:51:00 +01:00
Linus Rath c11d8ade44 test: cover the plugin, .eml preview, drag-out, export file and install banner paths of the device policies 2026-11-01 09:50:35 +01:00
Linus Rath a4b140b651 fix: keep out-of-office dates right when the time zone setting arrives or changes after the page opened 2026-11-01 09:48:58 +01:00
Linus Rath 9f8d134e85 fix: keep pictures in messages and the Files image preview from being saved under No downloads, and say the mobile app's notifications aren't covered yet 2026-11-01 09:47:28 +01:00
Linus Rath 6e931a731c fix: keep the server-side device policies on when a login's session or the policy can't be read 2026-11-01 09:44:03 +01:00
Linus Rath b58dc1d66b fix: apply the device policy and retention line of the account whose folder is open, and keep Copy to account from moving mail out of a restricted account 2026-11-01 09:42:19 +01:00
Linus Rath 61733d839f fix: show an announcement that arrives after its start, once in the Pro shell, and keep it closed when only its times move
- The banner judged its start and end by the time it was mounted, so an
  announcement fetched later than its start never showed in that tab.
- The Pro shell shows it once above its panes; email and folder tabs had
  none and split panes showed it twice.
- Screen readers get it from a live region that fills a moment after it
  is in the page; text present when a live region appears isn't read out
  reliably. The tests that checked the strip's role now check that region.
- Moving the start or end no longer shows a closed announcement again;
  the lib test that expected a new end time to reset it now expects the
  opposite.
2026-11-01 09:39:36 +01:00
Linus Rath 5d48e2a4ef test: cover announcements, out-of-office templates, the retention line and the device policies on the test servers 2026-11-01 09:14:08 +01:00
Linus Rath 9c54a4037c test: account for the docs links of the Notices, Devices and out-of-office template pages in the outgoing host list 2026-11-01 09:09:06 +01:00
Linus Rath 904c0a2070 test: list the intranet feed connection pools as per-process state 2026-11-01 09:08:00 +01:00
Linus Rath c9e553a107 fix: drop the plain-language text of the removed import error message 2026-11-01 09:08:00 +01:00
Linus Rath a7b343a726 test: account for the docs links and feed URL checks of the new organisation pages in the outgoing host list 2026-11-01 09:06:39 +01:00
Linus Rath 7e901cb96b test: cover the link check and the send checks plugins on the test servers 2026-11-01 08:57:20 +01:00
Linus Rath e80f5ade81 feat: let admins turn off downloads, export, printing and the install prompt, and add a watermark
Organisation > Devices now sets policy.json `organisation.devices`, each
switch off by default and scoped per domain or group:

- No downloads: attachments and files only preview (reader, conversation
  view, Pro tab, list chips, .eml previews, the Files app). Download,
  Download all, Open in new tab, Save to Files, drag-out, the browser's
  PDF viewer (pdf.js instead) and media download controls go away.
- No export: no .eml export, View source, message drag-out, or folder and
  account export; a running export stops and its file is deleted when
  the switch turns on. Import stays.
- No printing: no Print buttons in mail, calendar and contacts; Ctrl+P
  prints a note; the reader frame prints blank.
- No install prompt: no card, and the browser's own banner is held back.
- Watermark: the user's address and the date over the reader,
  previews and every printout (mail, calendar, contacts, plugins).

A message follows its own account's policy; what isn't about one message
follows the strictest signed-in account. Every user path hides its
button, and the anchor and new-tab helpers refuse as a backstop
(lib/download-guard.ts), never the blob readers. The plugin APIs
`ui.downloadFile` and `ui.print` refuse too, and the office editor frame
loses `allow-downloads`.

Two assertions in components/mail/__tests__/blob-routing.test.tsx now
expect `{ kind: 'export' }` as the fifth argument of downloadBlob for an
.eml export: the export says what it is, so the backstop checks "No
export" rather than "No downloads" for it.
2026-11-01 08:52:34 +01:00
Linus Rath 6e3d98ec0d docs: list every place the link check hook covers in the plugin hook catalogue 2026-11-01 08:48:33 +01:00
Linus Rath 50bb4e4c37 fix: keep secret plugin settings out of plugins when the user is also signed in as admin 2026-11-01 08:40:32 +01:00
Linus Rath 140db2cf8f feat: turn printing and export off in the office editor under the device policies 2026-11-01 08:40:03 +01:00
Linus Rath adbec718ef feat: let admins keep sender and subject out of push notifications, enforced by the server
The push preview route now reads the device policy of the login it
serves (its scopes worked out from the login's own JMAP session, every
non-personal account counted as a group) and under
`pushWithoutContent` asks the mail server for the message's ids only,
so sender, subject and text never reach the notification. The service
worker shows "New mail" for such an answer. A policy that can't be read
counts as on.

The three existing push preview route tests now mock the config manager
with the default policy: without it the route can't read a policy in the
test environment and holds the text back, which those tests didn't mean
to cover. No assertion changed.
2026-11-01 08:40:02 +01:00
Linus Rath e73a1b375f feat: let link-check plugins reach an admin-set service with no third-party traffic
The plugin host tests compared api.host.features with an object of two
flags; they now include the new noThirdPartyTraffic flag.
2026-11-01 08:39:35 +01:00
Linus Rath b3369c7e78 feat: send every link click through the link check 2026-11-01 08:31:27 +01:00
Linus Rath c004587158 feat: keep sending blocked while a required send check isn't running 2026-11-01 08:22:32 +01:00
Linus Rath edf619a19d feat: give send-check plugins the authored text, external recipients and attachment types 2026-11-01 08:16:39 +01:00
Linus Rath 923ecce7d2 feat: say how long Trash and Junk keep mail 2026-11-01 08:07:06 +01:00
Linus Rath 6cbd53c827 fix: run plugin send checks for quick replies 2026-11-01 08:06:49 +01:00
Linus Rath 47784cc07a feat: offer admin out-of-office templates and show the absence dates in the user's time zone 2026-11-01 08:02:39 +01:00
Linus Rath b99003956a feat: show an admin announcement across the apps 2026-11-01 07:51:46 +01:00
Linus Rath 2a952f4b72 Merge branch 'feat/enterprise-pack-c'
# Conflicts:
#	lib/sign-out-cleanup.ts
2026-11-01 07:39:30 +01:00
Linus Rath ebb33619a0 Merge branch 'feat/enterprise-pack-a' 2026-11-01 07:36:59 +01:00
Linus Rath 7f80fd9612 test: cover Undo send keeping the label, Undo after a report and a lock in a group scope on the test servers 2026-11-01 07:36:05 +01:00
Linus Rath dc041a8e17 test: expect the fourth message of the mbox in the phone import 2026-11-01 07:14:48 +01:00
Linus Rath 53733f3932 Merge branch 'feat/enterprise-pack-b' 2026-11-01 07:14:31 +01:00
Linus Rath 1bb2a85de4 fix: translate the turned-off link note and tidy the label and phishing texts
The VS-NfD warning test now expects "BSI-approved products", the corrected wording.
2026-11-01 07:14:10 +01:00
Linus Rath e5159c84ae test: send both answers when the delegate is invited too, answer from the team mailbox banner and check the out-of-office lock 2026-11-01 07:13:47 +01:00
Linus Rath cabcd141d7 test: cover the account export, shared folders, special folders and what a ZIP round trip loses 2026-11-01 07:11:42 +01:00
Linus Rath fc4db14980 fix: import into a folder shared with the user by uploading to the user's own account 2026-11-01 07:11:41 +01:00
Linus Rath f61fd7922c fix: find an invitation's copy in a group or shared account before answering from the banner #634 2026-11-01 07:09:25 +01:00