[jira] [Created] (JAMES-4190) Read only Mailbox annotation
"Benoit Tellier (Jira)" <[email protected]> Fri, 13 Mar 2026 21:23:00 +0000 (UTC)
| Newsgroups | gmane.comp.jakarta.james.devel |
|---|---|
| Message-ID | <[email protected]> |
Benoit Tellier created JAMES-4190:
-------------------------------------
Summary: Read only Mailbox annotation
Key: JAMES-4190
URL: https://issues.apache.org/jira/browse/JAMES-4190
Project: James Server
Issue Type: Improvement
Components: IMAPServer, mailbox
Reporter: Benoit Tellier
## Why
As an extension writer I need to expose server side computed metadata and I do not want IMAP clients to mess up with this.
Propose a modular way to define read only annotation from the IMAP client
## What
Some metadata entries are computed server-side and must be exposed to clients as read-only: GETMETADATA must return them, but SETMETADATA must respond NO with an appropriate error message. Currently
nothing prevents a client from overwriting any annotation. A modular extension point is needed so that any module (quota, ACL, vendor extensions…) can declare which annotation keys it owns and are not
client-writable.
## How
Introduce a `ReadOnlyAnnotationPredicate` interface with a single method `boolean isReadOnly(MailboxAnnotationKey key).` Modules register implementations via Guice multibinding. A composite
AggregatedReadOnlyAnnotationPredicate ORs all registered predicates together and is injected into StoreMailboxAnnotationManager. In updateAnnotationsReactive(), before canInsertOrUpdate, each incoming
annotation key is tested — a match throws AnnotationException("annotation is read-only: <key>"), which SetMetadataProcessor already maps to an IMAP NO response. Server-side writers bypass this by
calling AnnotationMapper directly, which is intentional.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)