Commit Graph

15 Commits

Author SHA1 Message Date
Pascal Bleser
44aa991995 groupware: add quota API + add support for Accept-Language and Content-Language 2026-02-10 17:03:59 +01:00
Pascal Bleser
eb2660a631 fix(groupware): fix JMAP error handling
* the JMAP error handling was not working properly, fixed it and added
   error definitions accordingly

 * add operations to retrieve mailbox roles and mailboxes by role for
   all accounts
2026-02-10 17:03:59 +01:00
Pascal Bleser
cac2ac1e00 refactor(groupware): use a function for multi-account method call IDs
* introduce a function 'mcid' to assemble method call IDs per account
   instead of doing that inline in each function, in case the rules for
   doing so change in the future
2026-02-10 17:03:59 +01:00
Pascal Bleser
73dcd7256e 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
2026-02-10 17:03:59 +01:00
Pascal Bleser
5fa9e57eb7 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
2026-02-10 17:03:58 +01:00
Pascal Bleser
361226a805 groupware: add /bootstrap
* add a GET /accounts/{a}/boostrap URI that delivers the same as GET /
   but also mailboxes for a given account, in case the UI remembers the
   last used account identifier, to avoid an additional roundtrip

 * streamline the use of simpleError()

 * add logging of errors at the calling site

 * add logging of evictions of Sessions from the cache

 * change default Session cache TTL to 5min instead of 30sec
2026-02-10 17:03:58 +01:00
Pascal Bleser
36ac7b56c0 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
2026-02-10 17:03:58 +01:00
Pascal Bleser
6cd6759152 groupware: add identities of all accounts to the index resource 2026-02-10 17:03:58 +01:00
Pascal Bleser
6a8707c5a3 groupware: implement message search with snippets 2026-02-10 17:03:58 +01:00
Pascal Bleser
986150547c groupware: further implementation and improvements 2026-02-10 17:03:58 +01:00
Pascal Bleser
45db469542 refactored the Session object, refactored the services/groupware directory, and started Swagger documentation implementation 2026-02-10 17:03:58 +01:00
Pascal Bleser
4f052824fe groupware: implement JSON:API's error response format, with a revamped error handling in jmap and services/groupware 2026-02-10 17:03:58 +01:00
Pascal Bleser
6e9a36dc75 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...
2026-02-10 17:03:58 +01:00
Pascal Bleser
8b7f3a20f3 groupware and jmap improvements and refactoring 2026-02-10 17:03:58 +01:00
Pascal Bleser
08a327417a move services/groupware/pkg/jmap to pkg/jmap 2026-02-10 17:03:58 +01:00