Commit Graph

23360 Commits

Author SHA1 Message Date
Pascal Bleser
bc91ef9bf6 groupware: implement metrics
* implement a framework for metrics, with a few exemplary ones
2026-07-09 14:15:49 +02:00
Pascal Bleser
baf0ddfa9a 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-07-09 14:15:49 +02:00
Pascal Bleser
f14fb8b173 groupware: initial related emails implementation with SSE 2026-07-09 14:15:49 +02:00
Pascal Bleser
c4001026e6 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-07-09 14:15:49 +02:00
Pascal Bleser
bfcf08688c 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
2026-07-09 14:15:49 +02:00
Pascal Bleser
35fd72eda6 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-07-09 14:15:49 +02:00
Pascal Bleser
66ebf4d5b9 groupware: minor email searching response improvements + started implementing vacation response setting API 2026-07-09 14:15:49 +02:00
Pascal Bleser
2c9378d0b0 groupware: add identities of all accounts to the index resource 2026-07-09 14:15:49 +02:00
Pascal Bleser
aea0d9afd5 groupware: fix email search, add variant that includes the full emails 2026-07-09 14:15:49 +02:00
Pascal Bleser
1d9d972518 groupware: fix email search, add variant that includes the full emails 2026-07-09 14:15:49 +02:00
Pascal Bleser
ab262aa6bb 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}
2026-07-09 14:15:49 +02:00
Pascal Bleser
9c42f2303a groupware: implement message search with snippets 2026-07-09 14:15:49 +02:00
Pascal Bleser
624ac13182 groupware: blob streaming (upload and download) 2026-07-09 14:15:49 +02:00
Pascal Bleser
96890e315d groupware: more JMAP operations implementation 2026-07-09 14:15:49 +02:00
Pascal Bleser
4286cec023 groupware: further implementation and improvements 2026-07-09 14:15:49 +02:00
Pascal Bleser
bc676fd0a7 upgrade Stalwart to 0.13.2 2026-07-09 14:15:49 +02:00
Pascal Bleser
7f755300cd refactored the Session object, refactored the services/groupware directory, and started Swagger documentation implementation 2026-07-09 14:15:49 +02:00
Pascal Bleser
5862bebbcc groupware: refactoring the API mechanisms 2026-07-09 14:15:49 +02:00
Pascal Bleser
127cd7406c groupware: implement JSON:API's error response format, with a revamped error handling in jmap and services/groupware 2026-07-09 14:15:49 +02:00
Pascal Bleser
f0242898bf 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
2026-07-09 14:15:49 +02:00
Pascal Bleser
4a138b8082 Groupware and jmap: cleanup and API documentation 2026-07-09 14:15:49 +02:00
Pascal Bleser
181dd14335 groupware: remove unneeded messages.go that was a remainder from an earlier implementation attempt, which also fixes compilation issues due to changes in main 2026-07-09 14:15:49 +02:00
Pascal Bleser
f5573a53f3 opencloud_full: upgrade Stalwart to 0.12.5, and use the ghcr.io container repository to avoid Hub limits 2026-07-09 14:15:49 +02:00
Pascal Bleser
aaf4be4546 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-07-09 14:15:49 +02:00
Pascal Bleser
8cc8da45bf fix Stalwart LDAP configuration 2026-07-09 14:15:49 +02:00
Pascal Bleser
f79ba9a35b Use password policy overlay in LDAP and configure Stalwart to use it 2026-07-09 14:15:49 +02:00
Pascal Bleser
0dee74399d upgrade Stalwart to 0.12.4 2026-07-09 14:15:49 +02:00
Pascal Bleser
3b43f51592 groupware: removed debugging logs 2026-07-09 14:15:49 +02:00
Pascal Bleser
04d1af5041 jwkset: remove debugging printlns 2026-07-09 14:15:49 +02:00
Pascal Bleser
68eaafece8 auth-api: fix: was missing newly introduced metrics 2026-07-09 14:15:49 +02:00
Pascal Bleser
8cf5aa3e4c groupware and jmap improvements and refactoring 2026-07-09 14:15:48 +02:00
Pascal Bleser
7307e0143a upgrade Stalwart to 0.12 2026-07-09 14:15:48 +02:00
Pascal Bleser
6101791c24 minor corrections to the Stalwart configuration 2026-07-09 14:15:48 +02:00
Pascal Bleser
521d2a0820 Introduce a the auth-api service
* primitive implementation to demonstrate how it could work, still to
   be considered WIP at best

 * add new dependency: MicahParks/jwkset and MicahParks/keyfunc to
   retrieve the JWK set from KeyCloak to verify the signature of the
   JWTs sent as part of Bearer authentication in the /auth API

 * (minor) opencloud/.../service.go: clean up a logging statement that
   was introduced earlier to hunt down why the auth-api service was not
   being started
