Commit Graph
2418 Commits
Author SHA1 Message Date
Linus Rath fe4f809092 fix: keep a plugin side panel from squeezing the message too narrow to read 2026-10-14 03:00:46 +02:00
Linus Rath 3bfc0e69d0 fix: check attachments a plugin adds to the composer and keep callbacks out of shouldShow 2026-10-14 02:58:47 +02:00
Linus Rath 03e9846758 fix: stop remounting message-details plugin slots on every render 2026-10-14 02:56:15 +02:00
Linus Rath 2adb1e2b12 fix: size toolbar plugin slots to their content and give composer plugin buttons their own row 2026-10-14 02:53:46 +02:00
Linus Rath cef2438c33 fix: let untrusted plugins upload attachments for the composer again 2026-10-14 02:34:31 +02:00
Linus Rath f048db7b52 fix: count each plugin hook failure once and keep a plugin that kept failing turned off 2026-10-14 02:33:45 +02:00
Linus Rath a491eab317 fix: hash WKD names with WebCrypto instead of shipping a Node crypto polyfill to the browser 2026-10-14 02:31:39 +02:00
Linus Rath 23c4c654d7 fix: limit what a plugin can store, download, toast and send to a WKD lookup, and report refused admin config writes 2026-10-14 02:30:54 +02:00
Linus Rath 22846b4a9b fix: keep blob uploads privileged-only and derive the WebAuthn salt from the calling plugin 2026-10-14 02:28:11 +02:00
Linus Rath 15cec58a46 fix: serve plugin bundles only to signed-in users 2026-10-14 02:27:35 +02:00
Linus Rath c4853a4bba fix: check dev-directory plugins like uploads and keep their files inside the plugin folder 2026-10-14 02:26:56 +02:00
Linus Rath 9408daaf5e fix: keep an extension's admin state on re-upload and remove its config when it is deleted 2026-10-14 02:25:45 +02:00
Linus Rath bb562362b8 fix: lay out plugin slots right-to-left in Arabic, Hebrew and Persian and use the app font size 2026-10-14 02:24:45 +02:00
Linus Rath a21dbc92ec fix: switch running plugins to a new language right away and fall back from de-CH to de 2026-10-14 02:23:40 +02:00
Linus Rath 8f70951555 fix: give plugins their default settings and apply setting changes without a reload 2026-10-14 02:21:45 +02:00
Linus Rath eadff464a3 fix: keep plugin shortcuts behind ui:keyboard and off the keys the app and browser use 2026-10-14 02:19:10 +02:00
Linus Rath ff1d1f399d fix: limit plugin dialogs to one at a time, name the plugin in each and offer to turn it off 2026-10-14 02:15:45 +02:00
Linus Rath be3debdcb4 fix: never send a message when a plugin that checks it before sending fails or does not answer 2026-10-14 02:11:59 +02:00
Linus Rath 592db209db fix: sign plugin bundles when they are installed and require the signature for privileged plugins 2026-10-14 02:05:47 +02:00
Linus Rath e720be7e17 feat: let users install their own plugins, with admin review of the actual code
The admin page offered "User Plugin Uploads" and "Require Admin
Approval", but nothing in Settings used them: there was no upload, no
uninstall and no way to ask for approval, and the admin had no list of
requests. The approval code that existed pinned a hash of the code only
and showed the admin a manifest the browser sent, never the code.

Now:
- Settings > Plugins has an install button (when uploads are allowed),
  a remove button for the user's own plugins, and lists in plain
  language what each plugin may do, high-risk items first
- an install sends the ZIP to the server, which reads the manifest and
  code itself and pins the request to a hash of both
- the admin Plugins tab lists requests with the code and approves or
  denies them; a user may have 10 open requests
- a user plugin is checked again on every start, so a revoked approval
  or turning user plugins off takes effect
- the consent dialog and the plugin settings are translated, use the
  theme colours, and show the sites a plugin may send data to
2026-10-14 02:03:26 +02:00
Linus Rath e9f87c7970 fix: install Theme API v2 themes and their skins from the admin page and the marketplace 2026-10-14 01:47:58 +02:00
Linus Rath e57b7a2c18 fix: check plugin and theme packages the same way on every install path
The Settings upload, the admin upload, the marketplace install and the
marketplace preview each parsed the ZIP and manifest with their own copy
of the code, and the copies had drifted. A `permissions` string skipped
validation and was then matched by substring, a small ZIP could inflate
to hundreds of megabytes on the server, the Settings upload dropped
`locales` and took origin lists unchecked, and settings schemas were
never checked at all.

