Repository: owncloud/ocis
Pull request #10171 (2024-09-26 12:28:48)

Fix email translationPath and docu
Fixes custom translation path feature for notifications service and corrects its documentation.

sonarcloud[bot]: ## [![Quality Gate Passed](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/QualityGateBadge/qg-passed-20px.png 'Quality Gate Passed')](https://sonarcloud.io/dashboard?id=owncloud_ocis&pullRequest=10171) **Quality Gate passed**  
Issues  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0 New issues](https://sonarcloud.io/project/issues?id=owncloud_ocis&pullRequest=10171&issueStatuses=OPEN,CONFIRMED&sinceLeakPeriod=true)  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/accepted-16px.png '') [0 Accepted issues](https://sonarcloud.io/project/issues?id=owncloud_ocis&pullRequest=10171&issueStatuses=ACCEPTED)

Measures  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0 Security Hotspots](https://sonarcloud.io/project/security_hotspots?id=owncloud_ocis&pullRequest=10171&issueStatuses=OPEN,CONFIRMED&sinceLeakPeriod=true)  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0.0% Coverage on New Code](https://sonarcloud.io/component_measures?id=owncloud_ocis&pullRequest=10171&metric=new_coverage&view=list)  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0.0% Duplication on New Code](https://sonarcloud.io/component_measures?id=owncloud_ocis&pullRequest=10171&metric=new_duplicated_lines_density&view=list)  
  
[See analysis details on SonarCloud](https://sonarcloud.io/dashboard?id=owncloud_ocis&pullRequest=10171)


kobergj: @mmattel no. Other services work properly. Only notifications service had the issue
mmattel: > @mmattel no. Other services work properly. Only notifications service had the issue

Got it.
Beside technical, this then should be consistent to avoid confusion `service_name.po`. Just my 2c
sonarcloud[bot]: ## [![Quality Gate Passed](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/QualityGateBadge/qg-passed-20px.png 'Quality Gate Passed')](https://sonarcloud.io/dashboard?id=owncloud_ocis&pullRequest=10171) **Quality Gate passed**  
Issues  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0 New issues](https://sonarcloud.io/project/issues?id=owncloud_ocis&pullRequest=10171&issueStatuses=OPEN,CONFIRMED&sinceLeakPeriod=true)  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/accepted-16px.png '') [0 Accepted issues](https://sonarcloud.io/project/issues?id=owncloud_ocis&pullRequest=10171&issueStatuses=ACCEPTED)

Measures  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0 Security Hotspots](https://sonarcloud.io/project/security_hotspots?id=owncloud_ocis&pullRequest=10171&issueStatuses=OPEN,CONFIRMED&sinceLeakPeriod=true)  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0.0% Coverage on New Code](https://sonarcloud.io/component_measures?id=owncloud_ocis&pullRequest=10171&metric=new_coverage&view=list)  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0.0% Duplication on New Code](https://sonarcloud.io/component_measures?id=owncloud_ocis&pullRequest=10171&metric=new_duplicated_lines_density&view=list)  
  
[See analysis details on SonarCloud](https://sonarcloud.io/dashboard?id=owncloud_ocis&pullRequest=10171)



Patch:
diff --git a/.drone.env b/.drone.env
index 9bff4474a98..7f046d20ddc 100644
--- a/.drone.env
+++ b/.drone.env
@@ -1,3 +1,3 @@
 # The test runner source for UI tests
-WEB_COMMITID=00f038473ad43d7553089e7b8630a73fe94ba6b9
+WEB_COMMITID=998722d3f3836a8091549313b540ddcc3dd1ae03
 WEB_BRANCH=master
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 9f1fec8c8d7..205a9d11daf 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -65,18 +65,15 @@ The following sections list the changes for unreleased.
 * Bugfix - Added ShareUpdate activity: [#10104](https://github.com/owncloud/ocis/pull/10104)
 * Bugfix - Fixed the collaboration service registration: [#10107](https://github.com/owncloud/ocis/pull/10107)
 * Bugfix - CheckFileInfo will return a 404 error if the target file isn't found: [#10112](https://github.com/owncloud/ocis/pull/10112)
+* Bugfix - Always select next gateway client: [#10133](https://github.com/owncloud/ocis/pull/10133)
 * Bugfix - Forbid Activities for Sharees: [#10136](https://github.com/owncloud/ocis/pull/10136)
-* Bugfix - Always select next gateway client: [#10141](https://github.com/owncloud/ocis/pull/10141)
 * Bugfix - Remove duplicate CSP header from responses: [#10146](https://github.com/owncloud/ocis/pull/10146)
-* Bugfix - Fixed the missing folder variable: [#10150](https://github.com/owncloud/ocis/pull/10150)
 * Bugfix - Fix activity limit: [#10165](https://github.com/owncloud/ocis/pull/10165)
-* Bugfix - Fix Activities translation: [#10175](https://github.com/owncloud/ocis/pull/10175)
+* Enhancement - Bump reva: [#9817](https://github.com/owncloud/ocis/pull/9817)
 * Enhancement - Allow to maintain the last sign-in timestamp of a user: [#9942](https://github.com/owncloud/ocis/pull/9942)
 * Enhancement - Add an Activity for FileUpdated: [#10072](https://github.com/owncloud/ocis/pull/10072)
 * Enhancement - Remove METADATA_BACKEND: [#10113](https://github.com/owncloud/ocis/pull/10113)
 * Enhancement - Load CSP configuration file if it exists: [#10139](https://github.com/owncloud/ocis/pull/10139)
-* Enhancement - Bump reva: [#10157](https://github.com/owncloud/ocis/pull/10157)
-* Enhancement - Update web to v10.3.0: [#10177](https://github.com/owncloud/ocis/pull/10177)
 
 ## Details
 
@@ -155,20 +152,19 @@ The following sections list the changes for unreleased.
 
    https://github.com/owncloud/ocis/pull/10112
 
-* Bugfix - Forbid Activities for Sharees: [#10136](https://github.com/owncloud/ocis/pull/10136)
-
-   Sharees may not see item activities. We now bind it to ListGrants permission.
-
-   https://github.com/owncloud/ocis/pull/10136
-
-* Bugfix - Always select next gateway client: [#10141](https://github.com/owncloud/ocis/pull/10141)
+* Bugfix - Always select next gateway client: [#10133](https://github.com/owncloud/ocis/pull/10133)
 
    We now use the gateway selector to always select the next gateway client. This
    ensures that we can always connect to the gateway during up- and downscaling.
 
-   https://github.com/owncloud/ocis/pull/10141
    https://github.com/owncloud/ocis/pull/10133
 
+* Bugfix - Forbid Activities for Sharees: [#10136](https://github.com/owncloud/ocis/pull/10136)
+
+   Sharees may not see item activities. We now bind it to ListGrants permission.
+
+   https://github.com/owncloud/ocis/pull/10136
+
 * Bugfix - Remove duplicate CSP header from responses: [#10146](https://github.com/owncloud/ocis/pull/10146)
 
    The web service was adding a CSP on its own, and that one has been removed. The
@@ -176,13 +172,6 @@ The following sections list the changes for unreleased.
 
    https://github.com/owncloud/ocis/pull/10146
 
-* Bugfix - Fixed the missing folder variable: [#10150](https://github.com/owncloud/ocis/pull/10150)
-
-   We fixed the missing folder variable when folder renamed.
-
-   https://github.com/owncloud/ocis/issues/10148
-   https://github.com/owncloud/ocis/pull/10150
-
 * Bugfix - Fix activity limit: [#10165](https://github.com/owncloud/ocis/pull/10165)
 
    When requesting a limit on activities, ocis would limit first, then filter and
@@ -190,11 +179,11 @@ The following sections list the changes for unreleased.
 
    https://github.com/owncloud/ocis/pull/10165
 
-* Bugfix - Fix Activities translation: [#10175](https://github.com/owncloud/ocis/pull/10175)
+* Enhancement - Bump reva: [#9817](https://github.com/owncloud/ocis/pull/9817)
 
-   Fix the panic for the translation-sync in the activities service.
+   Bumps reva version
 
-   https://github.com/owncloud/ocis/pull/10175
+   https://github.com/owncloud/ocis/pull/9817
 
 * Enhancement - Allow to maintain the last sign-in timestamp of a user: [#9942](https://github.com/owncloud/ocis/pull/9942)
 
@@ -236,47 +225,6 @@ The following sections list the changes for unreleased.
    https://github.com/owncloud/ocis/issues/10021
    https://github.com/owncloud/ocis/pull/10139
 
-* Enhancement - Bump reva: [#10157](https://github.com/owncloud/ocis/pull/10157)
-
-   Bumps reva version
-
-   https://github.com/owncloud/ocis/pull/10157
-   https://github.com/owncloud/ocis/pull/9817
-
-* Enhancement - Update web to v10.3.0: [#10177](https://github.com/owncloud/ocis/pull/10177)
-
-   Tags: web
-
-   We updated ownCloud Web to v10.3.0. Please refer to the changelog (linked) for
-   details on the web release.
-
-  * Bugfix [owncloud/web#11557](https://github.com/owncloud/web/pull/11557): OCM token clipboard copy
-  * Bugfix [owncloud/web#11560](https://github.com/owncloud/web/pull/11560): OCM local instance check
-  * Bugfix [owncloud/web#11583](https://github.com/owncloud/web/pull/11583): Thumbnails for GeoGebra slides not showing up
-  * Bugfix [owncloud/web#11584](https://github.com/owncloud/web/pull/11584): Logout issues on token renewal failure
-  * Bugfix [owncloud/web#11633](https://github.com/owncloud/web/pull/11633): App version downloads
-  * Bugfix [owncloud/web#11642](https://github.com/owncloud/web/pull/11642): Wrong webdav URL in sidebar
-  * Bugfix [owncloud/web#11643](https://github.com/owncloud/web/pull/11643): Renaming space in projects view files table does not work
-  * Bugfix [owncloud/web#11653](https://github.com/owncloud/web/pull/11653): Hide share type switch for project spaces
-  * Bugfix [owncloud/web#11658](https://github.com/owncloud/web/pull/11658): File name truncation
-  * Enhancement [owncloud/web#11553](https://github.com/owncloud/web/pull/11553): Copy quick link action removal
-  * Enhancement [owncloud/web#11553](https://github.com/owncloud/web/pull/11553): Internal link removal
-  * Enhancement [owncloud/web#11558](https://github.com/owncloud/web/pull/11558): Add split confirm button to create link modal
-  * Enhancement [owncloud/web#11561](https://github.com/owncloud/web/pull/11561): Add versions to the left sidebar bottom
-  * Enhancement [owncloud/web#11574](https://github.com/owncloud/web/pull/11574): Accessibility improvements
-  * Enhancement [owncloud/web#11580](https://github.com/owncloud/web/pull/11580): Show min oCIS version in app details (app store)
-  * Enhancement [owncloud/web#11586](https://github.com/owncloud/web/pull/11586): Add a "Save As" function to the app top bar
-  * Enhancement [owncloud/web#11606](https://github.com/owncloud/web/pull/11606): Move permanent link indicator
-  * Enhancement [owncloud/web#11606](https://github.com/owncloud/web/pull/11606): Redesign sidebar link section in sharing panel
-  * Enhancement [owncloud/web#11614](https://github.com/owncloud/web/pull/11614): Soothe right sidebar panel transitions
-  * Enhancement [owncloud/web#11631](https://github.com/owncloud/web/pull/11631): Preview loading performance
-  * Enhancement [owncloud/web#11644](https://github.com/owncloud/web/pull/11644): Add cancel button to unsaved changes dialog
-  * Enhancement [owncloud/web#11646](https://github.com/owncloud/web/pull/11646): File type icon for .ggs files
-  * Enhancement [owncloud/web#11661](https://github.com/owncloud/web/pull/11661): Remove link type "Uploader"
-
-   https://github.com/owncloud/ocis/pull/10177
-   https://github.com/owncloud/web/releases/tag/v10.3.0
-
 # Changelog for [6.4.0] (2024-09-12)
 
 The following sections list the changes for 6.4.0.
diff --git a/changelog/unreleased/bump-reva.md b/changelog/unreleased/bump-reva.md
index b537cb657f8..81fb15ba88d 100644
--- a/changelog/unreleased/bump-reva.md
+++ b/changelog/unreleased/bump-reva.md
@@ -2,5 +2,4 @@ Enhancement: Bump reva
 
 Bumps reva version
 
-https://github.com/owncloud/ocis/pull/10157
 https://github.com/owncloud/ocis/pull/9817
diff --git a/changelog/unreleased/fix-acitivity-folder.md b/changelog/unreleased/fix-acitivity-folder.md
deleted file mode 100644
index 4e2c27d01bb..00000000000
--- a/changelog/unreleased/fix-acitivity-folder.md
+++ /dev/null
@@ -1,6 +0,0 @@
-Bugfix: Fixed the missing folder variable
-
-We fixed the missing folder variable when folder renamed.
-
-https://github.com/owncloud/ocis/pull/10150
-https://github.com/owncloud/ocis/issues/10148
diff --git a/changelog/unreleased/fix-acitivity-translation.md b/changelog/unreleased/fix-acitivity-translation.md
deleted file mode 100644
index 65a888c81f8..00000000000
--- a/changelog/unreleased/fix-acitivity-translation.md
+++ /dev/null
@@ -1,5 +0,0 @@
-Bugfix: Fix Activities translation
-
-Fix the panic for the translation-sync in the activities service.
-
-https://github.com/owncloud/ocis/pull/10175
diff --git a/changelog/unreleased/fix-email-translations.md b/changelog/unreleased/fix-email-translations.md
new file mode 100644
index 00000000000..b61af63b884
--- /dev/null
+++ b/changelog/unreleased/fix-email-translations.md
@@ -0,0 +1,5 @@
+Bugfix: Fix email translations
+
+Email translations would not use custom translation pathes. This is now fixed.
+
+https://github.com/owncloud/ocis/pull/10171
diff --git a/changelog/unreleased/fix-select-next-gateway-client.md b/changelog/unreleased/fix-select-next-gateway-client.md
index b08263f1a65..80730a01151 100644
--- a/changelog/unreleased/fix-select-next-gateway-client.md
+++ b/changelog/unreleased/fix-select-next-gateway-client.md
@@ -2,5 +2,4 @@ Bugfix: Always select next gateway client
 
 We now use the gateway selector to always select the next gateway client. This ensures that we can always connect to the gateway during up- and downscaling.
 
-https://github.com/owncloud/ocis/pull/10141
-https://github.com/owncloud/ocis/pull/10133
\ No newline at end of file
+https://github.com/owncloud/ocis/pull/10133
diff --git a/changelog/unreleased/update-web-10.3.0.md b/changelog/unreleased/update-web-10.3.0.md
deleted file mode 100644
index 3ea22a6577b..00000000000
--- a/changelog/unreleased/update-web-10.3.0.md
+++ /dev/null
@@ -1,32 +0,0 @@
-Enhancement: Update web to v10.3.0
-
-Tags: web
-
-We updated ownCloud Web to v10.3.0. Please refer to the changelog (linked) for details on the web release.
-
-* Bugfix [owncloud/web#11557](https://github.com/owncloud/web/pull/11557): OCM token clipboard copy
-* Bugfix [owncloud/web#11560](https://github.com/owncloud/web/pull/11560): OCM local instance check
-* Bugfix [owncloud/web#11583](https://github.com/owncloud/web/pull/11583): Thumbnails for GeoGebra slides not showing up
-* Bugfix [owncloud/web#11584](https://github.com/owncloud/web/pull/11584): Logout issues on token renewal failure
-* Bugfix [owncloud/web#11633](https://github.com/owncloud/web/pull/11633): App version downloads
-* Bugfix [owncloud/web#11642](https://github.com/owncloud/web/pull/11642): Wrong webdav URL in sidebar
-* Bugfix [owncloud/web#11643](https://github.com/owncloud/web/pull/11643): Renaming space in projects view files table does not work
-* Bugfix [owncloud/web#11653](https://github.com/owncloud/web/pull/11653): Hide share type switch for project spaces
-* Bugfix [owncloud/web#11658](https://github.com/owncloud/web/pull/11658): File name truncation
-* Enhancement [owncloud/web#11553](https://github.com/owncloud/web/pull/11553): Copy quick link action removal
-* Enhancement [owncloud/web#11553](https://github.com/owncloud/web/pull/11553): Internal link removal
-* Enhancement [owncloud/web#11558](https://github.com/owncloud/web/pull/11558): Add split confirm button to create link modal
-* Enhancement [owncloud/web#11561](https://github.com/owncloud/web/pull/11561): Add versions to the left sidebar bottom
-* Enhancement [owncloud/web#11574](https://github.com/owncloud/web/pull/11574): Accessibility improvements
-* Enhancement [owncloud/web#11580](https://github.com/owncloud/web/pull/11580): Show min oCIS version in app details (app store)
-* Enhancement [owncloud/web#11586](https://github.com/owncloud/web/pull/11586): Add a "Save As" function to the app top bar
-* Enhancement [owncloud/web#11606](https://github.com/owncloud/web/pull/11606): Move permanent link indicator
-* Enhancement [owncloud/web#11606](https://github.com/owncloud/web/pull/11606): Redesign sidebar link section in sharing panel
-* Enhancement [owncloud/web#11614](https://github.com/owncloud/web/pull/11614): Soothe right sidebar panel transitions
-* Enhancement [owncloud/web#11631](https://github.com/owncloud/web/pull/11631): Preview loading performance
-* Enhancement [owncloud/web#11644](https://github.com/owncloud/web/pull/11644): Add cancel button to unsaved changes dialog
-* Enhancement [owncloud/web#11646](https://github.com/owncloud/web/pull/11646): File type icon for .ggs files
-* Enhancement [owncloud/web#11661](https://github.com/owncloud/web/pull/11661): Remove link type "Uploader"
-
-https://github.com/owncloud/ocis/pull/10177
-https://github.com/owncloud/web/releases/tag/v10.3.0
diff --git a/go.mod b/go.mod
index dd499f0d5a3..3b64c64cb5f 100644
--- a/go.mod
+++ b/go.mod
@@ -15,7 +15,7 @@ require (
 	github.com/cenkalti/backoff v2.2.1+incompatible
 	github.com/coreos/go-oidc/v3 v3.11.0
 	github.com/cs3org/go-cs3apis v0.0.0-20240724121416-062c4e3046cb
-	github.com/cs3org/reva/v2 v2.24.2-0.20240926082340-b5c3c6781528
+	github.com/cs3org/reva/v2 v2.24.2-0.20240924091626-9635c6d8234e
 	github.com/dhowden/tag v0.0.0-20230630033851-978a0926ee25
 	github.com/dutchcoders/go-clamd v0.0.0-20170520113014-b970184f4d9e
 	github.com/egirna/icap-client v0.1.1
diff --git a/go.sum b/go.sum
index ceaa9220025..e6ba6528eae 100644
--- a/go.sum
+++ b/go.sum
@@ -255,8 +255,8 @@ github.com/crewjam/saml v0.4.14 h1:g9FBNx62osKusnFzs3QTN5L9CVA/Egfgm+stJShzw/c=
 github.com/crewjam/saml v0.4.14/go.mod h1:UVSZCf18jJkk6GpWNVqcyQJMD5HsRugBPf4I1nl2mME=
 github.com/cs3org/go-cs3apis v0.0.0-20240724121416-062c4e3046cb h1:KmYZDReplv/yfwc1LNYpDcVhVujC3Pasv6WjXx1haSU=
 github.com/cs3org/go-cs3apis v0.0.0-20240724121416-062c4e3046cb/go.mod h1:yyP8PRo0EZou3nSH7H4qjlzQwaydPeIRNgX50npQHpE=
-github.com/cs3org/reva/v2 v2.24.2-0.20240926082340-b5c3c6781528 h1:sNq9lYNXQeqGGGe8m9zGdzBiw2QYs4fe0zXYTFfD++g=
-github.com/cs3org/reva/v2 v2.24.2-0.20240926082340-b5c3c6781528/go.mod h1:p7CHBXcg6sSqB+0JMNDfC1S7TSh9FghXkw1kTV3KcJI=
+github.com/cs3org/reva/v2 v2.24.2-0.20240924091626-9635c6d8234e h1:4K3F/kwEaTANja+d15FF4e10PHYtHAfk6y2uWqg/1NM=
+github.com/cs3org/reva/v2 v2.24.2-0.20240924091626-9635c6d8234e/go.mod h1:p7CHBXcg6sSqB+0JMNDfC1S7TSh9FghXkw1kTV3KcJI=
 github.com/cyberdelia/templates v0.0.0-20141128023046-ca7fffd4298c/go.mod h1:GyV+0YP4qX0UQ7r2MoYZ+AvYDp12OF5yg4q8rGnyNh4=
 github.com/cyphar/filepath-securejoin v0.2.4 h1:Ugdm7cg7i6ZK6x3xDF1oEu1nfkyfH53EtKeQYTC3kyg=
 github.com/cyphar/filepath-securejoin v0.2.4/go.mod h1:aPGpWjXOXUn2NCNjFvBE6aRxGGx79pTxQpKOJNYHHl4=
diff --git a/services/activitylog/pkg/service/http.go b/services/activitylog/pkg/service/http.go
index d01dfe8659b..d3b5455b866 100644
--- a/services/activitylog/pkg/service/http.go
+++ b/services/activitylog/pkg/service/http.go
@@ -130,19 +130,19 @@ func (s *ActivitylogService) HandleGetItemActivities(w http.ResponseWriter, r *h
 				message = MessageResourceUpdated
 			}
 			ts = utils.TSToTime(ev.Timestamp)
-			vars, err = s.GetVars(ctx, WithResource(ev.FileRef, false), WithUser(nil, ev.ExecutingUser, ev.ImpersonatingUser))
+			vars, err = s.GetVars(ctx, WithResource(ev.FileRef, true), WithUser(nil, ev.ExecutingUser, ev.ImpersonatingUser), WithSpace(toSpace(ev.FileRef)))
 		case events.FileTouched:
 			message = MessageResourceCreated
 			ts = utils.TSToTime(ev.Timestamp)
-			vars, err = s.GetVars(ctx, WithResource(ev.Ref, false), WithUser(ev.Executant, nil, ev.ImpersonatingUser))
+			vars, err = s.GetVars(ctx, WithResource(ev.Ref, true), WithUser(ev.Executant, nil, ev.ImpersonatingUser), WithSpace(toSpace(ev.Ref)))
 		case events.ContainerCreated:
 			message = MessageResourceCreated
 			ts = utils.TSToTime(ev.Timestamp)
-			vars, err = s.GetVars(ctx, WithResource(ev.Ref, false), WithUser(ev.Executant, nil, ev.ImpersonatingUser))
+			vars, err = s.GetVars(ctx, WithResource(ev.Ref, true), WithUser(ev.Executant, nil, ev.ImpersonatingUser), WithSpace(toSpace(ev.Ref)))
 		case events.ItemTrashed:
 			message = MessageResourceTrashed
 			ts = utils.TSToTime(ev.Timestamp)
-			vars, err = s.GetVars(ctx, WithTrashedResource(ev.Ref, ev.ID), WithUser(ev.Executant, nil, ev.ImpersonatingUser))
+			vars, err = s.GetVars(ctx, WithTrashedResource(ev.Ref, ev.ID), WithUser(ev.Executant, nil, ev.ImpersonatingUser), WithSpace(toSpace(ev.Ref)))
 		case events.ItemMoved:
 			switch isRename(ev.OldReference, ev.Ref) {
 			case true:
@@ -150,7 +150,7 @@ func (s *ActivitylogService) HandleGetItemActivities(w http.ResponseWriter, r *h
 				vars, err = s.GetVars(ctx, WithResource(ev.Ref, false), WithOldResource(ev.OldReference), WithUser(ev.Executant, nil, ev.ImpersonatingUser))
 			case false:
 				message = MessageResourceMoved
-				vars, err = s.GetVars(ctx, WithResource(ev.Ref, false), WithUser(ev.Executant, nil, ev.ImpersonatingUser))
+				vars, err = s.GetVars(ctx, WithResource(ev.Ref, true), WithUser(ev.Executant, nil, ev.ImpersonatingUser), WithSpace(toSpace(ev.Ref)))
 			}
 			ts = utils.TSToTime(ev.Timestamp)
 		case events.ShareCreated:
diff --git a/services/activitylog/pkg/service/response.go b/services/activitylog/pkg/service/response.go
index e2c4477887c..72838bd29a7 100644
--- a/services/activitylog/pkg/service/response.go
+++ b/services/activitylog/pkg/service/response.go
@@ -35,12 +35,21 @@ var (
 	MessageSpaceShared     = l10n.Template("{user} added {sharee} as member of {space}")
 	MessageSpaceUnshared   = l10n.Template("{user} removed {sharee} from {space}")
 
-	StrSomeField      = l10n.Template("some field")
-	StrPermission     = l10n.Template("permission")
-	StrPassword       = l10n.Template("password")
-	StrExpirationDate = l10n.Template("expiration date")
-	StrDisplayName    = l10n.Template("display name")
-	StrDescription    = l10n.Template("description")
+	StrSomeField      = l10n.Template(_someField)
+	StrPermission     = l10n.Template(_permission)
+	StrPassword       = l10n.Template(_password)
+	StrExpirationDate = l10n.Template(_expirationDate)
+	StrDisplayName    = l10n.Template(_displayName)
+	StrDescription    = l10n.Template(_description)
+)
+
+const (
+	_someField      = "some field"
+	_permission     = "permission"
+	_password       = "password"
+	_expirationDate = "expiration date"
+	_displayName    = "display name"
+	_description    = "description"
 )
 
 // GetActivitiesResponse is the response on GET activities requests
@@ -71,10 +80,6 @@ func WithResource(ref *provider.Reference, addSpace bool) ActivityOption {
 			vars["resource"] = Resource{
 				Name: filepath.Base(ref.GetPath()),
 			}
-			n := getFolderName(ctx, gwc, ref)
-			vars["folder"] = Resource{
-				Name: n,
-			}
 			return err
 		}
 
@@ -83,22 +88,23 @@ func WithResource(ref *provider.Reference, addSpace bool) ActivityOption {
 			Name: info.GetName(),
 		}
 
-		if addSpace {
-			vars["space"] = Resource{
-				ID:   info.GetSpace().GetId().GetOpaqueId(),
-				Name: info.GetSpace().GetName(),
-			}
-		}
-
 		parent, err := utils.GetResourceByID(ctx, info.GetParentId(), gwc)
 		if err != nil {
 			return err
 		}
+
 		vars["folder"] = Resource{
 			ID:   info.GetParentId().GetOpaqueId(),
 			Name: parent.GetName(),
 		}
 
+		if addSpace {
+			vars["space"] = Resource{
+				ID:   info.GetSpace().GetId().GetOpaqueId(),
+				Name: info.GetSpace().GetName(),
+			}
+		}
+
 		return nil
 	}
 }
@@ -120,10 +126,6 @@ func WithTrashedResource(ref *provider.Reference, rid *provider.ResourceId) Acti
 		vars["resource"] = Resource{
 			Name: filepath.Base(ref.GetPath()),
 		}
-		n := getFolderName(ctx, gwc, ref)
-		vars["folder"] = Resource{
-			Name: n,
-		}
 
 		resp, err := gwc.ListRecycle(ctx, &provider.ListRecycleRequest{
 			Ref: ref,
@@ -143,12 +145,6 @@ func WithTrashedResource(ref *provider.Reference, rid *provider.ResourceId) Acti
 					ID:   storagespace.FormatResourceID(rid),
 					Name: filepath.Base(item.GetRef().GetPath()),
 				}
-				in := filepath.Base(filepath.Dir(item.GetRef().GetPath()))
-				if in != "." && in != "/" {
-					vars["folder"] = Resource{
-						Name: in,
-					}
-				}
 
 				return nil
 			}
@@ -235,6 +231,11 @@ func WithSharee(uid *user.UserId, gid *group.GroupId) ActivityOption {
 // WithSpace sets the space variable for an activity
 func WithSpace(spaceid *provider.StorageSpaceId) ActivityOption {
 	return func(ctx context.Context, gwc gateway.GatewayAPIClient, vars map[string]interface{}) error {
+		if _, ok := vars["space"]; ok {
+			// do not override space if already set
+			return nil
+		}
+
 		s, err := utils.GetSpace(ctx, spaceid.GetOpaqueId(), gwc)
 		if err != nil {
 			vars["space"] = Resource{
@@ -309,31 +310,18 @@ func (s *ActivitylogService) GetVars(ctx context.Context, opts ...ActivityOption
 	return vars, nil
 }
 
-func getFolderName(ctx context.Context, gwc gateway.GatewayAPIClient, ref *provider.Reference) string {
-	n := filepath.Base(filepath.Dir(ref.GetPath()))
-	if n == "." || n == "/" {
-		s, err := utils.GetSpace(ctx, toSpace(ref).GetOpaqueId(), gwc)
-		if err == nil {
-			n = s.GetName()
-		} else {
-			n = "root"
-		}
-	}
-	return n
-}
-
 func mapField(val string) string {
 	switch val {
 	case "TYPE_PERMISSIONS", "permission":
-		return StrPermission
+		return _permission
 	case "TYPE_PASSWORD", "password":
-		return StrPassword
+		return _password
 	case "TYPE_EXPIRATION", "expiration":
-		return StrExpirationDate
+		return _expirationDate
 	case "TYPE_DISPLAYNAME":
-		return StrDisplayName
+		return _displayName
 	case "TYPE_DESCRIPTION":
-		return StrDescription
+		return _description
 	}
-	return StrSomeField
+	return _someField
 }
diff --git a/services/collaboration/pkg/connector/contentconnector.go b/services/collaboration/pkg/connector/contentconnector.go
index 273937561d2..2a8e3816d8d 100644
--- a/services/collaboration/pkg/connector/contentconnector.go
+++ b/services/collaboration/pkg/connector/contentconnector.go
@@ -4,7 +4,6 @@ import (
 	"bytes"
 	"context"
 	"crypto/tls"
-	"fmt"
 	"io"
 	"net/http"
 	"strconv"
@@ -56,27 +55,6 @@ func NewContentConnector(gws pool.Selectable[gatewayv1beta1.GatewayAPIClient], c
 	}
 }
 
-func newHttpRequest(ctx context.Context, wopiContext middleware.WopiContext, method, url, transferToken string, body io.Reader) (*http.Request, error) {
-	httpReq, err := http.NewRequestWithContext(ctx, method, url, body)
-	if err != nil {
-		return nil, err
-	}
-	if url == "" {
-		return nil, NewConnectorError(500, "url is missing")
-	}
-	if transferToken != "" {
-		httpReq.Header.Add("X-Reva-Transfer", transferToken)
-	}
-	if wopiContext.ViewMode == appproviderv1beta1.ViewMode_VIEW_MODE_VIEW_ONLY && wopiContext.ViewOnlyToken != "" {
-		httpReq.Header.Add("X-Access-Token", wopiContext.ViewOnlyToken)
-	} else {
-		httpReq.Header.Add("X-Access-Token", wopiContext.AccessToken)
-	}
-	tracingProp := tracing.GetPropagator()
-	tracingProp.Inject(ctx, propagation.HeaderCarrier(httpReq.Header))
-	return httpReq, nil
-}
-
 // GetFile downloads the file from the storage
 // https://docs.microsoft.com/en-us/microsoft-365/cloud-storage-partner-program/rest/files/getfile
 //
@@ -106,10 +84,13 @@ func (c *ContentConnector) GetFile(ctx context.Context, w http.ResponseWriter) e
 	sResp, err := gwc.Stat(ctx, &providerv1beta1.StatRequest{
 		Ref: wopiContext.FileReference,
 	})
-	if err := requestFailed(logger, sResp.GetStatus(), false, err, "GetFile: Stat Request failed"); err != nil {
+	if err != nil {
+		logger.Error().Err(err).Msg("GetFile: Stat Request failed")
 		return err
 	}
-
+	if sResp.GetStatus().GetCode() != rpcv1beta1.Code_CODE_OK {
+		return NewConnectorError(500, sResp.GetStatus().GetCode().String()+" "+sResp.GetStatus().GetMessage())
+	}
 	// Initiate download request
 	req := &providerv1beta1.InitiateFileDownloadRequest{
 		Ref: wopiContext.FileReference,
@@ -123,10 +104,19 @@ func (c *ContentConnector) GetFile(ctx context.Context, w http.ResponseWriter) e
 		return err
 	}
 	resp, err := gwc.InitiateFileDownload(ctx, req)
-	if err := requestFailed(logger, resp.GetStatus(), false, err, "GetFile: InitiateFileDownload failed"); err != nil {
+	if err != nil {
+		logger.Error().Err(err).Msg("GetFile: InitiateFileDownload failed")
 		return err
 	}
 
+	if resp.GetStatus().GetCode() != rpcv1beta1.Code_CODE_OK {
+		logger.Error().
+			Str("StatusCode", resp.GetStatus().GetCode().String()).
+			Str("StatusMsg", resp.GetStatus().GetMessage()).
+			Msg("GetFile: InitiateFileDownload failed with wrong status")
+		return NewConnectorError(500, resp.GetStatus().GetCode().String()+" "+resp.GetStatus().GetMessage())
+	}
+
 	// Figure out the download endpoint and download token
 	downloadEndpoint := ""
 	downloadToken := ""
@@ -141,9 +131,13 @@ func (c *ContentConnector) GetFile(ctx context.Context, w http.ResponseWriter) e
 		}
 	}
 
-	logger = logger.With().
-		Str("Endpoint", downloadEndpoint).
-		Bool("HasDownloadToken", hasDownloadToken).Logger()
+	if downloadEndpoint == "" {
+		logger.Error().
+			Str("Endpoint", downloadEndpoint).
+			Bool("HasDownloadToken", hasDownloadToken).
+			Msg("GetFile: Download endpoint or token is missing")
+		return NewConnectorError(500, "GetFile: Download endpoint is missing")
+	}
 
 	httpClient := http.Client{
 		Transport: &http.Transport{
@@ -154,16 +148,34 @@ func (c *ContentConnector) GetFile(ctx context.Context, w http.ResponseWriter) e
 	}
 
 	// Prepare the request to download the file
-	// public link downloads have the token in the download endpoint
-	httpReq, err := newHttpRequest(ctx, wopiContext, http.MethodGet, downloadEndpoint, downloadToken, bytes.NewReader([]byte("")))
+	httpReq, err := http.NewRequestWithContext(ctx, http.MethodGet, downloadEndpoint, bytes.NewReader([]byte("")))
 	if err != nil {
-		logger.Error().Err(err).Msg("GetFile: Could not create the request to the endpoint")
+		logger.Error().
+			Err(err).
+			Str("Endpoint", downloadEndpoint).
+			Bool("HasDownloadToken", hasDownloadToken).
+			Msg("GetFile: Could not create the request to the endpoint")
 		return err
 	}
+	if downloadToken != "" {
+		// public link downloads have the token in the download endpoint
+		httpReq.Header.Add("X-Reva-Transfer", downloadToken)
+	}
+	if wopiContext.ViewMode == appproviderv1beta1.ViewMode_VIEW_MODE_VIEW_ONLY && wopiContext.ViewOnlyToken != "" {
+		httpReq.Header.Add("X-Access-Token", wopiContext.ViewOnlyToken)
+	} else {
+		httpReq.Header.Add("X-Access-Token", wopiContext.AccessToken)
+	}
+	tracingProp := tracing.GetPropagator()
+	tracingProp.Inject(ctx, propagation.HeaderCarrier(httpReq.Header))
 
 	httpResp, err := httpClient.Do(httpReq)
 	if err != nil {
-		logger.Error().Err(err).Msg("GetFile: Get request to the download endpoint failed")
+		logger.Error().
+			Err(err).
+			Str("Endpoint", downloadEndpoint).
+			Bool("HasDownloadToken", hasDownloadToken).
+			Msg("GetFile: Get request to the download endpoint failed")
 		return err
 	}
 
@@ -171,6 +183,7 @@ func (c *ContentConnector) GetFile(ctx context.Context, w http.ResponseWriter) e
 
 	if httpResp.StatusCode != http.StatusOK {
 		logger.Error().
+			Err(err).
 			Int("HttpCode", httpResp.StatusCode).
 			Msg("GetFile: downloading the file failed")
 		return NewConnectorError(500, "GetFile: Downloading the file failed")
@@ -232,11 +245,19 @@ func (c *ContentConnector) PutFile(ctx context.Context, stream io.Reader, stream
 	statRes, err := gwc.Stat(ctx, &providerv1beta1.StatRequest{
 		Ref: wopiContext.FileReference,
 	})
-	// we can ignore a not found error here, as we're going to create the file
-	if err := requestFailed(logger, statRes.GetStatus(), true, err, "PutFile: stat failed"); err != nil {
+	if err != nil {
+		logger.Error().Err(err).Msg("PutFile: stat failed")
 		return nil, err
 	}
 
+	if statRes.GetStatus().GetCode() != rpcv1beta1.Code_CODE_OK && statRes.GetStatus().GetCode() != rpcv1beta1.Code_CODE_NOT_FOUND {
+		logger.Error().
+			Str("StatusCode", statRes.GetStatus().GetCode().String()).
+			Str("StatusMsg", statRes.GetStatus().GetMessage()).
+			Msg("PutFile: stat failed with unexpected status")
+		return NewResponse(500), nil
+	}
+
 	mtime := statRes.GetInfo().GetMtime()
 	// If there is a lock and it mismatches, return 409
 	if statRes.GetInfo().GetLock() != nil && statRes.GetInfo().GetLock().GetLockId() != lockID {
@@ -284,10 +305,19 @@ func (c *ContentConnector) PutFile(ctx context.Context, stream io.Reader, stream
 	}
 	// Initiate the upload request
 	resp, err := gwc.InitiateFileUpload(ctx, req)
-	if err := requestFailed(logger, resp.GetStatus(), false, err, "PutFile: InitiateFileUpload failed"); err != nil {
+	if err != nil {
+		logger.Error().Err(err).Msg("UploadHelper: InitiateFileUpload failed")
 		return nil, err
 	}
 
+	if resp.GetStatus().GetCode() != rpcv1beta1.Code_CODE_OK {
+		logger.Error().
+			Str("StatusCode", resp.GetStatus().GetCode().String()).
+			Str("StatusMsg", resp.GetStatus().GetMessage()).
+			Msg("UploadHelper: InitiateFileUpload failed with wrong status")
+		return NewResponse(500), nil
+	}
+
 	// if the content length is greater than 0, we need to upload the content to the
 	// target endpoint, otherwise we're done
 	if streamLength > 0 {
@@ -305,9 +335,13 @@ func (c *ContentConnector) PutFile(ctx context.Context, stream io.Reader, stream
 			}
 		}
 
-		logger = logger.With().
-			Str("Endpoint", uploadEndpoint).
-			Bool("HasUploadToken", hasUploadToken).Logger()
+		if uploadEndpoint == "" {
+			logger.Error().
+				Str("Endpoint", uploadEndpoint).
+				Bool("HasUploadToken", hasUploadToken).
+				Msg("UploadHelper: Upload endpoint or token is missing")
+			return NewResponse(500), nil
+		}
 
 		httpClient := http.Client{
 			Transport: &http.Transport{
@@ -319,10 +353,13 @@ func (c *ContentConnector) PutFile(ctx context.Context, stream io.Reader, stream
 		}
 
 		// prepare the request to upload the contents to the upload endpoint
-		// public link uploads have the token in the upload endpoint
-		httpReq, err := newHttpRequest(ctx, wopiContext, http.MethodPut, uploadEndpoint, uploadToken, stream)
+		httpReq, err := http.NewRequestWithContext(ctx, http.MethodPut, uploadEndpoint, stream)
 		if err != nil {
-			logger.Error().Err(err).Msg("UploadHelper: Could not create the request to the endpoint")
+			logger.Error().
+				Err(err).
+				Str("Endpoint", uploadEndpoint).
+				Bool("HasUploadToken", hasUploadToken).
+				Msg("UploadHelper: Could not create the request to the endpoint")
 			return nil, err
 		}
 		// "stream" is an *http.body and doesn't fill the httpReq.ContentLength automatically
@@ -330,24 +367,38 @@ func (c *ContentConnector) PutFile(ctx context.Context, stream io.Reader, stream
 		// to prevent issues
 		httpReq.ContentLength = streamLength
 
+		if uploadToken != "" {
+			// public link uploads have the token in the upload endpoint
+			httpReq.Header.Add("X-Reva-Transfer", uploadToken)
+		}
+		httpReq.Header.Add("X-Access-Token", wopiContext.AccessToken)
+
 		httpReq.Header.Add("X-Lock-Id", lockID)
 		// TODO: better mechanism for the upload while locked, relies on patch in REVA
 		//if lockID, ok := ctxpkg.ContextGetLockID(ctx); ok {
 		//	httpReq.Header.Add("X-Lock-Id", lockID)
 		//}
+		tracingProp := tracing.GetPropagator()
+		tracingProp.Inject(ctx, propagation.HeaderCarrier(httpReq.Header))
 
 		httpResp, err := httpClient.Do(httpReq)
 		if err != nil {
-			logger.Error().Err(err).Msg("UploadHelper: Put request to the upload endpoint failed")
+			logger.Error().
+				Err(err).
+				Str("Endpoint", uploadEndpoint).
+				Bool("HasUploadToken", hasUploadToken).
+				Msg("UploadHelper: Put request to the upload endpoint failed")
 			return nil, err
 		}
 		defer httpResp.Body.Close()
 
 		if httpResp.StatusCode != http.StatusOK {
 			logger.Error().
+				Str("Endpoint", uploadEndpoint).
+				Bool("HasUploadToken", hasUploadToken).
 				Int("HttpCode", httpResp.StatusCode).
 				Msg("UploadHelper: Put request to the upload endpoint failed with unexpected status")
-			return nil, NewConnectorError(500, fmt.Sprintf("unexpected status code %d from the upload endpoint", httpResp.StatusCode))
+			return NewResponse(500), nil
 		}
 		gwc, err = c.gws.Next()
 		if err != nil {
@@ -358,33 +409,20 @@ func (c *ContentConnector) PutFile(ctx context.Context, stream io.Reader, stream
 		statResAfter, err := gwc.Stat(ctx, &providerv1beta1.StatRequest{
 			Ref: wopiContext.FileReference,
 		})
-		if err := requestFailed(logger, statResAfter.GetStatus(), false, err, "PutFile: stat after upload failed"); err != nil {
+		if err != nil {
+			logger.Error().Err(err).Msg("PutFile: stat after upload failed")
 			return nil, err
 		}
+		if statResAfter.GetStatus().GetCode() != rpcv1beta1.Code_CODE_OK {
+			logger.Error().
+				Str("StatusCode", statRes.GetStatus().GetCode().String()).
+				Str("StatusMsg", statRes.GetStatus().GetMessage()).
+				Msg("PutFile: stat after upload failed with unexpected status")
+			return NewResponse(500), nil
+		}
 		mtime = statResAfter.GetInfo().GetMtime()
 	}
 
 	logger.Debug().Msg("PutFile: success")
 	return NewResponseWithVersion(mtime), nil
 }
-
-func requestFailed(logger zerolog.Logger, s *rpcv1beta1.Status, allowNotFound bool, err error, msg string) error {
-	switch {
-	case err != nil: // a connection error
-		logger.Error().Err(err).Msg(msg)
-		return err
-	case s == nil: // we need a status
-		logger.Error().Msg(msg + ": nil status")
-		return NewConnectorError(500, msg+": nil status")
-	case s.GetCode() == rpcv1beta1.Code_CODE_OK: // ok is fine
-		return nil
-	case allowNotFound && s.GetCode() == rpcv1beta1.Code_CODE_NOT_FOUND: // not found might be ok
-		return nil
-	default: // any other status is an error
-		logger.Error().
-			Str("StatusCode", s.GetCode().String()).
-			Str("StatusMsg", s.GetMessage()).
-			Msg(msg)
-		return NewConnectorError(500, s.GetCode().String()+" "+s.GetMessage())
-	}
-}
diff --git a/services/collaboration/pkg/connector/fileconnector.go b/services/collaboration/pkg/connector/fileconnector.go
index a52b52fa76f..12ba12bc7bd 100644
--- a/services/collaboration/pkg/connector/fileconnector.go
+++ b/services/collaboration/pkg/connector/fileconnector.go
@@ -689,7 +689,7 @@ func (f *FileConnector) PutRelativeFileSuggested(ctx context.Context, ccs Conten
 		// try to put the file. It mustn't return a 400 or 409
 		putResponse, err := ccs.PutFile(newCtx, stream, streamLength, "")
 		if err != nil {
-			newLogger.Error().Err(err).Msg("PutRelativeFileSuggested: put file failed") // fails here
+			newLogger.Error().Err(err).Msg("PutRelativeFileSuggested: put file failed")
 			return nil, err
 		}
 
@@ -799,7 +799,7 @@ func (f *FileConnector) PutRelativeFileRelative(ctx context.Context, ccs Content
 	// try to put the file
 	putResponse, err := ccs.PutFile(newCtx, stream, streamLength, "")
 	if err != nil {
-		newLogger.Error().Err(err).Msg("PutRelativeFileRelative: put file failed") // or here
+		newLogger.Error().Err(err).Msg("PutRelativeFileRelative: put file failed")
 		return nil, err
 	}
 
@@ -849,7 +849,7 @@ func (f *FileConnector) PutRelativeFileRelative(ctx context.Context, ccs Content
 		newLogger.Error().
 			Str("LockID", lockID).
 			Msg("PutRelativeFileRelative: put file failed with unhandled status")
-		return nil, NewConnectorError(putResponse.Status, "put file failed with unhandled status")
+		return NewResponse(500), nil
 	}
 
 	if err := f.adjustWopiReference(ctx, &wopiContext, newLogger); err != nil {
diff --git a/services/collaboration/pkg/connector/httpadapter.go b/services/collaboration/pkg/connector/httpadapter.go
index 0054df39fac..b2d20e026ec 100644
--- a/services/collaboration/pkg/connector/httpadapter.go
+++ b/services/collaboration/pkg/connector/httpadapter.go
@@ -190,12 +190,8 @@ func (h *HttpAdapter) PutFile(w http.ResponseWriter, r *http.Request) {
 	response, err := contentCon.PutFile(r.Context(), r.Body, r.ContentLength, lockID)
 
 	if err != nil {
-		var connErr *ConnectorError
-		if errors.As(err, &connErr) && connErr.HttpCodeOut != 0 {
-			response = NewResponse(connErr.HttpCodeOut)
-		} else {
-			response = NewResponse(http.StatusInternalServerError)
-		}
+		http.Error(w, http.StatusText(http.StatusInternalServerError), http.StatusInternalServerError)
+		return
 	}
 
 	h.writeConnectorResponse(w, r, response)
@@ -244,12 +240,8 @@ func (h *HttpAdapter) PutRelativeFile(w http.ResponseWriter, r *http.Request) {
 	}
 
 	if putErr != nil {
-		var connErr *ConnectorError
-		if errors.As(putErr, &connErr) && connErr.HttpCodeOut != 0 {
-			response = NewResponse(connErr.HttpCodeOut)
-		} else {
-			response = NewResponse(http.StatusInternalServerError)
-		}
+		http.Error(w, http.StatusText(http.StatusInternalServerError), http.StatusInternalServerError)
+		return
 	}
 
 	h.writeConnectorResponse(w, r, response)
diff --git a/services/graph/pkg/service/v0/drives.go b/services/graph/pkg/service/v0/drives.go
index 39370c96d02..c494612484c 100644
--- a/services/graph/pkg/service/v0/drives.go
+++ b/services/graph/pkg/service/v0/drives.go
@@ -850,13 +850,11 @@ func (g Graph) getDriveQuota(ctx context.Context, space *storageprovider.Storage
 	logger := g.logger.SubloggerWithRequestID(ctx)
 
 	noQuotaInOpaque := true
-	remainingUnknown := true
 	var remaining, used, total int64
 	if space.Opaque != nil {
 		m := space.Opaque.Map
 		if e, ok := m["quota.remaining"]; ok {
 			noQuotaInOpaque = false
-			remainingUnknown = false
 			remaining, _ = strconv.ParseInt(string(e.Value), 10, 64)
 		}
 		if e, ok := m["quota.used"]; ok {
@@ -901,7 +899,6 @@ func (g Graph) getDriveQuota(ctx context.Context, space *storageprovider.Storage
 		if res.Opaque != nil {
 			m := res.Opaque.Map
 			if e, ok := m["remaining"]; ok {
-				remainingUnknown = false
 				remaining, _ = strconv.ParseInt(string(e.Value), 10, 64)
 			}
 		}
@@ -911,21 +908,15 @@ func (g Graph) getDriveQuota(ctx context.Context, space *storageprovider.Storage
 	}
 
 	qta := libregraph.Quota{
-		Used:  &used,
-		Total: &total,
-	}
-
-	if !remainingUnknown {
-		qta.Remaining = &remaining
+		Remaining: &remaining,
+		Used:      &used,
+		Total:     &total,
 	}
 
 	var t int64
-	switch {
-	case total != 0:
+	if total != 0 {
 		t = total
-	case remainingUnknown:
-		t = math.MaxInt64
-	default:
+	} else {
 		// Quota was not set
 		// Use remaining bytes to calculate state
 		t = remaining
diff --git a/services/notifications/README.md b/services/notifications/README.md
index bca9d12f277..4e70e81ad64 100644
--- a/services/notifications/README.md
+++ b/services/notifications/README.md
@@ -51,15 +51,15 @@ Consider that embedding images via a CID resource may not be fully supported in
 The `notifications` service has embedded translations sourced via transifex to provide a basic set of translated languages. These embedded translations are available for all deployment scenarios.
 
 In addition, the service supports custom translations, though it is currently not possible to just add custom translations to embedded ones. If custom translations are configured, the embedded ones are not used. To configure custom translations,
-the `NOTIFICATIONS_TRANSLATION_PATH` environment variable needs to point to a base folder that will contain the translation files. This path must be available from all instances of the notifications service, a shared storage is recommended. Translation files must be of type  [.po](https://www.gnu.org/software/gettext/manual/html_node/PO-Files.html#PO-Files) or [.mo](https://www.gnu.org/software/gettext/manual/html_node/Binaries.html). For each language, the filename needs to be `translations.po` (or `translations.mo`) and stored in a folder structure defining the language code. In general the path/name pattern for a translation file needs to be:
+the `NOTIFICATIONS_TRANSLATION_PATH` environment variable needs to point to a base folder that will contain the translation files. This path must be available from all instances of the notifications service, a shared storage is recommended. Translation files must be of type  [.po](https://www.gnu.org/software/gettext/manual/html_node/PO-Files.html#PO-Files) or [.mo](https://www.gnu.org/software/gettext/manual/html_node/Binaries.html). For each language, the filename needs to be `notifications.po` (or `notifications.mo`) and stored in a folder structure defining the language code. In general the path/name pattern for a translation file needs to be:
 
 ```text
-{NOTIFICATIONS_TRANSLATION_PATH}/{language-code}/LC_MESSAGES/translations.po
+{NOTIFICATIONS_TRANSLATION_PATH}/{language-code}/LC_MESSAGES/notifications.po
 ```
 
 The language code pattern is composed of `language[_territory]` where  `language` is the base language and `_territory` is optional and defines a country.
 
-For example, for the language `de`, one needs to place the corresponding translation files to `{NOTIFICATIONS_TRANSLATION_PATH}/de/LC_MESSAGES/translations.po`.
+For example, for the language `de`, one needs to place the corresponding translation files to `{NOTIFICATIONS_TRANSLATION_PATH}/de/LC_MESSAGES/notifications.po`.
 
 <!-- also see the userlog readme -->
 
diff --git a/services/notifications/pkg/command/server.go b/services/notifications/pkg/command/server.go
index e6e2c0b66a6..25cfd126315 100644
--- a/services/notifications/pkg/command/server.go
+++ b/services/notifications/pkg/command/server.go
@@ -112,7 +112,7 @@ func Server(cfg *config.Config) *cli.Command {
 				logger.Fatal().Err(err).Str("addr", cfg.Notifications.RevaGateway).Msg("could not get reva gateway selector")
 			}
 			valueService := settingssvc.NewValueService("com.owncloud.api.settings", grpcClient)
-			svc := service.NewEventsNotifier(evts, channel, logger, gatewaySelector, valueService, cfg.ServiceAccount.ServiceAccountID, cfg.ServiceAccount.ServiceAccountSecret, cfg.Notifications.EmailTemplatePath, cfg.Notifications.DefaultLanguage, cfg.WebUIURL)
+			svc := service.NewEventsNotifier(evts, channel, logger, gatewaySelector, valueService, cfg.ServiceAccount.ServiceAccountID, cfg.ServiceAccount.ServiceAccountSecret, cfg.Notifications.EmailTemplatePath, cfg.Notifications.DefaultLanguage, cfg.WebUIURL, cfg.Notifications.TranslationPath)
 
 			gr.Add(svc.Run, func(error) {
 				cancel()
diff --git a/services/notifications/pkg/service/service.go b/services/notifications/pkg/service/service.go
index 1f39e663da6..6eadebe54de 100644
--- a/services/notifications/pkg/service/service.go
+++ b/services/notifications/pkg/service/service.go
@@ -50,7 +50,7 @@ func NewEventsNotifier(
 	logger log.Logger,
 	gatewaySelector pool.Selectable[gateway.GatewayAPIClient],
 	valueService settingssvc.ValueService,
-	serviceAccountID, serviceAccountSecret, emailTemplatePath, defaultLanguage, ocisURL string) Service {
+	serviceAccountID, serviceAccountSecret, emailTemplatePath, defaultLanguage, ocisURL, translationPath string) Service {
 
 	return eventsNotifier{
 		logger:               logger,
@@ -64,6 +64,7 @@ func NewEventsNotifier(
 		emailTemplatePath:    emailTemplatePath,
 		defaultLanguage:      defaultLanguage,
 		ocisURL:              ocisURL,
+		translationPath:      translationPath,
 	}
 }
 
diff --git a/services/web/Makefile b/services/web/Makefile
index 0bace95659e..b26d8571de1 100644
--- a/services/web/Makefile
+++ b/services/web/Makefile
@@ -1,6 +1,6 @@
 SHELL := bash
 NAME := web
-WEB_ASSETS_VERSION = v10.3.0
+WEB_ASSETS_VERSION = v10.2.0
 
 include ../../.make/recursion.mk
 
diff --git a/vendor/github.com/cs3org/reva/v2/pkg/storage/fs/ocis/blobstore/blobstore.go b/vendor/github.com/cs3org/reva/v2/pkg/storage/fs/ocis/blobstore/blobstore.go
index 83604b015a7..b4293fa645a 100644
--- a/vendor/github.com/cs3org/reva/v2/pkg/storage/fs/ocis/blobstore/blobstore.go
+++ b/vendor/github.com/cs3org/reva/v2/pkg/storage/fs/ocis/blobstore/blobstore.go
@@ -116,11 +116,6 @@ func (bs *Blobstore) Delete(node *node.Node) error {
 	return nil
 }
 
-// GetAvailableSize returns the available size in the blobstore in bytes
-func (bs *Blobstore) GetAvailableSize(n *node.Node) (uint64, error) {
-	return node.GetAvailableSize(n.InternalPath())
-}
-
 // List lists all blobs in the Blobstore
 func (bs *Blobstore) List() ([]*node.Node, error) {
 	dirs, err := filepath.Glob(filepath.Join(bs.root, "spaces", "*", "*", "blobs", "*", "*", "*", "*", "*"))
diff --git a/vendor/github.com/cs3org/reva/v2/pkg/storage/fs/posix/blobstore/blobstore.go b/vendor/github.com/cs3org/reva/v2/pkg/storage/fs/posix/blobstore/blobstore.go
index 5e152ec1cae..cf01a9e138e 100644
--- a/vendor/github.com/cs3org/reva/v2/pkg/storage/fs/posix/blobstore/blobstore.go
+++ b/vendor/github.com/cs3org/reva/v2/pkg/storage/fs/posix/blobstore/blobstore.go
@@ -88,8 +88,3 @@ func (bs *Blobstore) Download(node *node.Node) (io.ReadCloser, error) {
 func (bs *Blobstore) Delete(node *node.Node) error {
 	return nil
 }
-
-// GetAvailableSize returns the available size in the blobstore in bytes
-func (bs *Blobstore) GetAvailableSize(n *node.Node) (uint64, error) {
-	return node.GetAvailableSize(n.InternalPath())
-}
diff --git a/vendor/github.com/cs3org/reva/v2/pkg/storage/fs/posix/posix.go b/vendor/github.com/cs3org/reva/v2/pkg/storage/fs/posix/posix.go
index ef0e264ab7c..537689d4595 100644
--- a/vendor/github.com/cs3org/reva/v2/pkg/storage/fs/posix/posix.go
+++ b/vendor/github.com/cs3org/reva/v2/pkg/storage/fs/posix/posix.go
@@ -126,7 +126,6 @@ func New(m map[string]interface{}, stream events.Stream) (storage.FS, error) {
 	aspects := aspects.Aspects{
 		Lookup:            lu,
 		Tree:              tp,
-		Blobstore:         bs,
 		Permissions:       p,
 		EventStream:       stream,
 		UserMapper:        um,
diff --git a/vendor/github.com/cs3org/reva/v2/pkg/storage/fs/s3ng/blobstore/blobstore.go b/vendor/github.com/cs3org/reva/v2/pkg/storage/fs/s3ng/blobstore/blobstore.go
index 4751168a5a5..aaeecf65f8c 100644
--- a/vendor/github.com/cs3org/reva/v2/pkg/storage/fs/s3ng/blobstore/blobstore.go
+++ b/vendor/github.com/cs3org/reva/v2/pkg/storage/fs/s3ng/blobstore/blobstore.go
@@ -29,7 +29,6 @@ import (
 
 	"github.com/cs3org/reva/v2/pkg/storage/utils/decomposedfs/lookup"
 	"github.com/cs3org/reva/v2/pkg/storage/utils/decomposedfs/node"
-	"github.com/cs3org/reva/v2/pkg/storage/utils/decomposedfs/tree"
 	"github.com/minio/minio-go/v7"
 	"github.com/minio/minio-go/v7/pkg/credentials"
 	"github.com/pkg/errors"
@@ -129,12 +128,6 @@ func (bs *Blobstore) Delete(node *node.Node) error {
 	return nil
 }
 
-// GetAvailableSize returns the available size in the blobstore in bytes
-func (bs *Blobstore) GetAvailableSize(n *node.Node) (uint64, error) {
-	// S3 doen't have a concept of available size
-	return 0, tree.ErrSizeUnlimited
-}
-
 // List lists all blobs in the Blobstore
 func (bs *Blobstore) List() ([]*node.Node, error) {
 	ch := bs.client.ListObjects(context.Background(), bs.bucket, minio.ListObjectsOptions{Recursive: true})
diff --git a/vendor/github.com/cs3org/reva/v2/pkg/storage/utils/decomposedfs/aspects/aspects.go b/vendor/github.com/cs3org/reva/v2/pkg/storage/utils/decomposedfs/aspects/aspects.go
index 18eb88eed4e..65a9e0d983f 100644
--- a/vendor/github.com/cs3org/reva/v2/pkg/storage/utils/decomposedfs/aspects/aspects.go
+++ b/vendor/github.com/cs3org/reva/v2/pkg/storage/utils/decomposedfs/aspects/aspects.go
@@ -23,7 +23,6 @@ import (
 	"github.com/cs3org/reva/v2/pkg/storage/utils/decomposedfs/node"
 	"github.com/cs3org/reva/v2/pkg/storage/utils/decomposedfs/permissions"
 	"github.com/cs3org/reva/v2/pkg/storage/utils/decomposedfs/trashbin"
-	"github.com/cs3org/reva/v2/pkg/storage/utils/decomposedfs/tree"
 	"github.com/cs3org/reva/v2/pkg/storage/utils/decomposedfs/usermapper"
 )
 
@@ -31,7 +30,6 @@ import (
 type Aspects struct {
 	Lookup            node.PathLookup
 	Tree              node.Tree
-	Blobstore         tree.Blobstore
 	Trashbin          trashbin.Trashbin
 	Permissions       permissions.Permissions
 	EventStream       events.Stream
diff --git a/vendor/github.com/cs3org/reva/v2/pkg/storage/utils/decomposedfs/decomposedfs.go b/vendor/github.com/cs3org/reva/v2/pkg/storage/utils/decomposedfs/decomposedfs.go
index 70b0e1f2844..fdd9557c489 100644
--- a/vendor/github.com/cs3org/reva/v2/pkg/storage/utils/decomposedfs/decomposedfs.go
+++ b/vendor/github.com/cs3org/reva/v2/pkg/storage/utils/decomposedfs/decomposedfs.go
@@ -22,7 +22,6 @@ import (
 	"context"
 	"fmt"
 	"io"
-	"math"
 	"net/url"
 	"path"
 	"path/filepath"
@@ -113,7 +112,6 @@ type SessionStore interface {
 type Decomposedfs struct {
 	lu           node.PathLookup
 	tp           node.Tree
-	bs           tree.Blobstore
 	trashbin     trashbin.Trashbin
 	o            *options.Options
 	p            permissions.Permissions
@@ -164,7 +162,6 @@ func NewDefault(m map[string]interface{}, bs tree.Blobstore, es events.Stream) (
 	aspects := aspects.Aspects{
 		Lookup:            lu,
 		Tree:              tp,
-		Blobstore:         bs,
 		Permissions:       permissions.NewPermissions(node.NewPermissions(lu), permissionsSelector),
 		EventStream:       es,
 		DisableVersioning: o.DisableVersioning,
@@ -226,7 +223,6 @@ func New(o *options.Options, aspects aspects.Aspects) (storage.FS, error) {
 
 	fs := &Decomposedfs{
 		tp:              aspects.Tree,
-		bs:              aspects.Blobstore,
 		lu:              aspects.Lookup,
 		trashbin:        aspects.Trashbin,
 		o:               o,
@@ -602,11 +598,9 @@ func (fs *Decomposedfs) GetQuota(ctx context.Context, ref *provider.Reference) (
 		quotaStr = string(ri.Opaque.Map["quota"].Value)
 	}
 
-	remaining, err = fs.bs.GetAvailableSize(n)
-	switch {
-	case errors.Is(err, tree.ErrSizeUnlimited):
-		remaining = math.MaxUint64
-	case err != nil:
+	// FIXME this reads remaining disk size from the local disk, not the blobstore
+	remaining, err = node.GetAvailableSize(n.InternalPath())
+	if err != nil {
 		return 0, 0, 0, err
 	}
 
diff --git a/vendor/github.com/cs3org/reva/v2/pkg/storage/utils/decomposedfs/spaces.go b/vendor/github.com/cs3org/reva/v2/pkg/storage/utils/decomposedfs/spaces.go
index ea51869e2ca..31d556a69cc 100644
--- a/vendor/github.com/cs3org/reva/v2/pkg/storage/utils/decomposedfs/spaces.go
+++ b/vendor/github.com/cs3org/reva/v2/pkg/storage/utils/decomposedfs/spaces.go
@@ -45,7 +45,6 @@ import (
 	"github.com/cs3org/reva/v2/pkg/storage/utils/decomposedfs/metadata/prefixes"
 	"github.com/cs3org/reva/v2/pkg/storage/utils/decomposedfs/node"
 	"github.com/cs3org/reva/v2/pkg/storage/utils/decomposedfs/permissions"
-	"github.com/cs3org/reva/v2/pkg/storage/utils/decomposedfs/tree"
 	"github.com/cs3org/reva/v2/pkg/storage/utils/templates"
 	"github.com/cs3org/reva/v2/pkg/storagespace"
 	"github.com/cs3org/reva/v2/pkg/utils"
@@ -1029,11 +1028,9 @@ func (fs *Decomposedfs) StorageSpaceFromNode(ctx context.Context, n *node.Node,
 		quotaStr = quotaInOpaque
 	}
 
-	remaining, err := fs.bs.GetAvailableSize(n)
-	switch {
-	case errors.Is(err, tree.ErrSizeUnlimited):
-		remaining = math.MaxUint64
-	case err != nil:
+	// FIXME this reads remaining disk size from the local disk, not the blobstore
+	remaining, err := node.GetAvailableSize(n.InternalPath())
+	if err != nil {
 		return nil, err
 	}
 	total, used, remaining, err := fs.calculateTotalUsedRemaining(quotaStr, space.GetRootInfo().GetSize(), remaining)
@@ -1042,9 +1039,7 @@ func (fs *Decomposedfs) StorageSpaceFromNode(ctx context.Context, n *node.Node,
 	}
 	space.Opaque = utils.AppendPlainToOpaque(space.Opaque, "quota.total", strconv.FormatUint(total, 10))
 	space.Opaque = utils.AppendPlainToOpaque(space.Opaque, "quota.used", strconv.FormatUint(used, 10))
-	if remaining != math.MaxUint64 {
-		space.Opaque = utils.AppendPlainToOpaque(space.Opaque, "quota.remaining", strconv.FormatUint(remaining, 10))
-	}
+	space.Opaque = utils.AppendPlainToOpaque(space.Opaque, "quota.remaining", strconv.FormatUint(remaining, 10))
 
 	return space, nil
 }
diff --git a/vendor/github.com/cs3org/reva/v2/pkg/storage/utils/decomposedfs/tree/tree.go b/vendor/github.com/cs3org/reva/v2/pkg/storage/utils/decomposedfs/tree/tree.go
index 58dc0c4e1ff..f10735b6643 100644
--- a/vendor/github.com/cs3org/reva/v2/pkg/storage/utils/decomposedfs/tree/tree.go
+++ b/vendor/github.com/cs3org/reva/v2/pkg/storage/utils/decomposedfs/tree/tree.go
@@ -48,10 +48,7 @@ import (
 	"golang.org/x/sync/errgroup"
 )
 
-var (
-	tracer           trace.Tracer
-	ErrSizeUnlimited = errors.New("blobstore size unlimited")
-)
+var tracer trace.Tracer
 
 func init() {
 	tracer = otel.Tracer("github.com/cs3org/reva/pkg/storage/utils/decomposedfs/tree")
@@ -62,7 +59,6 @@ type Blobstore interface {
 	Upload(node *node.Node, source string) error
 	Download(node *node.Node) (io.ReadCloser, error)
 	Delete(node *node.Node) error
-	GetAvailableSize(node *node.Node) (uint64, error)
 }
 
 // Tree manages a hierarchical tree
diff --git a/vendor/modules.txt b/vendor/modules.txt
index 1db70c8132e..4b52ffcbb8b 100644
--- a/vendor/modules.txt
+++ b/vendor/modules.txt
@@ -367,7 +367,7 @@ github.com/cs3org/go-cs3apis/cs3/storage/provider/v1beta1
 github.com/cs3org/go-cs3apis/cs3/storage/registry/v1beta1
 github.com/cs3org/go-cs3apis/cs3/tx/v1beta1
 github.com/cs3org/go-cs3apis/cs3/types/v1beta1
-# github.com/cs3org/reva/v2 v2.24.2-0.20240926082340-b5c3c6781528
+# github.com/cs3org/reva/v2 v2.24.2-0.20240924091626-9635c6d8234e
 ## explicit; go 1.21
 github.com/cs3org/reva/v2/cmd/revad/internal/grace
 github.com/cs3org/reva/v2/cmd/revad/runtime


Test patch:
diff --git a/services/collaboration/pkg/connector/contentconnector_test.go b/services/collaboration/pkg/connector/contentconnector_test.go
index dfe99f09a17..9bdb374e352 100644
--- a/services/collaboration/pkg/connector/contentconnector_test.go
+++ b/services/collaboration/pkg/connector/contentconnector_test.go
@@ -126,8 +126,9 @@ var _ = Describe("ContentConnector", func() {
 			}, nil)
 
 			err := cc.GetFile(ctx, sb)
-			targetErr := connector.NewConnectorError(500, "CODE_INTERNAL Something failed")
-			Expect(err).To(Equal(targetErr))
+			Expect(err).To(HaveOccurred())
+			conErr := err.(*connector.ConnectorError)
+			Expect(conErr.HttpCodeOut).To(Equal(500))
 		})
 
 		It("Missing download endpoint", func() {
@@ -263,9 +264,9 @@ var _ = Describe("ContentConnector", func() {
 			}, nil)
 
 			response, err := cc.PutFile(ctx, reader, reader.Size(), "notARandomLockId")
-			targetErr := connector.NewConnectorError(500, "CODE_INTERNAL Something failed")
-			Expect(err).To(Equal(targetErr))
-			Expect(response).To(BeNil())
+			Expect(err).ToNot(HaveOccurred())
+			Expect(response.Status).To(Equal(500))
+			Expect(response.Headers).To(BeNil())
 		})
 
 		It("Mismatched lockId", func() {
@@ -353,9 +354,9 @@ var _ = Describe("ContentConnector", func() {
 			}, nil)
 
 			response, err := cc.PutFile(ctx, reader, reader.Size(), "goodAndValidLock")
-			targetErr := connector.NewConnectorError(500, "CODE_INTERNAL Something failed")
-			Expect(err).To(Equal(targetErr))
-			Expect(response).To(BeNil())
+			Expect(err).ToNot(HaveOccurred())
+			Expect(response.Status).To(Equal(500))
+			Expect(response.Headers).To(BeNil())
 		})
 
 		It("Empty upload successful", func() {
@@ -405,9 +406,9 @@ var _ = Describe("ContentConnector", func() {
 			}, nil)
 
 			response, err := cc.PutFile(ctx, reader, reader.Size(), "goodAndValidLock")
-			targetErr := connector.NewConnectorError(500, "url is missing")
-			Expect(err).To(Equal(targetErr))
-			Expect(response).To(BeNil())
+			Expect(err).ToNot(HaveOccurred())
+			Expect(response.Status).To(Equal(500))
+			Expect(response.Headers).To(BeNil())
 		})
 
 		It("upload request failed", func() {
@@ -437,9 +438,9 @@ var _ = Describe("ContentConnector", func() {
 
 			response, err := cc.PutFile(ctx, reader, reader.Size(), "goodAndValidLock")
 			Expect(srvReqHeader.Get("X-Access-Token")).To(Equal(wopiCtx.AccessToken))
-			targetErr := connector.NewConnectorError(500, "unexpected status code 404 from the upload endpoint")
-			Expect(err).To(Equal(targetErr))
-			Expect(response).To(BeNil())
+			Expect(err).ToNot(HaveOccurred())
+			Expect(response.Status).To(Equal(500))
+			Expect(response.Headers).To(BeNil())
 		})
 
 		It("upload request success", func() {
diff --git a/services/collaboration/pkg/connector/fileconnector_test.go b/services/collaboration/pkg/connector/fileconnector_test.go
index 94b8e4e3c2b..1401b91f62f 100644
--- a/services/collaboration/pkg/connector/fileconnector_test.go
+++ b/services/collaboration/pkg/connector/fileconnector_test.go
@@ -906,7 +906,10 @@ var _ = Describe("FileConnector", func() {
 			stream := strings.NewReader("This is the content of a file")
 
 			stat1ParamMatcher := mock.MatchedBy(func(statReq *providerv1beta1.StatRequest) bool {
-				return statReq.Ref.ResourceId == wopiCtx.FileReference.ResourceId
+				if statReq.Ref.ResourceId == wopiCtx.FileReference.ResourceId {
+					return true
+				}
+				return false
 			})
 			gatewayClient.On("Stat", mock.Anything, stat1ParamMatcher).Times(1).Return(&providerv1beta1.StatResponse{
 				Status: status.NewOK(ctx),
@@ -959,7 +962,10 @@ var _ = Describe("FileConnector", func() {
 			stream := strings.NewReader("This is the content of a file")
 
 			stat1ParamMatcher := mock.MatchedBy(func(statReq *providerv1beta1.StatRequest) bool {
-				return statReq.Ref.ResourceId == wopiCtx.FileReference.ResourceId
+				if statReq.Ref.ResourceId == wopiCtx.FileReference.ResourceId {
+					return true
+				}
+				return false
 			})
 			gatewayClient.On("Stat", mock.Anything, stat1ParamMatcher).Times(1).Return(&providerv1beta1.StatResponse{
 				Status: status.NewOK(ctx),
@@ -1015,7 +1021,10 @@ var _ = Describe("FileConnector", func() {
 			stream := strings.NewReader("This is the content of a file")
 
 			stat1ParamMatcher := mock.MatchedBy(func(statReq *providerv1beta1.StatRequest) bool {
-				return statReq.Ref.ResourceId == wopiCtx.FileReference.ResourceId
+				if statReq.Ref.ResourceId == wopiCtx.FileReference.ResourceId {
+					return true
+				}
+				return false
 			})
 			gatewayClient.On("Stat", mock.Anything, stat1ParamMatcher).Times(1).Return(&providerv1beta1.StatResponse{
 				Status: status.NewOK(ctx),
@@ -1077,7 +1086,10 @@ var _ = Describe("FileConnector", func() {
 			stream := strings.NewReader("This is the content of a file")
 
 			stat1ParamMatcher := mock.MatchedBy(func(statReq *providerv1beta1.StatRequest) bool {
-				return statReq.Ref.ResourceId == wopiCtx.FileReference.ResourceId
+				if statReq.Ref.ResourceId == wopiCtx.FileReference.ResourceId {
+					return true
+				}
+				return false
 			})
 			gatewayClient.On("Stat", mock.Anything, stat1ParamMatcher).Times(1).Return(&providerv1beta1.StatResponse{
 				Status: status.NewOK(ctx),
@@ -1147,7 +1159,10 @@ var _ = Describe("FileConnector", func() {
 			stream := strings.NewReader("This is the content of a file")
 
 			stat1ParamMatcher := mock.MatchedBy(func(statReq *providerv1beta1.StatRequest) bool {
-				return statReq.Ref.ResourceId == wopiCtx.FileReference.ResourceId
+				if statReq.Ref.ResourceId == wopiCtx.FileReference.ResourceId {
+					return true
+				}
+				return false
 			})
 			gatewayClient.On("Stat", mock.Anything, stat1ParamMatcher).Times(1).Return(&providerv1beta1.StatResponse{
 				Status: status.NewOK(ctx),
@@ -1199,7 +1214,10 @@ var _ = Describe("FileConnector", func() {
 			stream := strings.NewReader("This is the content of a file")
 
 			stat1ParamMatcher := mock.MatchedBy(func(statReq *providerv1beta1.StatRequest) bool {
-				return statReq.Ref.ResourceId == wopiCtx.FileReference.ResourceId
+				if statReq.Ref.ResourceId == wopiCtx.FileReference.ResourceId {
+					return true
+				}
+				return false
 			})
 			gatewayClient.On("Stat", mock.Anything, stat1ParamMatcher).Times(1).Return(&providerv1beta1.StatResponse{
 				Status: status.NewOK(ctx),
@@ -1256,7 +1274,10 @@ var _ = Describe("FileConnector", func() {
 			stream := strings.NewReader("This is the content of a file")
 
 			stat1ParamMatcher := mock.MatchedBy(func(statReq *providerv1beta1.StatRequest) bool {
-				return statReq.Ref.ResourceId == wopiCtx.FileReference.ResourceId
+				if statReq.Ref.ResourceId == wopiCtx.FileReference.ResourceId {
+					return true
+				}
+				return false
 			})
 			gatewayClient.On("Stat", mock.Anything, stat1ParamMatcher).Times(1).Return(&providerv1beta1.StatResponse{
 				Status: status.NewOK(ctx),
@@ -1270,12 +1291,13 @@ var _ = Describe("FileConnector", func() {
 				},
 			}, nil)
 
-			ccs.On("PutFile", mock.Anything, stream, int64(stream.Len()), "").Times(1).Return(nil, connector.NewConnectorError(500, "Something happened"))
+			ccs.On("PutFile", mock.Anything, stream, int64(stream.Len()), "").Times(1).Return(connector.NewResponse(500), nil)
 
 			response, err := fc.PutRelativeFileRelative(ctx, ccs, stream, int64(stream.Len()), "convFile.pdf")
-			targetErr := connector.NewConnectorError(500, "Something happened")
-			Expect(err).To(Equal(targetErr))
-			Expect(response).To(BeNil())
+			Expect(err).ToNot(HaveOccurred())
+			Expect(response.Status).To(Equal(500))
+			Expect(response.Headers).To(BeNil())
+			Expect(response.Body).To(BeNil())
 		})
 	})
 
@@ -1705,7 +1727,7 @@ var _ = Describe("FileConnector", func() {
 			u := &userv1beta1.User{}
 			u.Opaque = &typesv1beta1.Opaque{
 				Map: map[string]*typesv1beta1.OpaqueEntry{
-					"public-share-role": {
+					"public-share-role": &typesv1beta1.OpaqueEntry{
 						Decoder: "plain",
 						Value:   []byte("viewer"),
 					},
diff --git a/services/collaboration/pkg/connector/httpadapter_test.go b/services/collaboration/pkg/connector/httpadapter_test.go
index 7a5921b8a57..3d3d97c7add 100644
--- a/services/collaboration/pkg/connector/httpadapter_test.go
+++ b/services/collaboration/pkg/connector/httpadapter_test.go
@@ -477,26 +477,6 @@ var _ = Describe("HttpAdapter", func() {
 			httpAdapter.PutFile(w, req)
 			resp := w.Result()
 			Expect(resp.StatusCode).To(Equal(500))
-
-			content, _ := io.ReadAll(resp.Body)
-			Expect(content).To(Equal([]byte("")))
-		})
-
-		It("Connector error", func() {
-			contentBody := "this is the new fake content"
-			req := httptest.NewRequest("GET", "/wopi/files/abcdef/contents", strings.NewReader(contentBody))
-			req.Header.Set(connector.HeaderWopiLock, "abc123")
-
-			w := httptest.NewRecorder()
-
-			cc.On("PutFile", mock.Anything, mock.Anything, int64(len(contentBody)), "abc123").Times(1).Return(nil, connector.NewConnectorError(500, "Something happened"))
-
-			httpAdapter.PutFile(w, req)
-			resp := w.Result()
-			Expect(resp.StatusCode).To(Equal(500))
-
-			content, _ := io.ReadAll(resp.Body)
-			Expect(content).To(Equal([]byte("")))
 		})
 
 		It("Conflict", func() {
@@ -537,64 +517,4 @@ var _ = Describe("HttpAdapter", func() {
 			Expect(resp.Header.Get(connector.HeaderWopiVersion)).To(Equal("v1234567"))
 		})
 	})
-
-	Describe("PutRelativeFile", func() {
-		It("Connector error", func() {
-			contentBody := "this is the new fake content"
-			req := httptest.NewRequest("GET", "/wopi/files/abcdef/contents", strings.NewReader(contentBody))
-			req.Header.Set(connector.HeaderWopiLock, "abc123")
-			req.Header.Set(connector.HeaderWopiRT, "relativetarget.docx")
-
-			w := httptest.NewRecorder()
-
-			fc.On("PutRelativeFileRelative", mock.Anything, mock.Anything, mock.Anything, int64(len(contentBody)), "relativetarget.docx").Times(1).Return(nil, connector.NewConnectorError(500, "Something happened"))
-
-			httpAdapter.PutRelativeFile(w, req)
-			resp := w.Result()
-			Expect(resp.StatusCode).To(Equal(500))
-
-			content, _ := io.ReadAll(resp.Body)
-			Expect(content).To(Equal([]byte("")))
-		})
-
-		It("Conflict", func() {
-			contentBody := "this is the new fake content"
-			req := httptest.NewRequest("GET", "/wopi/files/abcdef/contents", strings.NewReader(contentBody))
-			req.Header.Set(connector.HeaderWopiLock, "abc123")
-			req.Header.Set(connector.HeaderWopiRT, "relativetarget.docx")
-
-			w := httptest.NewRecorder()
-
-			fc.On("PutRelativeFileRelative", mock.Anything, mock.Anything, mock.Anything, int64(len(contentBody)), "relativetarget.docx").Times(1).Return(
-				connector.NewResponseLockConflict("zzz111", "Lock Conflict"), nil)
-
-			httpAdapter.PutRelativeFile(w, req)
-			resp := w.Result()
-			Expect(resp.StatusCode).To(Equal(409))
-			Expect(resp.Header.Get(connector.HeaderWopiLock)).To(Equal("zzz111"))
-			Expect(resp.Header.Get(connector.HeaderWopiLockFailureReason)).To(Equal("Lock Conflict"))
-		})
-
-		It("Success", func() {
-			contentBody := "this is the new fake content"
-			req := httptest.NewRequest("GET", "/wopi/files/abcdef/contents", strings.NewReader(contentBody))
-			req.Header.Set(connector.HeaderWopiLock, "abc123")
-			req.Header.Set(connector.HeaderWopiRT, "relativetarget.docx")
-
-			w := httptest.NewRecorder()
-
-			fc.On("PutRelativeFileRelative", mock.Anything, mock.Anything, mock.Anything, int64(len(contentBody)), "relativetarget.docx").Times(1).Return(
-				connector.NewResponseWithVersionAndLock(
-					200,
-					&typesv1beta1.Timestamp{Seconds: uint64(1234), Nanos: uint32(567)},
-					"abc123",
-				), nil)
-
-			httpAdapter.PutRelativeFile(w, req)
-			resp := w.Result()
-			Expect(resp.StatusCode).To(Equal(200))
-			Expect(resp.Header.Get(connector.HeaderWopiLock)).To(Equal("abc123"))
-			Expect(resp.Header.Get(connector.HeaderWopiVersion)).To(Equal("v1234567"))
-		})
-	})
 })
diff --git a/services/notifications/pkg/service/service_test.go b/services/notifications/pkg/service/service_test.go
index 1fbc8a168f7..abed14f9969 100644
--- a/services/notifications/pkg/service/service_test.go
+++ b/services/notifications/pkg/service/service_test.go
@@ -77,7 +77,7 @@ var _ = Describe("Notifications", func() {
 			cfg := defaults.FullDefaultConfig()
 			cfg.GRPCClientTLS = &shared.GRPCClientTLS{}
 			ch := make(chan events.Event)
-			evts := service.NewEventsNotifier(ch, tc, log.NewLogger(), gatewaySelector, vs, "", "", "", "", "")
+			evts := service.NewEventsNotifier(ch, tc, log.NewLogger(), gatewaySelector, vs, "", "", "", "", "", "")
 			go evts.Run()
 
 			ch <- ev
@@ -275,7 +275,7 @@ var _ = Describe("Notifications X-Site Scripting", func() {
 			cfg := defaults.FullDefaultConfig()
 			cfg.GRPCClientTLS = &shared.GRPCClientTLS{}
 			ch := make(chan events.Event)
-			evts := service.NewEventsNotifier(ch, tc, log.NewLogger(), gatewaySelector, vs, "", "", "", "", "")
+			evts := service.NewEventsNotifier(ch, tc, log.NewLogger(), gatewaySelector, vs, "", "", "", "", "", "")
 			go evts.Run()
 
 			ch <- ev
diff --git a/tests/acceptance/bootstrap/FeatureContext.php b/tests/acceptance/bootstrap/FeatureContext.php
index bce949a0682..9d6070bf6bf 100644
--- a/tests/acceptance/bootstrap/FeatureContext.php
+++ b/tests/acceptance/bootstrap/FeatureContext.php
@@ -34,6 +34,7 @@ use GuzzleHttp\Cookie\CookieJar;
 use Psr\Http\Message\ResponseInterface;
 use PHPUnit\Framework\Assert;
 use Swaggest\JsonSchema\Schema as JsonSchema;
+use TestHelpers\OcsApiHelper;
 use Laminas\Ldap\Ldap;
 use TestHelpers\SetupHelper;
 use TestHelpers\HttpRequestHelper;
@@ -43,17 +44,6 @@ use TestHelpers\GraphHelper;
 use TestHelpers\WebDavHelper;
 use TestHelpers\SettingsHelper;
 use TestHelpers\OcisConfigHelper;
-use Swaggest\JsonSchema\InvalidValue as JsonSchemaException;
-use Swaggest\JsonSchema\Exception\ArrayException;
-use Swaggest\JsonSchema\Exception\ConstException;
-use Swaggest\JsonSchema\Exception\ContentException;
-use Swaggest\JsonSchema\Exception\EnumException;
-use Swaggest\JsonSchema\Exception\LogicException;
-use Swaggest\JsonSchema\Exception\NumericException;
-use Swaggest\JsonSchema\Exception\ObjectException;
-use Swaggest\JsonSchema\Exception\StringException;
-use Swaggest\JsonSchema\Exception\TypeException;
-use Swaggest\JsonSchema\Exception\Error as JsonSchemaError;
 
 require_once 'bootstrap.php';
 
@@ -1250,93 +1240,9 @@ class FeatureContext extends BehatVariablesContext {
 	 * @throws Exception
 	 */
 	public function assertJsonDocumentMatchesSchema(object|array $json, object $schema): void {
-		try {
-			$schema = JsonSchema::import($schema);
-			$this->validateSchemaRequirements($schema);
-			$schema->in($json);
-		} catch (JsonSchemaException $e) {
-			$this->throwJsonSchemaException($e);
-		}
-	}
-
-	/**
-	 * @param JsonSchemaException $error
-	 *
-	 * @return array
-	 */
-	public function getJsonSchemaErrors(JsonSchemaException $error): array {
-		$errors = [];
-		if (\property_exists($error, "subErrors") && $error->subErrors) {
-			foreach ($error->subErrors as $subError) {
-				$errors = \array_merge($errors, $this->getJsonSchemaErrors($subError));
-			}
-		} else {
-			$errors[] = $error;
-		}
-		return $errors;
-	}
-
-	/**
-	 * @param JsonSchemaException $e
-	 *
-	 * @return void
-	 * @throws Exception
-	 */
-	public function throwJsonSchemaException(JsonSchemaException $e): void {
-		$errors = $this->getJsonSchemaErrors($e);
-		$messages = ["JSON Schema validation failed:"];
-
-		$previousPointer = '';
-		$errorCount = 0;
-		foreach ($errors as $error) {
-			$expected = $error->constraint;
-			$actual = $error->data;
-			$errorMessage = $error->error;
-			$schemaPointer = \str_replace("/", ".", \trim($error->getSchemaPointer(), "/"));
-			$dataPointer = \str_replace("/", ".", \trim($error->getDataPointer(), "/"));
-
-			$pointer = \str_contains($schemaPointer, "additionalProperties") ? $dataPointer : $schemaPointer;
-			if ($pointer === $previousPointer) {
-				continue;
-			}
-			$previousPointer = $pointer;
-
-			$message = ++$errorCount . ". ";
-			switch (true) {
-				case $error instanceof ArrayException:
-				case $error instanceof LogicException:
-				case $error instanceof NumericException:
-				case $error instanceof StringException:
-				case $error instanceof ContentException:
-					break;
-				case $error instanceof ConstException:
-					$errorMessage .= "\n\t   Expected: $expected"
-					. "\n\t   Received: $actual";
-					break;
-				case $error instanceof EnumException:
-					$errorMessage .= "\n\t   Expected (One of): " . \join(", ", $expected)
-					. "\n\t   Received: $actual";
-					break;
-				case $error instanceof ObjectException:
-					if (\str_starts_with($errorMessage, "Required property missing")) {
-						$properties = \join(", ", \array_keys((array)$actual));
-						$pointer .= "->required";
-						$errorMessage = "Required property missing: id"
-						. "\n\t   Received: $properties";
-					}
-					break;
-				case $error instanceof TypeException:
-					if (\in_array(\gettype($actual), ['object', 'array'])) {
-						$actual = \json_encode($actual, JSON_PRETTY_PRINT);
-					}
-					break;
-				default:
-					break;
-			}
-			$message .= "$pointer:\n\t - $errorMessage\n";
-			$messages[] = $message;
-		}
-		Assert::fail(\join("\n", $messages));
+		$schema = JsonSchema::import($schema);
+		$this->validateSchemaRequirements($schema);
+		$schema->in($json);
 	}
 
 	/**
diff --git a/tests/acceptance/features/apiActivities/activities.feature b/tests/acceptance/features/apiActivities/activities.feature
index 0bce0c6767d..759032451cd 100644
--- a/tests/acceptance/features/apiActivities/activities.feature
+++ b/tests/acceptance/features/apiActivities/activities.feature
@@ -39,27 +39,31 @@ Feature: check activities
                     },
                     "variables": {
                       "type": "object",
-                      "required": ["folder", "resource", "user"],
+                      "required": ["resource","space","user"],
                       "properties": {
-                        "folder": {
+                        "resource": {
                           "type": "object",
-                          "required": ["name"],
+                          "required": ["id","name"],
                           "properties": {
+                            "id": {
+                              "type": "string",
+                              "pattern": "%file_id_pattern%"
+                            },
                             "name": {
-                              "const": "Alice Hansen"
+                              "const": "textfile.txt"
                             }
                           }
                         },
-                        "resource": {
+                        "space": {
                           "type": "object",
                           "required": ["id","name"],
                           "properties": {
                             "id": {
                               "type": "string",
-                              "pattern": "%file_id_pattern%"
+                              "pattern": "^%user_id_pattern%!%user_id_pattern%$"
                             },
                             "name": {
-                              "const": "textfile.txt"
+                              "const": "Alice Hansen"
                             }
                           }
                         },
@@ -125,27 +129,31 @@ Feature: check activities
                     },
                     "variables": {
                       "type": "object",
-                      "required": ["folder","resource","user"],
+                      "required": ["resource","space","user"],
                       "properties": {
-                        "folder": {
+                        "resource": {
                           "type": "object",
-                          "required": ["name"],
+                          "required": ["id","name"],
                           "properties": {
+                            "id": {
+                              "type": "string",
+                              "pattern": "%file_id_pattern%"
+                            },
                             "name": {
-                              "const": "Alice Hansen"
+                              "const": "FOLDER"
                             }
                           }
                         },
-                        "resource": {
+                        "space": {
                           "type": "object",
                           "required": ["id","name"],
                           "properties": {
                             "id": {
                               "type": "string",
-                              "pattern": "%file_id_pattern%"
+                              "pattern": "^%user_id_pattern%!%user_id_pattern%$"
                             },
                             "name": {
-                              "const": "FOLDER"
+                              "const": "Alice Hansen"
                             }
                           }
                         },
@@ -217,7 +225,7 @@ Feature: check activities
                         },
                         "variables": {
                           "type": "object",
-                          "required": ["resource", "folder", "user"],
+                          "required": ["resource", "space", "user"],
                           "properties": {
                             "resource": {
                               "type": "object",
@@ -247,7 +255,7 @@ Feature: check activities
                         },
                         "variables": {
                           "type": "object",
-                          "required": ["resource", "folder", "user"],
+                          "required": ["resource", "space", "user"],
                           "properties": {
                             "resource": {
                               "type": "object",
@@ -281,7 +289,7 @@ Feature: check activities
                         },
                         "variables": {
                           "type": "object",
-                          "required": ["resource","folder","user"],
+                          "required": ["resource","space","user"],
                           "properties": {
                             "resource": {
                               "type": "object",
@@ -296,10 +304,14 @@ Feature: check activities
                                 }
                               }
                             },
-                            "folder": {
+                            "space": {
                               "type": "object",
-                              "required": ["name"],
+                              "required": ["id","name"],
                               "properties": {
+                                "id": {
+                                  "type": "string",
+                                  "pattern": "^%file_id_pattern%$"
+                                },
                                 "name": {
                                   "const": "Alice Hansen"
                                 }
@@ -351,7 +363,7 @@ Feature: check activities
                         },
                         "variables": {
                           "type": "object",
-                          "required": ["resource","folder","user"],
+                          "required": ["resource","space","user"],
                           "properties": {
                             "resource": {
                               "type": "object",
@@ -366,10 +378,14 @@ Feature: check activities
                                 }
                               }
                             },
-                            "folder": {
+                            "space": {
                               "type": "object",
-                              "required": ["name"],
+                              "required": ["id","name"],
                               "properties": {
+                                "id": {
+                                  "type": "string",
+                                  "pattern": "^%file_id_pattern%$"
+                                },
                                 "name": {
                                   "const": "Alice Hansen"
                                 }
@@ -443,43 +459,6 @@ Feature: check activities
                       "properties": {
                         "message": {
                           "const": "{user} added {resource} to {folder}"
-                        },
-                        "variables": {
-                          "type": "object",
-                          "required": ["folder", "resource", "user"],
-                          "properties": {
-                            "folder": {
-                              "type": "object",
-                              "required": ["name"],
-                              "properties": {
-                                "name": {
-                                  "const": "Alice Hansen"
-                                }
-                              }
-                            },
-                            "resource": {
-                              "type": "object",
-                              "required": ["id","name"],
-                              "properties": {
-                                "name": {
-                                  "const": "textfile.txt"
-                                }
-                              }
-                            },
-                            "user": {
-                              "type": "object",
-                              "required": ["id","displayName"],
-                              "properties": {
-                                "id": {
-                                  "type": "string",
-                                  "pattern": "%user_id_pattern%"
-                                },
-                                "displayName": {
-                                  "const": "Alice Hansen"
-                                }
-                              }
-                            }
-                          }
                         }
                       }
                     }
@@ -502,27 +481,31 @@ Feature: check activities
                         },
                         "variables": {
                           "type": "object",
-                          "required": ["folder", "resource", "user"],
+                          "required": ["resource","space","user"],
                           "properties": {
-                            "folder": {
+                            "resource": {
                               "type": "object",
-                              "required": ["name"],
+                              "required": ["id","name"],
                               "properties": {
+                                "id": {
+                                  "type": "string",
+                                  "pattern": "^%file_id_pattern%$"
+                                },
                                 "name": {
-                                  "const": "New Folder"
+                                  "const": "textfile.txt"
                                 }
                               }
                             },
-                            "resource": {
+                            "space": {
                               "type": "object",
                               "required": ["id","name"],
                               "properties": {
                                 "id": {
                                   "type": "string",
-                                  "pattern": "^%file_id_pattern%$"
+                                  "pattern": "^%user_id_pattern%!%user_id_pattern%$"
                                 },
                                 "name": {
-                                  "const": "textfile.txt"
+                                  "const": "Alice Hansen"
                                 }
                               }
                             },
@@ -586,43 +569,6 @@ Feature: check activities
                       "properties": {
                         "message": {
                           "const": "{user} added {resource} to {folder}"
-                        },
-                        "variables": {
-                          "type": "object",
-                          "required": ["folder", "resource", "user"],
-                          "properties": {
-                            "folder": {
-                              "type": "object",
-                              "required": ["name"],
-                              "properties": {
-                                "name": {
-                                  "const": "Alice Hansen"
-                                }
-                              }
-                            },
-                            "resource": {
-                              "type": "object",
-                              "required": ["id","name"],
-                              "properties": {
-                                "name": {
-                                  "const": "FOLDER"
-                                }
-                              }
-                            },
-                            "user": {
-                              "type": "object",
-                              "required": ["id","displayName"],
-                              "properties": {
-                                "id": {
-                                  "type": "string",
-                                  "pattern": "%user_id_pattern%"
-                                },
-                                "displayName": {
-                                  "const": "Alice Hansen"
-                                }
-                              }
-                            }
-                          }
                         }
                       }
                     }
@@ -645,27 +591,31 @@ Feature: check activities
                         },
                         "variables": {
                           "type": "object",
-                          "required": ["folder", "resource", "user"],
+                          "required": ["resource","space","user"],
                           "properties": {
-                            "folder": {
+                            "resource": {
                               "type": "object",
-                              "required": ["name"],
+                              "required": ["id","name"],
                               "properties": {
+                                "id": {
+                                  "type": "string",
+                                  "pattern": "^%file_id_pattern%$"
+                                },
                                 "name": {
-                                  "const": "New Folder"
+                                  "const": "FOLDER"
                                 }
                               }
                             },
-                            "resource": {
+                            "space": {
                               "type": "object",
                               "required": ["id","name"],
                               "properties": {
                                 "id": {
                                   "type": "string",
-                                  "pattern": "^%file_id_pattern%$"
+                                  "pattern": "^%user_id_pattern%!%user_id_pattern%$"
                                 },
                                 "name": {
-                                  "const": "FOLDER"
+                                  "const": "Alice Hansen"
                                 }
                               }
                             },
@@ -970,41 +920,16 @@ Feature: check activities
                         },
                         "variables": {
                           "type": "object",
-                          "required": ["folder", "resource", "user"],
+                          "required": ["resource", "space", "user"],
                           "properties": {
-                            "folder": {
-                              "type": "object",
-                              "required": ["name"],
-                              "properties": {
-                                "name": {
-                                  "const": "Alice Hansen"
-                                }
-                              }
-                            },
                             "resource": {
                               "type": "object",
                               "required": ["id", "name"],
                               "properties": {
-                                "id": {
-                                  "type": "string"
-                                },
                                 "name": {
                                   "const": "New Folder"
                                 }
                               }
-                            },
-                            "user": {
-                              "type": "object",
-                              "required": ["id","displayName"],
-                              "properties": {
-                                "id": {
-                                  "type": "string",
-                                  "pattern": "%user_id_pattern%"
-                                },
-                                "displayName": {
-                                  "const": "Alice Hansen"
-                                }
-                              }
                             }
                           }
                         }
@@ -1025,38 +950,16 @@ Feature: check activities
                         },
                         "variables": {
                           "type": "object",
-                          "required": ["resource", "folder", "user"],
+                          "required": ["resource", "space", "user"],
                           "properties": {
-                            "folder": {
-                              "type": "object",
-                              "required": ["name"],
-                              "properties": {
-                                "name": {
-                                  "const": "New Folder"
-                                }
-                              }
-                            },
                             "resource": {
                               "type": "object",
-                              "required": ["name"],
+                              "required": ["id", "name"],
                               "properties": {
                                 "name": {
                                   "const": "Folder"
                                 }
                               }
-                            },
-                            "user": {
-                              "type": "object",
-                              "required": ["id","displayName"],
-                              "properties": {
-                                "id": {
-                                  "type": "string",
-                                  "pattern": "%user_id_pattern%"
-                                },
-                                "displayName": {
-                                  "const": "Alice Hansen"
-                                }
-                              }
                             }
                           }
                         }
@@ -1077,17 +980,8 @@ Feature: check activities
                         },
                         "variables": {
                           "type": "object",
-                          "required": ["folder", "resource", "user"],
+                          "required": ["resource", "space", "user"],
                           "properties": {
-                            "folder": {
-                              "type": "object",
-                              "required": ["name"],
-                              "properties": {
-                                "name": {
-                                  "const": "New Folder"
-                                }
-                              }
-                            },
                             "resource": {
                               "type": "object",
                               "required": ["id", "name"],
@@ -1096,19 +990,6 @@ Feature: check activities
                                   "const": "Sub Folder"
                                 }
                               }
-                            },
-                            "user": {
-                              "type": "object",
-                              "required": ["id","displayName"],
-                              "properties": {
-                                "id": {
-                                  "type": "string",
-                                  "pattern": "%user_id_pattern%"
-                                },
-                                "displayName": {
-                                  "const": "Alice Hansen"
-                                }
-                              }
                             }
                           }
                         }
@@ -1129,17 +1010,8 @@ Feature: check activities
                         },
                         "variables": {
                           "type": "object",
-                          "required": ["folder", "resource", "user"],
+                          "required": ["resource", "space", "user"],
                           "properties": {
-                            "folder": {
-                              "type": "object",
-                              "required": ["name"],
-                              "properties": {
-                                "name": {
-                                  "const": "New Folder"
-                                }
-                              }
-                            },
                             "resource": {
                               "type": "object",
                               "required": ["id", "name"],
@@ -1148,19 +1020,6 @@ Feature: check activities
                                   "const": "textfile.txt"
                                 }
                               }
-                            },
-                            "user": {
-                              "type": "object",
-                              "required": ["id","displayName"],
-                              "properties": {
-                                "id": {
-                                  "type": "string",
-                                  "pattern": "%user_id_pattern%"
-                                },
-                                "displayName": {
-                                  "const": "Alice Hansen"
-                                }
-                              }
                             }
                           }
                         }
@@ -1181,17 +1040,8 @@ Feature: check activities
                         },
                         "variables": {
                           "type": "object",
-                          "required": ["folder", "resource", "user"],
+                          "required": ["resource", "space", "user"],
                           "properties": {
-                            "folder": {
-                              "type": "object",
-                              "required": ["name"],
-                              "properties": {
-                                "name": {
-                                  "const": "Sub Folder"
-                                }
-                              }
-                            },
                             "resource": {
                               "type": "object",
                               "required": ["id", "name"],
@@ -1200,19 +1050,6 @@ Feature: check activities
                                   "const": "textfile.txt"
                                 }
                               }
-                            },
-                            "user": {
-                              "type": "object",
-                              "required": ["id","displayName"],
-                              "properties": {
-                                "id": {
-                                  "type": "string",
-                                  "pattern": "%user_id_pattern%"
-                                },
-                                "displayName": {
-                                  "const": "Alice Hansen"
-                                }
-                              }
                             }
                           }
                         }
@@ -1233,17 +1070,8 @@ Feature: check activities
                         },
                         "variables": {
                           "type": "object",
-                          "required": ["folder", "resource", "user"],
+                          "required": ["resource", "space", "user"],
                           "properties": {
-                            "folder": {
-                              "type": "object",
-                              "required": ["name"],
-                              "properties": {
-                                "name": {
-                                  "const": "Sub Folder"
-                                }
-                              }
-                            },
                             "resource": {
                               "type": "object",
                               "required": ["id", "name"],
@@ -1252,19 +1080,6 @@ Feature: check activities
                                   "const": "Folder"
                                 }
                               }
-                            },
-                            "user": {
-                              "type": "object",
-                              "required": ["id","displayName"],
-                              "properties": {
-                                "id": {
-                                  "type": "string",
-                                  "pattern": "%user_id_pattern%"
-                                },
-                                "displayName": {
-                                  "const": "Alice Hansen"
-                                }
-                              }
                             }
                           }
                         }
@@ -1363,17 +1178,8 @@ Feature: check activities
                         },
                         "variables": {
                           "type": "object",
-                          "required": ["folder", "resource", "user"],
+                          "required": ["resource", "space", "user"],
                           "properties": {
-                            "folder": {
-                              "type": "object",
-                              "required": ["name"],
-                              "properties": {
-                                "name": {
-                                  "const": "Sub Folder"
-                                }
-                              }
-                            },
                             "resource": {
                               "type": "object",
                               "required": ["id", "name"],
@@ -1382,19 +1188,6 @@ Feature: check activities
                                   "const": "renamed.txt"
                                 }
                               }
-                            },
-                            "user": {
-                              "type": "object",
-                              "required": ["id","displayName"],
-                              "properties": {
-                                "id": {
-                                  "type": "string",
-                                  "pattern": "%user_id_pattern%"
-                                },
-                                "displayName": {
-                                  "const": "Alice Hansen"
-                                }
-                              }
                             }
                           }
                         }
@@ -1415,17 +1208,8 @@ Feature: check activities
                         },
                         "variables": {
                           "type": "object",
-                          "required": ["folder", "resource", "user"],
+                          "required": ["resource", "space", "user"],
                           "properties": {
-                            "folder": {
-                              "type": "object",
-                              "required": ["name"],
-                              "properties": {
-                                "name": {
-                                  "const": "Sub Folder"
-                                }
-                              }
-                            },
                             "resource": {
                               "type": "object",
                               "required": ["id", "name"],
@@ -1434,19 +1218,6 @@ Feature: check activities
                                   "const": "Renamed Folder"
                                 }
                               }
-                            },
-                            "user": {
-                              "type": "object",
-                              "required": ["id","displayName"],
-                              "properties": {
-                                "id": {
-                                  "type": "string",
-                                  "pattern": "%user_id_pattern%"
-                                },
-                                "displayName": {
-                                  "const": "Alice Hansen"
-                                }
-                              }
                             }
                           }
                         }
@@ -1589,17 +1360,8 @@ Feature: check activities
                         },
                         "variables": {
                           "type": "object",
-                          "required": ["folder", "resource", "user"],
+                          "required": ["resource", "space", "user"],
                           "properties": {
-                            "folder": {
-                              "type": "object",
-                              "required": ["name"],
-                              "properties": {
-                                "name": {
-                                  "const": "Alice Hansen"
-                                }
-                              }
-                            },
                             "resource": {
                               "type": "object",
                               "required": ["id", "name"],
@@ -1608,19 +1370,6 @@ Feature: check activities
                                   "const": "New Folder"
                                 }
                               }
-                            },
-                            "user": {
-                              "type": "object",
-                              "required": ["id","displayName"],
-                              "properties": {
-                                "id": {
-                                  "type": "string",
-                                  "pattern": "%user_id_pattern%"
-                                },
-                                "displayName": {
-                                  "const": "Alice Hansen"
-                                }
-                              }
                             }
                           }
                         }
@@ -1645,17 +1394,8 @@ Feature: check activities
                         },
                         "variables": {
                           "type": "object",
-                          "required": ["folder", "resource", "user"],
+                          "required": ["resource", "space", "user"],
                           "properties": {
-                            "folder": {
-                              "type": "object",
-                              "required": ["name"],
-                              "properties": {
-                                "name": {
-                                  "const": "New Folder"
-                                }
-                              }
-                            },
                             "resource": {
                               "type": "object",
                               "required": ["id", "name"],
@@ -1664,19 +1404,6 @@ Feature: check activities
                                   "const": "Sub Folder"
                                 }
                               }
-                            },
-                            "user": {
-                              "type": "object",
-                              "required": ["id","displayName"],
-                              "properties": {
-                                "id": {
-                                  "type": "string",
-                                  "pattern": "%user_id_pattern%"
-                                },
-                                "displayName": {
-                                  "const": "Alice Hansen"
-                                }
-                              }
                             }
                           }
                         }
@@ -1701,17 +1428,8 @@ Feature: check activities
                         },
                         "variables": {
                           "type": "object",
-                          "required": ["folder", "resource", "user"],
+                          "required": ["resource", "space", "user"],
                           "properties": {
-                            "folder": {
-                              "type": "object",
-                              "required": ["name"],
-                              "properties": {
-                                "name": {
-                                  "const": "Sub Folder"
-                                }
-                              }
-                            },
                             "resource": {
                               "type": "object",
                               "required": ["id", "name"],
@@ -1720,19 +1438,6 @@ Feature: check activities
                                   "const": "textfile.txt"
                                 }
                               }
-                            },
-                            "user": {
-                              "type": "object",
-                              "required": ["id","displayName"],
-                              "properties": {
-                                "id": {
-                                  "type": "string",
-                                  "pattern": "%user_id_pattern%"
-                                },
-                                "displayName": {
-                                  "const": "Alice Hansen"
-                                }
-                              }
                             }
                           }
                         }
@@ -1784,17 +1489,8 @@ Feature: check activities
                         },
                         "variables": {
                           "type": "object",
-                          "required": ["folder", "resource", "user"],
+                          "required": ["resource", "space", "user"],
                           "properties": {
-                            "folder": {
-                              "type": "object",
-                              "required": ["name"],
-                              "properties": {
-                                "name": {
-                                  "const": "Alice Hansen"
-                                }
-                              }
-                            },
                             "resource": {
                               "type": "object",
                               "required": ["id", "name"],
@@ -1803,19 +1499,6 @@ Feature: check activities
                                   "const": "New Folder"
                                 }
                               }
-                            },
-                            "user": {
-                              "type": "object",
-                              "required": ["id","displayName"],
-                              "properties": {
-                                "id": {
-                                  "type": "string",
-                                  "pattern": "%user_id_pattern%"
-                                },
-                                "displayName": {
-                                  "const": "Alice Hansen"
-                                }
-                              }
                             }
                           }
                         }
@@ -1840,17 +1523,8 @@ Feature: check activities
                         },
                         "variables": {
                           "type": "object",
-                          "required": ["folder", "resource", "user"],
+                          "required": ["resource", "space", "user"],
                           "properties": {
-                            "folder": {
-                              "type": "object",
-                              "required": ["name"],
-                              "properties": {
-                                "name": {
-                                  "const": "New Folder"
-                                }
-                              }
-                            },
                             "resource": {
                               "type": "object",
                               "required": ["id", "name"],
@@ -1859,19 +1533,6 @@ Feature: check activities
                                   "const": "Sub Folder"
                                 }
                               }
-                            },
-                            "user": {
-                              "type": "object",
-                              "required": ["id","displayName"],
-                              "properties": {
-                                "id": {
-                                  "type": "string",
-                                  "pattern": "%user_id_pattern%"
-                                },
-                                "displayName": {
-                                  "const": "Alice Hansen"
-                                }
-                              }
                             }
                           }
                         }
@@ -1923,17 +1584,8 @@ Feature: check activities
                         },
                         "variables": {
                           "type": "object",
-                          "required": ["folder", "resource", "user"],
+                          "required": ["resource", "space", "user"],
                           "properties": {
-                            "folder": {
-                              "type": "object",
-                              "required": ["name"],
-                              "properties": {
-                                "name": {
-                                  "const": "Alice Hansen"
-                                }
-                              }
-                            },
                             "resource": {
                               "type": "object",
                               "required": ["id", "name"],
@@ -1942,19 +1594,6 @@ Feature: check activities
                                   "const": "New Folder"
                                 }
                               }
-                            },
-                            "user": {
-                              "type": "object",
-                              "required": ["id","displayName"],
-                              "properties": {
-                                "id": {
-                                  "type": "string",
-                                  "pattern": "%user_id_pattern%"
-                                },
-                                "displayName": {
-                                  "const": "Alice Hansen"
-                                }
-                              }
                             }
                           }
                         }
@@ -1979,17 +1618,8 @@ Feature: check activities
                         },
                         "variables": {
                           "type": "object",
-                          "required": ["folder", "resource", "user"],
+                          "required": ["resource", "space", "user"],
                           "properties": {
-                            "folder": {
-                              "type": "object",
-                              "required": ["name"],
-                              "properties": {
-                                "name": {
-                                  "const": "New Folder"
-                                }
-                              }
-                            },
                             "resource": {
                               "type": "object",
                               "required": ["id", "name"],
@@ -1998,19 +1628,6 @@ Feature: check activities
                                   "const": "Sub Folder"
                                 }
                               }
-                            },
-                            "user": {
-                              "type": "object",
-                              "required": ["id","displayName"],
-                              "properties": {
-                                "id": {
-                                  "type": "string",
-                                  "pattern": "%user_id_pattern%"
-                                },
-                                "displayName": {
-                                  "const": "Alice Hansen"
-                                }
-                              }
                             }
                           }
                         }
diff --git a/tests/acceptance/features/apiActivities/shareActivities.feature b/tests/acceptance/features/apiActivities/shareActivities.feature
index 08e6df6c9cf..6234ea7e84c 100644
--- a/tests/acceptance/features/apiActivities/shareActivities.feature
+++ b/tests/acceptance/features/apiActivities/shareActivities.feature
@@ -543,23 +543,27 @@ Feature: check share activity
                         },
                         "variables": {
                           "type": "object",
-                          "required": ["folder","resource","user"],
+                          "required": ["resource","space","user"],
                           "properties": {
-                            "folder": {
+                            "resource": {
                               "type": "object",
                               "required": ["id","name"],
                               "properties": {
                                 "name": {
-                                  "const": "Alice Hansen"
+                                  "const": "FOLDER"
                                 }
                               }
                             },
-                            "resource": {
+                            "space": {
                               "type": "object",
                               "required": ["id","name"],
                               "properties": {
+                                "id": {
+                                  "type": "string",
+                                  "pattern": "^%user_id_pattern%!%user_id_pattern%$"
+                                },
                                 "name": {
-                                  "const": "FOLDER"
+                                  "const": "Alice Hansen"
                                 }
                               }
                             },
@@ -618,23 +622,27 @@ Feature: check share activity
                         },
                         "variables": {
                           "type": "object",
-                          "required": ["folder","resource","user"],
+                          "required": ["resource","space","user"],
                           "properties": {
-                            "folder": {
+                            "resource": {
                               "type": "object",
                               "required": ["id","name"],
                               "properties": {
                                 "name": {
-                                  "const": "FOLDER"
+                                  "const": "newfile.txt"
                                 }
                               }
                             },
-                            "resource": {
+                            "space": {
                               "type": "object",
                               "required": ["id","name"],
                               "properties": {
+                                "id": {
+                                  "type": "string",
+                                  "pattern": "^%file_id_pattern%$"
+                                },
                                 "name": {
-                                  "const": "newfile.txt"
+                                  "const": "Alice Hansen"
                                 }
                               }
                             },
@@ -674,23 +682,27 @@ Feature: check share activity
                         },
                         "variables": {
                           "type": "object",
-                          "required": ["folder","resource","user"],
+                          "required": ["resource","space","user"],
                           "properties": {
-                            "folder": {
+                            "resource": {
                               "type": "object",
                               "required": ["id","name"],
                               "properties": {
                                 "name": {
-                                  "const": "FOLDER"
+                                  "const": "newfile.txt"
                                 }
                               }
                             },
-                            "resource": {
+                            "space": {
                               "type": "object",
                               "required": ["id","name"],
                               "properties": {
+                                "id": {
+                                  "type": "string",
+                                  "pattern": "^%file_id_pattern%$"
+                                },
                                 "name": {
-                                  "const": "newfile.txt"
+                                  "const": "Alice Hansen"
                                 }
                               }
                             },
@@ -730,23 +742,27 @@ Feature: check share activity
                         },
                         "variables": {
                           "type": "object",
-                          "required": ["folder","resource","user"],
+                          "required": ["resource","space","user"],
                           "properties": {
-                            "folder": {
+                            "resource": {
                               "type": "object",
                               "required": ["id","name"],
                               "properties": {
                                 "name": {
-                                  "const": "Alice Hansen"
+                                  "const": "newfile.txt"
                                 }
                               }
                             },
-                            "resource": {
+                            "space": {
                               "type": "object",
                               "required": ["id","name"],
                               "properties": {
+                                "id": {
+                                  "type": "string",
+                                  "pattern": "^%file_id_pattern%$"
+                                },
                                 "name": {
-                                  "const": "newfile.txt"
+                                  "const": "Alice Hansen"
                                 }
                               }
                             },
diff --git a/tests/acceptance/features/apiCollaboration/wopi.feature b/tests/acceptance/features/apiCollaboration/wopi.feature
index 6942865abab..94fb67e80c0 100644
--- a/tests/acceptance/features/apiCollaboration/wopi.feature
+++ b/tests/acceptance/features/apiCollaboration/wopi.feature
@@ -608,7 +608,7 @@ Feature: collaboration (wopi)
       | Editor           |
       | Uploader         |
 
-  @issue-10126
+
   Scenario: sharee with permission Viewer tries to create text file inside shared folder
     Given user "Alice" has created folder "testFolder"
     And user "Alice" has sent the following resource share invitation:
@@ -702,7 +702,7 @@ Feature: collaboration (wopi)
       | Space Editor     |
       | Manager          |
 
-  @issue-10126
+
   Scenario: user with Viewer role tries to create a text file inside shared project space using wopi endpoint
     Given using spaces DAV path
     And the administrator has assigned the role "Space Admin" to user "Alice" using the Graph API
@@ -823,7 +823,7 @@ Feature: collaboration (wopi)
       | Space Editor     |
       | Manager          |
 
-  @issue-10126
+
   Scenario: user with Viewer role tries to create a odt file inside shared project space using wopi endpoint
     Given using spaces DAV path
     And the administrator has assigned the role "Space Admin" to user "Alice" using the Graph API
@@ -892,7 +892,7 @@ Feature: collaboration (wopi)
       | Editor           |
       | Uploader         |
 
-  @issue-10126
+
   Scenario: sharee with permission Viewer tries to create odt file inside shared folder using wopi endpoint
     Given user "Alice" has created folder "testFolder"
     And user "Alice" has sent the following resource share invitation:
@@ -956,7 +956,7 @@ Feature: collaboration (wopi)
       | upload           |
       | createOnly       |
 
-  @issue-10126
+
   Scenario: public user with permission view tries to creates odt file inside public folder using wopi endpoint
     Given user "Alice" has created folder "publicFolder"
     And user "Alice" has created the following resource link share:
@@ -1047,7 +1047,7 @@ Feature: collaboration (wopi)
       | upload           |
       | createOnly       |
 
-  @issue-8691 @issue-10126
+  @issue-8691
   Scenario: public user with permission view tries to create odt file inside folder of public space using wopi endpoint
     Given using spaces DAV path
     And the administrator has assigned the role "Space Admin" to user "Alice" using the Graph API