You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by "Benoit Tellier (Jira)" <se...@james.apache.org> on 2020/08/17 09:26:00 UTC

[jira] [Commented] (JAMES-3357) Mailbox/set creation: simple implementation

    [ https://issues.apache.org/jira/browse/JAMES-3357?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17178865#comment-17178865 ] 

Benoit Tellier commented on JAMES-3357:
---------------------------------------

One should also be able to set rights via create requests. 


This is an implementation of the rights on the creation part of Mailbox/set. the rights are an extension proper to us, not part of the JMAP specs.

The rights allow to delegate permissions on a mailbox to other users.

**Request**

You will need to add a field in the mailbox/set request:

* **rights**: `Username[char]` Map of a user (defined by its `Username`) with an array of `char`s (representing rights of that user on the mailbox)

```json
{
   "using": [ "urn:ietf:params:jmap:core", "urn:ietf:params:jmap:mail" ],
   "methodCalls": [
       [
           "Mailbox/set", 
           {
                "accountId": "JMAP-ID",
                "ifInState": null,
                "create": {
                    "TEMP-MAILBOX-ID": {
                        "name": "mailbox_name",
                        "role": "Inbox",
                        "namespace": "Personal",
                        "rights": {
                            "bob": ["r", "e", "w"]
                        }
                    }
                }
           }
       ]
   ]
}
```

**DoD**: Unit and integration tests (memory and distributed james) making sure that the rights are correctly set when creating a mailbox

> Mailbox/set creation: simple implementation
> -------------------------------------------
>
>                 Key: JAMES-3357
>                 URL: https://issues.apache.org/jira/browse/JAMES-3357
>             Project: James Server
>          Issue Type: New Feature
>            Reporter: René Cordier
>            Priority: Major
>             Fix For: 3.6.0
>
>
> This is a first simple implementation of the creation part of Mailbox/set. It should follow the JMAP core specification section /set https://jmap.io/spec-core.html#set
> *Request*
> {code:json}
> {
>    "using": [ "urn:ietf:params:jmap:core", "urn:ietf:params:jmap:mail" ],
>    "methodCalls": [
>        [
>            "Mailbox/set", 
>            {
>                 "accountId": "JMAP-ID",
>                 "ifInState": null,
>                 "create": {
>                     "TEMP-MAILBOX-ID": {
>                         "name": "mailbox_name",
>                         "namespace": "Personal"
>                     }
>                 }
>            }
>        ]
>    ]
> }
> {code}
> For now, this should be enough. Few notes:
> * ifInState is a State and is not managed at the moment, so it should be null
> * the Roles will be the ones we already have defined in james, knowing we probably miss others at the moment (see #1750)
> * parentId will be handled in #1737
> * isSubscribed will be handled in #1739
> * sortOrder is not handled yet, we attribute default values depending of the role (see #1749 )
> * other missing fields are server-set
> * namespace is not part of the specs
> * rights are handled in #1759
> * for now we can consider role and sortOrder server-set, regarding our current implementation
> *Response*
> {code:json}
> {
>    "methodResponses": [
>        [
>            "Mailbox/set", 
>            {
>                 "accountId": "JMAP-ID", // the requested accountId
>                 "oldState": null,
>                 "newState": null,
>                 "created": {
>                     "TEMP-MAILBOX-ID": {
>                         "id": "0001",
>                         "sortOrder": 10,
>                         "role": "Inbox",
>                         "totalEmails": 0,
>                         "unreadEmails": 0,
>                         "totalThreads": 0,
>                         "unreadThreads": 0,
>                         "myRights": {
>                             "mayReadItems":false,
>                             "mayAddItems":true,
>                             "mayRemoveItems":false,
>                             "maySetSeen":true,
>                             "maySetKeywords":false,
>                             "mayCreateChild":true,
>                             "mayRename":true,
>                             "mayDelete":false,
>                             "maySubmit":false
>                         },
>                         "quotas":{
>                            "quotaRoot":{
>                                "Message":{"used":18,"max":42},
>                                "Storage":{"used":12}
>                             }
>                         }
>                     }
>                 }
>            }
>        ]
>    ], 
>    "sessionState": "abc"
> }
> {code}
> Notes:
> * notCreated will be handled in #1736
>  * the core specs say that the response should return in created a map of Ids to their Mailbox object with the real id, including any properties not sent by the client (default values ommited by client and server-set values)
>  * oldState and newState should be null for now, as we don't manage it atm
> *DoD* : POJO and serialization of the request and response Mailbox/set for creation + unit and integration tests



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org