Commit Graph

22 Commits

Author SHA1 Message Date
Pascal Bleser
6224ded8b5 refactor(groupware): add max requests check
* move jmap.request() to jmap.Client.request() and pass the Session
   and a Logger to introduce checking the number of methodCalls within a
   request not exceeding the limit of the Session, as well as error
   handling and logging there instead of in each caller

 * a few bugfixes:
   - add a few missing Send() calls in logs
   - correct the response tag matching for
     GetMailboxChangesForMultipleAccounts
   - fix typo in Identity.ReplyTo json serialization rune
   - fix response tag in pkg/jmap/testdata/mailboxes1.json after
     changing them to be prefixed by the accountId
2025-12-09 09:15:37 +01:00
Pascal Bleser
0da72cf346 groupware: minor typo fixes 2025-12-09 09:15:37 +01:00
Pascal Bleser
1fc75a9091 groupware: jmap: add metrics 2025-12-09 09:15:37 +01:00
Pascal Bleser
0f3dac0280 groupware: Etag handling
* implement correct Etag and If-None-Match handling, responding with
   304 Not Modified if they match

 * introduce SessionState and State string type aliases to ensure we are
   using the correct fields for those, respectively

 * extract the SessionState from the JMAP response bodies in the
   groupware framework instead of having to do that in every single
   groupware API

 * use uint instead of int in some places to clarify that the values are
   >= 0

 * trace-log how long a Session was held in cache before being evicted

 * add Trace-Id header handling: add to response when specified in
   request, and implement a custom request logger to include it as a
   field

 * implement a more compact trace-logging of all the methods and URIs
   that are served, to put them into a single log entry instead of
   creating one log entry for every URI
2025-12-09 09:15:36 +01:00
Pascal Bleser
d214cfa2b7 groupware: initial related emails implementation with SSE 2025-12-09 09:15:36 +01:00
Pascal Bleser
72ee47fdca groupware: swagger API documentation improvements
* add more documentation for properties

 * fixes after a bit of trial-and-error with go-swagger

 * fix email filter marshalling when there are no search criteria

 * introduce an apidoc.yml that contains Swagger data and is merged when
   generating the swagger.yml from sources
2025-12-09 09:15:36 +01:00
Pascal Bleser
8d9c3b0c4e Groupware improvements
* ensure that all the jmap responses contain the SessionState

 * implement missing errors that were marked as TODO

 * moved common functions from pkg/jmap and pkg/services/groupware to
   pkg/log and pkg/structs to commonalize them across both source trees

 * implement error handling for SetError occurences

 * Email: replace anonymous map[string]bool for mailbox rights with a
   MailboxRights struct, as the keys are well-defined, which allows for
   properly documenting them

 * introduce ObjectType as an "enum"

 * fix JSON marshalling and unmarshalling of EmailBodyStructure

 * move the swagger documentation structs from groupware_api.go to
   groupware_docs.go

 * fix: change verb for /groupware/accounts/*/vacation from POST to PUT
2025-12-09 09:15:36 +01:00
Pascal Bleser
084eb005e3 groupware: minor email searching response improvements + started implementing vacation response setting API 2025-12-09 09:15:36 +01:00
Pascal Bleser
2bdbc5a42e groupware: add identities of all accounts to the index resource 2025-12-09 09:15:36 +01:00
Pascal Bleser
446a98dd62 groupware: fix email search, add variant that includes the full emails 2025-12-09 09:15:36 +01:00
Pascal Bleser
e6441e58d4 Groupware: refactor jmap package, implement Email/set, EmailSubmission
* refactor the jmap package to split it into several files as the
   jmap.api.go file was becoming too unwieldy

 * refactor the Groupware handler function response to be a Response
   object, to be more future-proof and avoid adding more and more
   return parameters while handling "no content" response as well

 * more godoc for the JMAP model

 * add Email creation, updating, deleting (Email/set,
   EmailSubmission/set)

 * add endpoints
   - POST /accounts/{accountid}/messages
   - PATCH|PUT /accounts/{accountid}/messages/{messageid}
   - DELETE /accounts/{accountid}/messages/{messageid}
2025-12-09 09:15:36 +01:00
Pascal Bleser
a64223fe7d groupware: implement message search with snippets 2025-12-09 09:15:36 +01:00
Pascal Bleser
6e4918b50b groupware: blob streaming (upload and download) 2025-12-09 09:15:36 +01:00
Pascal Bleser
ac8d2587c9 groupware: more JMAP operations implementation 2025-12-09 09:15:36 +01:00
Pascal Bleser
0d2a5e992c groupware: further implementation and improvements 2025-12-09 09:15:36 +01:00
Pascal Bleser
94c932d6a7 refactored the Session object, refactored the services/groupware directory, and started Swagger documentation implementation 2025-12-09 09:15:36 +01:00
Pascal Bleser
2191b1d011 groupware: implement JSON:API's error response format, with a revamped error handling in jmap and services/groupware 2025-12-09 09:15:36 +01:00
Pascal Bleser
07522ce79a Refactor groupware service after ADR decision on the Groupware API
* after having decided that the Groupware API should be a standalone
   independent custom REST API that is using JMAP data models as much as
   possible,
 * removed Groupware APIs from the Graph service
 * moved Groupware implementation to the Groupware service, and
   refactored a few things accordingly
2025-12-09 09:15:36 +01:00
Pascal Bleser
d544efdec7 Groupware and jmap: cleanup and API documentation 2025-12-09 09:15:36 +01:00
Pascal Bleser
3f8076aa46 Groupware improvements: refactoring, k6 tests
* refactored the models to be strongly typed with structs and mapstruct
   to decompose the dynamic parts of the JMAP payloads

 * externalized large JSON strings for tests into .json files under
   testdata/

 * added a couple of fantasy Graph groupware APIs to explore further
   options

 * added k6 scripts to test those graph/me/messages APIs, with a setup
   program to set up users in LDAP, fill their IMAP inbox, activate them
   in Stalwart, cleaning things up, etc...
2025-12-09 09:15:36 +01:00
Pascal Bleser
71cddaaf3c groupware and jmap improvements and refactoring 2025-12-09 09:15:36 +01:00
Pascal Bleser
4cf4d44321 move services/groupware/pkg/jmap to pkg/jmap 2025-12-09 09:15:36 +01:00