Uploaded image for project: 'James Server'
  1. James Server
  2. JAMES-2884

Update JMAP implementation to conform to RFC 8620/8621

    XMLWordPrintableJSON

    Details

    • Type: Improvement
    • Status: Open
    • Priority: Major
    • Resolution: Unresolved
    • Affects Version/s: None
    • Fix Version/s: None
    • Component/s: JMAP
    • Labels:
      None

      Description

      Historically, James is an early adopter for the JMAP specification, and a first partial implementation was conducted when JMAP was just a draft. IETF draft undergo radical changes and the community could not keep this implementation up to date with the spec changes.

      As off summer 2019, JMAP core (RFC 8620) and JMAP mail (RFC 8621) had been officially published (will not change anymore). Thus we should implement these new specifications.

      Point of attention: part of the community actively rely on the actual 'draft' implementation of JMAP existing in James. We should ensure no changes is done to that 'draft' protocol is done while implementing the new one.

      The proposed approach is to keep the current implementation under the `jmap-draft` name, and implement step by step a `jmap` compliant implementation, that will be exposed on a separate port. No modification in `jmap-draft` integration test should be counducted.

      This will allow existing `jmap-draft` clients to smoothly transition to `jmap`, then trigger the classic "deprecation-then-removal" process.

      For now, as a first implementation step, we will only support `jmap` on top of memory-guice (ease testing, speed of development). To ensure a `storage-compliant` behavior of newly introduced storage APIs, we should use persistent datastructures (like the one in vavr) and always deep-copy objects at the storage boundaries.

        Attachments

        1.
        Refactoring jmap-draft to be reactive with reactor-netty Sub-task Closed René Cordier
        2.
        Implement jmap protocol POJO and serialization Sub-task Closed Antoine Duprat
        3.
        Session pojo and serialization Sub-task Closed Antoine Duprat
        4.
        mailboxes/get POJO and serialization Sub-task Resolved Unassigned
        5.
        Implement a JMAP meta project to redirect towards the correct JMAP implementation Sub-task Closed Unassigned
        6.
        Backport from jmap-draft to jmap CORS, auth mechanisms and user & mailbox provisioning Sub-task Closed Unassigned
        7.
        Implement echo method Sub-task Closed Antoine Duprat
        8.
        Implement session object Sub-task Closed Antoine Duprat
        9.
        Port to jmap mailboxes/get Sub-task Closed Unassigned
        10.
        mailboxes/get with extensions filtering Sub-task Closed Unassigned
        11.
        Implement level error-handling protocol Sub-task Closed Antoine Duprat
        12.
        mailboxes/get with properties filtering Sub-task Closed Unassigned
        13.
        [Documentation] Website doc update and annotated RFCs Sub-task Closed Unassigned
        14.
        Email/Query Allow filter by date Sub-task Closed Antoine Duprat
        15.
        Email/Query expose allowed sort in accountCapabilities Sub-task Closed Unassigned
        16.
        Should not be able to create a mailbox using an invalid accountId in the request body Sub-task Closed Antoine Duprat
        17.
        Should not be able to create a mailbox using an invalid accountId in the request body Sub-task Closed Antoine Duprat
        18.
        Email/Query documentation Sub-task Closed Unassigned
        19.
        Email/Query handle unsupported parameters Sub-task Closed Unassigned
        20.
        Email/Query Pagination 1 - handle pagination with position Sub-task Closed Antoine Duprat
        21.
        Email/Query implement Limits Sub-task Closed Antoine Duprat
        22.
        Email/get specific parsed headers Sub-task Closed Unassigned
        23.
        Email/Query filter by keywords Sub-task Closed Antoine Duprat
        24.
        Implement Email/query - unlock single request INBOX content loading Sub-task Closed Antoine Duprat
        25.
        Email/query Allow filtering by mailbox Sub-task Closed Antoine Duprat
        26.
        Email/query Support sort by ReceivedAt Sub-task Closed Unassigned
        27.
        Implement JMAP downloads Sub-task Closed Antoine Duprat
        28.
        JMAP Email/get specific unparsed header Sub-task Closed Unassigned
        29.
        JMAP Email/query Allow listing email Sub-task Closed Antoine Duprat
        30.
        JMAP Email/get Unparsed headers Sub-task Closed Unassigned
        31.
        Email/get 14. bodyStructure property Sub-task Closed Antoine Duprat
        32.
        Email/get 1. Metadata Sub-task Closed Unassigned
        33.
        Add capability mandatory checks regarding jmap core and mail Sub-task Closed Unassigned
        34.
        JMAP Vacation/set implementation Sub-task Closed Unassigned
        35.
        JMAP RFC-8621 : Back-reference resolution Sub-task Closed Antoine Duprat
        36.
        VacationResponse/get implementation Sub-task Closed Unassigned
        37.
        Sharee should not be able to modify mailbox rights Sub-task Closed Unassigned
        38.
        Mailbox/set update: name implementation Sub-task Closed Unassigned
        39.
        Mailbox/set delete: onDestroyRemoveEmails argument implementation Sub-task Closed Unassigned
        40.
        Mailbox/set creation: simple implementation Sub-task Closed Unassigned
        41.
        Mailbox/set: reusing creationId Sub-task Closed Antoine Duprat
        42.
        Mailbox/set delete: simple implementation Sub-task Closed Unassigned
        43.
        Mailbox/set creation: parentId handling Sub-task Closed Unassigned
        44.
        [Specification] Write down James JMAP extensions Sub-task Closed Unassigned
        45.
        JMAP authentication rework Sub-task Closed Unassigned
        46.
        [JMAP] Method level error handling Sub-task Closed Unassigned
        47.
        Configure session hardcoded prefixes Sub-task Closed Unassigned
        48.
        Integration tests for GET endpoint to retrieve the Session object Sub-task Closed Unassigned
        49.
        Port to jmap mailboxes/get (all) Sub-task Resolved Unassigned
        50.
        Implement session object Sub-task Closed Unassigned
        51.
        Session pojo and serialization Sub-task Closed Unassigned
        52.
        Implement level error-handling protocol Sub-task Closed Unassigned
        53.
        Implement echo method Sub-task Closed Unassigned
        54.
        Email/Query support combination of filters with the FilterOperator (AND, OR, NOT) Sub-task Closed Antoine Duprat
        55.
        Email/query Allow filtering by body Sub-task Closed Unassigned
        56.
        Email/query Allow filtering by text Sub-task Closed Antoine Duprat
        57.
        Invalid mailbox filters don't return error in new JMAP Sub-task Closed Unassigned
        58.
        Email/query & client Id Resolution Sub-task Closed Benoit Tellier
        59.
        Email/set: Destroy email Sub-task Closed Antoine Duprat
        60.
        Update Email Keywords/part1: reset Sub-task Closed Antoine Duprat
        61.
        Update Email Keywords: partial update Sub-task Closed Antoine Duprat
        62.
        Email/set update mailboxIds 1. Reset Sub-task Closed Antoine Duprat
        63.
        Email/set update mailboxIds 2. Partial update Sub-task Closed Antoine Duprat
        64.
        Email/query sort by size/from/to/subject Sub-task Open Antoine Duprat
        65.
        Email/get 6. Specific unparsed header :all Sub-task Closed Antoine Duprat
        66.
        Email/get 15. EmailBodyPart individual headers Sub-task Open Antoine Duprat
        67.
        Email/Query sort by hasKeyword Sub-task Open Antoine Duprat
        68.
        [JMAP] Send: EmailSubmission/create (user email) Sub-task Closed Unassigned
        69.
        Upload: Attachment Sub-task Closed Unassigned
        70.
        Saving Draft: convenience header & empty body Sub-task Closed Antoine Duprat
        71.
        JMAP Saving draft: specify html body Sub-task Closed Antoine Duprat
        72.
        Email/set create position multipart/alternative for text/html body Sub-task Closed Unassigned
        73.
        Email/set create should return blobId, threadId, size Sub-task Closed Unassigned
        74.
        Email/query reject Filter object with both FilterOperator and FilterCondition Sub-task Closed Unassigned
        75.
        Implement Identity/get Sub-task Closed Unassigned
        76.
        Support JMAP HTTP PUSH Sub-task Open Antoine Duprat
        77.
        Implement a MailboxChangeRepository Sub-task Closed Unassigned
        78.
        Implement a JMAP MailboxChangeListener Sub-task Closed Unassigned
        79.
        Implement Mailbox/changes method and related contract tests Sub-task Closed Unassigned
        80.
        Implement CassandraMailboxChangeRepository Sub-task Closed Unassigned
        81.
        Mailbox/get should handle state property Sub-task Closed Unassigned
        82.
        Mailbox/set should handle oldState & newState Sub-task Closed Unassigned
        83.
        Mailbox/changes updatedProperties handling Sub-task Closed Unassigned
        84.
        Implement MemoryEmailChangeRepository Sub-task Closed Unassigned
        85.
        Implement CassandraEmailChangeRepository Sub-task Closed Unassigned
        86.
        MailboxChangeListener needs to handle EmailChange events Sub-task Closed Unassigned
        87.
        Implement Email/changes method and related contract tests Sub-task Closed Unassigned
        88.
        Email/get should handle state property Sub-task Closed Unassigned
        89.
        Email/set should handle oldState & newState Sub-task Closed Unassigned
        90.
        Mailbox/changes should handle delegated mailbox Sub-task Closed Unassigned
        91.
        Mailbox/changes do not take isSubscribe changes into account Sub-task Open Antoine Duprat
        92.
        Adapt MailboxChangesMethodContract for stability against distributed environment Sub-task Closed Unassigned

          Activity

            People

            • Assignee:
              btellier Benoit Tellier
              Reporter:
              cketti cketti
            • Votes:
              0 Vote for this issue
              Watchers:
              4 Start watching this issue

              Dates

              • Created:
                Updated:

                Time Tracking

                Estimated:
                Original Estimate - Not Specified
                Not Specified
                Remaining:
                Remaining Estimate - 0h
                0h
                Logged:
                Time Spent - 3.5h
                3.5h