All of them now go through `lib/extension-package.ts`:
- every file is inflated through a byte cap, with a limit on entries
- one manifest check: types, permissions, entrypoint, version,
  minAppVersion, settingsSchema, configSchema, locales and origin lists
- only checked fields are stored
2026-10-14 01:43:43 +02:00
Linus Rath 0dd04ed21d fix: stop forcing a theme after the admin deletes or disables it 2026-10-14 01:34:40 +02:00
Linus Rath 468c1aac0c fix: refuse marketplace bundles whose id differs from the directory entry 2026-10-14 01:32:44 +02:00
Linus Rath c45533646e fix: give slot plugins the message, event or contact only with the matching read permission 2026-10-14 01:31:30 +02:00
Linus Rath 9bff740a89 fix: keep plugin network access to the origins in its manifest 2026-10-14 01:27:02 +02:00
Linus Rath 67a36c59d9 fix: keep the contact name readable when the detail pane is narrow 2026-10-14 00:40:18 +02:00
Linus Rath c9d2ba3d03 fix: stop offering ISO timestamps as verification codes #1236 2026-10-14 00:15:08 +02:00
Linus Rath e99a633379 fix: translate the calendar default reminder strings into all languages #1209 2026-10-13 17:09:36 +02:00
Linus Rath 2a2caaaa90 Merge branch 'main' of https://github.com/bulwarkmail/webmail 2026-10-13 16:59:53 +02:00
Linus Rath 3138c2bd04 fix: stop dropped files from inserting their path into the message body 2026-10-13 16:58:19 +02:00
mmmeon d35654cadb fix: set the sender's Message-ID on calendar invitations and replies 2026-10-13 16:32:25 +02:00
Linus Rath e0f60c0946 Merge branch 'main' of https://github.com/bulwarkmail/webmail 2026-10-13 15:58:52 +02:00
Linus Rath c878e51fce fix: clear a calendar's default reminders with an empty list instead of null #1209 2026-10-13 15:56:10 +02:00
Linus Rath 82450f3345 feat: apply the current calendar defaults when an event switches back to them #1209 2026-10-13 15:56:10 +02:00
Linus Rath 3e202e73fd feat: list every reminder and the calendar defaults in the event popover #1209 2026-10-13 15:56:10 +02:00
Linus Rath 1730d7bab4 feat: set default reminders for each calendar in calendar management #1209 2026-10-13 15:56:10 +02:00
Linus Rath 8181f5ba0c feat: start new events on the calendar's default reminders #1209 2026-10-13 15:56:10 +02:00
Linus Rath 4e983e3e4e feat: choose notification or email for each event reminder #1209 2026-10-13 15:56:09 +02:00
Linus Rath 87c6b6762c feat: add helpers for calendar default alerts and email alert rows #1209 2026-10-13 15:56:09 +02:00
Linus Rath 3788446271 feat: let users hide shared mail accounts from the sidebar #1228 2026-10-13 15:55:54 +02:00
Linus Rath e09676126b feat: keep the selection while reading a message in mountain view #1231 2026-10-13 15:40:13 +02:00
Linus Rath 9cae33e3cb feat: keep the mountain view compose window open while reading other mail #1229 2026-10-13 15:25:56 +02:00
Linus Rath 693d9613c0 feat: let users turn off the prompt before deleting several messages #1225 2026-10-13 15:16:05 +02:00
Linus Rath 435c1e0929 fix: select the rows shown between the two ends on shift-click #1230 2026-10-13 15:02:21 +02:00
Linus Rath 25cbbf8c10 fix: restore the full screen height when the iOS app resumes #1226 2026-10-13 14:53:23 +02:00
Linus Rath 8daa316c18 fix: show a mountain view message together with its conversation #1223 2026-10-13 14:48:58 +02:00
Linus Rath 6f281ef10a fix: open mountain view threads as a conversation on the phone #1224 2026-10-13 14:35:12 +02:00
Linus Rath ddab7c781f feat: open several messages of a conversation at once in mountain view #1222 2026-10-13 14:24:47 +02:00
Linus Rath 94095cf86a fix: paste a cell range as a table instead of an image #1233 2026-10-13 13:57:30 +02:00