Linus Rath
a69d7eee33
feat: let plugins work with team mailboxes: list filters, row badge icons, account info and message conditions
...
What the team inbox plugin needs, kept general for other plugins:
- `api.ui.setListFilters`: keyword filters drawn as chips in the list
header of the folders they apply to (by account kind and folder
role). A chip the user turns on is ANDed into the folder's query and
comes off with one click; a keyword change a filter tests loads the
list again (ui:message-list).
- Actions get `accounts`, `hasKeyword` and `notKeyword`, so a button
shows only on messages of group accounts, or of a keyword state; the
click of message-row-actions and reader-actions carries the message's
`accountId`.
- `api.email.updateKeywords`: several keywords in one change, through
the list for a listed message (email:write).
- `api.user.getSelf`, `getMailAccounts` and `findPeople`: the user's own
account id (Stalwart's principal id), which accounts are group
accounts, and people from the directory (account:read).
- `api.accountData`: a plugin's own entry in a mail account's shared
Inbox metadata on Stalwart 1.0 (email:read / email:write).
- Row badges take an `icon`.
2026-10-28 06:39:57 +01:00
Linus Rath
795faceee7
Merge branch 'feat/org-thirdparty' into feat/org-features
2026-10-28 05:51:22 +01:00
Linus Rath
00ea203f4f
refactor: describe the sending identity and account once for every send check
2026-10-28 05:50:17 +01:00
Linus Rath
687cd89346
Merge branch 'feat/org-external' into feat/org-features
...
# Conflicts:
# lib/outgoing/quick-reply.ts
# lib/outgoing/send-pipeline.ts
2026-10-28 05:46:11 +01:00
Linus Rath
9e809a31db
Merge branch 'feat/org-features' into feat/org-thirdparty
2026-10-28 05:27:58 +01:00
Linus Rath
823da8c810
Merge branch 'feat/org-features' into feat/org-external
...
# Conflicts:
# components/email/email-viewer.tsx
# components/mail/mail-app.tsx
2026-10-28 05:19:21 +01:00
Linus Rath
9dab8955dd
feat: confirm before inviting people outside the organisation to a meeting
2026-10-28 05:12:24 +01:00
Linus Rath
1202a13720
fix: judge external mail by the message's own account and the sending account in several-account setups
2026-10-28 05:11:24 +01:00
Linus Rath
60167f752f
fix: label mail as External when any sender is outside or has no domain, and show the domain on a tap
2026-10-28 05:09:35 +01:00
Linus Rath
836dcba66e
fix: don't count senders whose images the user allowed as contacts for the external recipient confirm
2026-10-28 05:09:03 +01:00
Linus Rath
c51245081a
test: sign quick replies addressed through the envelope and keep the disclaimer out of sign-out drafts
2026-10-28 04:57:09 +01:00
Linus Rath
2ace501871
Merge branch 'feat/org-features' into feat/org-signatures
2026-10-28 04:51:22 +01:00
Linus Rath
d128503db5
fix: use the organisation policy of the account a message is sent from
2026-10-28 04:32:39 +01:00
Linus Rath
4bb596a9a0
test: cover the plugin API's own no-third-party locks #903
2026-10-28 04:30:43 +01:00
Linus Rath
010e9fb6d9
feat: fence a Lite build made with no third-party traffic to its own hosts #903
2026-10-28 04:30:42 +01:00
Linus Rath
1a747ac9dd
feat: limit the page's CSP to the configured hosts with no third-party traffic #903
2026-10-28 04:30:41 +01:00
Linus Rath
381494fe34
fix: move push registrations to the organisation's relay when the relay changes #903
2026-10-28 04:30:33 +01:00
Linus Rath
0b3d74aa0b
fix: resume the version check when third-party traffic is allowed again #903
2026-10-28 04:30:32 +01:00
Linus Rath
a9c89ae7a2
fix: fail closed while the third-party switch is unknown or set as a string #903
2026-10-28 04:30:32 +01:00
Linus Rath
031d94635c
refactor: keep the outgoing host descriptions out of the browser bundle and scan every URL form #903
2026-10-28 04:30:23 +01:00
Linus Rath
b756111097
fix: add the disclaimer below plugin footers and before a plugin signs or encrypts the message
2026-10-28 04:25:25 +01:00
Linus Rath
73c12d03eb
fix: ask about every external recipient but the identity's own Bcc, trust only the identity's From, and queue a second question
2026-10-28 04:15:12 +01:00
Linus Rath
ecbbe137c4
fix: wait for sends and keep quick replies as drafts before an automatic sign-out
2026-10-28 04:06:05 +01:00
Linus Rath
b945a789f9
fix: match internationalised domains in either form and name the domains an admin typed wrong
2026-10-28 04:05:46 +01:00
Linus Rath
3fbd5a7818
fix: check the signature and disclaimer in each part on its own so neither goes out twice
2026-10-28 04:00:25 +01:00
Linus Rath
1f1319d46e
fix: hand the retired plugin's parts over one switch at a time and tell plugins about each switch
2026-10-28 03:54:47 +01:00
Linus Rath
65e83e4b0d
fix: show the session warning above every overlay and count the server's sign-in time
2026-10-28 03:53:56 +01:00
Linus Rath
893ecb5b16
fix: drop empty signature lines inside span and font wrappers and keep logos on them
2026-10-28 03:48:28 +01:00
Linus Rath
defe4e93f3
fix: bind the sign-in time to the refresh token and count unstamped sessions from a fixed time
2026-10-28 03:42:19 +01:00
Linus Rath
0154e24ffc
feat: add an admin disclaimer to every sent message
2026-10-28 03:17:03 +01:00
Linus Rath
612abe1595
test: cover removing old push registrations in the no third-party traffic mode #903
2026-10-28 02:46:39 +01:00
Linus Rath
c9f2115eb1
test: scan the built Lite bundle for outside hosts #903
2026-10-28 02:44:06 +01:00
Linus Rath
75291ee7b8
fix: keep the connector endpoint path out of the Lite bundle's host list #903
2026-10-28 02:40:31 +01:00
Linus Rath
6e5d8faec6
feat: refuse to restore or renew sessions older than the admin-set maximum length
2026-10-28 02:30:32 +01:00
Linus Rath
92c9110f3c
feat: show the third-party traffic switch and what stays reachable in Organisation > Security #903
2026-10-28 02:24:13 +01:00
Linus Rath
65e3d0d2d4
feat: let admins set an organisation signature with user details per domain or group #908
...
Admins write an HTML and a plain-text signature with placeholders on
Organisation > Signatures, per scope. Users fill in the details it asks
for once, under Settings > Account. Without a lock it is the default for
addresses without a signature of their own; locked or hidden, it
replaces every signature.
- `lib/org-signature.ts` fills the templates: values escaped, lines whose
placeholders are all empty dropped
- the composer applies it right before the plugin signature, so new mail,
replies, forwards, re-opened drafts, plain text and identity swaps all
take it the way they take an identity signature; quick reply too
- a send finaliser puts a locked signature back once when it was deleted
- the identity editor shows the filled-in signature read-only with "Set
by your organisation" when locked, and no editor when hidden
- `signatureDetails` is a synced setting
2026-10-28 02:23:55 +01:00
Linus Rath
794e0b439e
test: fail when a new outgoing host appears #903
2026-10-28 02:21:45 +01:00
Linus Rath
553f1e9149
feat: add a switch that stops all third-party traffic #903
2026-10-28 02:19:06 +01:00
Linus Rath
45cc6988e0
feat: sign out after an admin-set idle time or session length, with a warning first
2026-10-28 02:18:07 +01:00
Linus Rath
ab878ebf4f
feat: tell plugins when Bulwark's own external mail warnings are on and skip the retired plugin's
2026-10-28 02:10:10 +01:00
Linus Rath
2855ca0010
feat: confirm before sending to recipients outside the organisation
2026-10-28 01:59:13 +01:00
Linus Rath
79c697a935
feat: let an automatic sign-out save open and minimised drafts first
2026-10-28 01:55:15 +01:00
Linus Rath
b504e39b63
feat: label mail from outside the organisation
2026-10-28 01:53:39 +01:00
Linus Rath
7ea0a7d58d
feat: read and write account metadata for shared Bulwark data
2026-10-28 01:14:30 +01:00
Linus Rath
42f52ab066
refactor: send composer and quick reply mail through one send path
2026-10-28 01:08:56 +01:00
Linus Rath
084cf3cf3a
fix: fetch the policy again only for an account of a domain it doesn't cover
2026-10-28 01:08:56 +01:00
Linus Rath
4004b9be7c
feat: let admins export and import the whole user policy as one file
2026-10-28 00:44:31 +01:00
Linus Rath
e76490580d
feat: add an Organisation area to the admin panel with domain and group scopes
2026-10-28 00:40:56 +01:00
Linus Rath
d19095fafe
feat: fetch the policy again when an account from another domain is added
2026-10-28 00:35:00 +01:00
Linus Rath
0738f6f999
feat: say "Set by your organisation" next to settings an admin locked
2026-10-28 00:29:03 +01:00