v3.12.0
Changelog for reva 3.12.0 (2026-07-30)
The following sections list the changes in reva 3.12.0 relevant to
reva users. The changes are ordered by importance.
Summary
- Fix #5722: make /dav/files// work again
- Fix #5733: Fix nilptr exception in ListUsers
- Fix #5698: Normalize user ids on incoming OCM shares
- Fix #5695: Normalize remote user ids in OCM to avoid malformed shareWith
- Fix #5696: Resolve single-file OCM shares correctly over WebDAV
- Fix #5724: Pass token owner in public link scope check
- Enh #5703: Apps: added temporary patch for Office apps
- Enh #5737: EOS driver now takes modbits into account
- Enh #5732: Implement feedback endpoint
- Enh #5726: Use uppercase URL encoding to calculate signatures for signed urls
- Enh #5705: Add endpoint for office mentions
- Enh #5727: Add resource_admins column to the projects table
- Enh #5708: Refactor notifications system
- Enh #5699: Store OCM shares after the remote accepts them
Details
-
Bugfix #5722: make /dav/files// work again
-
Bugfix #5733: Fix nilptr exception in ListUsers
Specifcally, when the OrderBy parameter was omitted
-
Bugfix #5698: Normalize user ids on incoming OCM shares
This fixes cross-vendor OCM shares failing on the receiving side when Reva is the receiver and
the peer is a non-conformant OCM server. It is the receiver-side counterpart to the
sender-side normalization in #5695.The OCM spec expects an address as
<bare-id>@<provider>, with the host kept separate from
the user id. Some peers glue the host onto the id: oCIS sendsid@hostand OpenCloud sends
id@https://host, and by the time it reaches thePOST /ocm/shareshandler the id is doubled
up asid@host@host(with or without a scheme).GetUserIdFromOCMAddressonly strips the final@host, so the parsed opaque id kept a
leftover host suffix that broke user resolution, and the two vendors failed at two different
points. ForshareWith(the local recipient) the leftover host made the local user lookup
miss and the request returned 404 user not found. Forsenderandowner(the remote sharer)
it made the accepted-user lookup miss, because the accepted remote user is stored with a bare id
during the invitation flow, and the request returned 401 unauthenticated.The incoming-share handler now parses these three addresses through a helper that also strips
a redundant, self-referential provider suffix that matches the parsed provider domain.
Identifiers that legitimately contain@for a different host are left untouched, and
spec-conformant peers such as CERNBox-to-CERNBox and Nextcloud are unaffected. -
Bugfix #5695: Normalize remote user ids in OCM to avoid malformed shareWith
This fixes cross-vendor OCM shares failing when Reva is the sender and the peer is a
non-conformant OCM server. The OCM spec requires the inviteuserIDto be the bare identifier
of the user at their OCM Server, with the host carried separately inrecipientProvider. Some
peers instead send a fully-qualifieduserIDsuch asid@host(oCIS) orid@https://host
(OpenCloud).Reva stored that qualified string verbatim as the federated user's opaque id and later
re-appended the provider domain when buildingshareWith, producing malformed recipients
likeid@host@hostorid@https://host@host. Receivers could not resolve those to a local
user, so the share silently never materialized even though the HTTP request returned 200 OK.Reva now normalizes remote user ids on ingress (invite acceptance and invite forwarding) by
stripping a redundant, self-referential provider suffix that matches the known provider
domain, and defensively formats outbound OCM Addresses so it never emits theid@host@host
form. Identifiers that legitimately contain@for a different host are left untouched, and
spec-conformant peers are unaffected. -
Bugfix #5696: Resolve single-file OCM shares correctly over WebDAV
This fixes cross-vendor OCM shares failing to appear on the receiver when Reva is the sender and
the shared resource is a single file. Remote receivers (oCIS, OpenCloud) mount an OCM share as a
directory and address the shared file as<share>/<name>, so the incoming WebDAV request
carries the file's own name as a relative path.The
ocmoutcomingstorage driver resolved the share token to the shared resource (the file
itself) and then unconditionally joined the relative path onto it, producing a doubled path
such as/home/einstein/report.txt/report.txt. That path does not exist, so the stat
failed and the WebDAVPROPFINDreturned HTTP 500. Receivers treat a failed stat as a missing
share and silently drop it from their "shared with me" listing, so the file never became visible
even though the share was created and accepted.The driver now resolves paths based on the shared resource type. Folder shares still nest the
child beneath the container. For a single-file share, which has exactly one resource, both the
share root and a single-segment child resolve to the file itself, so<file>/<file>is never
built and receivers whose appended name differs from the storage path base are tolerated.
Nested paths under a file share are rejected as malformed. -
Bugfix #5724: Pass token owner in public link scope check
-
Enhancement #5703: Apps: added temporary patch for Office apps
This PR adds the handling of language and theme input parameters, and returns an
app_for_editing additional parameter in response if appropriate. -
Enhancement #5737: EOS driver now takes modbits into account
To make /app/open also take into account modbits (so you can open files in apps in the public
folder) -
Enhancement #5732: Implement feedback endpoint
Implement an endpoint so users can send feedback, to be used for the CERNBox Office Pilot.
-
Enhancement #5726: Use uppercase URL encoding to calculate signatures for signed urls
-
Enhancement #5705: Add endpoint for office mentions
This change adds a POST /app/mentions endpoint for Office integrations to trigger mention
notifications. -
Enhancement #5727: Add resource_admins column to the projects table
The projects table now has a resource_admins column, holding the e-group ID of the resource
administrators of a project. -
Enhancement #5708: Refactor notifications system
Following ADR general/0007-notifications-refactor
We now use an event-based system, where handlers register to events, and a configurable
rule-system determines how to handle these. Accumulation is coordinated between daemons. -
Enhancement #5699: Store OCM shares after the remote accepts them
This commit introduces a behaviour where the OCM shares are only stored locally if the remote
system accepts them first, meaning we don't have any orphaned OCM shares locally