2026-07-09 14:15:48 +02:00
Pascal Bleser
9076c8449f add an auth-api service to make an exemplary implementation of an external authentication API for third party services such as Stalwart 2026-07-09 14:15:48 +02:00
Pascal Bleser
d4cf02b17d move services/groupware/pkg/jmap to pkg/jmap 2026-07-09 14:15:48 +02:00
Pascal Bleser
b8b1b02564 WIP: restructure the Jmap client, and implement the /me/messages Graph API endpoint with it 2026-07-09 14:15:48 +02:00
Pascal Bleser
7367f5bd6a add an OIDC Directory to Stalwart, requires exposing Keycloak port 8080 directly to access the userinfo endpoint using HTTP since the certificates in traefik are self-signed and end up being rejected by Stalwart with no option to bypass the certificate check 2026-07-09 14:15:48 +02:00
Pascal Bleser
e4f415652d rename Stalwart fallback admin username from 'admin' to 'mailadmin' since 'admin' exists as a regular user in LDAP and thus won't have access to the administration 2026-07-09 14:15:48 +02:00
Pascal Bleser
77af5d6e5e add missing routing for /groupware (currently unprotected for testing) 2026-07-09 14:15:48 +02:00
Pascal Bleser
11f45fc83b WIP: initial implementation of the groupware service 2026-07-09 14:15:48 +02:00
Pascal Bleser
6f03eae368 Add Stalwart container to the opencloud_full deployment, using the OpenLDAP container as a directory for user authentication 2026-07-09 14:15:48 +02:00
Alex
e4faa179b6 feat: add disableSponsorLink web config option (#3093) 2026-07-09 13:33:07 +02:00
Viktor Scharf
9efc71d42e [decomposed] more cli command tests (#3087)
* more cli command tests

* add tests to expected failures file
2026-07-09 07:51:43 +02:00
Jörn Friedrich Dreyer
415900ab01 chore(idp): update axios
Signed-off-by: Jörn Friedrich Dreyer <jfd@butonic.de>
2026-07-08 17:09:05 +02:00
Thomas Schweiger
50be30e5db fix: fix typo in proxy service documentation 2026-07-08 10:25:47 +02:00
opencloudeu
95f29d0440 [tx] updated from transifex 2026-07-07 23:16:19 +00:00
dependabot[bot]
ee478ed6a5 build(deps): bump golang.org/x/text from 0.38.0 to 0.39.0
Bumps [golang.org/x/text](https://github.com/golang/text) from 0.38.0 to 0.39.0.
- [Release notes](https://github.com/golang/text/releases)
- [Commits](https://github.com/golang/text/compare/v0.38.0...v0.39.0)

---
updated-dependencies:
- dependency-name: golang.org/x/text
  dependency-version: 0.39.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-07-07 17:08:57 +02:00
dependabot[bot]
e53c77e2be build(deps): bump github.com/go-chi/chi/v5 from 5.3.0 to 5.3.1
Bumps [github.com/go-chi/chi/v5](https://github.com/go-chi/chi) from 5.3.0 to 5.3.1.
- [Release notes](https://github.com/go-chi/chi/releases)
- [Changelog](https://github.com/go-chi/chi/blob/master/CHANGELOG.md)
- [Commits](https://github.com/go-chi/chi/compare/v5.3.0...v5.3.1)

---
updated-dependencies:
- dependency-name: github.com/go-chi/chi/v5
  dependency-version: 5.3.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-07-07 14:08:35 +02:00
dependabot[bot]
6f838a2131 build(deps): bump github.com/nats-io/nats-server/v2
Bumps [github.com/nats-io/nats-server/v2](https://github.com/nats-io/nats-server) from 2.14.2 to 2.14.3.
- [Release notes](https://github.com/nats-io/nats-server/releases)
- [Changelog](https://github.com/nats-io/nats-server/blob/main/RELEASES.md)
- [Commits](https://github.com/nats-io/nats-server/compare/v2.14.2...v2.14.3)

---
updated-dependencies:
- dependency-name: github.com/nats-io/nats-server/v2
  dependency-version: 2.14.3
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-07-07 12:32:16 +02:00