Benoit Tellier created JAMES-4236:
-------------------------------------

             Summary: JMAP conformity and nitpicks
                 Key: JAMES-4236
                 URL: https://issues.apache.org/jira/browse/JAMES-4236
             Project: James Server
          Issue Type: Bug
            Reporter: Benoit Tellier


h3. Context

As part of a hackaton a colleague gave a try to our pg and memory app in a low 
memory setup.

Here is a sum up of the issues:

 - A populateEmailQueryView task should cover team mailboxes
 - B Mailbox/query filter.role rejects the role values returned by Mailbox/get 
and accepts folder names instead
 - C Identity/set update ignores null values, and the first update of a default 
identity drops unpatched properties
 - D Mailbox/set create: parentId referencing a mailbox created in the same 
call 
 - E Mailbox/set: a folder named "x-…" gets a custom role from its name and can 
no longer be renamed nor destroyed
 - F /get methods omit requested properties whose value is null instead of 
returning null
- G EmailSubmission/set create ignores identityId and answers an unknown 
emailId with invalidArguments instead of invalidProperties
- H EmailSubmission/set swaps forbiddenFrom and forbiddenMailFrom (RFC 8621 
§7.5)
- I EmailSubmission/set: undoStatus "canceled" silently ignored, holdFor 
honoured while maxDelayedSend is 0, and dropped by the RabbitMQ queue

h3. Fixes

 - A Operate off a list of mailnoxes (all mailboxes VS mailboxes visible to a 
user) and adapt related webadmin query parameters
- B Parse filter.role against role names (Role.serialize(), plus junk for 
SPAM), e.g. a Role.fromRoleName; for transition, fall back on the default 
folder name since existing clients query with it. role: null and empty filter 
support 
- C Custom Reads[IdentityUpdateRequest] mapping JsNull on replyTo/bcc to 
IdentityReplyToUpdate(None)/IdentityBccUpdate(None), and on 
name/textSignature/htmlSignature to the "" defaults. And in 
IdentityRepository.update (CustomIdentityDAO.scala:240), save 
identityUpdateRequest.update(serverSetIdentity) instead of 
asCreationRequest(...).
 - D In MailboxSetCreatePerformer, sort create entries so a mailbox with 
parentId: "#x" comes after x (reject cycles and unknown references with 
invalidProperties, properties: ["parentId"]), and resolve #x through the 
processing context updated by previous creates. Map any unparsable or unknown 
parentId to invalidProperties / notFound instead of serverFail.
 - E In both isASystemMailbox, use 
Role.from(name).filter(Role::isSystemRole).isPresent. Stop exposing x-… names 
as JMAP roles in MailboxFactory.getRole.
 - F Write null for absent optional properties in these serializers (e.g. 
Json.configured(JsonConfiguration(optionHandlers = 
OptionHandlers.WritesNull))); the properties filter (core/Properties.scala:62) 
already keeps only what was requested.
 - G Resolve identityId against IdentityRepository.list(username); reject 
unknown/missing with invalidProperties, properties: ["identityId"]. Answer an 
unknown or unparsable emailId with invalidProperties, properties: ["emailId"].
 - H Swap the two error types Answer a missing From header with invalidEmail, 
properties: ["from"]. 
 - I when rabbitMQ is bound we add a EmailSubmissionSetValidation for rejecting 
delays.

h3. Original issues

https://github.com/linagora/james-project/issues?q=is%3Aissue+state%3Aopen+label%3Ajmap

(disclaimer: not an asf bugtracker)

h3. Handling 

If this is consensual we can get some linagorians on the topic.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to