[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)