v3.0.0
Changelog for reva 3.0.0 (2025-06-03)
The following sections list the changes in reva 3.0.0 relevant to reva users. The changes are ordered by importance.
Summary
- Fix #5082: Wrong quota total reported
- Fix #5120: Allow folders to be un-favorited
- Fix #5123: Use binary client for Attrs
- Fix #5119: Stop sending non-UTF8 strings over gRPC
- Fix #5124: Apps: fixed UserAgent matching
- Fix #5122: Use the correct eos app header
- Fix #5143: Eosgrpc: fixed panic with ACLs handling
- Fix #5156: Handlenew failed to handle spaces id
- Fix #5150: GetSpace with spaceID from URL
- Fix #5153: Ocdav/put response compatible with spaces
- Fix #5133: Fix broken handling of range requests
- Fix #5149: ListMyOfficeFiles
- Fix #5148: ListMyOfficeFiles
- Fix #5064: Impersonate owner on ListRevisions
- Fix #5166: Check for spaces in listshares
- Fix #5084: Use logicalbytes instead of bytes
- Fix #5044: Return an error when EOS List errors
- Fix #5072: Impersonate owner on Revisions
- Fix #5151: Spaces + apps broken
- Fix #5142: Renamed mock APIs
- Fix #5152: Revisions in spaces
- Chg #5155: ListMyOfficeFiles only lists projects, not home
- Chg #5105: Move publicshare sql driver
- Enh #5113: Log simplified user agent in apps
- Enh #5107: Add file extension in the returning app URL log message
- Enh #5085: Extend app /notify endpoint to allow reporting errors
- Enh #5110: Log acl payload on AddACL on EOS over gRPC
- Enh #5186: Clean up EOS driver
- Enh #5132: Add expiration dates reinforcement
- Enh #5158: Add expire date to capabilities
- Enh #5080: Log viewmode in the returning app URL message
- Enh #5160: Upgrade to go1.24
- Enh #4940: Refactoring of /home
- Enh #5174: Upgrade jwt library
- Enh #5134: Libregraph API expansion
- Enh #5127: ListMyOfficeFiles
- Enh #5129: Add makefile option for local plugins
- Enh #5076: Implement OCM 1.2
- Enh #5029: Pseudo-transactionalize sharing
- Enh #5109: Extra logging in publicshares
- Enh #5167: Improved logging of rhttp router
- Enh #4404: Add support for Spaces
Details
Bugfix #5082: Wrong quota total reported
The EOS
QuotaInfostruct had fields forAvailableBytesandAvailableInodes, but these were used to mean the total. This is fixed now.Bugfix #5120: Allow folders to be un-favorited
Currently, removing a folder from your favorites is broken, if you are the only one who has favorited it. This is because the UnsetAttr call to EOS over gRPC is failing. As a temporary workaround, we now always set it to empty.
Bugfix #5123: Use binary client for Attrs
EOS < 5.3 has a couple of bugs related to attributes: * Attributes can only be removed as root or the owner, but over gRPC we cannot become root * The recursive property is ignored on set attributes
For these two issues, we circumvent them by calling the binary client until we have deployed EOS 5.3
Bugfix #5119: Stop sending non-UTF8 strings over gRPC
EOS supports having non-UTF8 attributes, which get returned in a Stat. This is problematic for us, as we pass these attributes in the ArbitraryMetadata, which gets sent over gRPC. However, the protobuf language specification states:
A string must always contain UTF-8 encoded or 7-bit ASCII text, and cannot be longer than 2^32.
An example of such an attribute is:
User.$KERNEL.PURGE.SEC.FILEHASH=“S��ϫ]���z��#1}��uU�v��8�L0R�9j�j��e?�2K�T<sJ�*�l���Dǭ��_[�>η�…��w�w[��Yg”
We fix this by stripping non-UTF8 metadata entries before sending the ResourceInfo over gRPC
Bugfix #5124: Apps: fixed UserAgent matching
Bugfix #5122: Use the correct eos app header
Bugfix #5143: Eosgrpc: fixed panic with ACLs handling
Fixes a panic that happens when listing a folder where files have no SysACLs, parent == nil and versionFolder has ACLs.
Bugfix #5156: Handlenew failed to handle spaces id
HandleNew, which creates new office files etc., tried to parse the parent container ref via spaces, and had no fallback for non-spaces. This is now fixed.
Bugfix #5150: GetSpace with spaceID from URL
getSpacewas getting the first element of path as the ID. This fix adds a new functionGetIdFromPath, which uses the last element of the path as the ID.Bugfix #5153: Ocdav/put response compatible with spaces
Checks if
spacesis enabled before returning thefileidafter a PUT request.Bugfix #5133: Fix broken handling of range requests
Currently, the video preview in public links is broken, because the browser sends a “Range: bytes=0-” request. Since EOS over gRPC returns a ReadCloser on the file, which is not seekable, Reva currently returns a 416 RequestedRangeNotSatisfiable response, breaking the video preview.
This PR modifies this behaviour to ignore the Range request in such cases.
Additionally, some errors where removed. For example, when the request does not contain bytes=, Reva currently returns an error. However, RFC 7233 states:
An origin server MUST ignore a Range header field that contains a range unit it does not understand
Thus, we now ignore these requests instead of returning a 416.
Bugfix #5149: ListMyOfficeFiles
Regex was simplified, and a cache was created to keep version folder fileinfo, to make sure we don’t need a stat for every result
Bugfix #5148: ListMyOfficeFiles
There was a bug in the regex for excel files: “(.*?)(.xls|.XLS|)[x|X]?$” contains an extra “|”
Bugfix #5064: Impersonate owner on ListRevisions
ListRevisions is currently broken for projects, because this happens on behalf of the user, instead of the owner of the file. This behaviour is changed to do the call on behalf of the owner (if we are in a non-home space).
Bugfix #5166: Check for spaces in listshares
Opening files in their app from the “Shared with me” view was broken, because we returned spaces ids even on old clients.
Bugfix #5084: Use logicalbytes instead of bytes
EOS gRPC used
usedbytesinstead ofusedlogicalbytesfor calculating quota, resulting in a wrong viewBugfix #5044: Return an error when EOS List errors
If we get an error while reading items, we now return the error to the user and break off the List operation We do not want to return a partial list, because then a sync client may delete local files that are missing on the server
Bugfix #5072: Impersonate owner on Revisions
The current implementation of Download / Restore Revisions is not consistent with ListRevisions, where we impersonate the owner in projects. We now also impersonate in the case of Download and Restore.
Bugfix #5151: Spaces + apps broken
There were still some places where Reva assumed that we are running spaces; while not verifying this. This caused non-spaces WebUIs to break. This is fixed now.
Bugfix #5142: Renamed mock APIs
The once called “mock” space APIs have been renamed as they provide static content to the web frontend
Bugfix #5152: Revisions in spaces
The PR that merged spaces compatibility broke listing revisions. This is now fixed.
Change #5155: ListMyOfficeFiles only lists projects, not home
ListMyOfficeFiles now shows only one project or the user’s home, not both at the same time
Change #5105: Move publicshare sql driver
The publicshare sql driver has been moved to reva-plugins, to be consistent with the usershare sql driver.
Enhancement #5113: Log simplified user agent in apps
Enhancement #5107: Add file extension in the returning app URL log message
Enhancement #5085: Extend app /notify endpoint to allow reporting errors
Enhancement #5110: Log acl payload on AddACL on EOS over gRPC
Enhancement #5186: Clean up EOS driver
- removed unused eos drivers (home, grpc, grpchome) * removed dependency on wrapper
Enhancement #5132: Add expiration dates reinforcement
Public links of folders with RW permissions now have a configurable expiration date.
Enhancement #5158: Add expire date to capabilities
Enhancement #5080: Log viewmode in the returning app URL message
Enhancement #5160: Upgrade to go1.24
Upgrade to go1.24
Enhancement #4940: Refactoring of /home
Enhancement #5174: Upgrade jwt library
Update the golang-jwt library to v5
Enhancement #5134: Libregraph API expansion
Several new libregraph API endpoints have been added in ocgraph. These endpoints are used by the updated front-end. Concretely, endpoints have been added for * searching users * searching groups * creating shares * creating public links
Enhancement #5127: ListMyOfficeFiles
This PR implements the temporary ListMyOfficeFiles functionality
Enhancement #5129: Add makefile option for local plugins
Added a new Make target that takes a local copy of reva-plugins
Enhancement #5076: Implement OCM 1.2
This PR brings in the implementation of parts of OpenCloudMesh 1.2, including: * Adopting the new properties of the OCM 1.2 payloads, without implementing any new functionality for now. In particular, any non-empty
requirementin a share will be rejected (a test was added for that). * Extending the OCM discovery endpoint. * Using the remote OCM discovery endpoint to establish the full URL of an incoming remote share, regardless if provided or not. When sending a share, though, we still send a full URL. * Caching the webdav client used to connect to remote endpoints, with added compatibility to OCM 1.0 remote servers. * Some refactoring and consolidation of duplicated code. * Improved logging.Enhancement #5029: Pseudo-transactionalize sharing
Currently, sharing is not transactionalized: setting ACLs and writing the share to the db is completely independent. In the current situation, shares are written to the db before setting the ACL, letting users falsely believe that they successfully shared a resource, even if setting the ACL afterwards fails. his enhancement improves the situation by doing the least reliable (setting ACLs on EOS) first: a) first pinging the db b) writing the ACLs c) writing to the db
Enhancement #5109: Extra logging in publicshares
Some extra log lines in the public-files DAV handler have been added
Enhancement #5167: Improved logging of rhttp router
Enhancement #4404: Add support for Spaces
Credits to @gmgigi96