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]