Repository: owncloud/ocis
Pull request #4447 (2022-08-23 16:01:15)

Delete userspace
This PR introduces home-space deletion upon deletion of the user that owns it.
https://github.com/owncloud/ocis/issues/4195

sonarcloud[bot]: SonarCloud Quality Gate failed.&nbsp; &nbsp; [![Quality Gate failed](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/QualityGateBadge/failed-16px.png 'Quality Gate failed')](https://sonarcloud.io/dashboard?id=owncloud_ocis&pullRequest=4447)

[![Bug](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/bug-16px.png 'Bug')](https://sonarcloud.io/project/issues?id=owncloud_ocis&pullRequest=4447&resolved=false&types=BUG) [![C](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/RatingBadge/C-16px.png 'C')](https://sonarcloud.io/project/issues?id=owncloud_ocis&pullRequest=4447&resolved=false&types=BUG) [1 Bug](https://sonarcloud.io/project/issues?id=owncloud_ocis&pullRequest=4447&resolved=false&types=BUG)  
[![Vulnerability](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/vulnerability-16px.png 'Vulnerability')](https://sonarcloud.io/project/issues?id=owncloud_ocis&pullRequest=4447&resolved=false&types=VULNERABILITY) [![A](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/RatingBadge/A-16px.png 'A')](https://sonarcloud.io/project/issues?id=owncloud_ocis&pullRequest=4447&resolved=false&types=VULNERABILITY) [0 Vulnerabilities](https://sonarcloud.io/project/issues?id=owncloud_ocis&pullRequest=4447&resolved=false&types=VULNERABILITY)  
[![Security Hotspot](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/security_hotspot-16px.png 'Security Hotspot')](https://sonarcloud.io/project/security_hotspots?id=owncloud_ocis&pullRequest=4447&resolved=false&types=SECURITY_HOTSPOT) [![A](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/RatingBadge/A-16px.png 'A')](https://sonarcloud.io/project/security_hotspots?id=owncloud_ocis&pullRequest=4447&resolved=false&types=SECURITY_HOTSPOT) [0 Security Hotspots](https://sonarcloud.io/project/security_hotspots?id=owncloud_ocis&pullRequest=4447&resolved=false&types=SECURITY_HOTSPOT)  
[![Code Smell](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/code_smell-16px.png 'Code Smell')](https://sonarcloud.io/project/issues?id=owncloud_ocis&pullRequest=4447&resolved=false&types=CODE_SMELL) [![A](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/RatingBadge/A-16px.png 'A')](https://sonarcloud.io/project/issues?id=owncloud_ocis&pullRequest=4447&resolved=false&types=CODE_SMELL) [0 Code Smells](https://sonarcloud.io/project/issues?id=owncloud_ocis&pullRequest=4447&resolved=false&types=CODE_SMELL)

[![0.0%](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/CoverageChart/0-16px.png '0.0%')](https://sonarcloud.io/component_measures?id=owncloud_ocis&pullRequest=4447&metric=new_coverage&view=list) [0.0% Coverage](https://sonarcloud.io/component_measures?id=owncloud_ocis&pullRequest=4447&metric=new_coverage&view=list)  
[![0.0%](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/Duplications/3-16px.png '0.0%')](https://sonarcloud.io/component_measures?id=owncloud_ocis&pullRequest=4447&metric=new_duplicated_lines_density&view=list) [0.0% Duplication](https://sonarcloud.io/component_measures?id=owncloud_ocis&pullRequest=4447&metric=new_duplicated_lines_density&view=list)


sonarcloud[bot]: SonarCloud Quality Gate failed.&nbsp; &nbsp; [![Quality Gate failed](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/QualityGateBadge/failed-16px.png 'Quality Gate failed')](https://sonarcloud.io/dashboard?id=owncloud_ocis&pullRequest=4447)

[![Bug](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/bug-16px.png 'Bug')](https://sonarcloud.io/project/issues?id=owncloud_ocis&pullRequest=4447&resolved=false&types=BUG) [![C](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/RatingBadge/C-16px.png 'C')](https://sonarcloud.io/project/issues?id=owncloud_ocis&pullRequest=4447&resolved=false&types=BUG) [1 Bug](https://sonarcloud.io/project/issues?id=owncloud_ocis&pullRequest=4447&resolved=false&types=BUG)  
[![Vulnerability](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/vulnerability-16px.png 'Vulnerability')](https://sonarcloud.io/project/issues?id=owncloud_ocis&pullRequest=4447&resolved=false&types=VULNERABILITY) [![A](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/RatingBadge/A-16px.png 'A')](https://sonarcloud.io/project/issues?id=owncloud_ocis&pullRequest=4447&resolved=false&types=VULNERABILITY) [0 Vulnerabilities](https://sonarcloud.io/project/issues?id=owncloud_ocis&pullRequest=4447&resolved=false&types=VULNERABILITY)  
[![Security Hotspot](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/security_hotspot-16px.png 'Security Hotspot')](https://sonarcloud.io/project/security_hotspots?id=owncloud_ocis&pullRequest=4447&resolved=false&types=SECURITY_HOTSPOT) [![A](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/RatingBadge/A-16px.png 'A')](https://sonarcloud.io/project/security_hotspots?id=owncloud_ocis&pullRequest=4447&resolved=false&types=SECURITY_HOTSPOT) [0 Security Hotspots](https://sonarcloud.io/project/security_hotspots?id=owncloud_ocis&pullRequest=4447&resolved=false&types=SECURITY_HOTSPOT)  
[![Code Smell](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/code_smell-16px.png 'Code Smell')](https://sonarcloud.io/project/issues?id=owncloud_ocis&pullRequest=4447&resolved=false&types=CODE_SMELL) [![A](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/RatingBadge/A-16px.png 'A')](https://sonarcloud.io/project/issues?id=owncloud_ocis&pullRequest=4447&resolved=false&types=CODE_SMELL) [0 Code Smells](https://sonarcloud.io/project/issues?id=owncloud_ocis&pullRequest=4447&resolved=false&types=CODE_SMELL)

[![0.0%](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/CoverageChart/0-16px.png '0.0%')](https://sonarcloud.io/component_measures?id=owncloud_ocis&pullRequest=4447&metric=new_coverage&view=list) [0.0% Coverage](https://sonarcloud.io/component_measures?id=owncloud_ocis&pullRequest=4447&metric=new_coverage&view=list)  
[![0.0%](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/Duplications/3-16px.png '0.0%')](https://sonarcloud.io/component_measures?id=owncloud_ocis&pullRequest=4447&metric=new_duplicated_lines_density&view=list) [0.0% Duplication](https://sonarcloud.io/component_measures?id=owncloud_ocis&pullRequest=4447&metric=new_duplicated_lines_density&view=list)


sonarcloud[bot]: SonarCloud Quality Gate failed.&nbsp; &nbsp; [![Quality Gate failed](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/QualityGateBadge/failed-16px.png 'Quality Gate failed')](https://sonarcloud.io/dashboard?id=owncloud_ocis&pullRequest=4447)

[![Bug](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/bug-16px.png 'Bug')](https://sonarcloud.io/project/issues?id=owncloud_ocis&pullRequest=4447&resolved=false&types=BUG) [![C](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/RatingBadge/C-16px.png 'C')](https://sonarcloud.io/project/issues?id=owncloud_ocis&pullRequest=4447&resolved=false&types=BUG) [1 Bug](https://sonarcloud.io/project/issues?id=owncloud_ocis&pullRequest=4447&resolved=false&types=BUG)  
[![Vulnerability](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/vulnerability-16px.png 'Vulnerability')](https://sonarcloud.io/project/issues?id=owncloud_ocis&pullRequest=4447&resolved=false&types=VULNERABILITY) [![A](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/RatingBadge/A-16px.png 'A')](https://sonarcloud.io/project/issues?id=owncloud_ocis&pullRequest=4447&resolved=false&types=VULNERABILITY) [0 Vulnerabilities](https://sonarcloud.io/project/issues?id=owncloud_ocis&pullRequest=4447&resolved=false&types=VULNERABILITY)  
[![Security Hotspot](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/security_hotspot-16px.png 'Security Hotspot')](https://sonarcloud.io/project/security_hotspots?id=owncloud_ocis&pullRequest=4447&resolved=false&types=SECURITY_HOTSPOT) [![A](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/RatingBadge/A-16px.png 'A')](https://sonarcloud.io/project/security_hotspots?id=owncloud_ocis&pullRequest=4447&resolved=false&types=SECURITY_HOTSPOT) [0 Security Hotspots](https://sonarcloud.io/project/security_hotspots?id=owncloud_ocis&pullRequest=4447&resolved=false&types=SECURITY_HOTSPOT)  
[![Code Smell](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/code_smell-16px.png 'Code Smell')](https://sonarcloud.io/project/issues?id=owncloud_ocis&pullRequest=4447&resolved=false&types=CODE_SMELL) [![A](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/RatingBadge/A-16px.png 'A')](https://sonarcloud.io/project/issues?id=owncloud_ocis&pullRequest=4447&resolved=false&types=CODE_SMELL) [0 Code Smells](https://sonarcloud.io/project/issues?id=owncloud_ocis&pullRequest=4447&resolved=false&types=CODE_SMELL)

[![0.0%](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/CoverageChart/0-16px.png '0.0%')](https://sonarcloud.io/component_measures?id=owncloud_ocis&pullRequest=4447&metric=new_coverage&view=list) [0.0% Coverage](https://sonarcloud.io/component_measures?id=owncloud_ocis&pullRequest=4447&metric=new_coverage&view=list)  
[![0.0%](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/Duplications/3-16px.png '0.0%')](https://sonarcloud.io/component_measures?id=owncloud_ocis&pullRequest=4447&metric=new_duplicated_lines_density&view=list) [0.0% Duplication](https://sonarcloud.io/component_measures?id=owncloud_ocis&pullRequest=4447&metric=new_duplicated_lines_density&view=list)


sonarcloud[bot]: Kudos, SonarCloud Quality Gate passed!&nbsp; &nbsp; [![Quality Gate passed](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/QualityGateBadge/passed-16px.png 'Quality Gate passed')](https://sonarcloud.io/dashboard?id=owncloud_ocis&pullRequest=4447)

[![Bug](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/bug-16px.png 'Bug')](https://sonarcloud.io/project/issues?id=owncloud_ocis&pullRequest=4447&resolved=false&types=BUG) [![A](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/RatingBadge/A-16px.png 'A')](https://sonarcloud.io/project/issues?id=owncloud_ocis&pullRequest=4447&resolved=false&types=BUG) [0 Bugs](https://sonarcloud.io/project/issues?id=owncloud_ocis&pullRequest=4447&resolved=false&types=BUG)  
[![Vulnerability](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/vulnerability-16px.png 'Vulnerability')](https://sonarcloud.io/project/issues?id=owncloud_ocis&pullRequest=4447&resolved=false&types=VULNERABILITY) [![A](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/RatingBadge/A-16px.png 'A')](https://sonarcloud.io/project/issues?id=owncloud_ocis&pullRequest=4447&resolved=false&types=VULNERABILITY) [0 Vulnerabilities](https://sonarcloud.io/project/issues?id=owncloud_ocis&pullRequest=4447&resolved=false&types=VULNERABILITY)  
[![Security Hotspot](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/security_hotspot-16px.png 'Security Hotspot')](https://sonarcloud.io/project/security_hotspots?id=owncloud_ocis&pullRequest=4447&resolved=false&types=SECURITY_HOTSPOT) [![A](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/RatingBadge/A-16px.png 'A')](https://sonarcloud.io/project/security_hotspots?id=owncloud_ocis&pullRequest=4447&resolved=false&types=SECURITY_HOTSPOT) [0 Security Hotspots](https://sonarcloud.io/project/security_hotspots?id=owncloud_ocis&pullRequest=4447&resolved=false&types=SECURITY_HOTSPOT)  
[![Code Smell](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/code_smell-16px.png 'Code Smell')](https://sonarcloud.io/project/issues?id=owncloud_ocis&pullRequest=4447&resolved=false&types=CODE_SMELL) [![A](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/RatingBadge/A-16px.png 'A')](https://sonarcloud.io/project/issues?id=owncloud_ocis&pullRequest=4447&resolved=false&types=CODE_SMELL) [0 Code Smells](https://sonarcloud.io/project/issues?id=owncloud_ocis&pullRequest=4447&resolved=false&types=CODE_SMELL)

[![0.0%](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/CoverageChart/0-16px.png '0.0%')](https://sonarcloud.io/component_measures?id=owncloud_ocis&pullRequest=4447&metric=new_coverage&view=list) [0.0% Coverage](https://sonarcloud.io/component_measures?id=owncloud_ocis&pullRequest=4447&metric=new_coverage&view=list)  
[![0.0%](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/Duplications/3-16px.png '0.0%')](https://sonarcloud.io/component_measures?id=owncloud_ocis&pullRequest=4447&metric=new_duplicated_lines_density&view=list) [0.0% Duplication](https://sonarcloud.io/component_measures?id=owncloud_ocis&pullRequest=4447&metric=new_duplicated_lines_density&view=list)



Patch:
diff --git a/.drone.env b/.drone.env
index 2d7636bcdce..a8f36753cf8 100644
--- a/.drone.env
+++ b/.drone.env
@@ -1,5 +1,5 @@
 # The test runner source for API tests
-CORE_COMMITID=c9acf31ed161b66264ac5022b0d3fe148f349222
+CORE_COMMITID=db3913cd9ba67b2d603f8917017734903dfd432a
 CORE_BRANCH=master
 
 # The test runner source for UI tests
diff --git a/.drone.star b/.drone.star
index 2ad14a48fda..95fe42377fe 100644
--- a/.drone.star
+++ b/.drone.star
@@ -339,7 +339,6 @@ def testPipelines(ctx):
             localApiTests(ctx, "ocis", "apiAccountsHashDifficulty"),
             localApiTests(ctx, "ocis", "apiSpaces"),
             localApiTests(ctx, "ocis", "apiArchiver"),
-            localApiTests(ctx, "ocis", "apiGraph"),
         ]
 
     if "skip" not in config["apiTests"] or not config["apiTests"]["skip"]:
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 9792567cac7..6d713b52766 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -6,50 +6,157 @@ The following sections list the changes for unreleased.
 
 ## Summary
 
-* Bugfix - Disable default expiration for public links: [#4445](https://github.com/owncloud/ocis/issues/4445)
-* Enhancement - Add previewFileMimeTypes to web default config: [#4414](https://github.com/owncloud/ocis/pull/4414)
-* Enhancement - Refactor the proxy service: [#4401](https://github.com/owncloud/ocis/issues/4401)
+* Bugfix - Fix configuration of mimetypes for the app registry: [#4411](https://github.com/owncloud/ocis/pull/4411)
+* Bugfix - Show help for some commands when unconfigured: [#4405](https://github.com/owncloud/ocis/pull/4405)
+* Bugfix - Autocreate IDP private key also if file exists but is empty: [#4394](https://github.com/owncloud/ocis/pull/4394)
+* Bugfix - Rename extensions to services (leftover occurences): [#4407](https://github.com/owncloud/ocis/pull/4407)
+* Change - Rename "uploads purge" command to "uploads clean": [#4403](https://github.com/owncloud/ocis/pull/4403)
+* Enhancement - Add /app/open-with-web endpoint: [#4376](https://github.com/owncloud/ocis/pull/4376)
+* Enhancement - Added language option to the app provider: [#4399](https://github.com/owncloud/ocis/pull/4399)
+* Enhancement - Add configuration options for mail authentication and encryption: [#4443](https://github.com/owncloud/ocis/pull/4443)
+* Enhancement - Added command to reset administrator password: [#4084](https://github.com/owncloud/ocis/issues/4084)
+* Enhancement - Rewrite of the request authentication middleware: [#4374](https://github.com/owncloud/ocis/pull/4374)
+* Enhancement - Update reva to v2.8.0: [#4444](https://github.com/owncloud/ocis/pull/4444)
+* Enhancement - Update ownCloud Web to v5.7.0-rc.10: [#4439](https://github.com/owncloud/ocis/pull/4439)
 
 ## Details
 
-* Bugfix - Disable default expiration for public links: [#4445](https://github.com/owncloud/ocis/issues/4445)
+* Bugfix - Fix configuration of mimetypes for the app registry: [#4411](https://github.com/owncloud/ocis/pull/4411)
+
+   We've fixed the configuration option for mimetypes in the app registry. Previously the
+   default config would always be merged over the user provided configuration. Now the default
+   mimetype configuration is only used if the user does not providy any mimetype configuration
+   (like it is already done in the proxy with the routes configuration).
+
+   https://github.com/owncloud/ocis/pull/4411
+
+* Bugfix - Show help for some commands when unconfigured: [#4405](https://github.com/owncloud/ocis/pull/4405)
+
+   We've fixed some commands to show the help also when oCIS is not yet configured. Previously the
+   help was not displayed to the user but instead a configuration validation error.
+
+   https://github.com/owncloud/ocis/pull/4405
+
+* Bugfix - Autocreate IDP private key also if file exists but is empty: [#4394](https://github.com/owncloud/ocis/pull/4394)
+
+   We've fixed the behavior for the IDP private key generation so that a private key is also
+   generated when the file already exists but is empty.
+
+   https://github.com/owncloud/ocis/pull/4394
+
+* Bugfix - Rename extensions to services (leftover occurences): [#4407](https://github.com/owncloud/ocis/pull/4407)
+
+   We've already renamed extensions to services in previous PRs and this PR peforms this rename
+   for leftover occurences.
+
+   https://github.com/owncloud/ocis/pull/4407
+
+* Change - Rename "uploads purge" command to "uploads clean": [#4403](https://github.com/owncloud/ocis/pull/4403)
+
+   We've renamed the storage-users service's "uploads purge" command to "upload clean".
+
+   https://github.com/owncloud/ocis/pull/4403
+
+* Enhancement - Add /app/open-with-web endpoint: [#4376](https://github.com/owncloud/ocis/pull/4376)
+
+   We've added an /app/open-with-web endpoint to the app provider, so that clients that are no
+   browser or have only limited browser access can also open apps with the help of a Web URL.
+
+   https://github.com/owncloud/ocis/pull/4376
+   https://github.com/cs3org/reva/pull/3143
+
+* Enhancement - Added language option to the app provider: [#4399](https://github.com/owncloud/ocis/pull/4399)
+
+   We've added a language option to the app provider which will in the end be passed to the app a user
+   opens so that the web ui is displayed in the users language.
+
+   https://github.com/owncloud/ocis/issues/4367
+   https://github.com/owncloud/ocis/pull/4399
+   https://github.com/cs3org/reva/pull/3156
+
+* Enhancement - Add configuration options for mail authentication and encryption: [#4443](https://github.com/owncloud/ocis/pull/4443)
+
+   We've added configuration options to configure the authentication and encryption for
+   sending mails in the notifications service.
+
+   Furthermore there is now a distinguished configuration option for the username to use for
+   authentication against the mail server. This allows you to customize the sender address to
+   your liking. For example sender addresses like `my oCIS instance <ocis@owncloud.test>` are
+   now possible, too.
+
+   https://github.com/owncloud/ocis/pull/4443
+
+* Enhancement - Added command to reset administrator password: [#4084](https://github.com/owncloud/ocis/issues/4084)
 
-   The default expiration for public links was enabled in the capabilities without providing a
-   (then required) default amount of days for clients to pick a reasonable expiration date upon
-   link creation. This has been fixed by disabling the default expiration for public links in the
-   capabilities. With this configuration clients will no longer set a default expiration date
-   upon link creation.
+   The new command `ocis idm resetpassword` allows to reset the administrator password when ocis
+   is not running. So it is possible to recover setups where the admin password was lost.
 
-   https://github.com/owncloud/ocis/issues/4445
-   https://github.com/owncloud/ocis/pull/4475
+   https://github.com/owncloud/ocis/issues/4084
+   https://github.com/owncloud/ocis/pull/4365
 
-* Enhancement - Add previewFileMimeTypes to web default config: [#4414](https://github.com/owncloud/ocis/pull/4414)
+* Enhancement - Rewrite of the request authentication middleware: [#4374](https://github.com/owncloud/ocis/pull/4374)
 
-   We've added previewFileMimeTypes to the web default config, so web can determine which
-   preview types are supported by the backend.
+   There were some flaws in the authentication middleware which were resolved by this rewrite.
+   This rewrite also introduced the need to manually mark certain paths as "unprotected" if
+   requests to these paths must not be authenticated.
 
-   https://github.com/owncloud/ocis/pull/4414
+   https://github.com/owncloud/ocis/pull/4374
 
-* Enhancement - Refactor the proxy service: [#4401](https://github.com/owncloud/ocis/issues/4401)
+* Enhancement - Update reva to v2.8.0: [#4444](https://github.com/owncloud/ocis/pull/4444)
 
-   The routes of the proxy service now have a "unprotected" flag. This is used by the
-   authentication middleware to determine if the request needs to be blocked when missing
-   authentication or not.
+   Updated reva to version 2.8.0. This update includes:
 
-   https://github.com/owncloud/ocis/issues/4401
-   https://github.com/owncloud/ocis/pull/4461
-# Changelog for [2.0.0-beta.7] (2022-08-26)
+  * Bugfix [cs3org/reva#3158](https://github.com/cs3org/reva/pull/3158): Add name to the propfind response
+  * Bugfix [cs3org/reva#3157](https://github.com/cs3org/reva/pull/3157): Fix locking response codes
+  * Bugfix [cs3org/reva#3152](https://github.com/cs3org/reva/pull/3152): Disable caching of not found stat responses
+  * Bugfix [cs3org/reva#4251](https://github.com/cs3org/reva/pull/4251): Disable caching
+  * Enhancement [cs3org/reva#3154](https://github.com/cs3org/reva/pull/3154): Dataproviders now return file metadata
+  * Enhancement [cs3org/reva#3143](https://github.com/cs3org/reva/pull/3143): Add /app/open-with-web endpoint
+  * Enhancement [cs3org/reva#3156](https://github.com/cs3org/reva/pull/3156): Added language option to the app provider
+  * Enhancement [cs3org/reva#3148](https://github.com/cs3org/reva/pull/3148): Add new jsoncs3 share manager
 
-The following sections list the changes for 2.0.0-beta.7.
+   https://github.com/owncloud/ocis/pull/4444
+
+* Enhancement - Update ownCloud Web to v5.7.0-rc.10: [#4439](https://github.com/owncloud/ocis/pull/4439)
+
+   Tags: web
 
-[2.0.0-beta.7]: https://github.com/owncloud/ocis/compare/v1.20.0...v2.0.0-beta.7
+   We updated ownCloud Web to v5.7.0-rc.10. Please refer to the changelog (linked) for details on
+   the web release.
+
+  * Bugfix [owncloud/web#7443](https://github.com/owncloud/web/pull/7443): Datetime formatting
+  * Bugfix [owncloud/web#7437](https://github.com/owncloud/web/pull/7437): Default to user context
+  * Bugfix [owncloud/web#7473](https://github.com/owncloud/web/pull/7473): Dragging a file causes no selection
+  * Bugfix [owncloud/web#7469](https://github.com/owncloud/web/pull/7469): File size not updated while restoring file version
+  * Bugfix [owncloud/web#7443](https://github.com/owncloud/web/pull/7443): File size formatting
+  * Bugfix [owncloud/web#7474](https://github.com/owncloud/web/pull/7474): Load only supported thumbnails (configurable)
+  * Bugfix [owncloud/web#7309](https://github.com/owncloud/web/pull/7309): SidebarNavItem icon flickering
+  * Bugfix [owncloud/web#7425](https://github.com/owncloud/web/pull/7425): Open Folder in project space context menu
+  * Bugfix [owncloud/web#7486](https://github.com/owncloud/web/issues/7486): Prevent unnecessary PROPFIND request during upload
+  * Bugfix [owncloud/web#7415](https://github.com/owncloud/web/pull/7415): Re-fetch quota
+  * Bugfix [owncloud/web#7478](https://github.com/owncloud/web/issues/7478): "Shared via"-indicator for links
+  * Bugfix [owncloud/web#7480](https://github.com/owncloud/web/issues/7480): Missing space image in sidebar
+  * Bugfix [owncloud/web#7436](https://github.com/owncloud/web/issues/7436): Hide share actions for space viewers/editors
+  * Bugfix [owncloud/web#7445](https://github.com/owncloud/web/pull/7445): User management app close side bar throws error
+  * Enhancement [owncloud/web#7309](https://github.com/owncloud/web/pull/7309): Keyboard shortcut indicators in ContextMenu
+  * Enhancement [owncloud/web#7309](https://github.com/owncloud/web/pull/7309): Lowlight cut resources
+  * Enhancement [owncloud/web#7133](https://github.com/owncloud/web/pull/7133): Permissionless (internal) link shares
+  * Enhancement [owncloud/web#7309](https://github.com/owncloud/web/pull/7309): Replace locationpicker with clipboard actions
+  * Enhancement [owncloud/web#7363](https://github.com/owncloud/web/pull/7363): Streamline UI sizings
+  * Enhancement [owncloud/web#7355](https://github.com/owncloud/web/pull/7355): Update ODS to v14.0.0-alpha.16
+  * Enhancement [owncloud/web#7476](https://github.com/owncloud/web/pull/7476): Users table on small screen
+  * Enhancement [owncloud/web#7182](https://github.com/owncloud/web/pull/7182): User management app edit quota
+
+   https://github.com/owncloud/ocis/pull/4439
+   https://github.com/owncloud/web/releases/tag/v5.7.0-rc.10
+# Changelog for [2.0.0-beta.6] (2022-08-11)
+
+The following sections list the changes for 2.0.0-beta.6.
+
+[2.0.0-beta.6]: https://github.com/owncloud/ocis/compare/v1.20.0...v2.0.0-beta.6
 
 ## Summary
 
-* Bugfix - Fix configuration of mimetypes for the app registry: [#4411](https://github.com/owncloud/ocis/pull/4411)
-* Bugfix - Show help for some commands when unconfigured: [#4405](https://github.com/owncloud/ocis/pull/4405)
-* Bugfix - Autocreate IDP private key also if file exists but is empty: [#4394](https://github.com/owncloud/ocis/pull/4394)
-* Bugfix - Rename extensions to services (leftover occurences): [#4407](https://github.com/owncloud/ocis/pull/4407)
 * Bugfix - Fix DN parsing issues and sizelimit handling in libregraph/idm: [#3631](https://github.com/owncloud/ocis/issues/3631)
 * Bugfix - Remove runtime kill and run commands: [#3740](https://github.com/owncloud/ocis/pull/3740)
 * Bugfix - Check permissions when deleting Space: [#3709](https://github.com/owncloud/ocis/pull/3709)
@@ -103,7 +210,6 @@ The following sections list the changes for 2.0.0-beta.7.
 * Change - Load configuration files just from one directory: [#3587](https://github.com/owncloud/ocis/pull/3587)
 * Change - Reduce permissions on docker image predeclared volumes: [#3641](https://github.com/owncloud/ocis/pull/3641)
 * Change - Introduce `ocis init` and remove all default secrets: [#3551](https://github.com/owncloud/ocis/pull/3551)
-* Change - Rename "uploads purge" command to "uploads clean": [#4403](https://github.com/owncloud/ocis/pull/4403)
 * Change - The `glauth` and `accounts` services are removed: [#3685](https://github.com/owncloud/ocis/pull/3685)
 * Change - Reduce drives in graph /me/drives API: [#3629](https://github.com/owncloud/ocis/pull/3629)
 * Change - Switched default configuration to use libregraph/idm: [#3331](https://github.com/owncloud/ocis/pull/3331)
@@ -122,13 +228,9 @@ The following sections list the changes for 2.0.0-beta.7.
 * Enhancement - Add audit events for created containers: [#3941](https://github.com/owncloud/ocis/pull/3941)
 * Enhancement - Don't setup demo role assignments on default: [#3661](https://github.com/owncloud/ocis/issues/3661)
 * Enhancement - Improve validation of OIDC access tokens: [#3841](https://github.com/owncloud/ocis/issues/3841)
-* Enhancement - Add /app/open-with-web endpoint: [#4376](https://github.com/owncloud/ocis/pull/4376)
-* Enhancement - Added language option to the app provider: [#4399](https://github.com/owncloud/ocis/pull/4399)
 * Enhancement - Improve error log for "could not get user by claim" error: [#4227](https://github.com/owncloud/ocis/pull/4227)
-* Enhancement - Add configuration options for mail authentication and encryption: [#4443](https://github.com/owncloud/ocis/pull/4443)
 * Enhancement - Introduce service registry cache: [#3833](https://github.com/owncloud/ocis/pull/3833)
 * Enhancement - Reintroduce user autoprovisioning in proxy: [#3860](https://github.com/owncloud/ocis/pull/3860)
-* Enhancement - Added command to reset administrator password: [#4084](https://github.com/owncloud/ocis/issues/4084)
 * Enhancement - Disable the color logging in docker compose examples: [#871](https://github.com/owncloud/ocis/issues/871)
 * Enhancement - Allow providing list of services NOT to start: [#4254](https://github.com/owncloud/ocis/pull/4254)
 * Enhancement - Introduce insecure flag for smtp email notifications: [#4279](https://github.com/owncloud/ocis/pull/4279)
@@ -141,11 +243,9 @@ The following sections list the changes for 2.0.0-beta.7.
 * Enhancement - Update IdP UI: [#3493](https://github.com/owncloud/ocis/issues/3493)
 * Enhancement - Wrap metadata storage with dedicated reva gateway: [#3602](https://github.com/owncloud/ocis/pull/3602)
 * Enhancement - New migrate command for migrating shares and public shares: [#3987](https://github.com/owncloud/ocis/pull/3987)
-* Enhancement - Add missing unprotected paths: [#4454](https://github.com/owncloud/ocis/pull/4454)
 * Enhancement - Product field in OCS version: [#2918](https://github.com/owncloud/ocis/pull/2918)
 * Enhancement - Refactor extensions to services: [#3980](https://github.com/owncloud/ocis/pull/3980)
 * Enhancement - Allow resharing: [#3904](https://github.com/owncloud/ocis/pull/3904)
-* Enhancement - Rewrite of the request authentication middleware: [#4374](https://github.com/owncloud/ocis/pull/4374)
 * Enhancement - Add initial version of the search extensions: [#3635](https://github.com/owncloud/ocis/pull/3635)
 * Enhancement - Add capability for public link single file edit: [#6787](https://github.com/owncloud/web/pull/6787)
 * Enhancement - Added `share_jail` and `projects` feature flags in spaces capability: [#3626](https://github.com/owncloud/ocis/pull/3626)
@@ -156,7 +256,6 @@ The following sections list the changes for 2.0.0-beta.7.
 * Enhancement - Update reva: [#3944](https://github.com/owncloud/ocis/pull/3944)
 * Enhancement - Update reva to version 2.7.2: [#4115](https://github.com/owncloud/ocis/pull/4115)
 * Enhancement - Update reva to v2.7.4: [#4294](https://github.com/owncloud/ocis/pull/4294)
-* Enhancement - Update reva to v2.8.0: [#4444](https://github.com/owncloud/ocis/pull/4444)
 * Enhancement - Update reva to version 2.4.1: [#3746](https://github.com/owncloud/ocis/pull/3746)
 * Enhancement - Update reva to version 2.5.1: [#3932](https://github.com/owncloud/ocis/pull/3932)
 * Enhancement - Update reva to v2.3.1: [#3552](https://github.com/owncloud/ocis/pull/3552)
@@ -166,43 +265,12 @@ The following sections list the changes for 2.0.0-beta.7.
 * Enhancement - Update ownCloud Web to v5.7.0-rc.1: [#4005](https://github.com/owncloud/ocis/pull/4005)
 * Enhancement - Update ownCloud Web to v5.7.0-rc.4: [#4140](https://github.com/owncloud/ocis/pull/4140)
 * Enhancement - Update ownCloud Web to v5.7.0-rc.8: [#4314](https://github.com/owncloud/ocis/pull/4314)
-* Enhancement - Update ownCloud Web to v5.7.0-rc.10: [#4439](https://github.com/owncloud/ocis/pull/4439)
 * Enhancement - Expand personal drive on the graph user: [#4357](https://github.com/owncloud/ocis/pull/4357)
 * Enhancement - Add descriptions to webdav configuration: [#3755](https://github.com/owncloud/ocis/pull/3755)
 * Enhancement - Search service at the old webdav endpoint: [#4118](https://github.com/owncloud/ocis/pull/4118)
 
 ## Details
 
-* Bugfix - Fix configuration of mimetypes for the app registry: [#4411](https://github.com/owncloud/ocis/pull/4411)
-
-   We've fixed the configuration option for mimetypes in the app registry. Previously the
-   default config would always be merged over the user provided configuration. Now the default
-   mimetype configuration is only used if the user does not providy any mimetype configuration
-   (like it is already done in the proxy with the routes configuration).
-
-   https://github.com/owncloud/ocis/pull/4411
-
-* Bugfix - Show help for some commands when unconfigured: [#4405](https://github.com/owncloud/ocis/pull/4405)
-
-   We've fixed some commands to show the help also when oCIS is not yet configured. Previously the
-   help was not displayed to the user but instead a configuration validation error.
-
-   https://github.com/owncloud/ocis/pull/4405
-
-* Bugfix - Autocreate IDP private key also if file exists but is empty: [#4394](https://github.com/owncloud/ocis/pull/4394)
-
-   We've fixed the behavior for the IDP private key generation so that a private key is also
-   generated when the file already exists but is empty.
-
-   https://github.com/owncloud/ocis/pull/4394
-
-* Bugfix - Rename extensions to services (leftover occurences): [#4407](https://github.com/owncloud/ocis/pull/4407)
-
-   We've already renamed extensions to services in previous PRs and this PR peforms this rename
-   for leftover occurences.
-
-   https://github.com/owncloud/ocis/pull/4407
-
 * Bugfix - Fix DN parsing issues and sizelimit handling in libregraph/idm: [#3631](https://github.com/owncloud/ocis/issues/3631)
 
    We fixed a couple on issues in libregraph/idm related to correctly parsing LDAP DNs for
@@ -660,12 +728,6 @@ The following sections list the changes for 2.0.0-beta.7.
    https://github.com/owncloud/ocis/pull/3551
    https://github.com/owncloud/ocis/pull/3743
 
-* Change - Rename "uploads purge" command to "uploads clean": [#4403](https://github.com/owncloud/ocis/pull/4403)
-
-   We've renamed the storage-users service's "uploads purge" command to "upload clean".
-
-   https://github.com/owncloud/ocis/pull/4403
-
 * Change - The `glauth` and `accounts` services are removed: [#3685](https://github.com/owncloud/ocis/pull/3685)
 
    After switching the default configuration to libregraph/idm we could remove the glauth and
@@ -803,23 +865,6 @@ The following sections list the changes for 2.0.0-beta.7.
    https://github.com/owncloud/ocis/issues/3841
    https://github.com/owncloud/ocis/pull/4227
 
-* Enhancement - Add /app/open-with-web endpoint: [#4376](https://github.com/owncloud/ocis/pull/4376)
-
-   We've added an /app/open-with-web endpoint to the app provider, so that clients that are no
-   browser or have only limited browser access can also open apps with the help of a Web URL.
-
-   https://github.com/owncloud/ocis/pull/4376
-   https://github.com/cs3org/reva/pull/3143
-
-* Enhancement - Added language option to the app provider: [#4399](https://github.com/owncloud/ocis/pull/4399)
-
-   We've added a language option to the app provider which will in the end be passed to the app a user
-   opens so that the web ui is displayed in the users language.
-
-   https://github.com/owncloud/ocis/issues/4367
-   https://github.com/owncloud/ocis/pull/4399
-   https://github.com/cs3org/reva/pull/3156
-
 * Enhancement - Improve error log for "could not get user by claim" error: [#4227](https://github.com/owncloud/ocis/pull/4227)
 
    We've improved the error log for "could not get user by claim" error where previously only the
@@ -827,18 +872,6 @@ The following sections list the changes for 2.0.0-beta.7.
 
    https://github.com/owncloud/ocis/pull/4227
 
-* Enhancement - Add configuration options for mail authentication and encryption: [#4443](https://github.com/owncloud/ocis/pull/4443)
-
-   We've added configuration options to configure the authentication and encryption for
-   sending mails in the notifications service.
-
-   Furthermore there is now a distinguished configuration option for the username to use for
-   authentication against the mail server. This allows you to customize the sender address to
-   your liking. For example sender addresses like `my oCIS instance <ocis@owncloud.test>` are
-   now possible, too.
-
-   https://github.com/owncloud/ocis/pull/4443
-
 * Enhancement - Introduce service registry cache: [#3833](https://github.com/owncloud/ocis/pull/3833)
 
    We've improved the service registry / service discovery by setting up registry caching (TTL
@@ -854,14 +887,6 @@ The following sections list the changes for 2.0.0-beta.7.
 
    https://github.com/owncloud/ocis/pull/3860
 
-* Enhancement - Added command to reset administrator password: [#4084](https://github.com/owncloud/ocis/issues/4084)
-
-   The new command `ocis idm resetpassword` allows to reset the administrator password when ocis
-   is not running. So it is possible to recover setups where the admin password was lost.
-
-   https://github.com/owncloud/ocis/issues/4084
-   https://github.com/owncloud/ocis/pull/4365
-
 * Enhancement - Disable the color logging in docker compose examples: [#871](https://github.com/owncloud/ocis/issues/871)
 
    Disabled the color logging in the example docker compose deployments. Although colored logs
@@ -967,14 +992,6 @@ The following sections list the changes for 2.0.0-beta.7.
    https://github.com/owncloud/ocis/pull/3987
    https://github.com/owncloud/ocis/pull/4019
 
-* Enhancement - Add missing unprotected paths: [#4454](https://github.com/owncloud/ocis/pull/4454)
-
-   Added missing unprotected paths for the text-editor, preview, pdf-viewer, draw-io and
-   index.html to the authentication middleware.
-
-   https://github.com/owncloud/ocis/pull/4454
-   https://github.com/owncloud/ocis/pull/4458
-
 * Enhancement - Product field in OCS version: [#2918](https://github.com/owncloud/ocis/pull/2918)
 
    We've added a new field to the OCS Version, which is supposed to announce the product name. The
@@ -996,14 +1013,6 @@ The following sections list the changes for 2.0.0-beta.7.
 
    https://github.com/owncloud/ocis/pull/3904
 
-* Enhancement - Rewrite of the request authentication middleware: [#4374](https://github.com/owncloud/ocis/pull/4374)
-
-   There were some flaws in the authentication middleware which were resolved by this rewrite.
-   This rewrite also introduced the need to manually mark certain paths as "unprotected" if
-   requests to these paths must not be authenticated.
-
-   https://github.com/owncloud/ocis/pull/4374
-
 * Enhancement - Add initial version of the search extensions: [#3635](https://github.com/owncloud/ocis/pull/3635)
 
    It is now possible to search for files and directories by their name using the web UI. Therefor
@@ -1174,21 +1183,6 @@ The following sections list the changes for 2.0.0-beta.7.
    https://github.com/owncloud/ocis/pull/4330
    https://github.com/owncloud/ocis/pull/4369
 
-* Enhancement - Update reva to v2.8.0: [#4444](https://github.com/owncloud/ocis/pull/4444)
-
-   Updated reva to version 2.8.0. This update includes:
-
-  * Bugfix [cs3org/reva#3158](https://github.com/cs3org/reva/pull/3158): Add name to the propfind response
-  * Bugfix [cs3org/reva#3157](https://github.com/cs3org/reva/pull/3157): Fix locking response codes
-  * Bugfix [cs3org/reva#3152](https://github.com/cs3org/reva/pull/3152): Disable caching of not found stat responses
-  * Bugfix [cs3org/reva#4251](https://github.com/cs3org/reva/pull/4251): Disable caching
-  * Enhancement [cs3org/reva#3154](https://github.com/cs3org/reva/pull/3154): Dataproviders now return file metadata
-  * Enhancement [cs3org/reva#3143](https://github.com/cs3org/reva/pull/3143): Add /app/open-with-web endpoint
-  * Enhancement [cs3org/reva#3156](https://github.com/cs3org/reva/pull/3156): Added language option to the app provider
-  * Enhancement [cs3org/reva#3148](https://github.com/cs3org/reva/pull/3148): Add new jsoncs3 share manager
-
-   https://github.com/owncloud/ocis/pull/4444
-
 * Enhancement - Update reva to version 2.4.1: [#3746](https://github.com/owncloud/ocis/pull/3746)
 
    Changelog for reva 2.4.1 (2022-05-24) =======================================
@@ -1513,39 +1507,6 @@ The following sections list the changes for 2.0.0-beta.7.
    https://github.com/owncloud/ocis/pull/4314
    https://github.com/owncloud/web/releases/tag/v5.7.0-rc.8
 
-* Enhancement - Update ownCloud Web to v5.7.0-rc.10: [#4439](https://github.com/owncloud/ocis/pull/4439)
-
-   Tags: web
-
-   We updated ownCloud Web to v5.7.0-rc.10. Please refer to the changelog (linked) for details on
-   the web release.
-
-  * Bugfix [owncloud/web#7443](https://github.com/owncloud/web/pull/7443): Datetime formatting
-  * Bugfix [owncloud/web#7437](https://github.com/owncloud/web/pull/7437): Default to user context
-  * Bugfix [owncloud/web#7473](https://github.com/owncloud/web/pull/7473): Dragging a file causes no selection
-  * Bugfix [owncloud/web#7469](https://github.com/owncloud/web/pull/7469): File size not updated while restoring file version
-  * Bugfix [owncloud/web#7443](https://github.com/owncloud/web/pull/7443): File size formatting
-  * Bugfix [owncloud/web#7474](https://github.com/owncloud/web/pull/7474): Load only supported thumbnails (configurable)
-  * Bugfix [owncloud/web#7309](https://github.com/owncloud/web/pull/7309): SidebarNavItem icon flickering
-  * Bugfix [owncloud/web#7425](https://github.com/owncloud/web/pull/7425): Open Folder in project space context menu
-  * Bugfix [owncloud/web#7486](https://github.com/owncloud/web/issues/7486): Prevent unnecessary PROPFIND request during upload
-  * Bugfix [owncloud/web#7415](https://github.com/owncloud/web/pull/7415): Re-fetch quota
-  * Bugfix [owncloud/web#7478](https://github.com/owncloud/web/issues/7478): "Shared via"-indicator for links
-  * Bugfix [owncloud/web#7480](https://github.com/owncloud/web/issues/7480): Missing space image in sidebar
-  * Bugfix [owncloud/web#7436](https://github.com/owncloud/web/issues/7436): Hide share actions for space viewers/editors
-  * Bugfix [owncloud/web#7445](https://github.com/owncloud/web/pull/7445): User management app close side bar throws error
-  * Enhancement [owncloud/web#7309](https://github.com/owncloud/web/pull/7309): Keyboard shortcut indicators in ContextMenu
-  * Enhancement [owncloud/web#7309](https://github.com/owncloud/web/pull/7309): Lowlight cut resources
-  * Enhancement [owncloud/web#7133](https://github.com/owncloud/web/pull/7133): Permissionless (internal) link shares
-  * Enhancement [owncloud/web#7309](https://github.com/owncloud/web/pull/7309): Replace locationpicker with clipboard actions
-  * Enhancement [owncloud/web#7363](https://github.com/owncloud/web/pull/7363): Streamline UI sizings
-  * Enhancement [owncloud/web#7355](https://github.com/owncloud/web/pull/7355): Update ODS to v14.0.0-alpha.16
-  * Enhancement [owncloud/web#7476](https://github.com/owncloud/web/pull/7476): Users table on small screen
-  * Enhancement [owncloud/web#7182](https://github.com/owncloud/web/pull/7182): User management app edit quota
-
-   https://github.com/owncloud/ocis/pull/4439
-   https://github.com/owncloud/web/releases/tag/v5.7.0-rc.10
-
 * Enhancement - Expand personal drive on the graph user: [#4357](https://github.com/owncloud/ocis/pull/4357)
 
    We can now list the personal drive on the users endpoint via the graph API. A user can add an
@@ -1568,7 +1529,7 @@ The following sections list the changes for 2.0.0-beta.7.
 
 The following sections list the changes for 1.20.0.
 
-[1.20.0]: https://github.com/owncloud/ocis/compare/v1.19.0...v1.20.0
+[1.20.0]: https://github.com/owncloud/ocis/compare/v1.19.1...v1.20.0
 
 ## Summary
 
@@ -1736,11 +1697,28 @@ The following sections list the changes for 1.20.0.
    Group member remove
 
    https://github.com/owncloud/ocis/pull/3467
+# Changelog for [1.19.1] (2022-03-29)
+
+The following sections list the changes for 1.19.1.
+
+[1.19.1]: https://github.com/owncloud/ocis/compare/v1.19.0...v1.19.1
+
+## Summary
+
+* Bugfix - Return correct special item urls: [#3419](https://github.com/owncloud/ocis/pull/3419)
+
+## Details
+
+* Bugfix - Return correct special item urls: [#3419](https://github.com/owncloud/ocis/pull/3419)
+
+   URLs for Special items (space image, readme) were broken.
+
+   https://github.com/owncloud/ocis/pull/3419
 # Changelog for [1.19.0] (2022-03-29)
 
 The following sections list the changes for 1.19.0.
 
-[1.19.0]: https://github.com/owncloud/ocis/compare/v1.19.1...v1.19.0
+[1.19.0]: https://github.com/owncloud/ocis/compare/v1.18.0...v1.19.0
 
 ## Summary
 
@@ -1909,23 +1887,6 @@ The following sections list the changes for 1.19.0.
    https://github.com/owncloud/ocis/pull/3291
    https://github.com/owncloud/ocis/pull/3375
    https://github.com/owncloud/web/releases/tag/v5.3.0
-# Changelog for [1.19.1] (2022-03-29)
-
-The following sections list the changes for 1.19.1.
-
-[1.19.1]: https://github.com/owncloud/ocis/compare/v1.18.0...v1.19.1
-
-## Summary
-
-* Bugfix - Return correct special item urls: [#3419](https://github.com/owncloud/ocis/pull/3419)
-
-## Details
-
-* Bugfix - Return correct special item urls: [#3419](https://github.com/owncloud/ocis/pull/3419)
-
-   URLs for Special items (space image, readme) were broken.
-
-   https://github.com/owncloud/ocis/pull/3419
 # Changelog for [1.18.0] (2022-03-03)
 
 The following sections list the changes for 1.18.0.
diff --git a/changelog/2.0.0_2022-08-26/add-aliaslink-capability.md b/changelog/2.0.0_2022-08-11/add-aliaslink-capability.md
similarity index 100%
rename from changelog/2.0.0_2022-08-26/add-aliaslink-capability.md
rename to changelog/2.0.0_2022-08-11/add-aliaslink-capability.md
diff --git a/changelog/2.0.0_2022-08-26/add-drives-endpoint-and-userfilter.md b/changelog/2.0.0_2022-08-11/add-drives-endpoint-and-userfilter.md
similarity index 100%
rename from changelog/2.0.0_2022-08-26/add-drives-endpoint-and-userfilter.md
rename to changelog/2.0.0_2022-08-11/add-drives-endpoint-and-userfilter.md
diff --git a/changelog/2.0.0_2022-08-26/add-resharing-env.md b/changelog/2.0.0_2022-08-11/add-resharing-env.md
similarity index 100%
rename from changelog/2.0.0_2022-08-26/add-resharing-env.md
rename to changelog/2.0.0_2022-08-11/add-resharing-env.md
diff --git a/changelog/2.0.0_2022-08-26/add-total-to-search-results.md b/changelog/2.0.0_2022-08-11/add-total-to-search-results.md
similarity index 100%
rename from changelog/2.0.0_2022-08-26/add-total-to-search-results.md
rename to changelog/2.0.0_2022-08-11/add-total-to-search-results.md
diff --git a/changelog/2.0.0_2022-08-26/align-service-naming.md b/changelog/2.0.0_2022-08-11/align-service-naming.md
similarity index 100%
rename from changelog/2.0.0_2022-08-26/align-service-naming.md
rename to changelog/2.0.0_2022-08-11/align-service-naming.md
diff --git a/changelog/2.0.0_2022-08-26/audit-service.md b/changelog/2.0.0_2022-08-11/audit-service.md
similarity index 100%
rename from changelog/2.0.0_2022-08-26/audit-service.md
rename to changelog/2.0.0_2022-08-11/audit-service.md
diff --git a/changelog/2.0.0_2022-08-26/bump-libregraph-idm.md b/changelog/2.0.0_2022-08-11/bump-libregraph-idm.md
similarity index 100%
rename from changelog/2.0.0_2022-08-26/bump-libregraph-idm.md
rename to changelog/2.0.0_2022-08-11/bump-libregraph-idm.md
diff --git a/changelog/2.0.0_2022-08-26/bump-ocis-package-v2.md b/changelog/2.0.0_2022-08-11/bump-ocis-package-v2.md
similarity index 100%
rename from changelog/2.0.0_2022-08-26/bump-ocis-package-v2.md
rename to changelog/2.0.0_2022-08-11/bump-ocis-package-v2.md
diff --git a/changelog/2.0.0_2022-08-26/change-load-config-from-only-one-dir.md b/changelog/2.0.0_2022-08-11/change-load-config-from-only-one-dir.md
similarity index 100%
rename from changelog/2.0.0_2022-08-26/change-load-config-from-only-one-dir.md
rename to changelog/2.0.0_2022-08-11/change-load-config-from-only-one-dir.md
diff --git a/changelog/2.0.0_2022-08-26/change-ocis-docker-volume-permissions.md b/changelog/2.0.0_2022-08-11/change-ocis-docker-volume-permissions.md
similarity index 100%
rename from changelog/2.0.0_2022-08-26/change-ocis-docker-volume-permissions.md
rename to changelog/2.0.0_2022-08-11/change-ocis-docker-volume-permissions.md
diff --git a/changelog/2.0.0_2022-08-26/change-ocis-init.md b/changelog/2.0.0_2022-08-11/change-ocis-init.md
similarity index 100%
rename from changelog/2.0.0_2022-08-26/change-ocis-init.md
rename to changelog/2.0.0_2022-08-11/change-ocis-init.md
diff --git a/changelog/2.0.0_2022-08-26/change-remove-runtime-kill-run-commands.md b/changelog/2.0.0_2022-08-11/change-remove-runtime-kill-run-commands.md
similarity index 100%
rename from changelog/2.0.0_2022-08-26/change-remove-runtime-kill-run-commands.md
rename to changelog/2.0.0_2022-08-11/change-remove-runtime-kill-run-commands.md
diff --git a/changelog/2.0.0_2022-08-26/container-created-audit.md b/changelog/2.0.0_2022-08-11/container-created-audit.md
similarity index 100%
rename from changelog/2.0.0_2022-08-26/container-created-audit.md
rename to changelog/2.0.0_2022-08-11/container-created-audit.md
diff --git a/changelog/2.0.0_2022-08-26/default-role-assignments.md b/changelog/2.0.0_2022-08-11/default-role-assignments.md
similarity index 100%
rename from changelog/2.0.0_2022-08-26/default-role-assignments.md
rename to changelog/2.0.0_2022-08-11/default-role-assignments.md
diff --git a/changelog/2.0.0_2022-08-26/deleteSpacePermissions.md b/changelog/2.0.0_2022-08-11/deleteSpacePermissions.md
similarity index 100%
rename from changelog/2.0.0_2022-08-26/deleteSpacePermissions.md
rename to changelog/2.0.0_2022-08-11/deleteSpacePermissions.md
diff --git a/changelog/2.0.0_2022-08-26/enhancement-access-token-validation.md b/changelog/2.0.0_2022-08-11/enhancement-access-token-validation.md
similarity index 100%
rename from changelog/2.0.0_2022-08-26/enhancement-access-token-validation.md
rename to changelog/2.0.0_2022-08-11/enhancement-access-token-validation.md
diff --git a/changelog/2.0.0_2022-08-26/enhancement-error-by-claim.md b/changelog/2.0.0_2022-08-11/enhancement-error-by-claim.md
similarity index 100%
rename from changelog/2.0.0_2022-08-26/enhancement-error-by-claim.md
rename to changelog/2.0.0_2022-08-11/enhancement-error-by-claim.md
diff --git a/changelog/2.0.0_2022-08-26/enhancement-registry-cache.md b/changelog/2.0.0_2022-08-11/enhancement-registry-cache.md
similarity index 100%
rename from changelog/2.0.0_2022-08-26/enhancement-registry-cache.md
rename to changelog/2.0.0_2022-08-11/enhancement-registry-cache.md
diff --git a/changelog/2.0.0_2022-08-26/enhancement-user-autoprovision.md b/changelog/2.0.0_2022-08-11/enhancement-user-autoprovision.md
similarity index 100%
rename from changelog/2.0.0_2022-08-26/enhancement-user-autoprovision.md
rename to changelog/2.0.0_2022-08-11/enhancement-user-autoprovision.md
diff --git a/changelog/2.0.0_2022-08-26/example-deployments.md b/changelog/2.0.0_2022-08-11/example-deployments.md
similarity index 100%
rename from changelog/2.0.0_2022-08-26/example-deployments.md
rename to changelog/2.0.0_2022-08-11/example-deployments.md
diff --git a/changelog/2.0.0_2022-08-26/exclude-services-option.md b/changelog/2.0.0_2022-08-11/exclude-services-option.md
similarity index 100%
rename from changelog/2.0.0_2022-08-26/exclude-services-option.md
rename to changelog/2.0.0_2022-08-11/exclude-services-option.md
diff --git a/changelog/2.0.0_2022-08-26/feature-mail-insecure.md b/changelog/2.0.0_2022-08-11/feature-mail-insecure.md
similarity index 100%
rename from changelog/2.0.0_2022-08-26/feature-mail-insecure.md
rename to changelog/2.0.0_2022-08-11/feature-mail-insecure.md
diff --git a/changelog/2.0.0_2022-08-26/feature-optional-events-in-graph-service.md b/changelog/2.0.0_2022-08-11/feature-optional-events-in-graph-service.md
similarity index 100%
rename from changelog/2.0.0_2022-08-26/feature-optional-events-in-graph-service.md
rename to changelog/2.0.0_2022-08-11/feature-optional-events-in-graph-service.md
diff --git a/changelog/2.0.0_2022-08-26/feature-rewrite-well-known-openid-configuration.md b/changelog/2.0.0_2022-08-11/feature-rewrite-well-known-openid-configuration.md
similarity index 100%
rename from changelog/2.0.0_2022-08-26/feature-rewrite-well-known-openid-configuration.md
rename to changelog/2.0.0_2022-08-11/feature-rewrite-well-known-openid-configuration.md
diff --git a/changelog/2.0.0_2022-08-26/fix-align-login-attr.md b/changelog/2.0.0_2022-08-11/fix-align-login-attr.md
similarity index 100%
rename from changelog/2.0.0_2022-08-26/fix-align-login-attr.md
rename to changelog/2.0.0_2022-08-11/fix-align-login-attr.md
diff --git a/changelog/2.0.0_2022-08-26/fix-allow-empty-environment-variables b/changelog/2.0.0_2022-08-11/fix-allow-empty-environment-variables
similarity index 100%
rename from changelog/2.0.0_2022-08-26/fix-allow-empty-environment-variables
rename to changelog/2.0.0_2022-08-11/fix-allow-empty-environment-variables
diff --git a/changelog/2.0.0_2022-08-26/fix-app-provider-unused-transfer-secret.md b/changelog/2.0.0_2022-08-11/fix-app-provider-unused-transfer-secret.md
similarity index 100%
rename from changelog/2.0.0_2022-08-26/fix-app-provider-unused-transfer-secret.md
rename to changelog/2.0.0_2022-08-11/fix-app-provider-unused-transfer-secret.md
diff --git a/changelog/2.0.0_2022-08-26/fix-configure-idp-secrets-env.md b/changelog/2.0.0_2022-08-11/fix-configure-idp-secrets-env.md
similarity index 100%
rename from changelog/2.0.0_2022-08-26/fix-configure-idp-secrets-env.md
rename to changelog/2.0.0_2022-08-11/fix-configure-idp-secrets-env.md
diff --git a/changelog/2.0.0_2022-08-26/fix-csp-silent-refresh.md b/changelog/2.0.0_2022-08-11/fix-csp-silent-refresh.md
similarity index 100%
rename from changelog/2.0.0_2022-08-26/fix-csp-silent-refresh.md
rename to changelog/2.0.0_2022-08-11/fix-csp-silent-refresh.md
diff --git a/changelog/2.0.0_2022-08-26/fix-debug-config-enable-by-default.md b/changelog/2.0.0_2022-08-11/fix-debug-config-enable-by-default.md
similarity index 100%
rename from changelog/2.0.0_2022-08-26/fix-debug-config-enable-by-default.md
rename to changelog/2.0.0_2022-08-11/fix-debug-config-enable-by-default.md
diff --git a/changelog/2.0.0_2022-08-26/fix-default-role-assign.md b/changelog/2.0.0_2022-08-11/fix-default-role-assign.md
similarity index 100%
rename from changelog/2.0.0_2022-08-26/fix-default-role-assign.md
rename to changelog/2.0.0_2022-08-11/fix-default-role-assign.md
diff --git a/changelog/2.0.0_2022-08-26/fix-index-integrity.md b/changelog/2.0.0_2022-08-11/fix-index-integrity.md
similarity index 100%
rename from changelog/2.0.0_2022-08-26/fix-index-integrity.md
rename to changelog/2.0.0_2022-08-11/fix-index-integrity.md
diff --git a/changelog/2.0.0_2022-08-26/fix-ldap-filter-envvar.md b/changelog/2.0.0_2022-08-11/fix-ldap-filter-envvar.md
similarity index 100%
rename from changelog/2.0.0_2022-08-26/fix-ldap-filter-envvar.md
rename to changelog/2.0.0_2022-08-11/fix-ldap-filter-envvar.md
diff --git a/changelog/2.0.0_2022-08-26/fix-ldap-insecure-options.md b/changelog/2.0.0_2022-08-11/fix-ldap-insecure-options.md
similarity index 100%
rename from changelog/2.0.0_2022-08-26/fix-ldap-insecure-options.md
rename to changelog/2.0.0_2022-08-11/fix-ldap-insecure-options.md
diff --git a/changelog/2.0.0_2022-08-26/fix-ldap-invalid-users-groups.md b/changelog/2.0.0_2022-08-11/fix-ldap-invalid-users-groups.md
similarity index 100%
rename from changelog/2.0.0_2022-08-26/fix-ldap-invalid-users-groups.md
rename to changelog/2.0.0_2022-08-11/fix-ldap-invalid-users-groups.md
diff --git a/changelog/2.0.0_2022-08-26/fix-logging-levels.md b/changelog/2.0.0_2022-08-11/fix-logging-levels.md
similarity index 100%
rename from changelog/2.0.0_2022-08-26/fix-logging-levels.md
rename to changelog/2.0.0_2022-08-11/fix-logging-levels.md
diff --git a/changelog/2.0.0_2022-08-26/fix-ocis-run-services.md b/changelog/2.0.0_2022-08-11/fix-ocis-run-services.md
similarity index 100%
rename from changelog/2.0.0_2022-08-26/fix-ocis-run-services.md
rename to changelog/2.0.0_2022-08-11/fix-ocis-run-services.md
diff --git a/changelog/2.0.0_2022-08-26/fix-public-link-defaultname-capability b/changelog/2.0.0_2022-08-11/fix-public-link-defaultname-capability
similarity index 100%
rename from changelog/2.0.0_2022-08-26/fix-public-link-defaultname-capability
rename to changelog/2.0.0_2022-08-11/fix-public-link-defaultname-capability
diff --git a/changelog/2.0.0_2022-08-26/fix-remove-legacy-accounts-routes.md b/changelog/2.0.0_2022-08-11/fix-remove-legacy-accounts-routes.md
similarity index 100%
rename from changelog/2.0.0_2022-08-26/fix-remove-legacy-accounts-routes.md
rename to changelog/2.0.0_2022-08-11/fix-remove-legacy-accounts-routes.md
diff --git a/changelog/2.0.0_2022-08-26/fix-remove-unused-GRAPH_SPACES_INSECURE.md b/changelog/2.0.0_2022-08-11/fix-remove-unused-GRAPH_SPACES_INSECURE.md
similarity index 100%
rename from changelog/2.0.0_2022-08-26/fix-remove-unused-GRAPH_SPACES_INSECURE.md
rename to changelog/2.0.0_2022-08-11/fix-remove-unused-GRAPH_SPACES_INSECURE.md
diff --git a/changelog/2.0.0_2022-08-26/fix-remove-unused-config-options.md b/changelog/2.0.0_2022-08-11/fix-remove-unused-config-options.md
similarity index 100%
rename from changelog/2.0.0_2022-08-26/fix-remove-unused-config-options.md
rename to changelog/2.0.0_2022-08-11/fix-remove-unused-config-options.md
diff --git a/changelog/2.0.0_2022-08-26/fix-remove-unused-ocs-backend-config.md b/changelog/2.0.0_2022-08-11/fix-remove-unused-ocs-backend-config.md
similarity index 100%
rename from changelog/2.0.0_2022-08-26/fix-remove-unused-ocs-backend-config.md
rename to changelog/2.0.0_2022-08-11/fix-remove-unused-ocs-backend-config.md
diff --git a/changelog/2.0.0_2022-08-26/fix-remove-unused-ocs-storage-config.md b/changelog/2.0.0_2022-08-11/fix-remove-unused-ocs-storage-config.md
similarity index 100%
rename from changelog/2.0.0_2022-08-26/fix-remove-unused-ocs-storage-config.md
rename to changelog/2.0.0_2022-08-11/fix-remove-unused-ocs-storage-config.md
diff --git a/changelog/2.0.0_2022-08-26/fix-search-command-server-command.md b/changelog/2.0.0_2022-08-11/fix-search-command-server-command.md
similarity index 100%
rename from changelog/2.0.0_2022-08-26/fix-search-command-server-command.md
rename to changelog/2.0.0_2022-08-11/fix-search-command-server-command.md
diff --git a/changelog/2.0.0_2022-08-26/fix-search-grpc-addr-env.md b/changelog/2.0.0_2022-08-11/fix-search-grpc-addr-env.md
similarity index 100%
rename from changelog/2.0.0_2022-08-26/fix-search-grpc-addr-env.md
rename to changelog/2.0.0_2022-08-11/fix-search-grpc-addr-env.md
diff --git a/changelog/2.0.0_2022-08-26/fix-search-in-received-shares.md b/changelog/2.0.0_2022-08-11/fix-search-in-received-shares.md
similarity index 100%
rename from changelog/2.0.0_2022-08-26/fix-search-in-received-shares.md
rename to changelog/2.0.0_2022-08-11/fix-search-in-received-shares.md
diff --git a/changelog/2.0.0_2022-08-26/fix-sensitive-values-proxy-debug-config.md b/changelog/2.0.0_2022-08-11/fix-sensitive-values-proxy-debug-config.md
similarity index 100%
rename from changelog/2.0.0_2022-08-26/fix-sensitive-values-proxy-debug-config.md
rename to changelog/2.0.0_2022-08-11/fix-sensitive-values-proxy-debug-config.md
diff --git a/changelog/2.0.0_2022-08-26/fix-settings-idm-adminuserid.md b/changelog/2.0.0_2022-08-11/fix-settings-idm-adminuserid.md
similarity index 100%
rename from changelog/2.0.0_2022-08-26/fix-settings-idm-adminuserid.md
rename to changelog/2.0.0_2022-08-11/fix-settings-idm-adminuserid.md
diff --git a/changelog/2.0.0_2022-08-26/fix-sharee-substring-search.md b/changelog/2.0.0_2022-08-11/fix-sharee-substring-search.md
similarity index 100%
rename from changelog/2.0.0_2022-08-26/fix-sharee-substring-search.md
rename to changelog/2.0.0_2022-08-11/fix-sharee-substring-search.md
diff --git a/changelog/2.0.0_2022-08-26/fix-skip-validate-for-non-fullstack.md b/changelog/2.0.0_2022-08-11/fix-skip-validate-for-non-fullstack.md
similarity index 100%
rename from changelog/2.0.0_2022-08-26/fix-skip-validate-for-non-fullstack.md
rename to changelog/2.0.0_2022-08-11/fix-skip-validate-for-non-fullstack.md
diff --git a/changelog/2.0.0_2022-08-26/fix-startup-error-logging.md b/changelog/2.0.0_2022-08-11/fix-startup-error-logging.md
similarity index 100%
rename from changelog/2.0.0_2022-08-26/fix-startup-error-logging.md
rename to changelog/2.0.0_2022-08-11/fix-startup-error-logging.md
diff --git a/changelog/2.0.0_2022-08-26/fix-storage-users-config.md b/changelog/2.0.0_2022-08-11/fix-storage-users-config.md
similarity index 100%
rename from changelog/2.0.0_2022-08-26/fix-storage-users-config.md
rename to changelog/2.0.0_2022-08-11/fix-storage-users-config.md
diff --git a/changelog/2.0.0_2022-08-26/fix-thumbnails-dav.md b/changelog/2.0.0_2022-08-11/fix-thumbnails-dav.md
similarity index 100%
rename from changelog/2.0.0_2022-08-26/fix-thumbnails-dav.md
rename to changelog/2.0.0_2022-08-11/fix-thumbnails-dav.md
diff --git a/changelog/2.0.0_2022-08-26/fix-unrestricted-quota.md b/changelog/2.0.0_2022-08-11/fix-unrestricted-quota.md
similarity index 100%
rename from changelog/2.0.0_2022-08-26/fix-unrestricted-quota.md
rename to changelog/2.0.0_2022-08-11/fix-unrestricted-quota.md
diff --git a/changelog/2.0.0_2022-08-26/fix-user-autoprovision.md b/changelog/2.0.0_2022-08-11/fix-user-autoprovision.md
similarity index 100%
rename from changelog/2.0.0_2022-08-26/fix-user-autoprovision.md
rename to changelog/2.0.0_2022-08-11/fix-user-autoprovision.md
diff --git a/changelog/2.0.0_2022-08-26/fix-version-info b/changelog/2.0.0_2022-08-11/fix-version-info
similarity index 100%
rename from changelog/2.0.0_2022-08-26/fix-version-info
rename to changelog/2.0.0_2022-08-11/fix-version-info
diff --git a/changelog/2.0.0_2022-08-26/fix-version.md b/changelog/2.0.0_2022-08-11/fix-version.md
similarity index 100%
rename from changelog/2.0.0_2022-08-26/fix-version.md
rename to changelog/2.0.0_2022-08-11/fix-version.md
diff --git a/changelog/2.0.0_2022-08-26/glauth-accounts-rm.md b/changelog/2.0.0_2022-08-11/glauth-accounts-rm.md
similarity index 100%
rename from changelog/2.0.0_2022-08-26/glauth-accounts-rm.md
rename to changelog/2.0.0_2022-08-11/glauth-accounts-rm.md
diff --git a/changelog/2.0.0_2022-08-26/graph-cacert.md b/changelog/2.0.0_2022-08-11/graph-cacert.md
similarity index 100%
rename from changelog/2.0.0_2022-08-26/graph-cacert.md
rename to changelog/2.0.0_2022-08-11/graph-cacert.md
diff --git a/changelog/2.0.0_2022-08-26/graph-explorer-env-doc.md b/changelog/2.0.0_2022-08-11/graph-explorer-env-doc.md
similarity index 100%
rename from changelog/2.0.0_2022-08-26/graph-explorer-env-doc.md
rename to changelog/2.0.0_2022-08-11/graph-explorer-env-doc.md
diff --git a/changelog/2.0.0_2022-08-26/graph-me-changepw.md b/changelog/2.0.0_2022-08-11/graph-me-changepw.md
similarity index 100%
rename from changelog/2.0.0_2022-08-26/graph-me-changepw.md
rename to changelog/2.0.0_2022-08-11/graph-me-changepw.md
diff --git a/changelog/2.0.0_2022-08-26/graph-me-drives.md b/changelog/2.0.0_2022-08-11/graph-me-drives.md
similarity index 100%
rename from changelog/2.0.0_2022-08-26/graph-me-drives.md
rename to changelog/2.0.0_2022-08-11/graph-me-drives.md
diff --git a/changelog/2.0.0_2022-08-26/graph-webdav-url.md b/changelog/2.0.0_2022-08-11/graph-webdav-url.md
similarity index 100%
rename from changelog/2.0.0_2022-08-26/graph-webdav-url.md
rename to changelog/2.0.0_2022-08-11/graph-webdav-url.md
diff --git a/changelog/2.0.0_2022-08-26/idp-cert-wait.md b/changelog/2.0.0_2022-08-11/idp-cert-wait.md
similarity index 100%
rename from changelog/2.0.0_2022-08-26/idp-cert-wait.md
rename to changelog/2.0.0_2022-08-11/idp-cert-wait.md
diff --git a/changelog/2.0.0_2022-08-26/idp-default-files.md b/changelog/2.0.0_2022-08-11/idp-default-files.md
similarity index 100%
rename from changelog/2.0.0_2022-08-26/idp-default-files.md
rename to changelog/2.0.0_2022-08-11/idp-default-files.md
diff --git a/changelog/2.0.0_2022-08-26/idp-ui-update.md b/changelog/2.0.0_2022-08-11/idp-ui-update.md
similarity index 100%
rename from changelog/2.0.0_2022-08-26/idp-ui-update.md
rename to changelog/2.0.0_2022-08-11/idp-ui-update.md
diff --git a/changelog/2.0.0_2022-08-26/improve-graph.md b/changelog/2.0.0_2022-08-11/improve-graph.md
similarity index 100%
rename from changelog/2.0.0_2022-08-26/improve-graph.md
rename to changelog/2.0.0_2022-08-11/improve-graph.md
diff --git a/changelog/2.0.0_2022-08-26/ldap-escape-dn.md b/changelog/2.0.0_2022-08-11/ldap-escape-dn.md
similarity index 100%
rename from changelog/2.0.0_2022-08-26/ldap-escape-dn.md
rename to changelog/2.0.0_2022-08-11/ldap-escape-dn.md
diff --git a/changelog/2.0.0_2022-08-26/libregraph-idm-switch.md b/changelog/2.0.0_2022-08-11/libregraph-idm-switch.md
similarity index 100%
rename from changelog/2.0.0_2022-08-26/libregraph-idm-switch.md
rename to changelog/2.0.0_2022-08-11/libregraph-idm-switch.md
diff --git a/changelog/2.0.0_2022-08-26/make-idp-only-wait-for-certs-when-using-ldap.md b/changelog/2.0.0_2022-08-11/make-idp-only-wait-for-certs-when-using-ldap.md
similarity index 100%
rename from changelog/2.0.0_2022-08-26/make-idp-only-wait-for-certs-when-using-ldap.md
rename to changelog/2.0.0_2022-08-11/make-idp-only-wait-for-certs-when-using-ldap.md
diff --git a/changelog/2.0.0_2022-08-26/make-ocdav-service-behave.md b/changelog/2.0.0_2022-08-11/make-ocdav-service-behave.md
similarity index 100%
rename from changelog/2.0.0_2022-08-26/make-ocdav-service-behave.md
rename to changelog/2.0.0_2022-08-11/make-ocdav-service-behave.md
diff --git a/changelog/2.0.0_2022-08-26/metadata-gateway.md b/changelog/2.0.0_2022-08-11/metadata-gateway.md
similarity index 100%
rename from changelog/2.0.0_2022-08-26/metadata-gateway.md
rename to changelog/2.0.0_2022-08-11/metadata-gateway.md
diff --git a/changelog/2.0.0_2022-08-26/metadatauserid-systemuserid.md b/changelog/2.0.0_2022-08-11/metadatauserid-systemuserid.md
similarity index 100%
rename from changelog/2.0.0_2022-08-26/metadatauserid-systemuserid.md
rename to changelog/2.0.0_2022-08-11/metadatauserid-systemuserid.md
diff --git a/changelog/2.0.0_2022-08-26/migrate-command.md b/changelog/2.0.0_2022-08-11/migrate-command.md
similarity index 100%
rename from changelog/2.0.0_2022-08-26/migrate-command.md
rename to changelog/2.0.0_2022-08-11/migrate-command.md
diff --git a/changelog/2.0.0_2022-08-26/new-space-id-functions.md b/changelog/2.0.0_2022-08-11/new-space-id-functions.md
similarity index 100%
rename from changelog/2.0.0_2022-08-26/new-space-id-functions.md
rename to changelog/2.0.0_2022-08-11/new-space-id-functions.md
diff --git a/changelog/2.0.0_2022-08-26/ocs-cs3-fatal.md b/changelog/2.0.0_2022-08-11/ocs-cs3-fatal.md
similarity index 100%
rename from changelog/2.0.0_2022-08-26/ocs-cs3-fatal.md
rename to changelog/2.0.0_2022-08-11/ocs-cs3-fatal.md
diff --git a/changelog/2.0.0_2022-08-26/ocs-version-product-field.md b/changelog/2.0.0_2022-08-11/ocs-version-product-field.md
similarity index 100%
rename from changelog/2.0.0_2022-08-26/ocs-version-product-field.md
rename to changelog/2.0.0_2022-08-11/ocs-version-product-field.md
diff --git a/changelog/2.0.0_2022-08-26/polish-search.md b/changelog/2.0.0_2022-08-11/polish-search.md
similarity index 100%
rename from changelog/2.0.0_2022-08-26/polish-search.md
rename to changelog/2.0.0_2022-08-11/polish-search.md
diff --git a/changelog/2.0.0_2022-08-26/prevent-access-to-disabled-space.md b/changelog/2.0.0_2022-08-11/prevent-access-to-disabled-space.md
similarity index 100%
rename from changelog/2.0.0_2022-08-26/prevent-access-to-disabled-space.md
rename to changelog/2.0.0_2022-08-11/prevent-access-to-disabled-space.md
diff --git a/changelog/2.0.0_2022-08-26/refactor-extensions-to-services.md b/changelog/2.0.0_2022-08-11/refactor-extensions-to-services.md
similarity index 100%
rename from changelog/2.0.0_2022-08-26/refactor-extensions-to-services.md
rename to changelog/2.0.0_2022-08-11/refactor-extensions-to-services.md
diff --git a/changelog/2.0.0_2022-08-26/resharing.md b/changelog/2.0.0_2022-08-11/resharing.md
similarity index 100%
rename from changelog/2.0.0_2022-08-26/resharing.md
rename to changelog/2.0.0_2022-08-11/resharing.md
diff --git a/changelog/2.0.0_2022-08-26/save-katherine.md b/changelog/2.0.0_2022-08-11/save-katherine.md
similarity index 100%
rename from changelog/2.0.0_2022-08-26/save-katherine.md
rename to changelog/2.0.0_2022-08-11/save-katherine.md
diff --git a/changelog/2.0.0_2022-08-26/search-extension.md b/changelog/2.0.0_2022-08-11/search-extension.md
similarity index 100%
rename from changelog/2.0.0_2022-08-26/search-extension.md
rename to changelog/2.0.0_2022-08-11/search-extension.md
diff --git a/changelog/2.0.0_2022-08-26/serviceUser-systemUser.md b/changelog/2.0.0_2022-08-11/serviceUser-systemUser.md
similarity index 100%
rename from changelog/2.0.0_2022-08-26/serviceUser-systemUser.md
rename to changelog/2.0.0_2022-08-11/serviceUser-systemUser.md
diff --git a/changelog/2.0.0_2022-08-26/share-jail-fixes.md b/changelog/2.0.0_2022-08-11/share-jail-fixes.md
similarity index 100%
rename from changelog/2.0.0_2022-08-26/share-jail-fixes.md
rename to changelog/2.0.0_2022-08-11/share-jail-fixes.md
diff --git a/changelog/2.0.0_2022-08-26/single-file-edit.md b/changelog/2.0.0_2022-08-11/single-file-edit.md
similarity index 100%
rename from changelog/2.0.0_2022-08-26/single-file-edit.md
rename to changelog/2.0.0_2022-08-11/single-file-edit.md
diff --git a/changelog/2.0.0_2022-08-26/space-id.md b/changelog/2.0.0_2022-08-11/space-id.md
similarity index 100%
rename from changelog/2.0.0_2022-08-26/space-id.md
rename to changelog/2.0.0_2022-08-11/space-id.md
diff --git a/changelog/2.0.0_2022-08-26/space-owner.md b/changelog/2.0.0_2022-08-11/space-owner.md
similarity index 100%
rename from changelog/2.0.0_2022-08-26/space-owner.md
rename to changelog/2.0.0_2022-08-11/space-owner.md
diff --git a/changelog/2.0.0_2022-08-26/spaces-capabilities.md b/changelog/2.0.0_2022-08-11/spaces-capabilities.md
similarity index 100%
rename from changelog/2.0.0_2022-08-26/spaces-capabilities.md
rename to changelog/2.0.0_2022-08-11/spaces-capabilities.md
diff --git a/changelog/2.0.0_2022-08-26/special-items-improvements.md b/changelog/2.0.0_2022-08-11/special-items-improvements.md
similarity index 100%
rename from changelog/2.0.0_2022-08-26/special-items-improvements.md
rename to changelog/2.0.0_2022-08-11/special-items-improvements.md
diff --git a/changelog/2.0.0_2022-08-26/split-machineauth-and-systemuserauth.md b/changelog/2.0.0_2022-08-11/split-machineauth-and-systemuserauth.md
similarity index 100%
rename from changelog/2.0.0_2022-08-26/split-machineauth-and-systemuserauth.md
rename to changelog/2.0.0_2022-08-11/split-machineauth-and-systemuserauth.md
diff --git a/changelog/2.0.0_2022-08-26/thumbnails-env-doc.md b/changelog/2.0.0_2022-08-11/thumbnails-env-doc.md
similarity index 100%
rename from changelog/2.0.0_2022-08-26/thumbnails-env-doc.md
rename to changelog/2.0.0_2022-08-11/thumbnails-env-doc.md
diff --git a/changelog/2.0.0_2022-08-26/thumbnails-log.md b/changelog/2.0.0_2022-08-11/thumbnails-log.md
similarity index 100%
rename from changelog/2.0.0_2022-08-26/thumbnails-log.md
rename to changelog/2.0.0_2022-08-11/thumbnails-log.md
diff --git a/changelog/2.0.0_2022-08-26/update-linkshare-capabilities.md b/changelog/2.0.0_2022-08-11/update-linkshare-capabilities.md
similarity index 100%
rename from changelog/2.0.0_2022-08-26/update-linkshare-capabilities.md
rename to changelog/2.0.0_2022-08-11/update-linkshare-capabilities.md
diff --git a/changelog/2.0.0_2022-08-26/update-reva-beta.4.md b/changelog/2.0.0_2022-08-11/update-reva-beta.4.md
similarity index 100%
rename from changelog/2.0.0_2022-08-26/update-reva-beta.4.md
rename to changelog/2.0.0_2022-08-11/update-reva-beta.4.md
diff --git a/changelog/2.0.0_2022-08-26/update-reva-beta.5.md b/changelog/2.0.0_2022-08-11/update-reva-beta.5.md
similarity index 100%
rename from changelog/2.0.0_2022-08-26/update-reva-beta.5.md
rename to changelog/2.0.0_2022-08-11/update-reva-beta.5.md
diff --git a/changelog/2.0.0_2022-08-26/update-reva-beta.6.md b/changelog/2.0.0_2022-08-11/update-reva-beta.6.md
similarity index 100%
rename from changelog/2.0.0_2022-08-26/update-reva-beta.6.md
rename to changelog/2.0.0_2022-08-11/update-reva-beta.6.md
diff --git a/changelog/2.0.0_2022-08-26/update-reva-beta2.md b/changelog/2.0.0_2022-08-11/update-reva-beta2.md
similarity index 100%
rename from changelog/2.0.0_2022-08-26/update-reva-beta2.md
rename to changelog/2.0.0_2022-08-11/update-reva-beta2.md
diff --git a/changelog/2.0.0_2022-08-26/update-reva-beta3.md b/changelog/2.0.0_2022-08-11/update-reva-beta3.md
similarity index 100%
rename from changelog/2.0.0_2022-08-26/update-reva-beta3.md
rename to changelog/2.0.0_2022-08-11/update-reva-beta3.md
diff --git a/changelog/2.0.0_2022-08-26/update-reva.md b/changelog/2.0.0_2022-08-11/update-reva.md
similarity index 100%
rename from changelog/2.0.0_2022-08-26/update-reva.md
rename to changelog/2.0.0_2022-08-11/update-reva.md
diff --git a/changelog/2.0.0_2022-08-26/update-web-5.5.0-beta2.md b/changelog/2.0.0_2022-08-11/update-web-5.5.0-beta2.md
similarity index 100%
rename from changelog/2.0.0_2022-08-26/update-web-5.5.0-beta2.md
rename to changelog/2.0.0_2022-08-11/update-web-5.5.0-beta2.md
diff --git a/changelog/2.0.0_2022-08-26/update-web-5.5.0-beta3.md b/changelog/2.0.0_2022-08-11/update-web-5.5.0-beta3.md
similarity index 100%
rename from changelog/2.0.0_2022-08-26/update-web-5.5.0-beta3.md
rename to changelog/2.0.0_2022-08-11/update-web-5.5.0-beta3.md
diff --git a/changelog/2.0.0_2022-08-26/update-web-5.5.0.md b/changelog/2.0.0_2022-08-11/update-web-5.5.0.md
similarity index 100%
rename from changelog/2.0.0_2022-08-26/update-web-5.5.0.md
rename to changelog/2.0.0_2022-08-11/update-web-5.5.0.md
diff --git a/changelog/2.0.0_2022-08-26/update-web-5.7.0-rc.1-beta.4.md b/changelog/2.0.0_2022-08-11/update-web-5.7.0-rc.1-beta.4.md
similarity index 100%
rename from changelog/2.0.0_2022-08-26/update-web-5.7.0-rc.1-beta.4.md
rename to changelog/2.0.0_2022-08-11/update-web-5.7.0-rc.1-beta.4.md
diff --git a/changelog/2.0.0_2022-08-26/update-web-beta.5.md b/changelog/2.0.0_2022-08-11/update-web-beta.5.md
similarity index 100%
rename from changelog/2.0.0_2022-08-26/update-web-beta.5.md
rename to changelog/2.0.0_2022-08-11/update-web-beta.5.md
diff --git a/changelog/2.0.0_2022-08-26/update-web-beta.6.md b/changelog/2.0.0_2022-08-11/update-web-beta.6.md
similarity index 100%
rename from changelog/2.0.0_2022-08-26/update-web-beta.6.md
rename to changelog/2.0.0_2022-08-11/update-web-beta.6.md
diff --git a/changelog/2.0.0_2022-08-26/urlencoding-graph-api.md b/changelog/2.0.0_2022-08-11/urlencoding-graph-api.md
similarity index 100%
rename from changelog/2.0.0_2022-08-26/urlencoding-graph-api.md
rename to changelog/2.0.0_2022-08-11/urlencoding-graph-api.md
diff --git a/changelog/2.0.0_2022-08-26/use-ldappassword-exop.md b/changelog/2.0.0_2022-08-11/use-ldappassword-exop.md
similarity index 100%
rename from changelog/2.0.0_2022-08-26/use-ldappassword-exop.md
rename to changelog/2.0.0_2022-08-11/use-ldappassword-exop.md
diff --git a/changelog/2.0.0_2022-08-26/user-expand-drive.md b/changelog/2.0.0_2022-08-11/user-expand-drive.md
similarity index 100%
rename from changelog/2.0.0_2022-08-26/user-expand-drive.md
rename to changelog/2.0.0_2022-08-11/user-expand-drive.md
diff --git a/changelog/2.0.0_2022-08-26/webdav-env-doc.md b/changelog/2.0.0_2022-08-11/webdav-env-doc.md
similarity index 100%
rename from changelog/2.0.0_2022-08-26/webdav-env-doc.md
rename to changelog/2.0.0_2022-08-11/webdav-env-doc.md
diff --git a/changelog/2.0.0_2022-08-26/webdav-search.md b/changelog/2.0.0_2022-08-11/webdav-search.md
similarity index 100%
rename from changelog/2.0.0_2022-08-26/webdav-search.md
rename to changelog/2.0.0_2022-08-11/webdav-search.md
diff --git a/changelog/2.0.0_2022-08-26/missing-unprotected-paths.md b/changelog/2.0.0_2022-08-26/missing-unprotected-paths.md
deleted file mode 100644
index 492f09036df..00000000000
--- a/changelog/2.0.0_2022-08-26/missing-unprotected-paths.md
+++ /dev/null
@@ -1,6 +0,0 @@
-Enhancement: Add missing unprotected paths
-
-Added missing unprotected paths for the text-editor, preview, pdf-viewer, draw-io and index.html to the authentication middleware.
-
-https://github.com/owncloud/ocis/pull/4454
-https://github.com/owncloud/ocis/pull/4458
diff --git a/changelog/CHANGELOG.tmpl b/changelog/CHANGELOG.tmpl
index fe4018fb739..dd0a2dd5734 100644
--- a/changelog/CHANGELOG.tmpl
+++ b/changelog/CHANGELOG.tmpl
@@ -3,7 +3,7 @@
 {{ $version := .Version -}}
 {{/* ocis beta program */ -}}
 {{ if eq .Version "2.0.0" -}}
-{{ $version = (printf  "%v-%v" $version "beta.7") -}}
+{{ $version = (printf  "%v-%v" $version "beta.6") -}}
 {{ end -}}
 {{ if gt (len $allVersions) 1 -}}
 # Changelog for [{{ $version }}] ({{ .Date }})
diff --git a/changelog/2.0.0_2022-08-26/bugfix-app-registry-default-mimetypes.md b/changelog/unreleased/bugfix-app-registry-default-mimetypes.md
similarity index 100%
rename from changelog/2.0.0_2022-08-26/bugfix-app-registry-default-mimetypes.md
rename to changelog/unreleased/bugfix-app-registry-default-mimetypes.md
diff --git a/changelog/unreleased/bugfix-disable-public-link-default-expiration.md b/changelog/unreleased/bugfix-disable-public-link-default-expiration.md
deleted file mode 100644
index 67e2755ac1b..00000000000
--- a/changelog/unreleased/bugfix-disable-public-link-default-expiration.md
+++ /dev/null
@@ -1,6 +0,0 @@
-Bugfix: Disable default expiration for public links
-
-The default expiration for public links was enabled in the capabilities without providing a (then required) default amount of days for clients to pick a reasonable expiration date upon link creation. This has been fixed by disabling the default expiration for public links in the capabilities. With this configuration clients will no longer set a default expiration date upon link creation.
-
-https://github.com/owncloud/ocis/issues/4445
-https://github.com/owncloud/ocis/pull/4475
diff --git a/changelog/2.0.0_2022-08-26/bugfix-help-config-newline.md b/changelog/unreleased/bugfix-help-config-newline.md
similarity index 100%
rename from changelog/2.0.0_2022-08-26/bugfix-help-config-newline.md
rename to changelog/unreleased/bugfix-help-config-newline.md
diff --git a/changelog/2.0.0_2022-08-26/bugfix-idp-init-certificate-empty-file.md b/changelog/unreleased/bugfix-idp-init-certificate-empty-file.md
similarity index 100%
rename from changelog/2.0.0_2022-08-26/bugfix-idp-init-certificate-empty-file.md
rename to changelog/unreleased/bugfix-idp-init-certificate-empty-file.md
diff --git a/changelog/2.0.0_2022-08-26/bugfix-rename-extensions-to-services.md b/changelog/unreleased/bugfix-rename-extensions-to-services.md
similarity index 100%
rename from changelog/2.0.0_2022-08-26/bugfix-rename-extensions-to-services.md
rename to changelog/unreleased/bugfix-rename-extensions-to-services.md
diff --git a/changelog/2.0.0_2022-08-26/change-rename-uploads-purge-clean.md b/changelog/unreleased/change-rename-uploads-purge-clean.md
similarity index 100%
rename from changelog/2.0.0_2022-08-26/change-rename-uploads-purge-clean.md
rename to changelog/unreleased/change-rename-uploads-purge-clean.md
diff --git a/changelog/2.0.0_2022-08-26/enhancement-add-open-with-web-endpoint.md b/changelog/unreleased/enhancement-add-open-with-web-endpoint.md
similarity index 100%
rename from changelog/2.0.0_2022-08-26/enhancement-add-open-with-web-endpoint.md
rename to changelog/unreleased/enhancement-add-open-with-web-endpoint.md
diff --git a/changelog/unreleased/enhancement-add-preview-file-mime-types-to-web-default-config b/changelog/unreleased/enhancement-add-preview-file-mime-types-to-web-default-config
deleted file mode 100644
index 9b0ea2bb249..00000000000
--- a/changelog/unreleased/enhancement-add-preview-file-mime-types-to-web-default-config
+++ /dev/null
@@ -1,6 +0,0 @@
-Enhancement: Add previewFileMimeTypes to web default config
-
-We've added previewFileMimeTypes to the web default config, so web can determine which preview types are supported
-by the backend.
-
-https://github.com/owncloud/ocis/pull/4414
diff --git a/changelog/2.0.0_2022-08-26/enhancement-app-provider-language-selection.md b/changelog/unreleased/enhancement-app-provider-language-selection.md
similarity index 100%
rename from changelog/2.0.0_2022-08-26/enhancement-app-provider-language-selection.md
rename to changelog/unreleased/enhancement-app-provider-language-selection.md
diff --git a/changelog/2.0.0_2022-08-26/enhancement-mail-authentication-encryption-settings.md b/changelog/unreleased/enhancement-mail-authentication-encryption-settings.md
similarity index 100%
rename from changelog/2.0.0_2022-08-26/enhancement-mail-authentication-encryption-settings.md
rename to changelog/unreleased/enhancement-mail-authentication-encryption-settings.md
diff --git a/changelog/2.0.0_2022-08-26/enhancment-admin-pwreset.md b/changelog/unreleased/enhancment-admin-pwreset.md
similarity index 100%
rename from changelog/2.0.0_2022-08-26/enhancment-admin-pwreset.md
rename to changelog/unreleased/enhancment-admin-pwreset.md
diff --git a/changelog/unreleased/refactor-proxy.md b/changelog/unreleased/refactor-proxy.md
deleted file mode 100644
index 1a0c2221127..00000000000
--- a/changelog/unreleased/refactor-proxy.md
+++ /dev/null
@@ -1,6 +0,0 @@
-Enhancement: Refactor the proxy service
-
-The routes of the proxy service now have a "unprotected" flag. This is used by the authentication middleware to determine if the request needs to be blocked when missing authentication or not. 
-
-https://github.com/owncloud/ocis/issues/4401
-https://github.com/owncloud/ocis/pull/4461
diff --git a/changelog/2.0.0_2022-08-26/rewrite-authentication.md b/changelog/unreleased/rewrite-authentication.md
similarity index 100%
rename from changelog/2.0.0_2022-08-26/rewrite-authentication.md
rename to changelog/unreleased/rewrite-authentication.md
diff --git a/changelog/2.0.0_2022-08-26/update-reva-beta.7.md b/changelog/unreleased/update-reva-beta.7.md
similarity index 100%
rename from changelog/2.0.0_2022-08-26/update-reva-beta.7.md
rename to changelog/unreleased/update-reva-beta.7.md
diff --git a/changelog/2.0.0_2022-08-26/update-web-beta.7.md b/changelog/unreleased/update-web-beta.7.md
similarity index 100%
rename from changelog/2.0.0_2022-08-26/update-web-beta.7.md
rename to changelog/unreleased/update-web-beta.7.md
diff --git a/deployments/continuous-deployment-config/ocis_keycloak/released.yml b/deployments/continuous-deployment-config/ocis_keycloak/released.yml
index 1e32815b14d..06882388cda 100644
--- a/deployments/continuous-deployment-config/ocis_keycloak/released.yml
+++ b/deployments/continuous-deployment-config/ocis_keycloak/released.yml
@@ -32,7 +32,7 @@
         env:
           INSECURE: "false"
           TRAEFIK_ACME_MAIL: wkloucek@owncloud.com
-          OCIS_DOCKER_TAG: 2.0.0-beta.7
+          OCIS_DOCKER_TAG: 2.0.0-beta.6
           OCIS_DOMAIN: ocis.ocis-keycloak.released.owncloud.works
           KEYCLOAK_DOMAIN: keycloak.ocis-keycloak.released.owncloud.works
           COMPOSE_FILE: docker-compose.yml:monitoring_tracing/docker-compose-additions.yml
diff --git a/deployments/continuous-deployment-config/ocis_ldap/released.yml b/deployments/continuous-deployment-config/ocis_ldap/released.yml
index aa3b4effb29..d805c280dc3 100644
--- a/deployments/continuous-deployment-config/ocis_ldap/released.yml
+++ b/deployments/continuous-deployment-config/ocis_ldap/released.yml
@@ -32,7 +32,7 @@
         env:
           INSECURE: "false"
           TRAEFIK_ACME_MAIL: wkloucek@owncloud.com
-          OCIS_DOCKER_TAG: 2.0.0-beta.7
+          OCIS_DOCKER_TAG: 2.0.0-beta.6
           OCIS_DOMAIN: ocis.ocis-ldap.released.owncloud.works
           LDAP_MANAGER_DOMAIN: ldap.ocis-ldap.released.owncloud.works
           COMPOSE_FILE: docker-compose.yml:monitoring_tracing/docker-compose-additions.yml
diff --git a/deployments/continuous-deployment-config/ocis_traefik/released.yml b/deployments/continuous-deployment-config/ocis_traefik/released.yml
index 23d978717fd..2d111a35276 100644
--- a/deployments/continuous-deployment-config/ocis_traefik/released.yml
+++ b/deployments/continuous-deployment-config/ocis_traefik/released.yml
@@ -32,7 +32,7 @@
         env:
           INSECURE: "false"
           TRAEFIK_ACME_MAIL: wkloucek@owncloud.com
-          OCIS_DOCKER_TAG: 2.0.0-beta.7
+          OCIS_DOCKER_TAG: 2.0.0-beta.6
           OCIS_DOMAIN: ocis.ocis-traefik.released.owncloud.works
           DEMO_USERS: "true"
           INBUCKET_DOMAIN: mail.ocis-traefik.released.owncloud.works
diff --git a/deployments/continuous-deployment-config/ocis_wopi/released.yml b/deployments/continuous-deployment-config/ocis_wopi/released.yml
index 8c68fb8a355..b2fd4ad4d6d 100644
--- a/deployments/continuous-deployment-config/ocis_wopi/released.yml
+++ b/deployments/continuous-deployment-config/ocis_wopi/released.yml
@@ -32,7 +32,7 @@
         env:
           INSECURE: "false"
           TRAEFIK_ACME_MAIL: wkloucek@owncloud.com
-          OCIS_DOCKER_TAG: 2.0.0-beta.7
+          OCIS_DOCKER_TAG: 2.0.0-beta.6
           OCIS_DOMAIN: ocis.ocis-wopi.released.owncloud.works
           WOPISERVER_DOMAIN: wopiserver.ocis-wopi.released.owncloud.works
           COLLABORA_DOMAIN: collabora.ocis-wopi.released.owncloud.works
diff --git a/go.mod b/go.mod
index a3d2194eee2..42d2a3cc7ad 100644
--- a/go.mod
+++ b/go.mod
@@ -7,9 +7,9 @@ require (
 	github.com/Masterminds/semver v1.5.0
 	github.com/MicahParks/keyfunc v1.2.2
 	github.com/ReneKroon/ttlcache/v2 v2.11.0
-	github.com/blevesearch/bleve/v2 v2.3.4
-	github.com/blevesearch/bleve_index_api v1.0.3
-	github.com/coreos/go-oidc/v3 v3.3.0
+	github.com/blevesearch/bleve/v2 v2.3.3
+	github.com/blevesearch/bleve_index_api v1.0.2
+	github.com/coreos/go-oidc/v3 v3.2.0
 	github.com/cs3org/go-cs3apis v0.0.0-20220818202316-e92afdddac6d
 	github.com/cs3org/reva/v2 v2.8.0
 	github.com/disintegration/imaging v1.6.2
@@ -36,9 +36,9 @@ require (
 	github.com/gofrs/uuid v4.2.0+incompatible
 	github.com/golang-jwt/jwt/v4 v4.4.2
 	github.com/golang/protobuf v1.5.2
-	github.com/gookit/config/v2 v2.1.4
+	github.com/gookit/config/v2 v2.1.2
 	github.com/gorilla/mux v1.8.0
-	github.com/grpc-ecosystem/grpc-gateway/v2 v2.11.3
+	github.com/grpc-ecosystem/grpc-gateway/v2 v2.11.2
 	github.com/justinas/alice v1.2.0
 	github.com/libregraph/idm v0.3.1-0.20220808071235-17bb032176de
 	github.com/libregraph/lico v0.54.1-0.20220325072321-31efc3995d63
@@ -48,20 +48,20 @@ require (
 	github.com/oklog/run v1.1.0
 	github.com/olekukonko/tablewriter v0.0.5
 	github.com/onsi/ginkgo v1.16.5
-	github.com/onsi/ginkgo/v2 v2.1.6
-	github.com/onsi/gomega v1.20.2
+	github.com/onsi/ginkgo/v2 v2.1.4
+	github.com/onsi/gomega v1.20.0
 	github.com/orcaman/concurrent-map v1.0.0
-	github.com/owncloud/libre-graph-api-go v0.17.0
+	github.com/owncloud/libre-graph-api-go v0.16.0
 	github.com/pkg/errors v0.9.1
 	github.com/prometheus/client_golang v1.13.0
-	github.com/rs/zerolog v1.28.0
+	github.com/rs/zerolog v1.27.0
 	github.com/sirupsen/logrus v1.9.0
 	github.com/spf13/cobra v1.5.0
 	github.com/stretchr/testify v1.8.0
 	github.com/test-go/testify v1.1.4
 	github.com/thejerf/suture/v4 v4.0.2
-	github.com/tus/tusd v1.9.1
-	github.com/urfave/cli/v2 v2.14.0
+	github.com/tus/tusd v1.9.0
+	github.com/urfave/cli/v2 v2.11.2
 	github.com/xhit/go-simple-mail/v2 v2.11.0
 	go-micro.dev/v4 v4.8.1
 	go.etcd.io/bbolt v1.3.6
@@ -74,12 +74,12 @@ require (
 	golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa
 	golang.org/x/exp v0.0.0-20220518171630-0b5c67f07fdf
 	golang.org/x/image v0.0.0-20220321031419-a8550c1d254a
-	golang.org/x/net v0.0.0-20220826154423-83b083e8dc8b
-	golang.org/x/oauth2 v0.0.0-20220822191816-0ebed06d0094
+	golang.org/x/net v0.0.0-20220624214902-1bab6f366d9e
+	golang.org/x/oauth2 v0.0.0-20220722155238-128564f6959c
 	golang.org/x/term v0.0.0-20220722155259-a9ba230a4035
 	golang.org/x/text v0.3.7
-	google.golang.org/genproto v0.0.0-20220822174746-9e6da59bd2fc
-	google.golang.org/grpc v1.49.0
+	google.golang.org/genproto v0.0.0-20220805133916-01dd62135a58
+	google.golang.org/grpc v1.48.0
 	google.golang.org/protobuf v1.28.1
 	gopkg.in/yaml.v2 v2.4.0
 	gotest.tools/v3 v3.3.0
@@ -108,20 +108,20 @@ require (
 	github.com/beorn7/perks v1.0.1 // indirect
 	github.com/bitly/go-simplejson v0.5.0 // indirect
 	github.com/bits-and-blooms/bitset v1.2.1 // indirect
-	github.com/blevesearch/geo v0.1.13 // indirect
+	github.com/blevesearch/geo v0.1.12-0.20220606102651-aab42add3121 // indirect
 	github.com/blevesearch/go-porterstemmer v1.0.3 // indirect
 	github.com/blevesearch/gtreap v0.1.1 // indirect
 	github.com/blevesearch/mmap-go v1.0.4 // indirect
-	github.com/blevesearch/scorch_segment_api/v2 v2.1.2 // indirect
+	github.com/blevesearch/scorch_segment_api/v2 v2.1.0 // indirect
 	github.com/blevesearch/segment v0.9.0 // indirect
 	github.com/blevesearch/snowballstem v0.9.0 // indirect
 	github.com/blevesearch/upsidedown_store_api v1.0.1 // indirect
 	github.com/blevesearch/vellum v1.0.8 // indirect
-	github.com/blevesearch/zapx/v11 v11.3.5 // indirect
-	github.com/blevesearch/zapx/v12 v12.3.5 // indirect
-	github.com/blevesearch/zapx/v13 v13.3.5 // indirect
-	github.com/blevesearch/zapx/v14 v14.3.5 // indirect
-	github.com/blevesearch/zapx/v15 v15.3.5 // indirect
+	github.com/blevesearch/zapx/v11 v11.3.4 // indirect
+	github.com/blevesearch/zapx/v12 v12.3.4 // indirect
+	github.com/blevesearch/zapx/v13 v13.3.4 // indirect
+	github.com/blevesearch/zapx/v14 v14.3.4 // indirect
+	github.com/blevesearch/zapx/v15 v15.3.4 // indirect
 	github.com/bluele/gcache v0.0.2 // indirect
 	github.com/bmizerany/pat v0.0.0-20210406213842-e4b6760bdd6f // indirect
 	github.com/bombsimon/logrusr/v3 v3.0.0 // indirect
@@ -177,7 +177,7 @@ require (
 	github.com/google/go-cmp v0.5.8 // indirect
 	github.com/google/go-querystring v1.1.0 // indirect
 	github.com/google/uuid v1.3.0 // indirect
-	github.com/gookit/goutil v0.5.10 // indirect
+	github.com/gookit/goutil v0.5.2 // indirect
 	github.com/gorilla/handlers v1.5.1 // indirect
 	github.com/gorilla/schema v1.2.0 // indirect
 	github.com/grpc-ecosystem/go-grpc-middleware v1.3.0 // indirect
@@ -206,7 +206,7 @@ require (
 	github.com/longsleep/go-metrics v1.0.0 // indirect
 	github.com/mattermost/xml-roundtrip-validator v0.1.0 // indirect
 	github.com/mattn/go-colorable v0.1.12 // indirect
-	github.com/mattn/go-isatty v0.0.16 // indirect
+	github.com/mattn/go-isatty v0.0.14 // indirect
 	github.com/mattn/go-runewidth v0.0.13 // indirect
 	github.com/mattn/go-sqlite3 v2.0.3+incompatible // indirect
 	github.com/matttproud/golang_protobuf_extensions v1.0.1 // indirect
@@ -243,7 +243,7 @@ require (
 	github.com/prometheus/statsd_exporter v0.22.4 // indirect
 	github.com/rivo/uniseg v0.2.0 // indirect
 	github.com/rs/cors v1.8.2 // indirect
-	github.com/rs/xid v1.4.0 // indirect
+	github.com/rs/xid v1.3.0 // indirect
 	github.com/russellhaering/goxmldsig v1.1.1 // indirect
 	github.com/russross/blackfriday/v2 v2.1.0 // indirect
 	github.com/sciencemesh/meshdirectory-web v1.0.4 // indirect
@@ -266,11 +266,12 @@ require (
 	go.uber.org/atomic v1.9.0 // indirect
 	go.uber.org/multierr v1.7.0 // indirect
 	go.uber.org/zap v1.19.1 // indirect
-	golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4 // indirect
+	golang.org/x/mod v0.6.0-dev.0.20220106191415-9b9b3d81d5e3 // indirect
 	golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4 // indirect
-	golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab // indirect
+	golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f // indirect
 	golang.org/x/time v0.0.0-20220224211638-0e9765cccd65 // indirect
-	golang.org/x/tools v0.1.12 // indirect
+	golang.org/x/tools v0.1.10 // indirect
+	golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 // indirect
 	google.golang.org/appengine v1.6.7 // indirect
 	gopkg.in/ini.v1 v1.66.2 // indirect
 	gopkg.in/square/go-jose.v2 v2.6.0 // indirect
diff --git a/go.sum b/go.sum
index 41496ee2afb..712e09f4a52 100644
--- a/go.sum
+++ b/go.sum
@@ -27,10 +27,9 @@ cloud.google.com/go v0.93.3/go.mod h1:8utlLll2EF5XMAV15woO4lSbWQlk8rer9aLOfLh7+Y
 cloud.google.com/go v0.94.1/go.mod h1:qAlAugsXlC+JWO+Bke5vCtc9ONxjQT3drlTTnAplMW4=
 cloud.google.com/go v0.97.0/go.mod h1:GF7l59pYBVlXQIBLx3a761cZ41F9bBH3JUlihCt2Udc=
 cloud.google.com/go v0.99.0/go.mod h1:w0Xx2nLzqWJPuozYQX+hFfCSI8WioryfRDzkoI/Y2ZA=
+cloud.google.com/go v0.100.1/go.mod h1:fs4QogzfH5n2pBXBP9vRiU+eCny7lD2vmFZy79Iuw1U=
+cloud.google.com/go v0.100.2 h1:t9Iw5QH5v4XtlEQaCtUY7x6sCABps8sW0acw7e2WQ6Y=
 cloud.google.com/go v0.100.2/go.mod h1:4Xra9TjzAeYHrl5+oeLlzbM2k3mjVhZh4UqTZ//w99A=
-cloud.google.com/go v0.102.0/go.mod h1:oWcCzKlqJ5zgHQt9YsaeTY9KzIvjyy0ArmiBUgpQ+nc=
-cloud.google.com/go v0.102.1 h1:vpK6iQWv/2uUeFJth4/cBHsQAGjn1iIE6AAlxipRaA0=
-cloud.google.com/go v0.102.1/go.mod h1:XZ77E9qnTEnrgEOvr4xzfdX5TRo7fB4T2F4O6+34hIU=
 cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o=
 cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE=
 cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc=
@@ -38,16 +37,14 @@ cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUM
 cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc=
 cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ=
 cloud.google.com/go/compute v0.1.0/go.mod h1:GAesmwr110a34z04OlxYkATPBEfVhkymfTBXtfbBFow=
+cloud.google.com/go/compute v1.2.0/go.mod h1:xlogom/6gr8RJGBe7nT2eGsQYAFUbbv8dbC29qE3Xmw=
 cloud.google.com/go/compute v1.3.0/go.mod h1:cCZiE1NHEtai4wiufUhW8I8S1JKkAnhnQJWM7YD99wM=
 cloud.google.com/go/compute v1.5.0/go.mod h1:9SMHyhJlzhlkJqrPAc839t2BZFTSk6Jdj6mkzQJeu0M=
-cloud.google.com/go/compute v1.6.0/go.mod h1:T29tfhtVbq1wvAPo0E3+7vhgmkOYeXjhFvz/FMzPu0s=
-cloud.google.com/go/compute v1.6.1/go.mod h1:g85FgpzFvNULZ+S8AYq87axRKuf2Kh7deLqV/jJ3thU=
 cloud.google.com/go/compute v1.7.0 h1:v/k9Eueb8aAJ0vZuxKMrgm6kPhCLZU9HxFU+AFDs9Uk=
-cloud.google.com/go/compute v1.7.0/go.mod h1:435lt8av5oL9P3fv1OEzSbSUe+ybHXGMPQHHZWZxy9U=
 cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE=
 cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk=
 cloud.google.com/go/firestore v1.1.0/go.mod h1:ulACoGHTpvq5r8rxGJ4ddJZBZqakUQqClKRT5SZwBmk=
-cloud.google.com/go/iam v0.3.0/go.mod h1:XzJPvDayI+9zsASAFO68Hk07u3z+f+JrT2xXNdp4bnY=
+cloud.google.com/go/iam v0.1.1/go.mod h1:CKqrcnI/suGpybEHxZ7BMehL0oA4LpdyJdUlTl9jVMw=
 cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I=
 cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw=
 cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA=
@@ -57,8 +54,7 @@ cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0Zeo
 cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk=
 cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs=
 cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0=
-cloud.google.com/go/storage v1.22.1/go.mod h1:S8N1cAStu7BOeFfE8KAQzmyyLkK8p/vmRq6kuBTW58Y=
-cloud.google.com/go/storage v1.24.0/go.mod h1:3xrJEFMXBsQLgxwThyjuD3aYlroL0TMRec1ypGUQ0KE=
+cloud.google.com/go/storage v1.21.0/go.mod h1:XmRlxkgPjlBONznT2dDUU/5XlpU2OjMnKuqnZI01LAA=
 contrib.go.opencensus.io/exporter/ocagent v0.4.12/go.mod h1:450APlNTSR6FrvC3CTRqYosuDstRB9un7SOx2k/9ckA=
 contrib.go.opencensus.io/exporter/prometheus v0.4.1 h1:oObVeKo2NxpdF/fIfrPsNj6K0Prg0R0mHM+uANlYMiM=
 contrib.go.opencensus.io/exporter/prometheus v0.4.1/go.mod h1:t9wvfitlUjGXG2IXAZsuFq26mDGid/JwCEXp+gTG/9U=
@@ -90,6 +86,7 @@ github.com/Azure/go-ntlmssp v0.0.0-20200615164410-66371956d46c/go.mod h1:chxPXzS
 github.com/Azure/go-ntlmssp v0.0.0-20220621081337-cb9428e4ac1e h1:NeAW1fUYUEWhft7pkxDf6WoUvEZJ/uOKsvtpjLnn8MU=
 github.com/Azure/go-ntlmssp v0.0.0-20220621081337-cb9428e4ac1e/go.mod h1:chxPXzSsl7ZWRAuOIE23GDNzjWuZquvFlgA8xmpunjU=
 github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
+github.com/BurntSushi/toml v1.1.0/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ=
 github.com/BurntSushi/toml v1.2.0 h1:Rt8g24XnyGTyglgET/PRUNlrUeu9F5L+7FilkXfZgs0=
 github.com/BurntSushi/toml v1.2.0/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ=
 github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo=
@@ -165,6 +162,7 @@ github.com/aws/aws-sdk-go v1.35.24/go.mod h1:tlPOdRjfxPBpNIwqDj61rmsnA85v9jc0Ps9
 github.com/aws/aws-sdk-go v1.37.27/go.mod h1:hcU610XS61/+aQV88ixoOzUoG7v3b31pl2zKMmprdro=
 github.com/aws/aws-sdk-go v1.38.35/go.mod h1:hcU610XS61/+aQV88ixoOzUoG7v3b31pl2zKMmprdro=
 github.com/aws/aws-sdk-go v1.43.11/go.mod h1:y4AeaBuwd2Lk+GepC1E9v0qOiTws0MIWAX4oIKwKHZo=
+github.com/aws/aws-sdk-go v1.43.31/go.mod h1:y4AeaBuwd2Lk+GepC1E9v0qOiTws0MIWAX4oIKwKHZo=
 github.com/aws/aws-sdk-go v1.44.61 h1:NcpLSS3Z0MiVQIYugx4I40vSIEEAXT0baO684ExNRco=
 github.com/aws/aws-sdk-go v1.44.61/go.mod h1:y4AeaBuwd2Lk+GepC1E9v0qOiTws0MIWAX4oIKwKHZo=
 github.com/beevik/etree v1.1.0 h1:T0xke/WvNtMoCqgzPhkX2r4rjY3GDZFi+FjpRZY2Jbs=
@@ -183,12 +181,13 @@ github.com/bits-and-blooms/bitset v1.2.0/go.mod h1:gIdJ4wp64HaoK2YrL1Q5/N7Y16edY
 github.com/bits-and-blooms/bitset v1.2.1 h1:M+/hrU9xlMp7t4TyTDQW97d3tRPVuKFC6zBEK16QnXY=
 github.com/bits-and-blooms/bitset v1.2.1/go.mod h1:gIdJ4wp64HaoK2YrL1Q5/N7Y16edYb8uY+O0FJTyyDA=
 github.com/bketelsen/crypt v0.0.3-0.20200106085610-5cbc8cc4026c/go.mod h1:MKsuJmJgSg28kpZDP6UIiPt0e0Oz0kqKNGyRaWEPv84=
-github.com/blevesearch/bleve/v2 v2.3.4 h1:SSb7/cwGzo85LWX1jchIsXM8ZiNNMX3shT5lROM63ew=
-github.com/blevesearch/bleve/v2 v2.3.4/go.mod h1:Ot0zYum8XQRfPcwhae8bZmNyYubynsoMjVvl1jPqL30=
-github.com/blevesearch/bleve_index_api v1.0.3 h1:DDSWaPXOZZJ2BB73ZTWjKxydAugjwywcqU+91AAqcAg=
-github.com/blevesearch/bleve_index_api v1.0.3/go.mod h1:fiwKS0xLEm+gBRgv5mumf0dhgFr2mDgZah1pqv1c1M4=
-github.com/blevesearch/geo v0.1.13 h1:RsY1vfFm81iv1g+uoCQtsOFvKAhZnpOdTOK8JRA6pqw=
-github.com/blevesearch/geo v0.1.13/go.mod h1:cRIvqCdk3cgMhGeHNNe6yPzb+w56otxbfo1FBJfR2Pc=
+github.com/blevesearch/bleve/v2 v2.3.3 h1:aDvFXy9TxdVLcu/YmHAiLQ2VsCO7hcAYDCgm0SYDEVE=
+github.com/blevesearch/bleve/v2 v2.3.3/go.mod h1:3NBtjJ4ZENIuzztTEZylWgtVdZvMWnbGcTJB7Ry/YeU=
+github.com/blevesearch/bleve_index_api v1.0.1/go.mod h1:fiwKS0xLEm+gBRgv5mumf0dhgFr2mDgZah1pqv1c1M4=
+github.com/blevesearch/bleve_index_api v1.0.2 h1:rO736FwEPMVY1mGi7d4n7CgBB3+tB7uYN7QTjR+Ij+s=
+github.com/blevesearch/bleve_index_api v1.0.2/go.mod h1:fiwKS0xLEm+gBRgv5mumf0dhgFr2mDgZah1pqv1c1M4=
+github.com/blevesearch/geo v0.1.12-0.20220606102651-aab42add3121 h1:5uNzC0Mn/8aCGbSJA6T8ZCjrKW8MKsZKQYBDowmeV/g=
+github.com/blevesearch/geo v0.1.12-0.20220606102651-aab42add3121/go.mod h1:8z6udmXe8Ek8uuX4qOIWKb50vY/OQ1SG+XhL5FrcHOU=
 github.com/blevesearch/go-metrics v0.0.0-20201227073835-cf1acfcdf475/go.mod h1:9eJDeqxJ3E7WnLebQUlPD7ZjSce7AnDb9vjGmMCbD0A=
 github.com/blevesearch/go-porterstemmer v1.0.3 h1:GtmsqID0aZdCSNiY8SkuPJ12pD4jI+DdXTAn4YRcHCo=
 github.com/blevesearch/go-porterstemmer v1.0.3/go.mod h1:angGc5Ht+k2xhJdZi511LtmxuEf0OVpvUUNrwmM1P7M=
@@ -198,8 +197,8 @@ github.com/blevesearch/gtreap v0.1.1/go.mod h1:QaQyDRAT51sotthUWAH4Sj08awFSSWzgY
 github.com/blevesearch/mmap-go v1.0.2/go.mod h1:ol2qBqYaOUsGdm7aRMRrYGgPvnwLe6Y+7LMvAB5IbSA=
 github.com/blevesearch/mmap-go v1.0.4 h1:OVhDhT5B/M1HNPpYPBKIEJaD0F3Si+CrEKULGCDPWmc=
 github.com/blevesearch/mmap-go v1.0.4/go.mod h1:EWmEAOmdAS9z/pi/+Toxu99DnsbhG1TIxUoRmJw/pSs=
-github.com/blevesearch/scorch_segment_api/v2 v2.1.2 h1:TAte9VZLWda5WAVlZTTZ+GCzEHqGJb4iB2aiZSA6Iv8=
-github.com/blevesearch/scorch_segment_api/v2 v2.1.2/go.mod h1:rvoQXZGq8drq7vXbNeyiRzdEOwZkjkiYGf1822i6CRA=
+github.com/blevesearch/scorch_segment_api/v2 v2.1.0 h1:NFwteOpZEvJk5Vg0H6gD0hxupsG3JYocE4DBvsA2GZI=
+github.com/blevesearch/scorch_segment_api/v2 v2.1.0/go.mod h1:uch7xyyO/Alxkuxa+CGs79vw0QY8BENSBjg6Mw5L5DE=
 github.com/blevesearch/segment v0.9.0 h1:5lG7yBCx98or7gK2cHMKPukPZ/31Kag7nONpoBt22Ac=
 github.com/blevesearch/segment v0.9.0/go.mod h1:9PfHYUdQCgHktBgvtUOF4x+pc4/l8rdH0u5spnW85UQ=
 github.com/blevesearch/snowball v0.6.1/go.mod h1:ZF0IBg5vgpeoUhnMza2v0A/z8m1cWPlwhke08LpNusg=
@@ -209,16 +208,16 @@ github.com/blevesearch/upsidedown_store_api v1.0.1 h1:1SYRwyoFLwG3sj0ed89RLtM15a
 github.com/blevesearch/upsidedown_store_api v1.0.1/go.mod h1:MQDVGpHZrpe3Uy26zJBf/a8h0FZY6xJbthIMm8myH2Q=
 github.com/blevesearch/vellum v1.0.8 h1:iMGh4lfxza4BnWO/UJTMPlI3HsK9YawjPv+TteVa9ck=
 github.com/blevesearch/vellum v1.0.8/go.mod h1:+cpRi/tqq49xUYSQN2P7A5zNSNrS+MscLeeaZ3J46UA=
-github.com/blevesearch/zapx/v11 v11.3.5 h1:eBQWQ7huA+mzm0sAGnZDwgGGli7S45EO+N+ObFWssbI=
-github.com/blevesearch/zapx/v11 v11.3.5/go.mod h1:5UdIa/HRMdeRCiLQOyFESsnqBGiip7vQmYReA9toevU=
-github.com/blevesearch/zapx/v12 v12.3.5 h1:5pX2hU+R1aZihT7ac1dNWh1n4wqkIM9pZzWp0ANED9s=
-github.com/blevesearch/zapx/v12 v12.3.5/go.mod h1:ANcthYRZQycpbRut/6ArF5gP5HxQyJqiFcuJCBju/ss=
-github.com/blevesearch/zapx/v13 v13.3.5 h1:eJ3gbD+Nu8p36/O6lhfdvWQ4pxsGYSuTOBrLLPVWJ74=
-github.com/blevesearch/zapx/v13 v13.3.5/go.mod h1:FV+dRnScFgKnRDIp08RQL4JhVXt1x2HE3AOzqYa6fjo=
-github.com/blevesearch/zapx/v14 v14.3.5 h1:hEvVjZaagFCvOUJrlFQ6/Z6Jjy0opM3g7TMEo58TwP4=
-github.com/blevesearch/zapx/v14 v14.3.5/go.mod h1:954A/eKFb+pg/ncIYWLWCKY+mIjReM9FGTGIO2Wu1cU=
-github.com/blevesearch/zapx/v15 v15.3.5 h1:NVD0qq8vRk66ImJn1KloXT5ckqPDUZT7VbVJs9jKlac=
-github.com/blevesearch/zapx/v15 v15.3.5/go.mod h1:QMUh2hXCaYIWFKPYGavq/Iga2zbHWZ9DZAa9uFbWyvg=
+github.com/blevesearch/zapx/v11 v11.3.4 h1:MjYFN8fwDajRgeUsKMfW673zI6MI3twy0pCsUH/LXgc=
+github.com/blevesearch/zapx/v11 v11.3.4/go.mod h1:HJ7qdfBxdziuymKvXbsBVhCK5pB98tdzQbc8pJV6tJo=
+github.com/blevesearch/zapx/v12 v12.3.4 h1:OpPoHQjsjvDImDzwKZXTXubIPJz28EaRynJGJSS6mvU=
+github.com/blevesearch/zapx/v12 v12.3.4/go.mod h1:uQrKrK9XjXAAsJfAIE8ViLqIKP/keA2DQhS1XXpjkwA=
+github.com/blevesearch/zapx/v13 v13.3.4 h1:f646k6300VGRIR7eJ6lLtF8UC95NIWmF899j49o7PJA=
+github.com/blevesearch/zapx/v13 v13.3.4/go.mod h1:Wl7hO1gT+IDvJb7i06g2iW5Qvw0KzncJPsBx7WGWhLA=
+github.com/blevesearch/zapx/v14 v14.3.4 h1:/FVzSGFG5rbVWfPEqlcaJd8lZSJMQpTdmFhz/l2QI7w=
+github.com/blevesearch/zapx/v14 v14.3.4/go.mod h1:b1YhRXXhAj9i+9aOwhRKCHUmJyYieK/QbDvPJDLddUk=
+github.com/blevesearch/zapx/v15 v15.3.4 h1:/y6AOxRuBiZPFAItqcrKcXPPtlAwuW/jMoOFO7tc7rs=
+github.com/blevesearch/zapx/v15 v15.3.4/go.mod h1:TQ/qDC2q7TSSpeC6Vgr9fDN56Ra0u49lZJQ4v30WEx4=
 github.com/bluele/gcache v0.0.2 h1:WcbfdXICg7G/DGBh1PFfcirkWOQV+v077yF1pSy3DGw=
 github.com/bluele/gcache v0.0.2/go.mod h1:m15KV+ECjptwSPxKhOhQoAFQVtUFjTVkc3H8o0t/fp0=
 github.com/bmizerany/assert v0.0.0-20160611221934-b7ed37b82869 h1:DDGfHa7BWjL4YnC6+E63dPcxHo2sUxDIu8g3QgEJdRY=
@@ -266,8 +265,8 @@ github.com/coreos/etcd v3.3.13+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc
 github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk=
 github.com/coreos/go-oidc v2.2.1+incompatible h1:mh48q/BqXqgjVHpy2ZY7WnWAbenxRjsz9N1i1YxjHAk=
 github.com/coreos/go-oidc v2.2.1+incompatible/go.mod h1:CgnwVTmzoESiwO9qyAFEMiHoZ1nMCKZlZ9V6mm3/LKc=
-github.com/coreos/go-oidc/v3 v3.3.0 h1:Y1LV3mP+QT3MEycATZpAiwfyN+uxZLqVbAHJUuOJEe4=
-github.com/coreos/go-oidc/v3 v3.3.0/go.mod h1:eHUXhZtXPQLgEaDrOVTgwbgmz1xGOkJNye6h3zkD2Pw=
+github.com/coreos/go-oidc/v3 v3.2.0 h1:2eR2MGR7thBXSQ2YbODlF0fcmgtliLCfr9iX6RW11fc=
+github.com/coreos/go-oidc/v3 v3.2.0/go.mod h1:rEJ/idjfUyfkBit1eI1fvyr+64/g9dcKpAm8MJMesvo=
 github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk=
 github.com/coreos/go-semver v0.3.0 h1:wkHLiw0WNATZnSG7epLsujiMCgPAc9xhjJ4tgnAxmfM=
 github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk=
@@ -627,28 +626,20 @@ github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+
 github.com/google/uuid v1.2.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
 github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I=
 github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
-github.com/googleapis/enterprise-certificate-proxy v0.0.0-20220520183353-fd19c99a87aa/go.mod h1:17drOmN3MwGY7t0e+Ei9b45FFGA3fBs3x36SsCg1hq8=
-github.com/googleapis/enterprise-certificate-proxy v0.1.0/go.mod h1:17drOmN3MwGY7t0e+Ei9b45FFGA3fBs3x36SsCg1hq8=
 github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg=
 github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk=
 github.com/googleapis/gax-go/v2 v2.1.0/go.mod h1:Q3nei7sK6ybPYH7twZdmQpAd1MKb7pfu6SK+H1/DsU0=
 github.com/googleapis/gax-go/v2 v2.1.1/go.mod h1:hddJymUZASv3XPyGkUpKj8pPO47Rmb0eJc8R6ouapiM=
 github.com/googleapis/gax-go/v2 v2.2.0/go.mod h1:as02EH8zWkzwUoLbBaFeQ+arQaj/OthfcblKl4IGNaM=
-github.com/googleapis/gax-go/v2 v2.3.0/go.mod h1:b8LNqSzNabLiUpXKkY7HAR5jr6bIT99EXz9pXxye9YM=
-github.com/googleapis/gax-go/v2 v2.4.0/go.mod h1:XOTVJ59hdnfJLIP/dh8n5CGryZR2LxK9wbMD5+iXC6c=
-github.com/googleapis/go-type-adapters v1.0.0/go.mod h1:zHW75FOG2aur7gAO2B+MLby+cLsWGBF62rFAi7WjWO4=
+github.com/gookit/color v1.5.0 h1:1Opow3+BWDwqor78DcJkJCIwnkviFi+rrOANki9BUFw=
 github.com/gookit/color v1.5.0/go.mod h1:43aQb+Zerm/BWh2GnrgOQm7ffz7tvQXEKV6BFMl7wAo=
-github.com/gookit/color v1.5.1 h1:Vjg2VEcdHpwq+oY63s/ksHrgJYCTo0bwWvmmYWdE9fQ=
-github.com/gookit/color v1.5.1/go.mod h1:wZFzea4X8qN6vHOSP2apMb4/+w/orMznEzYsIHPaqKM=
-github.com/gookit/config/v2 v2.1.4 h1:WOnT+lGZ9hHJCW1x3QwEbckue9wrcHmBEru5Ds5qxs8=
-github.com/gookit/config/v2 v2.1.4/go.mod h1:heWKOHQkyUE6MRXpkDloC47Y3Kh8dPB5MxcW2ZF4oFk=
-github.com/gookit/goutil v0.5.3/go.mod h1:W0rVeVN9EcoRV+ODq91TXvqoUA87BXGi36WFVykCKRI=
-github.com/gookit/goutil v0.5.9/go.mod h1:iZLXpRhMqKGvKtJ9+b0cdls2gXRH4HaGWQfkf2mdHRQ=
-github.com/gookit/goutil v0.5.10 h1:tKvo3LzE6j8vTXizQoPvZq9jt4VrVriuD5lQMbQbhH4=
-github.com/gookit/goutil v0.5.10/go.mod h1:rZCjNKf63zWuD5N0vyn6718utvN9m2uT0jsHBV66hAU=
-github.com/gookit/ini/v2 v2.1.1 h1:q2VtSSl/ivTOZMPvxhjWxO3f146NvWM84jBQZETj/1o=
-github.com/gookit/ini/v2 v2.1.1/go.mod h1:zkMTCrnE2QgDW0izB/pRtgEKKjXmT/22dfk5eZg+IHo=
-github.com/gookit/properties v0.1.0/go.mod h1:qg423zj2UMRsOilko6MAqyUBYQETTLjkk9NejTlMeBE=
+github.com/gookit/config/v2 v2.1.2 h1:qPW58LTY8CTOnHFN9r9q2NU3jk+6UQ+JYWV6x2JepH4=
+github.com/gookit/config/v2 v2.1.2/go.mod h1:IPaiN75J82aoFsavbpK8SazWLQ0Y4QOYjucqA3ggiVM=
+github.com/gookit/goutil v0.5.0/go.mod h1:pq1eTibwb2wN96jrci0xy7xogWzzo9CihOQJEAvz4yQ=
+github.com/gookit/goutil v0.5.2 h1:1IbfIUiRV+Y+5IdgBeb/O7hWvq8OnnP1+sB/Ua2Q6jE=
+github.com/gookit/goutil v0.5.2/go.mod h1:pq1eTibwb2wN96jrci0xy7xogWzzo9CihOQJEAvz4yQ=
+github.com/gookit/ini/v2 v2.1.0 h1:L1qn8CfP1KYlbogKuMsJ3FiDdKDwvABCKeeuMWDlQzQ=
+github.com/gookit/ini/v2 v2.1.0/go.mod h1:r06awbwBtIHxjA7ndqWJkRgCAvSG+5FdSGrrbGfigtY=
 github.com/gophercloud/gophercloud v0.15.1-0.20210202035223-633d73521055/go.mod h1:wRtmUelyIIv3CSSDI47aUwbs075O6i+LY+pXsKCBsb4=
 github.com/gophercloud/gophercloud v0.16.0/go.mod h1:wRtmUelyIIv3CSSDI47aUwbs075O6i+LY+pXsKCBsb4=
 github.com/gophercloud/utils v0.0.0-20210216074907-f6de111f2eae/go.mod h1:wx8HMD8oQD0Ryhz6+6ykq75PJ79iPyEqYHfwZ4l7OsA=
@@ -670,8 +661,8 @@ github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgf
 github.com/grpc-ecosystem/grpc-gateway v1.8.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY=
 github.com/grpc-ecosystem/grpc-gateway v1.9.0/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY=
 github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw=
-github.com/grpc-ecosystem/grpc-gateway/v2 v2.11.3 h1:lLT7ZLSzGLI08vc9cpd+tYmNWjdKDqyr/2L+f6U12Fk=
-github.com/grpc-ecosystem/grpc-gateway/v2 v2.11.3/go.mod h1:o//XUCC/F+yRGJoPO/VU0GSB0f8Nhgmxx0VIRUvaC0w=
+github.com/grpc-ecosystem/grpc-gateway/v2 v2.11.2 h1:BqHID5W5qnMkug0Z8UmL8tN0gAy4jQ+B4WFt8cCgluU=
+github.com/grpc-ecosystem/grpc-gateway/v2 v2.11.2/go.mod h1:ZbS3MZTZq/apAfAEHGoB5HbsQQstoqP92SjAqtQ9zeg=
 github.com/h2non/parth v0.0.0-20190131123155-b4df798d6542/go.mod h1:Ow0tF8D4Kplbc8s8sSb3V2oUCygFHVp8gC3Dn6U4MNI=
 github.com/hashicorp/consul/api v1.1.0/go.mod h1:VmuI/Lkw1nC05EYQWNKwWGbkg+FbDBtguAZLlVdkD9Q=
 github.com/hashicorp/consul/api v1.11.0 h1:Hw/G8TtRvOElqxVIhBzXciiSTbapq8hZ2XKZsXk5ZCE=
@@ -719,7 +710,7 @@ github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ
 github.com/hashicorp/golang-lru v0.5.4 h1:YDjusn29QI/Das2iO9M0BHnIbxPeyuCHsjMW+lJfyTc=
 github.com/hashicorp/golang-lru v0.5.4/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4=
 github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ=
-github.com/hashicorp/hcl/v2 v2.13.0/go.mod h1:e4z5nxYlWNPdDSNYX+ph14EvWYMFm3eP0zIUqPc2jr0=
+github.com/hashicorp/hcl/v2 v2.12.0/go.mod h1:FwWsfWEjyV/CMj8s/gqAuiviY72rJ1/oayI9WftqcKg=
 github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO+LraFDTW64=
 github.com/hashicorp/mdns v1.0.0/go.mod h1:tL+uN++7HEJ6SQLQ2/p+z2pH24WQKWjBPkE0mNTz8vQ=
 github.com/hashicorp/mdns v1.0.1/go.mod h1:4gW7WsVCke5TE7EPeYliwHlRUyBtfCwuFwuMg2DmyNY=
@@ -864,9 +855,8 @@ github.com/mattn/go-isatty v0.0.9/go.mod h1:YNRxwqDuOph6SZLI9vUUz6OYw3QyUt7WiY2y
 github.com/mattn/go-isatty v0.0.10/go.mod h1:qgIWMr58cqv1PHHyhnkY9lrL7etaEgOFcMEpPG5Rm84=
 github.com/mattn/go-isatty v0.0.11/go.mod h1:PhnuNfih5lzO57/f3n+odYbM4JtupLOxQOAqxQCu2WE=
 github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU=
+github.com/mattn/go-isatty v0.0.14 h1:yVuAays6BHfxijgZPzw+3Zlu5yQgKGP2/hcQbHb7S9Y=
 github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94=
-github.com/mattn/go-isatty v0.0.16 h1:bq3VjFmv/sOjHtdEhmkEV4x1AJtvUvOJ2PFAZ5+peKQ=
-github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM=
 github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU=
 github.com/mattn/go-runewidth v0.0.6/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI=
 github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI=
@@ -971,13 +961,13 @@ github.com/onsi/ginkgo v1.10.3/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+
 github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk=
 github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE=
 github.com/onsi/ginkgo v1.16.5/go.mod h1:+E8gABHa3K6zRBolWtd+ROzc/U5bkGt0FwiG042wbpU=
-github.com/onsi/ginkgo/v2 v2.1.6 h1:Fx2POJZfKRQcM1pH49qSZiYeu319wji004qX+GDovrU=
-github.com/onsi/ginkgo/v2 v2.1.6/go.mod h1:MEH45j8TBi6u9BMogfbp0stKC5cdGjumZj5Y7AG4VIk=
+github.com/onsi/ginkgo/v2 v2.1.4 h1:GNapqRSid3zijZ9H77KrgVG4/8KqiyRsxcSxe+7ApXY=
+github.com/onsi/ginkgo/v2 v2.1.4/go.mod h1:um6tUpWM/cxCK3/FK8BXqEiUMUwRgSM4JXG47RKZmLU=
 github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
 github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY=
 github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo=
-github.com/onsi/gomega v1.20.2 h1:8uQq0zMgLEfa0vRrrBgaJF2gyW9Da9BmfGV+OyUzfkY=
-github.com/onsi/gomega v1.20.2/go.mod h1:iYAIXgPSaDHak0LCMA+AWBpIKBr8WZicMxnE8luStNc=
+github.com/onsi/gomega v1.20.0 h1:8W0cWlwFkflGPLltQvLRB7ZVD5HuP6ng320w2IS245Q=
+github.com/onsi/gomega v1.20.0/go.mod h1:DtrZpjmvpn2mPm4YWQa0/ALMDj9v4YxLgojwPeREyVo=
 github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o=
 github.com/opentracing/opentracing-go v1.2.0/go.mod h1:GxEUsuufX4nBwe+T+Wl9TAgYrxe9dPLANfrWvHYVTgc=
 github.com/openzipkin/zipkin-go v0.1.6/go.mod h1:QgAqvLzwWbR/WpD4A3cGpPtJrZXNIiJc5AZX7/PBEpw=
@@ -985,8 +975,8 @@ github.com/oracle/oci-go-sdk v24.3.0+incompatible/go.mod h1:VQb79nF8Z2cwLkLS35uk
 github.com/orcaman/concurrent-map v1.0.0 h1:I/2A2XPCb4IuQWcQhBhSwGfiuybl/J0ev9HDbW65HOY=
 github.com/orcaman/concurrent-map v1.0.0/go.mod h1:Lu3tH6HLW3feq74c2GC+jIMS/K2CFcDWnWD9XkenwhI=
 github.com/ovh/go-ovh v1.1.0/go.mod h1:AxitLZ5HBRPyUd+Zl60Ajaag+rNTdVXWIkzfrVuTXWA=
-github.com/owncloud/libre-graph-api-go v0.17.0 h1:2SQfXa5M/QPZZlluBTvPG7aQNNZ61YQJswvkblcHf4w=
-github.com/owncloud/libre-graph-api-go v0.17.0/go.mod h1:579sFrPP7aP24LZXGPopLfvE+hAka/2DYHk0+Ij+w+U=
+github.com/owncloud/libre-graph-api-go v0.16.0 h1:CyW69/lREyx+nkUrXYJnMyshBygwkfPVCjm0ngqjcYs=
+github.com/owncloud/libre-graph-api-go v0.16.0/go.mod h1:579sFrPP7aP24LZXGPopLfvE+hAka/2DYHk0+Ij+w+U=
 github.com/oxtoacart/bpool v0.0.0-20190530202638-03653db5a59c h1:rp5dCmg/yLR3mgFuSOe4oEnDDmGLROTvMragMUXpTQw=
 github.com/oxtoacart/bpool v0.0.0-20190530202638-03653db5a59c/go.mod h1:X07ZCGwUbLaax7L0S3Tw4hpejzu63ZrrQiUe6W0hcy0=
 github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc=
@@ -1028,7 +1018,6 @@ github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP
 github.com/prometheus/client_golang v1.11.0/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0=
 github.com/prometheus/client_golang v1.11.1/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0=
 github.com/prometheus/client_golang v1.12.1/go.mod h1:3Z9XVyYiZYEO+YQWt3RD2R3jrbd179Rt297l4aS6nDY=
-github.com/prometheus/client_golang v1.12.2/go.mod h1:3Z9XVyYiZYEO+YQWt3RD2R3jrbd179Rt297l4aS6nDY=
 github.com/prometheus/client_golang v1.13.0 h1:b71QUfeo5M8gq2+evJdTPfZhYMAU0uKPkyPJ7TPsloU=
 github.com/prometheus/client_golang v1.13.0/go.mod h1:vTeo+zgvILHsnnj/39Ou/1fPN5nJFOEMgftOUOmlvYQ=
 github.com/prometheus/client_model v0.0.0-20170216185247-6f3806018612/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo=
@@ -1085,10 +1074,10 @@ github.com/rogpeppe/go-internal v1.8.0 h1:FCbCCtXNOY3UtUuHUYaghJg4y7Fd14rXifAYUA
 github.com/rogpeppe/go-internal v1.8.0/go.mod h1:WmiCO8CzOY8rg0OYDC4/i/2WRWAB6poM+XZ2dLUbcbE=
 github.com/rs/cors v1.8.2 h1:KCooALfAYGs415Cwu5ABvv9n9509fSiG5SQJn/AQo4U=
 github.com/rs/cors v1.8.2/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU=
-github.com/rs/xid v1.4.0 h1:qd7wPTDkN6KQx2VmMBLrpHkiyQwgFXRnkOLacUiaSNY=
-github.com/rs/xid v1.4.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg=
-github.com/rs/zerolog v1.28.0 h1:MirSo27VyNi7RJYP3078AA1+Cyzd2GB66qy3aUHvsWY=
-github.com/rs/zerolog v1.28.0/go.mod h1:NILgTygv/Uej1ra5XxGf82ZFSLk58MFGAUS2o6usyD0=
+github.com/rs/xid v1.3.0 h1:6NjYksEUlhurdVehpc7S7dk6DAmcKv8V9gG0FsVN2U4=
+github.com/rs/xid v1.3.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg=
+github.com/rs/zerolog v1.27.0 h1:1T7qCieN22GVc8S4Q2yuexzBb1EqjbgjSH9RohbMjKs=
+github.com/rs/zerolog v1.27.0/go.mod h1:7frBqO0oezxmnO7GF86FY++uy8I0Tk/If5ni1G9Qc0U=
 github.com/russellhaering/goxmldsig v1.1.1 h1:vI0r2osGF1A9PLvsGdPUAGwEIrKa4Pj5sesSBsebIxM=
 github.com/russellhaering/goxmldsig v1.1.1/go.mod h1:gM4MDENBQf7M+V824SGfyIUVFWydB7n0KkEubVJl+Tw=
 github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g=
@@ -1187,15 +1176,15 @@ github.com/toorop/go-dkim v0.0.0-20201103131630-e1cd1a0a5208/go.mod h1:BzWtXXrXz
 github.com/transip/gotransip/v6 v6.2.0/go.mod h1:pQZ36hWWRahCUXkFWlx9Hs711gLd8J4qdgLdRzmtY+g=
 github.com/trustelem/zxcvbn v1.0.1 h1:mp4JFtzdDYGj9WYSD3KQSkwwUumWNFzXaAjckaTYpsc=
 github.com/trustelem/zxcvbn v1.0.1/go.mod h1:zonUyKeh7sw6psPf/e3DtRqkRyZvAbOfjNz/aO7YQ5s=
-github.com/tus/tusd v1.9.1 h1:W6zuqVFjVhSN2hqmhyXM8WNoniSZmxfMZZe35d8HZyk=
-github.com/tus/tusd v1.9.1/go.mod h1:HKB+PCoXj5djoedseHtr9Y0uwQrAKFa0/E/eCMCuj6g=
+github.com/tus/tusd v1.9.0 h1:wEngl8P/gh9gOfdeyQNsFf6zbAwYYVOnjakVGbYCuvM=
+github.com/tus/tusd v1.9.0/go.mod h1:Bfji+3c6/7FVD7/nK/W9fM7h83d3ILTNWOc6aClR8lo=
 github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM=
 github.com/uber-go/atomic v1.3.2/go.mod h1:/Ct5t2lcmbJ4OSe/waGBoaVvVqtO0bmtfVNex1PFV8g=
 github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0=
 github.com/urfave/cli v1.22.4/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0=
 github.com/urfave/cli/v2 v2.3.0/go.mod h1:LJmUH05zAU44vOAcrfzZQKsZbVcdbOG8rtL3/XcUArI=
-github.com/urfave/cli/v2 v2.14.0 h1:sFRL29Dm9JhXSMYb96raDeo/Q/JRyPXPs8u+4CkMlI8=
-github.com/urfave/cli/v2 v2.14.0/go.mod h1:1CNUng3PtjQMtRzJO4FMXBQvkGtuYRxxiR9xMa7jMwI=
+github.com/urfave/cli/v2 v2.11.2 h1:FVfNg4m3vbjbBpLYxW//WjxUoHvJ9TlppXcqY9Q9ZfA=
+github.com/urfave/cli/v2 v2.11.2/go.mod h1:f8iq5LtQ/bLxafbdBSLPPNsgaW0l/2fYYEHhAyPlwvo=
 github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc=
 github.com/valyala/fasttemplate v1.0.1/go.mod h1:UQGH1tvbgY+Nz5t2n7tXsz52dQxojPUpymEIMZ47gx8=
 github.com/valyala/fasttemplate v1.1.0/go.mod h1:UQGH1tvbgY+Nz5t2n7tXsz52dQxojPUpymEIMZ47gx8=
@@ -1299,6 +1288,7 @@ golang.org/x/crypto v0.0.0-20190219172222-a4c6cb3142f2/go.mod h1:6SG95UA2DQfeDnf
 golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
 golang.org/x/crypto v0.0.0-20190418165655-df01cb2cc480/go.mod h1:WFFai1msRO1wXaEeE5yQxYXgSfI8pQAWXbQop6sCtWE=
 golang.org/x/crypto v0.0.0-20190422162423-af44ce270edf/go.mod h1:WFFai1msRO1wXaEeE5yQxYXgSfI8pQAWXbQop6sCtWE=
+golang.org/x/crypto v0.0.0-20190426145343-a29dc8fdc734/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
 golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
 golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
 golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
@@ -1314,7 +1304,6 @@ golang.org/x/crypto v0.0.0-20201002170205-7f63de1d35b0/go.mod h1:LzIPMQfyMNhhGPh
 golang.org/x/crypto v0.0.0-20201016220609-9e8e0b390897/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
 golang.org/x/crypto v0.0.0-20201216223049-8b5274cf687f/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I=
 golang.org/x/crypto v0.0.0-20201221181555-eec23a3978ad/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I=
-golang.org/x/crypto v0.0.0-20210220033148-5ea612d1eb83/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I=
 golang.org/x/crypto v0.0.0-20210314154223-e6e6c4f2bb5b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4=
 golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4=
 golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4=
@@ -1322,7 +1311,6 @@ golang.org/x/crypto v0.0.0-20210616213533-5ff15b29337e/go.mod h1:GvvjBRRGRdwPK5y
 golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
 golang.org/x/crypto v0.0.0-20211117183948-ae814b36b871/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
 golang.org/x/crypto v0.0.0-20220321153916-2c7772ba3064/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
-golang.org/x/crypto v0.0.0-20220517005047-85d78b3ac167/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
 golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
 golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa h1:zuSxTR4o9y82ebqCUJYNGJbGPo6sKVl54f/TVDObg1c=
 golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
@@ -1367,8 +1355,8 @@ golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
 golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
 golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
 golang.org/x/mod v0.5.1/go.mod h1:5OXOZSfqPIIbmVBIIKWRFfZjPR0E5r58TLhUjH0a2Ro=
-golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4 h1:6zppjxzCulZykYSLyVDYbneBfbaBIQPYMevg0bEwv2s=
-golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
+golang.org/x/mod v0.6.0-dev.0.20220106191415-9b9b3d81d5e3 h1:kQgndtyPBW/JIYERgdxfwMYh3AVStj88WQTlNDi2a+o=
+golang.org/x/mod v0.6.0-dev.0.20220106191415-9b9b3d81d5e3/go.mod h1:3p9vT2HGsQu2K1YbXdKPJLVgG5VJdoTa1poYQBtP1AY=
 golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
 golang.org/x/net v0.0.0-20180811021610-c39426892332/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
 golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
@@ -1399,6 +1387,7 @@ golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLL
 golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
 golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
 golang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
+golang.org/x/net v0.0.0-20200505041828-1ed23360d12c/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
 golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
 golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
 golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
@@ -1427,13 +1416,8 @@ golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qx
 golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk=
 golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk=
 golang.org/x/net v0.0.0-20220325170049-de3da57026de/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk=
-golang.org/x/net v0.0.0-20220412020605-290c469a71a5/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk=
-golang.org/x/net v0.0.0-20220425223048-2871e0cb64e4/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk=
-golang.org/x/net v0.0.0-20220607020251-c690dde0001d/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
-golang.org/x/net v0.0.0-20220617184016-355a448f1bc9/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
+golang.org/x/net v0.0.0-20220624214902-1bab6f366d9e h1:TsQ7F31D3bUCLeqPT0u+yjp1guoArKaNKmCr22PYgTQ=
 golang.org/x/net v0.0.0-20220624214902-1bab6f366d9e/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
-golang.org/x/net v0.0.0-20220826154423-83b083e8dc8b h1:ZmngSVLe/wycRns9MKikG9OWIEjGcGAkacif7oYQaUY=
-golang.org/x/net v0.0.0-20220826154423-83b083e8dc8b/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk=
 golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
 golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
 golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
@@ -1453,11 +1437,8 @@ golang.org/x/oauth2 v0.0.0-20210819190943-2bc19b11175f/go.mod h1:KelEdhl1UZF7XfJ
 golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
 golang.org/x/oauth2 v0.0.0-20220223155221-ee480838109b/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc=
 golang.org/x/oauth2 v0.0.0-20220309155454-6242fa91716a/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc=
-golang.org/x/oauth2 v0.0.0-20220411215720-9780585627b5/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc=
-golang.org/x/oauth2 v0.0.0-20220608161450-d0670ef3b1eb/go.mod h1:jaDAt6Dkxork7LmZnYtzbRWj0W47D86a3TGe0YHBvmE=
-golang.org/x/oauth2 v0.0.0-20220622183110-fd043fe589d2/go.mod h1:jaDAt6Dkxork7LmZnYtzbRWj0W47D86a3TGe0YHBvmE=
-golang.org/x/oauth2 v0.0.0-20220822191816-0ebed06d0094 h1:2o1E+E8TpNLklK9nHiPiK1uzIYrIHt+cQx3ynCwq9V8=
-golang.org/x/oauth2 v0.0.0-20220822191816-0ebed06d0094/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg=
+golang.org/x/oauth2 v0.0.0-20220722155238-128564f6959c h1:q3gFqPqH7NVofKo3c3yETAP//pPI+G5mvB7qqj1Y5kY=
+golang.org/x/oauth2 v0.0.0-20220722155238-128564f6959c/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg=
 golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
@@ -1494,6 +1475,7 @@ golang.org/x/sys v0.0.0-20190415081028-16da32be82c5/go.mod h1:h1NjWce9XRLGQEsW7w
 golang.org/x/sys v0.0.0-20190419153524-e8e3143a4f4a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20190502175342-a43fa875dd82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20190531175056-4c3a928424d2/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
@@ -1580,19 +1562,13 @@ golang.org/x/sys v0.0.0-20220328115105-d36c6a25d886/go.mod h1:oPkhp1MJrh7nUepCBc
 golang.org/x/sys v0.0.0-20220408201424-a24fb2fb8a0f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.0.0-20220412211240-33da011f77ad/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.0.0-20220422013727-9388b58f7150/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.0.0-20220502124256-b6088ccd6cba/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.0.0-20220503163025-988cb79eb6c6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.0.0-20220610221304-9f5ed59c137d/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.0.0-20220615213510-4f61da869c0c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.0.0-20220624220833-87e55d714810/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.0.0-20220728004956-3c1f35247d10/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab h1:2QkjZIsXupsJbJIdSjjUOgWK3aEtzyuh2mPt3l/CkeU=
-golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f h1:v4INt8xihDGvnrfjMDVXGxw9wrfxYyCjk0KbXjhR55s=
+golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw=
 golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
-golang.org/x/term v0.0.0-20210220032956-6a3ed077a48d/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
 golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
 golang.org/x/term v0.0.0-20220526004731-065cf7ba2467/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
 golang.org/x/term v0.0.0-20220722155259-a9ba230a4035 h1:Q5284mrmYTpACcm+eAKjKJH48BBwSyfJqmmGDTtT8Vc=
@@ -1684,15 +1660,13 @@ golang.org/x/tools v0.1.4/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
 golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
 golang.org/x/tools v0.1.6-0.20210726203631-07bc1bf47fb2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
 golang.org/x/tools v0.1.9/go.mod h1:nABZi5QlRsZVlzPpHl034qft6wpY4eDcsTt5AaioBiU=
-golang.org/x/tools v0.1.12 h1:VveCTK38A2rkS8ZqFY25HIDFscX5X9OoEhJd3quQmXU=
-golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
+golang.org/x/tools v0.1.10 h1:QjFRCZxdOhBJ/UNgnBZLbNV13DlbnK0quyivTnXJM20=
+golang.org/x/tools v0.1.10/go.mod h1:Uh6Zz+xoGYZom868N8YTex3t7RhtHDBrE8Gzo9bV56E=
 golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
 golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
 golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
+golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE=
 golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-golang.org/x/xerrors v0.0.0-20220411194840-2f41105eb62f/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-golang.org/x/xerrors v0.0.0-20220517211312-f3a8303e98df/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8=
-golang.org/x/xerrors v0.0.0-20220609144429-65e65417b02f/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8=
 google.golang.org/api v0.3.1/go.mod h1:6wY9I6uQWHQ8EM57III9mq/AjF+i8G65rmVagqKMtkk=
 google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE=
 google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M=
@@ -1725,16 +1699,13 @@ google.golang.org/api v0.56.0/go.mod h1:38yMfeP1kfjsl8isn0tliTjIb1rJXcQi4UXlbqiv
 google.golang.org/api v0.57.0/go.mod h1:dVPlbZyBo2/OjBpmvNdpn2GRm6rPy75jyU7bmhdrMgI=
 google.golang.org/api v0.61.0/go.mod h1:xQRti5UdCmoCEqFxcz93fTl338AVqDgyaDRuOZ3hg9I=
 google.golang.org/api v0.63.0/go.mod h1:gs4ij2ffTRXwuzzgJl/56BdwJaA194ijkfn++9tDuPo=
+google.golang.org/api v0.64.0/go.mod h1:931CdxA8Rm4t6zqTFGSsgwbAEZ2+GMYurbndwSimebM=
+google.golang.org/api v0.66.0/go.mod h1:I1dmXYpX7HGwz/ejRxwQp2qj5bFAz93HiCU1C1oYd9M=
 google.golang.org/api v0.67.0/go.mod h1:ShHKP8E60yPsKNw/w8w+VYaj9H6buA5UqDp8dhbQZ6g=
+google.golang.org/api v0.69.0/go.mod h1:boanBiw+h5c3s+tBPgEzLDRHfFLWV0qXxRHz3ws7C80=
 google.golang.org/api v0.70.0/go.mod h1:Bs4ZM2HGifEvXwd50TtW70ovgJffJYw2oRCOFU/SkfA=
 google.golang.org/api v0.71.0/go.mod h1:4PyU6e6JogV1f9eA4voyrTY2batOLdgZ5qZ5HOCc4j8=
 google.golang.org/api v0.74.0/go.mod h1:ZpfMZOVRMywNyvJFeqL9HRWBgAuRfSjJFpe9QtRRyDs=
-google.golang.org/api v0.75.0/go.mod h1:pU9QmyHLnzlpar1Mjt4IbapUCy8J+6HD6GeELN69ljA=
-google.golang.org/api v0.78.0/go.mod h1:1Sg78yoMLOhlQTeF+ARBoytAcH1NNyyl390YMy6rKmw=
-google.golang.org/api v0.80.0/go.mod h1:xY3nI94gbvBrE0J6NHXhxOmW97HG7Khjkku6AFB3Hyg=
-google.golang.org/api v0.84.0/go.mod h1:NTsGnUFJMYROtiquksZHBWtHfeMC7iYthki7Eq3pa8o=
-google.golang.org/api v0.85.0/go.mod h1:AqZf8Ep9uZ2pyTvgL+x0D3Zt0eoT9b5E8fmzfu6FO2g=
-google.golang.org/api v0.88.0/go.mod h1:+Sem1dnrKlrXMR/X0bPnMWyluQe4RsNoYfmNLhOIkzw=
 google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
 google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
 google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
@@ -1784,7 +1755,6 @@ google.golang.org/genproto v0.0.0-20210222152913-aa3ee6e6a81c/go.mod h1:FWY/as6D
 google.golang.org/genproto v0.0.0-20210303154014-9728d6b83eeb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
 google.golang.org/genproto v0.0.0-20210310155132-4ce2db91004e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
 google.golang.org/genproto v0.0.0-20210319143718-93e7006c17a6/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
-google.golang.org/genproto v0.0.0-20210329143202-679c6ae281ee/go.mod h1:9lPAdzaEmUacj36I+k7YKbEc5CXzPIeORRgDAUOu28A=
 google.golang.org/genproto v0.0.0-20210402141018-6c239bbf2bb1/go.mod h1:9lPAdzaEmUacj36I+k7YKbEc5CXzPIeORRgDAUOu28A=
 google.golang.org/genproto v0.0.0-20210513213006-bf773b8c8384/go.mod h1:P3QM42oQyzQSnHPnZ/vqoCdDmzH28fzWByN9asMeM8A=
 google.golang.org/genproto v0.0.0-20210602131652-f16073e35f0c/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0=
@@ -1806,27 +1776,21 @@ google.golang.org/genproto v0.0.0-20211118181313-81c1377c94b1/go.mod h1:5CzLGKJ6
 google.golang.org/genproto v0.0.0-20211206160659-862468c7d6e0/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc=
 google.golang.org/genproto v0.0.0-20211208223120-3a66f561d7aa/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc=
 google.golang.org/genproto v0.0.0-20211221195035-429b39de9b1c/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc=
+google.golang.org/genproto v0.0.0-20211223182754-3ac035c7e7cb/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc=
+google.golang.org/genproto v0.0.0-20220111164026-67b88f271998/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc=
+google.golang.org/genproto v0.0.0-20220114231437-d2e6a121cae0/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc=
 google.golang.org/genproto v0.0.0-20220126215142-9970aeb2e350/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc=
+google.golang.org/genproto v0.0.0-20220201184016-50beb8ab5c44/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc=
 google.golang.org/genproto v0.0.0-20220207164111-0872dc986b00/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc=
+google.golang.org/genproto v0.0.0-20220211171837-173942840c17/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI=
+google.golang.org/genproto v0.0.0-20220216160803-4663080d8bc8/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI=
 google.golang.org/genproto v0.0.0-20220218161850-94dd64e39d7c/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI=
 google.golang.org/genproto v0.0.0-20220222213610-43724f9ea8cf/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI=
 google.golang.org/genproto v0.0.0-20220304144024-325a89244dc8/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI=
 google.golang.org/genproto v0.0.0-20220310185008-1973136f34c6/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI=
 google.golang.org/genproto v0.0.0-20220324131243-acbaeb5b85eb/go.mod h1:hAL49I2IFola2sVEjAn7MEwsja0xp51I0tlGAf9hz4E=
-google.golang.org/genproto v0.0.0-20220407144326-9054f6ed7bac/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo=
-google.golang.org/genproto v0.0.0-20220413183235-5e96e2839df9/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo=
-google.golang.org/genproto v0.0.0-20220414192740-2d67ff6cf2b4/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo=
-google.golang.org/genproto v0.0.0-20220421151946-72621c1f0bd3/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo=
-google.golang.org/genproto v0.0.0-20220429170224-98d788798c3e/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo=
-google.golang.org/genproto v0.0.0-20220505152158-f39f71e6c8f3/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4=
-google.golang.org/genproto v0.0.0-20220518221133-4f43b3371335/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4=
-google.golang.org/genproto v0.0.0-20220523171625-347a074981d8/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4=
-google.golang.org/genproto v0.0.0-20220608133413-ed9918b62aac/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA=
-google.golang.org/genproto v0.0.0-20220616135557-88e70c0c3a90/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA=
-google.golang.org/genproto v0.0.0-20220617124728-180714bec0ad/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA=
-google.golang.org/genproto v0.0.0-20220624142145-8cd45d7dbd1f/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA=
-google.golang.org/genproto v0.0.0-20220822174746-9e6da59bd2fc h1:Nf+EdcTLHR8qDNN/KfkQL0u0ssxt9OhbaWCl5C0ucEI=
-google.golang.org/genproto v0.0.0-20220822174746-9e6da59bd2fc/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk=
+google.golang.org/genproto v0.0.0-20220805133916-01dd62135a58 h1:sRT5xdTkj1Kbk30qbYC7VyMj73N5pZYsw6v+Nrzdhno=
+google.golang.org/genproto v0.0.0-20220805133916-01dd62135a58/go.mod h1:iHe1svFLAZg9VWz891+QbRMwUv9O/1Ww+/mngYeThbc=
 google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs=
 google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
 google.golang.org/grpc v1.19.1/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
@@ -1857,12 +1821,8 @@ google.golang.org/grpc v1.40.0/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9K
 google.golang.org/grpc v1.40.1/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34=
 google.golang.org/grpc v1.44.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ590SU=
 google.golang.org/grpc v1.45.0/go.mod h1:lN7owxKUQEqMfSyQikvvk5tf/6zMPsrK+ONuO11+0rQ=
-google.golang.org/grpc v1.46.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk=
-google.golang.org/grpc v1.46.2/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk=
-google.golang.org/grpc v1.47.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk=
+google.golang.org/grpc v1.48.0 h1:rQOsyJ/8+ufEDJd/Gdsz7HG220Mh9HAhFHRGnIjda0w=
 google.golang.org/grpc v1.48.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk=
-google.golang.org/grpc v1.49.0 h1:WTLtQzmQori5FUH25Pq4WT22oCsv8USpQ+F6rqtsmxw=
-google.golang.org/grpc v1.49.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI=
 google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw=
 google.golang.org/grpc/examples v0.0.0-20211102180624-670c133e568e h1:m7aQHHqd0q89mRwhwS9Bx2rjyl/hsFAeta+uGrHsQaU=
 google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
diff --git a/ocis-pkg/config/envdecode/README.md b/ocis-pkg/config/envdecode/README.md
index 39f5ca7a77e..fa3d48b586f 100644
--- a/ocis-pkg/config/envdecode/README.md
+++ b/ocis-pkg/config/envdecode/README.md
@@ -3,7 +3,7 @@ variables. It's basically a fork of https://github.com/joeshaw/envdecode,
 but changed to support multiple environment variables (precedence).
 
 `envdecode` uses struct tags to map environment variables to fields,
-allowing you to use any names you want for environment variables.
+allowing you you use any names you want for environment variables.
 `envdecode` will recurse into nested structs, including pointers to
 nested structs, but it will not allocate new pointers to structs.
 
diff --git a/ocis-pkg/version/version.go b/ocis-pkg/version/version.go
index f2d352597ce..3bec98f9d62 100644
--- a/ocis-pkg/version/version.go
+++ b/ocis-pkg/version/version.go
@@ -16,7 +16,7 @@ var (
 	// LatestTag is the latest released version plus the dev meta version.
 	// Will be overwritten by the release pipeline
 	// Needs a manual change for every tagged release
-	LatestTag = "2.0.0-beta.7+dev"
+	LatestTag = "2.0.0-beta.6+dev"
 
 	// Date indicates the build date.
 	Date = time.Now().Format("20060102")
diff --git a/services/frontend/pkg/revaconfig/config.go b/services/frontend/pkg/revaconfig/config.go
index bae3c2972f5..a247f7b5bd5 100644
--- a/services/frontend/pkg/revaconfig/config.go
+++ b/services/frontend/pkg/revaconfig/config.go
@@ -206,7 +206,7 @@ func FrontendConfigFromStruct(cfg *config.Config) (map[string]interface{}, error
 										},
 									},
 									"expire_date": map[string]interface{}{
-										"enabled": false,
+										"enabled": true,
 									},
 									"can_edit": true,
 								},
diff --git a/services/graph/pkg/service/v0/users.go b/services/graph/pkg/service/v0/users.go
index de77a1bc603..26dd4bde31d 100644
--- a/services/graph/pkg/service/v0/users.go
+++ b/services/graph/pkg/service/v0/users.go
@@ -39,24 +39,9 @@ func (g Graph) GetMe(w http.ResponseWriter, r *http.Request) {
 	}
 
 	g.logger.Info().Interface("user", u).Msg("User in /me")
-	exp := strings.Split(r.URL.Query().Get("$expand"), ",")
-	var me *libregraph.User
-	// We can just return the user from context unless we need to expand the group memberships
-	if !slices.Contains(exp, "memberOf") {
-		me = identity.CreateUserModelFromCS3(u)
-	} else {
-		var err error
-		me, err = g.identityBackend.GetUser(r.Context(), u.GetId().GetOpaqueId(), r.URL.Query())
-		if err != nil {
-			var errcode errorcode.Error
-			if errors.As(err, &errcode) {
-				errcode.Render(w, r)
-			} else {
-				errorcode.GeneralException.Render(w, r, http.StatusInternalServerError, err.Error())
-			}
-			return
-		}
-	}
+
+	me := identity.CreateUserModelFromCS3(u)
+
 	render.Status(r, http.StatusOK)
 	render.JSON(w, r, me)
 }
@@ -174,6 +159,7 @@ func (g Graph) GetUser(w http.ResponseWriter, r *http.Request) {
 	userID, err := url.PathUnescape(userID)
 	if err != nil {
 		errorcode.InvalidRequest.Render(w, r, http.StatusBadRequest, "unescaping user id failed")
+		return
 	}
 
 	if userID == "" {
@@ -190,11 +176,20 @@ func (g Graph) GetUser(w http.ResponseWriter, r *http.Request) {
 		} else {
 			errorcode.GeneralException.Render(w, r, http.StatusInternalServerError, err.Error())
 		}
+		return
 	}
 	sel := strings.Split(r.URL.Query().Get("$select"), ",")
 	exp := strings.Split(r.URL.Query().Get("$expand"), ",")
 	if slices.Contains(sel, "drive") || slices.Contains(sel, "drives") || slices.Contains(exp, "drive") || slices.Contains(exp, "drives") {
 		wdu, err := url.Parse(g.config.Spaces.WebDavBase + g.config.Spaces.WebDavPath)
+		if err != nil {
+			g.logger.Err(err).
+				Str("webdav_base", g.config.Spaces.WebDavBase).
+				Str("webdav_path", g.config.Spaces.WebDavPath).
+				Msg("error parsing webdav URL")
+			render.Status(r, http.StatusInternalServerError)
+			return
+		}
 		f := listStorageSpacesUserFilter(user.GetId())
 		// use the unrestricted flag to get all possible spaces
 		// users with the canListAllSpaces permission should see all spaces
@@ -246,6 +241,7 @@ func (g Graph) DeleteUser(w http.ResponseWriter, r *http.Request) {
 	userID, err := url.PathUnescape(userID)
 	if err != nil {
 		errorcode.InvalidRequest.Render(w, r, http.StatusBadRequest, "unescaping user id failed")
+		return
 	}
 
 	if userID == "" {
@@ -253,6 +249,38 @@ func (g Graph) DeleteUser(w http.ResponseWriter, r *http.Request) {
 		return
 	}
 
+	currentUser := ctxpkg.ContextMustGetUser(r.Context())
+
+	opaque := utils.AppendPlainToOpaque(nil, "unrestricted", "T")
+	f := listStorageSpacesUserFilter(userID)
+	lspr, err := g.gatewayClient.ListStorageSpaces(r.Context(), &storageprovider.ListStorageSpacesRequest{
+		Opaque:  opaque,
+		Filters: []*storageprovider.ListStorageSpacesRequest_Filter{f},
+	})
+	if err != nil {
+		errorcode.InvalidRequest.Render(w, r, http.StatusBadRequest, "could not read spaces")
+		return
+	}
+	for _, sp := range lspr.GetStorageSpaces() {
+		if !(sp.SpaceType == "personal" && sp.Owner.Id.OpaqueId == userID) {
+			continue
+		}
+		// TODO: check if request contains a homespace and if, check if requesting user has the privilege to
+		// delete it and make sure it is not deleting its own homespace
+		// needs modification of the cs3api
+		_, err := g.gatewayClient.DeleteStorageSpace(r.Context(), &storageprovider.DeleteStorageSpaceRequest{
+			Opaque: opaque,
+			Id: &storageprovider.StorageSpaceId{
+				OpaqueId: sp.Id.OpaqueId,
+			},
+		})
+		if err != nil {
+			errorcode.InvalidRequest.Render(w, r, http.StatusBadRequest, "could not delete homespace")
+			return
+		}
+		break
+	}
+
 	err = g.identityBackend.DeleteUser(r.Context(), userID)
 
 	if err != nil {
@@ -261,10 +289,10 @@ func (g Graph) DeleteUser(w http.ResponseWriter, r *http.Request) {
 			errcode.Render(w, r)
 		} else {
 			errorcode.GeneralException.Render(w, r, http.StatusInternalServerError, err.Error())
+			return
 		}
 	}
 
-	currentUser := ctxpkg.ContextMustGetUser(r.Context())
 	g.publishEvent(events.UserDeleted{Executant: currentUser.Id, UserID: userID})
 
 	render.Status(r, http.StatusNoContent)
@@ -278,6 +306,7 @@ func (g Graph) PatchUser(w http.ResponseWriter, r *http.Request) {
 	nameOrID, err := url.PathUnescape(nameOrID)
 	if err != nil {
 		errorcode.InvalidRequest.Render(w, r, http.StatusBadRequest, "unescaping user id failed")
+		return
 	}
 
 	if nameOrID == "" {
@@ -313,6 +342,7 @@ func (g Graph) PatchUser(w http.ResponseWriter, r *http.Request) {
 		} else {
 			errorcode.GeneralException.Render(w, r, http.StatusInternalServerError, err.Error())
 		}
+		return
 	}
 
 	currentUser := ctxpkg.ContextMustGetUser(r.Context())
diff --git a/services/notifications/pkg/config/config.go b/services/notifications/pkg/config/config.go
index cefd752b46e..849f1ac1ff6 100644
--- a/services/notifications/pkg/config/config.go
+++ b/services/notifications/pkg/config/config.go
@@ -20,7 +20,7 @@ type Config struct {
 	Context context.Context `yaml:"-"`
 }
 
-// Notifications defines the config options for the notifications service.
+// Notifications definces the config options for the notifications service.
 type Notifications struct {
 	SMTP              SMTP   `yaml:"SMTP"`
 	Events            Events `yaml:"events"`
diff --git a/services/proxy/pkg/command/server.go b/services/proxy/pkg/command/server.go
index ef25d237c42..3627467fca6 100644
--- a/services/proxy/pkg/command/server.go
+++ b/services/proxy/pkg/command/server.go
@@ -26,7 +26,6 @@ import (
 	"github.com/owncloud/ocis/v2/services/proxy/pkg/metrics"
 	"github.com/owncloud/ocis/v2/services/proxy/pkg/middleware"
 	"github.com/owncloud/ocis/v2/services/proxy/pkg/proxy"
-	"github.com/owncloud/ocis/v2/services/proxy/pkg/router"
 	"github.com/owncloud/ocis/v2/services/proxy/pkg/server/debug"
 	proxyHTTP "github.com/owncloud/ocis/v2/services/proxy/pkg/server/http"
 	"github.com/owncloud/ocis/v2/services/proxy/pkg/tracing"
@@ -212,8 +211,6 @@ func loadMiddlewares(ctx context.Context, logger log.Logger, cfg *config.Config)
 			oidcHTTPClient,
 		),
 
-		router.Middleware(cfg.PolicySelector, cfg.Policies, logger),
-
 		middleware.Authentication(
 			authenticators,
 			middleware.CredentialsByUserAgent(cfg.AuthMiddleware.CredentialsByUserAgent),
diff --git a/services/proxy/pkg/config/config.go b/services/proxy/pkg/config/config.go
index 886351589fa..ce98f8ede2f 100644
--- a/services/proxy/pkg/config/config.go
+++ b/services/proxy/pkg/config/config.go
@@ -54,7 +54,6 @@ type Route struct {
 	// Service name to look up in the registry
 	Service     string `yaml:"service,omitempty"`
 	ApacheVHost bool   `yaml:"apache_vhost,omitempty"`
-	Unprotected bool   `yaml:"unprotected,omitempty"`
 }
 
 // RouteType defines the type of a route
diff --git a/services/proxy/pkg/config/defaults/defaultconfig.go b/services/proxy/pkg/config/defaults/defaultconfig.go
index 05740a72efd..1c6f8489348 100644
--- a/services/proxy/pkg/config/defaults/defaultconfig.go
+++ b/services/proxy/pkg/config/defaults/defaultconfig.go
@@ -71,24 +71,20 @@ func DefaultPolicies() []config.Policy {
 			Name: "ocis",
 			Routes: []config.Route{
 				{
-					Endpoint:    "/",
-					Backend:     "http://localhost:9100",
-					Unprotected: true,
+					Endpoint: "/",
+					Backend:  "http://localhost:9100",
 				},
 				{
-					Endpoint:    "/.well-known/",
-					Backend:     "http://localhost:9130",
-					Unprotected: true,
+					Endpoint: "/.well-known/",
+					Backend:  "http://localhost:9130",
 				},
 				{
-					Endpoint:    "/konnect/",
-					Backend:     "http://localhost:9130",
-					Unprotected: true,
+					Endpoint: "/konnect/",
+					Backend:  "http://localhost:9130",
 				},
 				{
-					Endpoint:    "/signin/",
-					Backend:     "http://localhost:9130",
-					Unprotected: true,
+					Endpoint: "/signin/",
+					Backend:  "http://localhost:9130",
 				},
 				{
 					Endpoint: "/archiver",
@@ -99,12 +95,6 @@ func DefaultPolicies() []config.Policy {
 					Endpoint: "/ocs/v[12].php/cloud/user/signing-key", // only `user/signing-key` is left in ocis-ocs
 					Backend:  "http://localhost:9110",
 				},
-				{
-					Type:        config.RegexRoute,
-					Endpoint:    "/ocs/v[12].php/config",
-					Backend:     "http://localhost:9140",
-					Unprotected: true,
-				},
 				{
 					Endpoint: "/ocs/",
 					Backend:  "http://localhost:9140",
@@ -151,14 +141,12 @@ func DefaultPolicies() []config.Policy {
 					Service:  "com.owncloud.web.ocdav",
 				},
 				{
-					Endpoint:    "/status",
-					Service:     "com.owncloud.web.ocdav",
-					Unprotected: true,
+					Endpoint: "/status",
+					Service:  "com.owncloud.web.ocdav",
 				},
 				{
-					Endpoint:    "/status.php",
-					Service:     "com.owncloud.web.ocdav",
-					Unprotected: true,
+					Endpoint: "/status.php",
+					Service:  "com.owncloud.web.ocdav",
 				},
 				{
 					Endpoint: "/index.php/",
@@ -169,14 +157,8 @@ func DefaultPolicies() []config.Policy {
 					Service:  "com.owncloud.web.ocdav",
 				},
 				{
-					Endpoint:    "/data",
-					Backend:     "http://localhost:9140",
-					Unprotected: true,
-				},
-				{
-					Endpoint:    "/app/list",
-					Backend:     "http://localhost:9140",
-					Unprotected: true,
+					Endpoint: "/data",
+					Backend:  "http://localhost:9140",
 				},
 				{
 					Endpoint: "/app/", // /app or /apps? ocdav only handles /apps
@@ -187,18 +169,16 @@ func DefaultPolicies() []config.Policy {
 					Backend:  "http://localhost:9120",
 				},
 				{
-					Endpoint:    "/graph-explorer",
-					Backend:     "http://localhost:9135",
-					Unprotected: true,
+					Endpoint: "/graph-explorer",
+					Backend:  "http://localhost:9135",
 				},
 				{
 					Endpoint: "/api/v0/settings",
 					Backend:  "http://localhost:9190",
 				},
 				{
-					Endpoint:    "/settings.js",
-					Backend:     "http://localhost:9190",
-					Unprotected: true,
+					Endpoint: "/settings.js",
+					Backend:  "http://localhost:9190",
 				},
 			},
 		},
diff --git a/services/proxy/pkg/middleware/authentication.go b/services/proxy/pkg/middleware/authentication.go
index 3e18e3ab44f..99dced8d681 100644
--- a/services/proxy/pkg/middleware/authentication.go
+++ b/services/proxy/pkg/middleware/authentication.go
@@ -6,7 +6,6 @@ import (
 	"regexp"
 	"strings"
 
-	"github.com/owncloud/ocis/v2/services/proxy/pkg/router"
 	"github.com/owncloud/ocis/v2/services/proxy/pkg/webdav"
 	"golang.org/x/text/cases"
 	"golang.org/x/text/language"
@@ -27,6 +26,43 @@ var (
 		"/remote.php/ocs/apps/files_sharing/api/v1/tokeninfo/unprotected",
 		"/ocs/v1.php/cloud/capabilities",
 	}
+	// _unprotectedPaths contains paths which don't need to be authenticated.
+	_unprotectedPaths = map[string]struct{}{
+		"/":                    {},
+		"/login":               {},
+		"/settings":            {},
+		"/app/list":            {},
+		"/config.json":         {},
+		"/manifest.json":       {},
+		"/oidc-callback.html":  {},
+		"/oidc-callback":       {},
+		"/settings.js":         {},
+		"/data":                {},
+		"/konnect/v1/userinfo": {},
+		"/status.php":          {},
+		"/favicon.ico":         {},
+		"/ocs/v1.php/config":   {},
+		"/ocs/v2.php/config":   {},
+	}
+	// _unprotectedPathPrefixes contains paths which don't need to be authenticated.
+	_unprotectedPathPrefixes = [...]string{
+		"/files/",
+		"/data/",
+		"/account/",
+		"/s/",
+		"/external/spaces",
+		"/apps/openidconnect/redirect",
+		"/settings/",
+		"/user-management/",
+		"/.well-known/",
+		"/js/",
+		"/css/",
+		"/fonts/",
+		"/icons/",
+		"/themes/",
+		"/signin/",
+		"/konnect/",
+	}
 )
 
 const (
@@ -49,8 +85,7 @@ func Authentication(auths []Authenticator, opts ...Option) func(next http.Handle
 
 	return func(next http.Handler) http.Handler {
 		return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
-			ri := router.ContextRoutingInfo(r.Context())
-			if isOIDCTokenAuth(r) || ri.IsRouteUnprotected() {
+			if isOIDCTokenAuth(r) || isUnprotectedPath(r) {
 				// The authentication for this request is handled by the IdP.
 				next.ServeHTTP(w, r)
 				return
@@ -112,6 +147,18 @@ func isOIDCTokenAuth(req *http.Request) bool {
 	return req.URL.Path == "/konnect/v1/token"
 }
 
+func isUnprotectedPath(r *http.Request) bool {
+	if _, ok := _unprotectedPaths[r.URL.Path]; ok {
+		return true
+	}
+	for _, p := range _unprotectedPathPrefixes {
+		if strings.HasPrefix(r.URL.Path, p) {
+			return true
+		}
+	}
+	return false
+}
+
 func isPublicPath(p string) bool {
 	for _, pp := range _publicPaths {
 		if strings.HasPrefix(p, pp) {
diff --git a/services/proxy/pkg/proxy/proxy.go b/services/proxy/pkg/proxy/proxy.go
index 12b49cdb664..a275d788b1d 100644
--- a/services/proxy/pkg/proxy/proxy.go
+++ b/services/proxy/pkg/proxy/proxy.go
@@ -6,17 +6,21 @@ import (
 	"net"
 	"net/http"
 	"net/http/httputil"
+	"net/url"
+	"regexp"
+	"strings"
 	"time"
 
 	chimiddleware "github.com/go-chi/chi/v5/middleware"
+	"go-micro.dev/v4/selector"
 
 	"go.opentelemetry.io/otel/attribute"
 
 	"github.com/owncloud/ocis/v2/ocis-pkg/log"
+	"github.com/owncloud/ocis/v2/ocis-pkg/registry"
 	pkgtrace "github.com/owncloud/ocis/v2/ocis-pkg/tracing"
 	"github.com/owncloud/ocis/v2/services/proxy/pkg/config"
 	"github.com/owncloud/ocis/v2/services/proxy/pkg/proxy/policy"
-	"github.com/owncloud/ocis/v2/services/proxy/pkg/router"
 	proxytracing "github.com/owncloud/ocis/v2/services/proxy/pkg/tracing"
 	"go.opentelemetry.io/otel/propagation"
 	"go.opentelemetry.io/otel/trace"
@@ -41,11 +45,7 @@ func NewMultiHostReverseProxy(opts ...Option) *MultiHostReverseProxy {
 		logger:    options.Logger,
 		config:    options.Config,
 	}
-
-	rp.Director = func(r *http.Request) {
-		ri := router.ContextRoutingInfo(r.Context())
-		ri.Director()(r)
-	}
+	rp.Director = rp.directorSelectionDirector
 
 	// equals http.DefaultTransport except TLSClientConfig
 	rp.Transport = &http.Transport{
@@ -64,9 +64,193 @@ func NewMultiHostReverseProxy(opts ...Option) *MultiHostReverseProxy {
 			InsecureSkipVerify: options.Config.InsecureBackends, //nolint:gosec
 		},
 	}
+
+	if options.Config.PolicySelector == nil {
+		firstPolicy := options.Config.Policies[0].Name
+		rp.logger.Warn().Str("policy", firstPolicy).Msg("policy-selector not configured. Will always use first policy")
+		options.Config.PolicySelector = &config.PolicySelector{
+			Static: &config.StaticSelectorConf{
+				Policy: firstPolicy,
+			},
+		}
+	}
+
+	rp.logger.Debug().
+		Interface("selector_config", options.Config.PolicySelector).
+		Msg("loading policy-selector")
+
+	policySelector, err := policy.LoadSelector(options.Config.PolicySelector)
+	if err != nil {
+		rp.logger.Fatal().Err(err).Msg("Could not load policy-selector")
+	}
+
+	rp.PolicySelector = policySelector
+
+	for _, pol := range options.Config.Policies {
+		for _, route := range pol.Routes {
+			rp.logger.Debug().Str("fwd: ", route.Endpoint)
+
+			if route.Backend == "" && route.Service == "" {
+				rp.logger.Fatal().Interface("route", route).Msg("neither Backend nor Service is set")
+			}
+			uri, err2 := url.Parse(route.Backend)
+			if err2 != nil {
+				rp.logger.
+					Fatal(). // fail early on misconfiguration
+					Err(err2).
+					Str("backend", route.Backend).
+					Msg("malformed url")
+			}
+
+			// here the backend is used as a uri
+			rp.AddHost(pol.Name, uri, route)
+		}
+	}
+
 	return rp
 }
 
+func (p *MultiHostReverseProxy) directorSelectionDirector(r *http.Request) {
+	pol, err := p.PolicySelector(r)
+	if err != nil {
+		p.logger.Error().Err(err).Msg("Error while selecting pol")
+		return
+	}
+
+	if _, ok := p.Directors[pol]; !ok {
+		p.logger.
+			Error().
+			Str("policy", pol).
+			Msg("policy is not configured")
+		return
+	}
+
+	method := ""
+	// find matching director
+	for _, rt := range config.RouteTypes {
+		var handler func(string, url.URL) bool
+		switch rt {
+		case config.QueryRoute:
+			handler = p.queryRouteMatcher
+		case config.RegexRoute:
+			handler = p.regexRouteMatcher
+		case config.PrefixRoute:
+			fallthrough
+		default:
+			handler = p.prefixRouteMatcher
+		}
+		if p.Directors[pol][rt][r.Method] != nil {
+			// use specific method
+			method = r.Method
+		}
+		for endpoint := range p.Directors[pol][rt][method] {
+			if handler(endpoint, *r.URL) {
+
+				p.logger.Debug().
+					Str("policy", pol).
+					Str("method", r.Method).
+					Str("prefix", endpoint).
+					Str("path", r.URL.Path).
+					Str("routeType", string(rt)).
+					Msg("director found")
+
+				p.Directors[pol][rt][method][endpoint](r)
+				return
+			}
+		}
+	}
+
+	// override default director with root. If any
+	switch {
+	case p.Directors[pol][config.PrefixRoute][method]["/"] != nil:
+		// try specific method
+		p.Directors[pol][config.PrefixRoute][method]["/"](r)
+		return
+	case p.Directors[pol][config.PrefixRoute][""]["/"] != nil:
+		// fallback to unspecific method
+		p.Directors[pol][config.PrefixRoute][""]["/"](r)
+		return
+	}
+
+	p.logger.
+		Warn().
+		Str("policy", pol).
+		Str("path", r.URL.Path).
+		Msg("no director found")
+}
+
+func singleJoiningSlash(a, b string) string {
+	aslash := strings.HasSuffix(a, "/")
+	bslash := strings.HasPrefix(b, "/")
+	switch {
+	case aslash && bslash:
+		return a + b[1:]
+	case !aslash && !bslash:
+		return a + "/" + b
+	}
+	return a + b
+}
+
+// AddHost undocumented
+func (p *MultiHostReverseProxy) AddHost(policy string, target *url.URL, rt config.Route) {
+	targetQuery := target.RawQuery
+	if p.Directors[policy] == nil {
+		p.Directors[policy] = make(map[config.RouteType]map[string]map[string]func(req *http.Request))
+	}
+	routeType := config.DefaultRouteType
+	if rt.Type != "" {
+		routeType = rt.Type
+	}
+	if p.Directors[policy][routeType] == nil {
+		p.Directors[policy][routeType] = make(map[string]map[string]func(req *http.Request))
+	}
+	if p.Directors[policy][routeType][rt.Method] == nil {
+		p.Directors[policy][routeType][rt.Method] = make(map[string]func(req *http.Request))
+	}
+
+	reg := registry.GetRegistry()
+	sel := selector.NewSelector(selector.Registry(reg))
+
+	p.Directors[policy][routeType][rt.Method][rt.Endpoint] = func(req *http.Request) {
+		if rt.Service != "" {
+			// select next node
+			next, err := sel.Select(rt.Service)
+			if err != nil {
+				fmt.Println(fmt.Errorf("could not select %s service from the registry: %v", rt.Service, err))
+				return // TODO error? fallback to target.Host & Scheme?
+			}
+			node, err := next()
+			if err != nil {
+				fmt.Println(fmt.Errorf("could not select next node for service %s: %v", rt.Service, err))
+				return // TODO error? fallback to target.Host & Scheme?
+			}
+			req.URL.Host = node.Address
+			req.URL.Scheme = node.Metadata["protocol"] // TODO check property exists?
+
+		} else {
+			req.URL.Host = target.Host
+			req.URL.Scheme = target.Scheme
+		}
+
+		// Apache deployments host addresses need to match on req.Host and req.URL.Host
+		// see https://stackoverflow.com/questions/34745654/golang-reverseproxy-with-apache2-sni-hostname-error
+		if rt.ApacheVHost {
+			req.Host = target.Host
+		}
+
+		req.URL.Path = singleJoiningSlash(target.Path, req.URL.Path)
+		if targetQuery == "" || req.URL.RawQuery == "" {
+			req.URL.RawQuery = targetQuery + req.URL.RawQuery
+		} else {
+			req.URL.RawQuery = targetQuery + "&" + req.URL.RawQuery
+		}
+		if _, ok := req.Header["User-Agent"]; !ok {
+			// explicitly disable User-Agent so it's not set to default value
+			req.Header.Set("User-Agent", "")
+		}
+	}
+}
+
 func (p *MultiHostReverseProxy) ServeHTTP(w http.ResponseWriter, r *http.Request) {
 	var (
 		ctx  = r.Context()
@@ -87,3 +271,33 @@ func (p *MultiHostReverseProxy) ServeHTTP(w http.ResponseWriter, r *http.Request
 
 	p.ReverseProxy.ServeHTTP(w, r.WithContext(ctx))
 }
+
+func (p MultiHostReverseProxy) queryRouteMatcher(endpoint string, target url.URL) bool {
+	u, _ := url.Parse(endpoint)
+	if !strings.HasPrefix(target.Path, u.Path) || endpoint == "/" {
+		return false
+	}
+	q := u.Query()
+	if len(q) == 0 {
+		return false
+	}
+	tq := target.Query()
+	for k := range q {
+		if q.Get(k) != tq.Get(k) {
+			return false
+		}
+	}
+	return true
+}
+
+func (p *MultiHostReverseProxy) regexRouteMatcher(pattern string, target url.URL) bool {
+	matched, err := regexp.MatchString(pattern, target.String())
+	if err != nil {
+		p.logger.Warn().Err(err).Str("pattern", pattern).Msg("regex with pattern failed")
+	}
+	return matched
+}
+
+func (p *MultiHostReverseProxy) prefixRouteMatcher(prefix string, target url.URL) bool {
+	return strings.HasPrefix(target.Path, prefix) && prefix != "/"
+}
diff --git a/services/proxy/pkg/router/router.go b/services/proxy/pkg/router/router.go
deleted file mode 100644
index 7becfff7fe6..00000000000
--- a/services/proxy/pkg/router/router.go
+++ /dev/null
@@ -1,298 +0,0 @@
-package router
-
-import (
-	"context"
-	"net/http"
-	"net/url"
-	"regexp"
-	"sort"
-	"strings"
-
-	"github.com/owncloud/ocis/v2/ocis-pkg/log"
-	"github.com/owncloud/ocis/v2/ocis-pkg/registry"
-	"github.com/owncloud/ocis/v2/services/proxy/pkg/config"
-	"github.com/owncloud/ocis/v2/services/proxy/pkg/proxy/policy"
-	"go-micro.dev/v4/selector"
-)
-
-type routingInfoCtxKey struct{}
-
-var noInfo = RoutingInfo{}
-
-// Middleware returns a HTTP middleware containing the router.
-func Middleware(policySelector *config.PolicySelector, policies []config.Policy, logger log.Logger) func(http.Handler) http.Handler {
-	router := New(policySelector, policies, logger)
-	return func(next http.Handler) http.Handler {
-		return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
-			ri, ok := router.Route(r)
-			if !ok {
-				w.WriteHeader(http.StatusInternalServerError)
-				return
-			}
-			next.ServeHTTP(w, r.WithContext(SetRoutingInfo(r.Context(), ri)))
-		})
-	}
-}
-
-// New creates a new request router.
-// It initializes the routes before returning the router.
-func New(policySelector *config.PolicySelector, policies []config.Policy, logger log.Logger) Router {
-	if policySelector == nil {
-		firstPolicy := policies[0].Name
-		logger.Warn().Str("policy", firstPolicy).Msg("policy-selector not configured. Will always use first policy")
-		policySelector = &config.PolicySelector{
-			Static: &config.StaticSelectorConf{
-				Policy: firstPolicy,
-			},
-		}
-	}
-
-	logger.Debug().
-		Interface("selector_config", policySelector).
-		Msg("loading policy-selector")
-
-	selector, err := policy.LoadSelector(policySelector)
-	if err != nil {
-		logger.Fatal().Err(err).Msg("Could not load policy-selector")
-	}
-
-	r := Router{
-		directors:      make(map[string]map[config.RouteType]map[string]map[string]RoutingInfo),
-		policySelector: selector,
-	}
-	for _, pol := range policies {
-		for _, route := range pol.Routes {
-			logger.Debug().Str("fwd: ", route.Endpoint)
-
-			if route.Backend == "" && route.Service == "" {
-				logger.Fatal().Interface("route", route).Msg("neither Backend nor Service is set")
-			}
-			uri, err2 := url.Parse(route.Backend)
-			if err2 != nil {
-				logger.
-					Fatal(). // fail early on misconfiguration
-					Err(err2).
-					Str("backend", route.Backend).
-					Msg("malformed url")
-			}
-
-			// here the backend is used as a uri
-			r.addHost(pol.Name, uri, route)
-		}
-	}
-	return r
-}
-
-// RoutingInfo contains the proxy director and some information about the route.
-type RoutingInfo struct {
-	director    func(*http.Request)
-	unprotected bool
-}
-
-// Director returns the proxy director.
-func (r RoutingInfo) Director() func(*http.Request) {
-	return r.director
-}
-
-// IsRouteUnprotected returns true if the route doesn't need to be authenticated.
-func (r RoutingInfo) IsRouteUnprotected() bool {
-	return r.unprotected
-}
-
-// Router handles the routing of HTTP requests according to the given policies.
-type Router struct {
-	logger         log.Logger
-	directors      map[string]map[config.RouteType]map[string]map[string]RoutingInfo
-	policySelector policy.Selector
-}
-
-func (rt Router) addHost(policy string, target *url.URL, route config.Route) {
-	targetQuery := target.RawQuery
-	if rt.directors[policy] == nil {
-		rt.directors[policy] = make(map[config.RouteType]map[string]map[string]RoutingInfo)
-	}
-	routeType := config.DefaultRouteType
-	if route.Type != "" {
-		routeType = route.Type
-	}
-	if rt.directors[policy][routeType] == nil {
-		rt.directors[policy][routeType] = make(map[string]map[string]RoutingInfo)
-	}
-	if rt.directors[policy][routeType][route.Method] == nil {
-		rt.directors[policy][routeType][route.Method] = make(map[string]RoutingInfo)
-	}
-
-	reg := registry.GetRegistry()
-	sel := selector.NewSelector(selector.Registry(reg))
-
-	rt.directors[policy][routeType][route.Method][route.Endpoint] = RoutingInfo{
-		unprotected: route.Unprotected,
-		director: func(req *http.Request) {
-			if route.Service != "" {
-				// select next node
-				next, err := sel.Select(route.Service)
-				if err != nil {
-					rt.logger.Error().Err(err).
-						Str("service", route.Service).
-						Msg("could not select service from the registry")
-					return // TODO error? fallback to target.Host & Scheme?
-				}
-				node, err := next()
-				if err != nil {
-					rt.logger.Error().Err(err).
-						Str("service", route.Service).
-						Msg("could not select next node")
-					return // TODO error? fallback to target.Host & Scheme?
-				}
-				req.URL.Host = node.Address
-				req.URL.Scheme = node.Metadata["protocol"] // TODO check property exists?
-
-			} else {
-				req.URL.Host = target.Host
-				req.URL.Scheme = target.Scheme
-			}
-
-			// Apache deployments host addresses need to match on req.Host and req.URL.Host
-			// see https://stackoverflow.com/questions/34745654/golang-reverseproxy-with-apache2-sni-hostname-error
-			if route.ApacheVHost {
-				req.Host = target.Host
-			}
-
-			req.URL.Path = singleJoiningSlash(target.Path, req.URL.Path)
-			if targetQuery == "" || req.URL.RawQuery == "" {
-				req.URL.RawQuery = targetQuery + req.URL.RawQuery
-			} else {
-				req.URL.RawQuery = targetQuery + "&" + req.URL.RawQuery
-			}
-			if _, ok := req.Header["User-Agent"]; !ok {
-				// explicitly disable User-Agent so it's not set to default value
-				req.Header.Set("User-Agent", "")
-			}
-		},
-	}
-}
-
-// Route is evaluating the policies on the request and returns the RoutingInfo if successful.
-func (rt Router) Route(r *http.Request) (RoutingInfo, bool) {
-	pol, err := rt.policySelector(r)
-	if err != nil {
-		rt.logger.Error().Err(err).Msg("Error while selecting pol")
-		return noInfo, false
-	}
-
-	if _, ok := rt.directors[pol]; !ok {
-		rt.logger.
-			Error().
-			Str("policy", pol).
-			Msg("policy is not configured")
-		return noInfo, false
-	}
-
-	method := ""
-	// find matching director
-	for _, rtype := range config.RouteTypes {
-		var handler func(string, url.URL) bool
-		switch rtype {
-		case config.QueryRoute:
-			handler = queryRouteMatcher
-		case config.RegexRoute:
-			handler = rt.regexRouteMatcher
-		case config.PrefixRoute:
-			fallthrough
-		default:
-			handler = prefixRouteMatcher
-		}
-		if rt.directors[pol][rtype][r.Method] != nil {
-			// use specific method
-			method = r.Method
-		}
-
-		endpoints := make([]string, 0, len(rt.directors[pol][rtype][method]))
-		for endpoint := range rt.directors[pol][rtype][method] {
-			endpoints = append(endpoints, endpoint)
-		}
-		sort.Slice(endpoints, func(i, j int) bool {
-			return len(endpoints[j]) < len(endpoints[i])
-		})
-		for _, endpoint := range endpoints {
-			if handler(endpoint, *r.URL) {
-				rt.logger.Debug().
-					Str("policy", pol).
-					Str("method", r.Method).
-					Str("prefix", endpoint).
-					Str("path", r.URL.Path).
-					Str("routeType", string(rtype)).
-					Msg("director found")
-
-				return rt.directors[pol][rtype][method][endpoint], true
-			}
-		}
-	}
-
-	// override default director with root. If any
-	if ri, ok := rt.directors[pol][config.PrefixRoute][method]["/"]; ok { // try specific method
-		return ri, true
-	} else if ri, ok := rt.directors[pol][config.PrefixRoute][""]["/"]; ok { // fallback to unspecific method
-		return ri, true
-	}
-
-	rt.logger.
-		Warn().
-		Str("policy", pol).
-		Str("path", r.URL.Path).
-		Msg("no director found")
-	return noInfo, false
-}
-
-func (rt Router) regexRouteMatcher(pattern string, target url.URL) bool {
-	matched, err := regexp.MatchString(pattern, target.String())
-	if err != nil {
-		rt.logger.Warn().Err(err).Str("pattern", pattern).Msg("regex with pattern failed")
-	}
-	return matched
-}
-
-func prefixRouteMatcher(prefix string, target url.URL) bool {
-	return strings.HasPrefix(target.Path, prefix) && prefix != "/"
-}
-
-func singleJoiningSlash(a, b string) string {
-	aslash := strings.HasSuffix(a, "/")
-	bslash := strings.HasPrefix(b, "/")
-	switch {
-	case aslash && bslash:
-		return a + b[1:]
-	case !aslash && !bslash:
-		return a + "/" + b
-	}
-	return a + b
-}
-
-func queryRouteMatcher(endpoint string, target url.URL) bool {
-	u, _ := url.Parse(endpoint)
-	if !strings.HasPrefix(target.Path, u.Path) || endpoint == "/" {
-		return false
-	}
-	q := u.Query()
-	if len(q) == 0 {
-		return false
-	}
-	tq := target.Query()
-	for k := range q {
-		if q.Get(k) != tq.Get(k) {
-			return false
-		}
-	}
-	return true
-}
-
-// SetRoutingInfo puts the routing info in the context.
-func SetRoutingInfo(parent context.Context, ri RoutingInfo) context.Context {
-	return context.WithValue(parent, routingInfoCtxKey{}, ri)
-}
-
-// ContextRoutingInfo gets the routing information from the context.
-func ContextRoutingInfo(ctx context.Context) RoutingInfo {
-	val := ctx.Value(routingInfoCtxKey{})
-	return val.(RoutingInfo)
-}
diff --git a/services/settings/pkg/store/defaults/defaults.go b/services/settings/pkg/store/defaults/defaults.go
index 37c1b07a207..e9a0d7de125 100644
--- a/services/settings/pkg/store/defaults/defaults.go
+++ b/services/settings/pkg/store/defaults/defaults.go
@@ -43,6 +43,11 @@ const (
 	// CreateSpacePermissionName is the hardcoded setting name for the create space permission
 	CreateSpacePermissionName string = "create-space"
 
+	// DeleteHomeSpacesPermissionID is the hardcoded setting UUID for the delete home space permission
+	DeleteHomeSpacesPermissionID string = "5de9fe0a-4bc5-4a47-b758-28f370caf169"
+	// DeleteHomeSpacesPermissionName is the hardcoded setting name for the delete home space permission
+	DeleteHomeSpacesPermissionName string = "delete-all-home-spaces"
+
 	settingUUIDProfileLanguage = "aa8cfbe5-95d4-4f7e-a032-c3c01f5f062f"
 
 	// AccountManagementPermissionID is the hardcoded setting UUID for the account management permission
@@ -205,6 +210,21 @@ func generateBundleAdminRole() *settingsmsg.Bundle {
 					},
 				},
 			},
+			{
+				Id:          DeleteHomeSpacesPermissionID,
+				Name:        DeleteHomeSpacesPermissionName,
+				DisplayName: "Delete All Home Spaces",
+				Description: "This permission allows to delete home spaces.",
+				Resource: &settingsmsg.Resource{
+					Type: settingsmsg.Resource_TYPE_SYSTEM,
+				},
+				Value: &settingsmsg.Setting_PermissionValue{
+					PermissionValue: &settingsmsg.Permission{
+						Operation:  settingsmsg.Permission_OPERATION_DELETE,
+						Constraint: settingsmsg.Permission_CONSTRAINT_ALL,
+					},
+				},
+			},
 		},
 	}
 }
diff --git a/services/web/pkg/config/defaults/defaultconfig.go b/services/web/pkg/config/defaults/defaultconfig.go
index 0e913c4c91c..c2d5ad0e198 100644
--- a/services/web/pkg/config/defaults/defaultconfig.go
+++ b/services/web/pkg/config/defaults/defaultconfig.go
@@ -49,7 +49,7 @@ func DefaultConfig() *config.Config {
 				},
 				Apps: []string{"files", "search", "preview", "text-editor", "pdf-viewer", "external", "user-management"},
 				Options: map[string]interface{}{
-					"previewFileMimeTypes": []string{"image/gif", "image/png", "image/jpeg", "text/plain"},
+					"hideSearchBar": false,
 				},
 			},
 		},
diff --git a/sonar-project.properties b/sonar-project.properties
index f26e8ed60ce..7eac08a8678 100644
--- a/sonar-project.properties
+++ b/sonar-project.properties
@@ -2,7 +2,7 @@
 sonar.projectKey=owncloud_ocis
 sonar.organization=owncloud-1
 sonar.projectName=ocis
-sonar.projectVersion=2.0.0-beta.7
+sonar.projectVersion=2.0.0-beta.6
 sonar.host.url=https://sonarcloud.io
 
 # =====================================================


Test patch:
diff --git a/services/proxy/pkg/proxy/proxy_integration_test.go b/services/proxy/pkg/proxy/proxy_integration_test.go
index 65a8c037b8c..7f173d6894e 100644
--- a/services/proxy/pkg/proxy/proxy_integration_test.go
+++ b/services/proxy/pkg/proxy/proxy_integration_test.go
@@ -2,17 +2,15 @@ package proxy
 
 import (
 	"bytes"
-	"fmt"
 	"io"
 	"io/ioutil"
+	"log"
 	"net/http"
 	"net/http/httptest"
 	"net/url"
 	"testing"
 
-	"github.com/owncloud/ocis/v2/ocis-pkg/log"
 	"github.com/owncloud/ocis/v2/services/proxy/pkg/config"
-	"github.com/owncloud/ocis/v2/services/proxy/pkg/router"
 )
 
 func TestProxyIntegration(t *testing.T) {
@@ -116,8 +114,6 @@ func TestProxyIntegration(t *testing.T) {
 		t.Run(tests[k].id, func(t *testing.T) {
 			t.Parallel()
 			tc := tests[k]
-
-			rt := router.Middleware(nil, tc.conf, log.NewLogger())
 			rp := newTestProxy(testConfig(tc.conf), func(req *http.Request) *http.Response {
 				if got, want := req.URL.String(), tc.expect.String(); got != want {
 					t.Errorf("Proxied url should be %v got %v", want, got)
@@ -139,7 +135,7 @@ func TestProxyIntegration(t *testing.T) {
 			})
 
 			rr := httptest.NewRecorder()
-			rt(rp).ServeHTTP(rr, tc.input)
+			rp.ServeHTTP(rr, tc.input)
 			rsp := rr.Result()
 
 			if rsp.StatusCode != 200 {
@@ -208,7 +204,7 @@ func (tc *testCase) withRequest(method string, target string, body io.Reader) *t
 func (tc *testCase) expectProxyTo(strURL string) testCase {
 	pu, err := url.Parse(strURL)
 	if err != nil {
-		panic(fmt.Sprintf("Error parsing %v", strURL))
+		log.Fatalf("Error parsing %v", strURL)
 	}
 
 	tc.expect = pu
diff --git a/services/proxy/pkg/router/router_test.go b/services/proxy/pkg/proxy/proxy_test.go
similarity index 69%
rename from services/proxy/pkg/router/router_test.go
rename to services/proxy/pkg/proxy/proxy_test.go
index 3bbebc868c9..0fa67a77b1a 100644
--- a/services/proxy/pkg/router/router_test.go
+++ b/services/proxy/pkg/proxy/proxy_test.go
@@ -1,4 +1,4 @@
-package router
+package proxy
 
 import (
 	"fmt"
@@ -7,20 +7,19 @@ import (
 	"net/url"
 	"testing"
 
-	"github.com/owncloud/ocis/v2/ocis-pkg/log"
 	"github.com/owncloud/ocis/v2/services/proxy/pkg/config"
 	"github.com/owncloud/ocis/v2/services/proxy/pkg/config/defaults"
 )
 
 type matchertest struct {
 	method, endpoint, target string
-	unprotected              bool
 	matches                  bool
 }
 
 func TestPrefixRouteMatcher(t *testing.T) {
 	cfg := defaults.DefaultConfig()
 	cfg.Policies = defaults.DefaultPolicies()
+	p := NewMultiHostReverseProxy(Config(cfg))
 
 	table := []matchertest{
 		{endpoint: "/foobar", target: "/foobar/baz/some/url", matches: true},
@@ -29,7 +28,7 @@ func TestPrefixRouteMatcher(t *testing.T) {
 
 	for _, test := range table {
 		u, _ := url.Parse(test.target)
-		matched := prefixRouteMatcher(test.endpoint, *u)
+		matched := p.prefixRouteMatcher(test.endpoint, *u)
 		if matched != test.matches {
 			t.Errorf("PrefixRouteMatcher returned %t expected %t for endpoint: %s and target %s",
 				matched, test.matches, test.endpoint, u.String())
@@ -40,6 +39,7 @@ func TestPrefixRouteMatcher(t *testing.T) {
 func TestQueryRouteMatcher(t *testing.T) {
 	cfg := defaults.DefaultConfig()
 	cfg.Policies = defaults.DefaultPolicies()
+	p := NewMultiHostReverseProxy(Config(cfg))
 
 	table := []matchertest{
 		{endpoint: "/foobar?parameter=true", target: "/foobar/baz/some/url?parameter=true", matches: true},
@@ -56,7 +56,7 @@ func TestQueryRouteMatcher(t *testing.T) {
 
 	for _, test := range table {
 		u, _ := url.Parse(test.target)
-		matched := queryRouteMatcher(test.endpoint, *u)
+		matched := p.queryRouteMatcher(test.endpoint, *u)
 		if matched != test.matches {
 			t.Errorf("QueryRouteMatcher returned %t expected %t for endpoint: %s and target %s",
 				matched, test.matches, test.endpoint, u.String())
@@ -67,7 +67,7 @@ func TestQueryRouteMatcher(t *testing.T) {
 func TestRegexRouteMatcher(t *testing.T) {
 	cfg := defaults.DefaultConfig()
 	cfg.Policies = defaults.DefaultPolicies()
-	rt := New(cfg.PolicySelector, cfg.Policies, log.NewLogger())
+	p := NewMultiHostReverseProxy(Config(cfg))
 
 	table := []matchertest{
 		{endpoint: ".*some\\/url.*parameter=true", target: "/foobar/baz/some/url?parameter=true", matches: true},
@@ -76,7 +76,7 @@ func TestRegexRouteMatcher(t *testing.T) {
 
 	for _, test := range table {
 		u, _ := url.Parse(test.target)
-		matched := rt.regexRouteMatcher(test.endpoint, *u)
+		matched := p.regexRouteMatcher(test.endpoint, *u)
 		if matched != test.matches {
 			t.Errorf("RegexRouteMatcher returned %t expected %t for endpoint: %s and target %s",
 				matched, test.matches, test.endpoint, u.String())
@@ -104,52 +104,34 @@ func TestSingleJoiningSlash(t *testing.T) {
 	}
 }
 
-func TestRouter(t *testing.T) {
+func TestDirectorSelectionDirector(t *testing.T) {
+
 	svr := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
 		fmt.Fprintf(w, "ok")
 	}))
 	defer svr.Close()
 
-	selector := &config.PolicySelector{
-		Static: &config.StaticSelectorConf{
-			Policy: "default",
-		},
-	}
-
-	policies := []config.Policy{
-		{
-			Name: "default",
-			Routes: []config.Route{
-				{Type: config.PrefixRoute, Endpoint: "/web/unprotected/demo/", Backend: "http://web", Unprotected: true},
-				{Type: config.PrefixRoute, Endpoint: "/dav", Backend: "http://ocdav"},
-				{Type: config.PrefixRoute, Method: "REPORT", Endpoint: "/dav", Backend: "http://ocis-webdav"},
+	p := NewMultiHostReverseProxy(Config(&config.Config{
+		PolicySelector: &config.PolicySelector{
+			Static: &config.StaticSelectorConf{
+				Policy: "default",
 			},
 		},
-	}
-
-	router := New(selector, policies, log.NewLogger())
+	}))
+	p.AddHost("default", &url.URL{Host: "ocdav"}, config.Route{Type: config.PrefixRoute, Method: "", Endpoint: "/dav", Backend: "ocdav"})
+	p.AddHost("default", &url.URL{Host: "ocis-webdav"}, config.Route{Type: config.PrefixRoute, Method: "REPORT", Endpoint: "/dav", Backend: "ocis-webdav"})
 
 	table := []matchertest{
 		{method: "PROPFIND", endpoint: "/dav/files/demo/", target: "ocdav"},
 		{method: "REPORT", endpoint: "/dav/files/demo/", target: "ocis-webdav"},
-		{method: "GET", endpoint: "/web/unprotected/demo/", target: "web", unprotected: true},
 	}
 
 	for _, test := range table {
-		r := httptest.NewRequest(test.method, test.endpoint, nil)
-		routingInfo, ok := router.Route(r)
-		if !ok {
-			t.Errorf("TestRouter router.Route failed to route the request.")
-		}
-
-		if routingInfo.IsRouteUnprotected() != test.unprotected {
-			t.Errorf("TestRouter route flag unprotected expected to be %t got %t", test.unprotected, routingInfo.IsRouteUnprotected())
-		}
-
-		routingInfo.Director()(r)
-
+		r := httptest.NewRequest(test.method, "/dav/files/demo/", nil)
+		p.directorSelectionDirector(r)
 		if r.URL.Host != test.target {
-			t.Errorf("TestRouter got host %s expected %s", r.URL.Host, test.target)
+			t.Errorf("TestDirectorSelectionDirector got host %s expected %s", r.Host, test.target)
+
 		}
 	}
 }
diff --git a/tests/TestHelpers/GraphHelper.php b/tests/TestHelpers/GraphHelper.php
index aa8dc20f296..e815fb2feff 100644
--- a/tests/TestHelpers/GraphHelper.php
+++ b/tests/TestHelpers/GraphHelper.php
@@ -14,7 +14,7 @@ use Psr\Http\Message\RequestInterface;
 use Psr\Http\Message\ResponseInterface;
 
 /**
- * A helper class for managing Graph API requests
+ * A helper class for managing users and groups using the Graph API
  */
 class GraphHelper {
 	/**
@@ -523,265 +523,4 @@ class GraphHelper {
 		}
 		return \json_encode($payload);
 	}
-	
-	/**
-	 * Send Graph Create Space Request
-	 *
-	 * @param string $baseUrl
-	 * @param  string $user
-	 * @param  string $password
-	 * @param  string $body
-	 * @param  string $xRequestId
-	 * @param  array  $headers
-	 *
-	 * @return ResponseInterface
-	 * @throws GuzzleException
-	 */
-	public static function createSpace(
-		string $baseUrl,
-		string $user,
-		string $password,
-		string $body,
-		string $xRequestId = '',
-		array $headers = []
-	): ResponseInterface {
-		$url = self::getFullUrl($baseUrl, 'drives');
-
-		return HttpRequestHelper::post($url, $xRequestId, $user, $password, $headers, $body);
-	}
-
-	/**
-	 * Send Graph Update Space Request
-	 *
-	 * @param  string $baseUrl
-	 * @param  string $user
-	 * @param  string $password
-	 * @param  mixed $body
-	 * @param  string $spaceId
-	 * @param  string $xRequestId
-	 * @param  array  $headers
-	 *
-	 * @return ResponseInterface
-	 * @throws GuzzleException
-	 */
-	public static function updateSpace(
-		string $baseUrl,
-		string $user,
-		string $password,
-		$body,
-		string $spaceId,
-		string $xRequestId = '',
-		array $headers = []
-	): ResponseInterface {
-		$url = self::getFullUrl($baseUrl, 'drives/' . $spaceId);
-
-		return HttpRequestHelper::sendRequest($url, $xRequestId, 'PATCH', $user, $password, $headers, $body);
-	}
-
-	/**
-	 * Send Graph List My Spaces Request
-	 *
-	 * @param  string $baseUrl
-	 * @param  string $user
-	 * @param  string $password
-	 * @param  string $urlArguments
-	 * @param  string $xRequestId
-	 * @param  array  $body
-	 * @param  array  $headers
-	 *
-	 * @return ResponseInterface
-	 *
-	 * @throws GuzzleException
-	 */
-	public static function getMySpaces(
-		string $baseUrl,
-		string $user,
-		string $password,
-		string $urlArguments = '',
-		string $xRequestId = '',
-		array  $body = [],
-		array  $headers = []
-	): ResponseInterface {
-		$url = self::getFullUrl($baseUrl, 'me/drives/' . $urlArguments);
-
-		return HttpRequestHelper::get($url, $xRequestId, $user, $password, $headers, $body);
-	}
-
-	/**
-	 * Send Graph List All Spaces Request
-	 *
-	 * @param  string $baseUrl
-	 * @param  string $user
-	 * @param  string $password
-	 * @param  string $urlArguments
-	 * @param  string $xRequestId
-	 * @param  array  $body
-	 * @param  array  $headers
-	 *
-	 * @return ResponseInterface
-	 *
-	 * @throws GuzzleException
-	 */
-	public static function getAllSpaces(
-		string $baseUrl,
-		string $user,
-		string $password,
-		string $urlArguments = '',
-		string $xRequestId = '',
-		array  $body = [],
-		array  $headers = []
-	): ResponseInterface {
-		$url = self::getFullUrl($baseUrl, 'drives/' . $urlArguments);
-
-		return HttpRequestHelper::get($url, $xRequestId, $user, $password, $headers, $body);
-	}
-
-	/**
-	 * Send Graph List Single Space Request
-	 *
-	 * @param string $baseUrl
-	 * @param string $user
-	 * @param string $password
-	 * @param string $spaceId
-	 * @param string $urlArguments
-	 * @param string $xRequestId
-	 * @param array $body
-	 * @param array $headers
-	 *
-	 * @return ResponseInterface
-	 *
-	 */
-	public static function getSingleSpace(
-		string $baseUrl,
-		string $user,
-		string $password,
-		string $spaceId,
-		string $urlArguments = '',
-		string $xRequestId = '',
-		array  $body = [],
-		array  $headers = []
-	): ResponseInterface {
-		$url = self::getFullUrl($baseUrl, 'drives/' . $spaceId . "/" . $urlArguments);
-
-		return HttpRequestHelper::get($url, $xRequestId, $user, $password, $headers, $body);
-	}
-
-	/**
-	 * send disable space request
-	 * 
-	 * @param string $baseUrl
-	 * @param string $user
-	 * @param string $password
-	 * @param string $spaceId
-	 * @param string $xRequestId
-	 * 
-	 * @return ResponseInterface
-	 * @throws GuzzleException
-	 */
-	public static function disableSpace(
-		string $baseUrl,
-		string $user,
-		string $password,
-		string $spaceId,
-		string $xRequestId = ''
-	): ResponseInterface {
-		$url = self::getFullUrl($baseUrl, 'drives/' . $spaceId);
-		
-		return HttpRequestHelper::delete(
-			$url,
-			$xRequestId,
-			$user,
-			$password
-		);
-	}
-
-	/**
-	 * send delete space request
-	 * 
-	 * @param string $baseUrl
-	 * @param string $user
-	 * @param string $password
-	 * @param string $spaceId
-	 * @param array  $header
-	 * @param string $xRequestId
-	 * 
-	 * @return ResponseInterface
-	 * @throws GuzzleException
-	 */
-	public static function deleteSpace(
-		string $baseUrl,
-		string $user,
-		string $password,
-		string $spaceId,
-		array $header,
-		string $xRequestId = ''
-	): ResponseInterface {
-		$url = self::getFullUrl($baseUrl, 'drives/' . $spaceId);
-		
-		return HttpRequestHelper::delete(
-			$url,
-			$xRequestId,
-			$user,
-			$password,
-			$header
-		);
-	}
-
-	/**
-	 * Send restore Space Request
-	 *
-	 * @param  string $baseUrl
-	 * @param  string $user
-	 * @param  string $password
-	 * @param  string $spaceId
-	 *
-	 * @return ResponseInterface
-	 * @throws GuzzleException
-	 */
-	public static function restoreSpace(
-		string $baseUrl,
-		string $user,
-		string $password,
-		string $spaceId
-	): ResponseInterface {
-		$url = self::getFullUrl($baseUrl, 'drives/' . $spaceId);
-		$header = ["restore" => true];
-		$body = '{}';
-
-		return HttpRequestHelper::sendRequest($url, '', 'PATCH', $user, $password, $header, $body);
-	}
-  
-	/**
-	 * @param string $baseUrl
-	 * @param string $xRequestId
-	 * @param string $user
-	 * @param string $password
-	 * @param string $currentPassword
-	 * @param string $newPassword
-	 *
-	 * @return ResponseInterface
-	 * @throws GuzzleException
-	 */
-	public static function changeOwnPassword(
-		string $baseUrl,
-		string $xRequestId,
-		string $user,
-		string $password,
-		string $currentPassword,
-		string $newPassword
-	): ResponseInterface {
-		$url = self::getFullUrl($baseUrl, 'me/changePassword');
-		$payload['currentPassword'] = $currentPassword;
-		$payload['newPassword'] = $newPassword;
-		
-		return HttpRequestHelper::sendRequest(
-			$url,
-			$xRequestId,
-			"POST",
-			$user,
-			$password,
-			self::getRequestHeaders(),
-			\json_encode($payload)
-		);
-	}
 }
diff --git a/tests/acceptance/config/behat.yml b/tests/acceptance/config/behat.yml
index 218518da225..6d50a05fac4 100644
--- a/tests/acceptance/config/behat.yml
+++ b/tests/acceptance/config/behat.yml
@@ -6,7 +6,7 @@ default:
     apiAccountsHashDifficulty:
       paths:
         - '%paths.base%/../features/apiAccountsHashDifficulty'
-      context: &common_ldap_suite_context
+      context:
         parameters:
           ldapAdminPassword: admin
           ldapUsersOU: TestUsers
@@ -14,7 +14,6 @@ default:
           ldapInitialUserFilePath: /../../config/ldap-users.ldif
       contexts:
         - GraphContext:
-        - SpacesContext:
         - OccContext:
         - FeatureContext: &common_feature_context_params
             baseUrl: http://localhost:8080
@@ -26,7 +25,6 @@ default:
         - ChecksumContext:
         - FavoritesContext:
         - FilesVersionsContext:
-        - OCSContext:
         - PublicWebDavContext:
         - TrashbinContext:
         - WebDavPropertiesContext:
@@ -53,24 +51,12 @@ default:
         - '%paths.base%/../features/apiArchiver'
       contexts:
         - ArchiverContext:
-        - SpacesContext:
         - OccContext:
         - FeatureContext: *common_feature_context_params
         - CapabilitiesContext:
         - ChecksumContext:
         - FilesVersionsContext:
-        - OCSContext:
         - PublicWebDavContext:
-        - TrashbinContext:
-        - WebDavPropertiesContext:
-
-    apiGraph:
-      paths:
-        - '%paths.base%/../features/apiGraph'
-      context: *common_ldap_suite_context
-      contexts:
-        - GraphContext:
-        - FeatureContext: *common_feature_context_params
 
   extensions:
     Cjm\Behat\StepThroughExtension: ~
diff --git a/tests/acceptance/expected-failures-localAPI-on-OCIS-storage.md b/tests/acceptance/expected-failures-localAPI-on-OCIS-storage.md
index af6078526ab..a636c8ba43b 100644
--- a/tests/acceptance/expected-failures-localAPI-on-OCIS-storage.md
+++ b/tests/acceptance/expected-failures-localAPI-on-OCIS-storage.md
@@ -21,25 +21,3 @@ The expected failures in this file are from features in the owncloud/ocis repo.
 
 ### [Search by shares jail works incorrect](https://github.com/owncloud/ocis/issues/4014)
 - [apiSpaces/search.feature:43](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSpaces/search.feature#L43)
-
-### [create request for already existing user exits with status code 500 ](https://github.com/owncloud/ocis/issues/3516)
-- [apiGraph/createGroupCaseSensitive.feature:16](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiGraph/createGroupCaseSensitive.feature#L16)
-- [apiGraph/createGroupCaseSensitive.feature:17](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiGraph/createGroupCaseSensitive.feature#L17)
-- [apiGraph/createGroupCaseSensitive.feature:18](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiGraph/createGroupCaseSensitive.feature#L18)
-- [apiGraph/createGroupCaseSensitive.feature:19](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiGraph/createGroupCaseSensitive.feature#L19)
-- [apiGraph/createGroupCaseSensitive.feature:20](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiGraph/createGroupCaseSensitive.feature#L20)
-- [apiGraph/createGroupCaseSensitive.feature:21](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiGraph/createGroupCaseSensitive.feature#L21)
-
-### [PROPFIND on accepted shares with identical names containing brackets exit with 404](https://github.com/owncloud/ocis/issues/4421)
-
-- [apiSpaces/changingFilesShare.feature:12](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSpaces/changingFilesShare.feature#L12)
-
-#### [Webdav LOCK operations](https://github.com/owncloud/ocis/issues/1284)
-- [apiSpaces/lockSpaces.feature:31](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSpaces/lockSpaces.feature#L31)
-- [apiSpaces/lockSpaces.feature:32](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSpaces/lockSpaces.feature#L32)
-- [apiSpaces/lockSpaces.feature:50](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSpaces/lockSpaces.feature#L50)
-- [apiSpaces/lockSpaces.feature:51](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSpaces/lockSpaces.feature#L51)
-- [apiSpaces/lockSpaces.feature:71](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSpaces/lockSpaces.feature#L71)
-- [apiSpaces/lockSpaces.feature:72](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSpaces/lockSpaces.feature#L72)
-- [apiSpaces/lockSpaces.feature:89](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSpaces/lockSpaces.feature#L89)
-- [apiSpaces/lockSpaces.feature:90](https://github.com/owncloud/ocis/blob/master/tests/acceptance/features/apiSpaces/lockSpaces.feature#L90)
diff --git a/tests/acceptance/features/apiGraph/changeOwnPassword.feature b/tests/acceptance/features/apiGraph/changeOwnPassword.feature
deleted file mode 100644
index a0351cc8d15..00000000000
--- a/tests/acceptance/features/apiGraph/changeOwnPassword.feature
+++ /dev/null
@@ -1,17 +0,0 @@
-@api
-Feature: an user changes its own password
-
-    Scenario Outline: change own password
-        Given user "Alice" has been created with default attributes and without skeleton files
-        When the user "Alice" changes its own password "<currentPassword>" to "<newPassword>" using the Graph API
-        Then the HTTP status code should be "<code>"
-        Examples:
-            | currentPassword | newPassword | code |
-            | 123456          | validPass   | 204  |
-            | 123456          | кириллица   | 204  |
-            | 123456          | 密码        | 204  |
-            | 123456          | ?&^%0       | 204  |
-            | 123456          |             | 400  |
-            | 123456          | 123456      | 400  |
-            | wrongPass       | 123456      | 500  |
-            |                 | validPass   | 400  |
diff --git a/tests/acceptance/features/apiGraph/createGroupCaseSensitive.feature b/tests/acceptance/features/apiGraph/createGroupCaseSensitive.feature
deleted file mode 100644
index d29236562b8..00000000000
--- a/tests/acceptance/features/apiGraph/createGroupCaseSensitive.feature
+++ /dev/null
@@ -1,21 +0,0 @@
-@api
-Feature: create groups, group names are case insensitive
-
-  Scenario Outline: group names are case insensitive, creating groups with different upper and lower case names
-    Given using OCS API version "<ocs_api_version>"
-    And group "<group_id1>" has been created
-    When the administrator creates a group "<group_id2>" using the Graph API
-    And the administrator creates a group "<group_id3>" using the Graph API
-    Then the HTTP status code of responses on all endpoints should be "400"
-    And these groups should not exist:
-    | groupname   |
-    | <group_id2> |
-    | <group_id3> |
-    Examples:
-      | ocs_api_version | group_id1            | group_id2            | group_id3            |
-      | 1               | case-sensitive-group | Case-Sensitive-Group | CASE-SENSITIVE-GROUP |
-      | 1               | Case-Sensitive-Group | CASE-SENSITIVE-GROUP | case-sensitive-group |
-      | 1               | CASE-SENSITIVE-GROUP | case-sensitive-group | Case-Sensitive-Group |
-      | 2               | case-sensitive-group | Case-Sensitive-Group | CASE-SENSITIVE-GROUP |
-      | 2               | Case-Sensitive-Group | CASE-SENSITIVE-GROUP | case-sensitive-group |
-      | 2               | CASE-SENSITIVE-GROUP | case-sensitive-group | Case-Sensitive-Group |
diff --git a/tests/acceptance/features/apiSpaces/changingFilesShare.feature b/tests/acceptance/features/apiSpaces/changingFilesShare.feature
deleted file mode 100644
index 8ecb4c80017..00000000000
--- a/tests/acceptance/features/apiSpaces/changingFilesShare.feature
+++ /dev/null
@@ -1,39 +0,0 @@
-@api @skipOnOcV10
-Feature:
-
-  Background:
-    Given using spaces DAV path
-    And these users have been created with default attributes and without skeleton files:
-      | username |
-      | Alice    |
-      | Brian    |
-
-  @issue-4421
-  Scenario: Move files between shares by different users
-    Given user "Carol" has been created with default attributes and without skeleton files
-    And user "Alice" has uploaded file with content "some data" to "/textfile0.txt"
-    And user "Alice" has created folder "/PARENT"
-    And user "Brian" has created folder "/PARENT"
-    And user "Alice" has moved file "textfile0.txt" to "PARENT/from_alice.txt" in space "Personal"
-    And user "Alice" has shared folder "/PARENT" with user "Carol"
-    And user "Brian" has shared folder "/PARENT" with user "Carol"
-    And user "Carol" has accepted share "/PARENT" offered by user "Alice"
-    And user "Carol" has accepted share "/PARENT" offered by user "Brian"
-    When user "Carol" moves file "PARENT/from_alice.txt" to "PARENT (1)/from_alice.txt" in space "Shares Jail" using the WebDAV API
-    Then the HTTP status code should be "201"
-    And for user "Carol" folder "PARENT" of the space "Shares Jail" should not contain these entries:
-      | from_alice.txt |
-    And for user "Carol" folder "PARENT (1)" of the space "Shares Jail" should contain these entries:
-      | from_alice.txt |
-
-
-  Scenario: overwrite a received file share
-    Given user "Alice" has uploaded file with content "this is the old content" to "/textfile1.txt"
-    And user "Alice" has shared file "/textfile1.txt" with user "Brian"
-    And user "Brian" has accepted share "/textfile1.txt" offered by user "Alice"
-    When user "Brian" uploads a file inside space "Shares Jail" with content "this is a new content" to "textfile1.txt" using the WebDAV API
-    Then the HTTP status code should be "204"
-    And for user "Brian" the space "Shares Jail" should contain these entries:
-      | textfile1.txt |
-    And for user "Brian" the content of the file "/textfile1.txt" of the space "Shares Jail" should be "this is a new content"
-    And for user "Alice" the content of the file "/textfile1.txt" of the space "Personal" should be "this is a new content"
diff --git a/tests/acceptance/features/apiSpaces/favorite.feature b/tests/acceptance/features/apiSpaces/favorite.feature
deleted file mode 100644
index 5034e857a80..00000000000
--- a/tests/acceptance/features/apiSpaces/favorite.feature
+++ /dev/null
@@ -1,46 +0,0 @@
-@api @skipOnOcV10
-Feature: favorite
-
-  Background:
-    Given these users have been created with default attributes and without skeleton files:
-      | username |
-      | Alice    |
-      | Brian    |
-    And using spaces DAV path
-    And user "Alice" has created folder "/PARENT"
-
-
-  Scenario: favorite a received share itself
-    Given user "Alice" has shared folder "/PARENT" with user "Brian"
-    And user "Brian" has accepted share "/PARENT" offered by user "Alice"
-    When user "Brian" favorites element "/PARENT" in space "Shares Jail" using the WebDAV API
-    Then the HTTP status code should be "207"
-    And as user "Brian" folder "/PARENT" inside space "Shares Jail" should contain a property "oc:favorite" with value "1"
-
-
-  Scenario: favorite a file inside of a received share
-    Given user "Alice" has uploaded file with content "some data" to "/PARENT/parent.txt"
-    And user "Alice" has shared folder "/PARENT" with user "Brian"
-    And user "Brian" has accepted share "/PARENT" offered by user "Alice"
-    When user "Brian" favorites element "/PARENT/parent.txt" in space "Shares Jail" using the WebDAV API
-    Then the HTTP status code should be "207"
-    And as user "Brian" file "/PARENT/parent.txt" inside space "Shares Jail" should contain a property "oc:favorite" with value "1"
-
-
-  Scenario: favorite a folder inside of a received share
-    Given user "Alice" has created folder "/PARENT/sub-folder"
-    And user "Alice" has shared folder "/PARENT" with user "Brian"
-    And user "Brian" has accepted share "/PARENT" offered by user "Alice"
-    When user "Brian" favorites element "/PARENT/sub-folder" in space "Shares Jail" using the WebDAV API
-    Then the HTTP status code should be "207"
-    And as user "Brian" folder "/PARENT/sub-folder" inside space "Shares Jail" should contain a property "oc:favorite" with value "1"
-
-
-  Scenario: sharee file favorite state should not change the favorite state of sharer
-    Given user "Alice" has uploaded file with content "some data" to "/PARENT/parent.txt"
-    And user "Alice" has shared file "/PARENT/parent.txt" with user "Brian"
-    And user "Brian" has accepted share "/parent.txt" offered by user "Alice"
-    When user "Brian" favorites element "/parent.txt" in space "Shares Jail" using the WebDAV API
-    Then the HTTP status code should be "207"
-    And as user "Brian" file "/parent.txt" inside space "Shares Jail" should contain a property "oc:favorite" with value "1"
-    And as user "Alice" file "/PARENT/parent.txt" inside space "Personal" should contain a property "oc:favorite" with value "0"
diff --git a/tests/acceptance/features/apiSpaces/lockSpaces.feature b/tests/acceptance/features/apiSpaces/lockSpaces.feature
deleted file mode 100644
index f0ae101f1f8..00000000000
--- a/tests/acceptance/features/apiSpaces/lockSpaces.feature
+++ /dev/null
@@ -1,90 +0,0 @@
-@api @skipOnOcV10
-Feature: lock
-  # Note: This Feature includes all the tests from core (apiWebdavLock suite) related to /Shares since in core no implementation is there for space Shares Jail
-
-  Background:
-    Given these users have been created with default attributes and without skeleton files:
-      | username |
-      | Alice    |
-      | Brian    |
-      | Carol    |
-    And user "Alice" has created folder "PARENT"
-    And user "Brian" has created folder "PARENT"
-    And user "Carol" has created folder "PARENT"
-    And using spaces DAV path
-
-
-  Scenario Outline: lock should propagate correctly when uploaded to a reshare that was locked by the owner
-    Given user "Alice" has shared folder "PARENT" with user "Brian"
-    And user "Brian" has accepted share "/PARENT" offered by user "Alice"
-    And user "Brian" has shared the following entity "PARENT" inside of space "Shares Jail" with user "Carol" with role "editor"
-    And user "Carol" has accepted share "/PARENT" offered by user "Brian"
-    And user "Alice" has locked folder "/PARENT" inside space "Personal" setting the following properties
-      | lockscope | <lock-scope> |
-    When user "Carol" uploads a file inside space "Shares Jail" with content "uploaded by carol" to "PARENT/textfile.txt" using the WebDAV API
-    And user "Brian" uploads a file inside space "Shares Jail" with content "uploaded by brian" to "PARENT/textfile.txt" using the WebDAV API
-    And user "Alice" uploads file "filesForUpload/textfile.txt" to "/PARENT/textfile.txt" using the WebDAV API
-    Then the HTTP status code of responses on all endpoints should be "423"
-    And as "Alice" file "/PARENT/textfile.txt" should not exist
-    Examples:
-      | lock-scope |
-      | shared     |
-      | exclusive  |
-
-
-  Scenario Outline: lock should propagate correctly when uploaded overwriting to a reshare that was locked by the owner
-    Given user "Alice" has uploaded file with content "ownCloud test text file parent" to "PARENT/parent.txt"
-    And user "Alice" has shared folder "PARENT" with user "Brian"
-    And user "Brian" has accepted share "/PARENT" offered by user "Alice"
-    And user "Brian" has shared the following entity "PARENT" inside of space "Shares Jail" with user "Carol" with role "editor"
-    And user "Carol" has accepted share "/PARENT" offered by user "Brian"
-    And user "Alice" has locked folder "/PARENT" inside space "Personal" setting the following properties
-      | lockscope | <lock-scope> |
-    When user "Carol" uploads a file inside space "Shares Jail" with content "uploaded by carol" to "PARENT/textfile.txt" using the WebDAV API
-    And user "Brian" uploads a file inside space "Shares Jail" with content "uploaded by brian" to "PARENT/textfile.txt" using the WebDAV API
-    And user "Alice" uploads file "filesForUpload/textfile.txt" to "/PARENT/parent.txt" using the WebDAV API
-    Then the HTTP status code of responses on all endpoints should be "423"
-    And the content of file "/PARENT/parent.txt" for user "Alice" should be "ownCloud test text file parent"
-    Examples:
-      | lock-scope |
-      | shared     |
-      | exclusive  |
-
-
-  Scenario Outline: lock should propagate correctly when the public uploads to a reshared share that was locked by the original owner
-    Given user "Alice" has shared folder "PARENT" with user "Brian"
-    And user "Brian" has accepted share "/PARENT" offered by user "Alice"
-    And user "Brian" has shared the following entity "PARENT" inside of space "Shares Jail" with user "Carol" with role "editor"
-    And user "Carol" has accepted share "/PARENT" offered by user "Brian"
-    And user "Carol" has created a public link share inside of space "Shares Jail" with settings:
-      | path        | PARENT      |
-      | shareType   | 3           |
-      | permissions | 15          |
-      | name        | public link |
-    And user "Alice" has locked folder "/PARENT" inside space "Personal" setting the following properties
-      | lockscope | <lock-scope> |
-    When the public uploads file "test.txt" with content "test" using the new public WebDAV API
-    Then the HTTP status code should be "423"
-    And as "Alice" file "/PARENT/test.txt" should not exist
-    Examples:
-      | lock-scope |
-      | shared     |
-      | exclusive  |
-
-
-  Scenario Outline: lock should propagate correctly when uploaded to a reshare that was locked by the resharing user
-    Given user "Alice" has shared folder "PARENT" with user "Brian"
-    And user "Brian" has accepted share "/PARENT" offered by user "Alice"
-    And user "Brian" has shared the following entity "PARENT" inside of space "Shares Jail" with user "Carol" with role "editor"
-    And user "Carol" has accepted share "/PARENT" offered by user "Brian"
-    And user "Brian" has locked folder "/PARENT" inside space "Shares Jail" setting the following properties
-      | lockscope | <lock-scope> |
-    When user "Carol" uploads a file inside space "Shares Jail" with content "uploaded by carol" to "PARENT/textfile.txt" using the WebDAV API
-    And user "Brian" uploads a file inside space "Shares Jail" with content "uploaded by brian" to "PARENT/textfile.txt" using the WebDAV API
-    And user "Alice" uploads file "filesForUpload/textfile.txt" to "/PARENT/textfile.txt" using the WebDAV API
-    Then the HTTP status code of responses on all endpoints should be "423"
-    And as "Alice" file "/PARENT/textfile.txt" should not exist
-    Examples:
-      | lock-scope |
-      | shared     |
-      | exclusive  |
diff --git a/tests/acceptance/features/apiSpaces/moveSpaces.feature b/tests/acceptance/features/apiSpaces/moveSpaces.feature
index 0d743ed0344..6d34fd37fa2 100644
--- a/tests/acceptance/features/apiSpaces/moveSpaces.feature
+++ b/tests/acceptance/features/apiSpaces/moveSpaces.feature
@@ -198,8 +198,6 @@ Feature: move (rename) file
     Then the HTTP status code should be "201"
     And for user "Alice" folder "testshare2" of the space "Shares Jail" should contain these entries:
       | testshare1.txt |
-    And for user "Alice" folder "testshare1" of the space "Shares Jail" should not contain these entries:
-      | testshare1.txt |
     And for user "Brian" the space "Personal" should contain these entries:
       | /testshare2/testshare1.txt |
 
diff --git a/tests/acceptance/features/bootstrap/GraphContext.php b/tests/acceptance/features/bootstrap/GraphContext.php
index a2a3b5c33f6..062975342d3 100644
--- a/tests/acceptance/features/bootstrap/GraphContext.php
+++ b/tests/acceptance/features/bootstrap/GraphContext.php
@@ -428,32 +428,6 @@ class GraphContext implements Context {
 		}
 	}
 
-	/**
-	 * @When /^the administrator creates a group "([^"]*)" using the Graph API$/
-	 *
-	 * @param string $group
-	 *
-	 * @return void
-	 * @throws Exception
-	 * @throws GuzzleException
-	 */
-	public function adminCreatesGroupUsingTheGraphApi(string $group): void {
-		$response = GraphHelper::createGroup(
-			$this->featureContext->getBaseUrl(),
-			$this->featureContext->getStepLineRef(),
-			$this->featureContext->getAdminUsername(),
-			$this->featureContext->getAdminPassword(),
-			$group,
-		);
-		$this->featureContext->setResponse($response);
-		$this->featureContext->pushToLastHttpStatusCodesArray((string) $response->getStatusCode());
-
-		if ($response->getStatusCode() === 200) {
-			$groupId = $this->featureContext->getJsonDecodedResponse($response)["id"];
-			$this->featureContext->addGroupToCreatedGroupsList($group, true, true, $groupId);
-		}
-	}
-
 	/**
 	 * create group with provided data
 	 *
@@ -536,25 +510,4 @@ class GraphContext implements Context {
 			}
 		}
 	}
-
-	/**
-	 * @When /^the user "([^"]*)" changes its own password "([^"]*)" to "([^"]*)" using the Graph API$/
-	 * @param string $user
-	 * @param string $currentPassword
-	 * @param string $newPassword
-	 *
-	 * @throws GuzzleException
-	 * @throws Exception
-	 */
-	public function userChangesOwnPassword(string $user, string $currentPassword, $newPassword): void {
-		$response = GraphHelper::changeOwnPassword(
-			$this->featureContext->getBaseUrl(),
-			$this->featureContext->getStepLineRef(),
-			$user,
-			$this->featureContext->getPasswordForUser($user),
-			$currentPassword,
-			$newPassword
-		);
-		$this->featureContext->setResponse($response);
-	}
 }
diff --git a/tests/acceptance/features/bootstrap/SpacesContext.php b/tests/acceptance/features/bootstrap/SpacesContext.php
index b9fa4b7964b..590b085a7c2 100644
--- a/tests/acceptance/features/bootstrap/SpacesContext.php
+++ b/tests/acceptance/features/bootstrap/SpacesContext.php
@@ -97,12 +97,6 @@ class SpacesContext implements Context {
 	 */
 	private $storedEtags = [];
 
-	/**
-	 *
-	 * @var string[][]
-	 */
-	private $tokenOfLastLock = [];
-
 	private $etagPropfindBody = '<?xml version="1.0"?>'
 		. '<d:propfind xmlns:d="DAV:" '
 		. 'xmlns:oc="http://owncloud.org/ns" '
@@ -426,43 +420,37 @@ class SpacesContext implements Context {
 	 * @throws Exception|GuzzleException
 	 */
 	public function cleanDataAfterTests(): void {
-		$this->deleteAllProjectSpaces();
+		// TODO enable when admin can disable and delete spaces
+		// $this->deleteAllSpacesOfTheType('project');
 		$this->deleteAllPersonalSpaces();
 	}
 
 	/**
-	 * manager of the project space first disables and then deletes spaces
+	 * Admin first disables and then deletes spaces
+	 *
+	 * @param  string $driveType
 	 *
 	 * @return void
 	 *
 	 * @throws Exception|GuzzleException
 	 */
-	public function deleteAllProjectSpaces(): void {
-		$query = "\$filter=driveType eq project";
+	public function deleteAllSpacesOfTheType(string $driveType): void {
+		$query = "\$filter=driveType eq $driveType";
 		$userAdmin = $this->featureContext->getAdminUsername();
 
-		$this->theUserListsAllAvailableSpacesUsingTheGraphApi(
-			$userAdmin,
-			$query
-		);
-		$drives = $this->getAvailableSpaces();
-		$createdUsers = $this->featureContext->getCreatedUsers();
-
-		foreach ($drives as $value) {
-			foreach ($value["root"]["permissions"] as $permissions) {
-				// find an user who is a manager
-				if ($permissions["roles"][0] === "manager") {
-					$userId = $permissions["grantedTo"][0]["user"]["id"];
-
-					foreach ($createdUsers as $user) {
-						if ($user["id"] === $userId) {
-							$userName = $user["actualUsername"];
+		for ($i = 0; $i < 2; ++$i) {
+			$this->theUserListsAllAvailableSpacesUsingTheGraphApi(
+				$userAdmin,
+				$query
+			);
+			$drives = $this->getAvailableSpaces();
 
-							if (!\array_key_exists("deleted", $value["root"])) {
-								$this->sendDisableSpaceRequest($userName, $value["name"]);
-							}
-							$this->sendDeleteSpaceRequest($userName, $value["name"]);
-						}
+			if (!empty($drives)) {
+				foreach ($drives as $value) {
+					if (!\array_key_exists("deleted", $value["root"])) {
+						$this->sendDisableSpaceRequest($userAdmin, $value["name"]);
+					} else {
+						$this->sendDeleteSpaceRequest($userAdmin, $value["name"]);
 					}
 				}
 			}
@@ -478,9 +466,9 @@ class SpacesContext implements Context {
 	 */
 	public function deleteAllPersonalSpaces(): void {
 		$query = "\$filter=driveType eq personal";
-		$createdUsers = $this->featureContext->getCreatedUsers();
+		$createdUsers= $this->featureContext->getCreatedUsers();
 
-		foreach ($createdUsers as $user) {
+		foreach($createdUsers as $user) {
 			$this->theUserListsAllHisAvailableSpacesUsingTheGraphApi(
 				$user["actualUsername"],
 				$query
@@ -495,6 +483,113 @@ class SpacesContext implements Context {
 		}
 	}
 
+	/**
+	 * Send Graph List My Spaces Request
+	 *
+	 * @param  string $user
+	 * @param  string $password
+	 * @param  string $urlArguments
+	 * @param  string $xRequestId
+	 * @param  array  $body
+	 * @param  array  $headers
+	 *
+	 * @return ResponseInterface
+	 *
+	 * @throws GuzzleException
+	 */
+	public function listMySpacesRequest(
+		string $user,
+		string $password,
+		string $urlArguments = '',
+		string $xRequestId = '',
+		array  $body = [],
+		array  $headers = []
+	): ResponseInterface {
+		$fullUrl = $this->baseUrl . "/graph/v1.0/me/drives/" . $urlArguments;
+
+		return HttpRequestHelper::get($fullUrl, $xRequestId, $user, $password, $headers, $body);
+	}
+
+	/**
+	 * Send Graph List All Spaces Request
+	 *
+	 * @param  string $user
+	 * @param  string $password
+	 * @param  string $urlArguments
+	 * @param  string $xRequestId
+	 * @param  array  $body
+	 * @param  array  $headers
+	 *
+	 * @return ResponseInterface
+	 *
+	 * @throws GuzzleException
+	 */
+	public function listAllSpacesRequest(
+		string $user,
+		string $password,
+		string $urlArguments = '',
+		string $xRequestId = '',
+		array  $body = [],
+		array  $headers = []
+	): ResponseInterface {
+		$fullUrl = $this->baseUrl . "/graph/v1.0/drives/" . $urlArguments;
+
+		return HttpRequestHelper::get($fullUrl, $xRequestId, $user, $password, $headers, $body);
+	}
+
+	/**
+	 * Send Graph List Single Space Request
+	 *
+	 * @param string $user
+	 * @param string $password
+	 * @param string $spaceId
+	 * @param string $urlArguments
+	 * @param string $xRequestId
+	 * @param array $body
+	 * @param array $headers
+	 *
+	 * @return ResponseInterface
+	 *
+	 */
+	public function listSingleSpaceRequest(
+		string $user,
+		string $password,
+		string $spaceId,
+		string $urlArguments = '',
+		string $xRequestId = '',
+		array  $body = [],
+		array  $headers = []
+	): ResponseInterface {
+		$fullUrl = $this->baseUrl . "/graph/v1.0/drives/" . $spaceId . "/" . $urlArguments;
+
+		return HttpRequestHelper::get($fullUrl, $xRequestId, $user, $password, $headers, $body);
+	}
+
+	/**
+	 * Send Graph Create Space Request
+	 *
+	 * @param  string $user
+	 * @param  string $password
+	 * @param  string $body
+	 * @param  string $xRequestId
+	 * @param  array  $headers
+	 *
+	 * @return ResponseInterface
+	 *
+	 * @throws GuzzleException
+	 */
+	public function sendCreateSpaceRequest(
+		string $user,
+		string $password,
+		string $body,
+		string $xRequestId = '',
+		array $headers = []
+	): ResponseInterface {
+		$fullUrl = $this->baseUrl . "/graph/v1.0/drives/";
+
+		return HttpRequestHelper::post($fullUrl, $xRequestId, $user, $password, $headers, $body);
+	}
+
 	/**
 	 * Send Propfind Request to Url
 	 *
@@ -595,28 +690,6 @@ class SpacesContext implements Context {
 		return HttpRequestHelper::sendRequest($fullUrl, $xRequestId, $method, $user, $password, $headers);
 	}
 
-	/**
-	 * send proppatch request to url
-	 *
-	 * @param string $fullUrl
-	 * @param string $user
-	 * @param string $password
-	 * @param string $xRequestId
-	 * @param array $headers
-	 * @param mixed|null $body
-	 * @return ResponseInterface
-	 */
-	public function sendPropPatchRequest(
-		string $fullUrl,
-		string $user,
-		string $password,
-		string $xRequestId = '',
-		array  $headers = [],
-		$body
-	): ResponseInterface {
-		return HttpRequestHelper::sendRequest($fullUrl, $xRequestId, 'PROPPATCH', $user, $password, $headers, $body);
-	}
-
 	/**
 	 * @When /^user "([^"]*)" lists all available spaces via the GraphApi$/
 	 * @When /^user "([^"]*)" lists all available spaces via the GraphApi with query "([^"]*)"$/
@@ -631,8 +704,7 @@ class SpacesContext implements Context {
 	 */
 	public function theUserListsAllHisAvailableSpacesUsingTheGraphApi(string $user, string $query = ''): void {
 		$this->featureContext->setResponse(
-			GraphHelper::getMySpaces(
-				$this->featureContext->getBaseUrl(),
+			$this->listMySpacesRequest(
 				$user,
 				$this->featureContext->getPasswordForUser($user),
 				"?" . $query
@@ -653,8 +725,7 @@ class SpacesContext implements Context {
 	 */
 	public function theUserListsAllAvailableSpacesUsingTheGraphApi(string $user, string $query = ''): void {
 		$this->featureContext->setResponse(
-			GraphHelper::getAllSpaces(
-				$this->featureContext->getBaseUrl(),
+			$this->listAllSpacesRequest(
 				$user,
 				$this->featureContext->getPasswordForUser($user),
 				"?" . $query
@@ -678,8 +749,7 @@ class SpacesContext implements Context {
 		Assert::assertNotEmpty($spaceId = $space["id"]);
 		Assert::assertNotEmpty($space["root"]["webDavUrl"]);
 		$this->featureContext->setResponse(
-			GraphHelper::getSingleSpace(
-				$this->featureContext->getBaseUrl(),
+			$this->listSingleSpaceRequest(
 				$user,
 				$this->featureContext->getPasswordForUser($user),
 				$spaceId
@@ -707,14 +777,12 @@ class SpacesContext implements Context {
 		$space = ["Name" => $spaceName, "driveType" => $spaceType];
 		$body = json_encode($space, JSON_THROW_ON_ERROR);
 		$this->featureContext->setResponse(
-			GraphHelper::createSpace(
-				$this->featureContext->getBaseUrl(),
+			$this->sendCreateSpaceRequest(
 				$user,
 				$this->featureContext->getPasswordForUser($user),
 				$body
 			)
 		);
-
 		$this->setSpaceCreator($spaceName, $user);
 	}
 
@@ -740,8 +808,7 @@ class SpacesContext implements Context {
 		$space = ["Name" => $spaceName, "driveType" => $spaceType, "quota" => ["total" => $quota]];
 		$body = json_encode($space);
 		$this->featureContext->setResponse(
-			GraphHelper::createSpace(
-				$this->featureContext->getBaseUrl(),
+			$this->sendCreateSpaceRequest(
 				$user,
 				$this->featureContext->getPasswordForUser($user),
 				$body
@@ -834,11 +901,13 @@ class SpacesContext implements Context {
 			$drives = $drives["value"];
 		}
 
+		Assert::assertArrayHasKey(0, $drives, "No drives were found on that endpoint");
 		$spaces = [];
 		foreach ($drives as $drive) {
 			$spaces[$drive["name"]] = $drive;
 		}
 		$this->setAvailableSpaces($spaces);
+		Assert::assertNotEmpty($spaces, "No spaces have been found");
 	}
 
 	/**
@@ -1273,20 +1342,6 @@ class SpacesContext implements Context {
 		}
 	}
 
-	/**
-	 * Escapes the given string for
-	 * 1. Space --> %20
-	 * 2. Opening Small Bracket --> %28
-	 * 3. Closing Small Bracket --> %29
-	 *
-	 * @param string $path - File path to parse
-	 *
-	 * @return string
-	 */
-	public function escapePath(string $path): string {
-		return \str_replace([" ", "(", ")"], ["%20", "%28", "%29"], $path);
-	}
-
 	/**
 	 * parses a PROPFIND response from $this->response into xml
 	 * and returns found search results if found else returns false
@@ -1316,9 +1371,6 @@ class SpacesContext implements Context {
 		// trim any leading "/" passed by the caller, we can just match the "raw" name
 		$trimmedEntryNameToSearch = \trim($entryNameToSearch, "/");
 
-		// url encode for spaces and brackets that may appear in the filePath
-		$folderPath = $this->escapePath($folderPath);
-
 		// topWebDavPath should be something like /remote.php/webdav/ or
 		// /remote.php/dav/files/alice/
 		$topWebDavPath = "/" . "dav/spaces/" . $spaceId . "/" . $folderPath;
@@ -1529,8 +1581,7 @@ class SpacesContext implements Context {
 		$body = json_encode($bodyData, JSON_THROW_ON_ERROR);
 
 		$this->featureContext->setResponse(
-			GraphHelper::updateSpace(
-				$this->featureContext->getBaseUrl(),
+			$this->sendUpdateSpaceRequest(
 				$user,
 				$this->featureContext->getPasswordForUser($user),
 				$body,
@@ -1561,8 +1612,7 @@ class SpacesContext implements Context {
 		$body = json_encode($bodyData, JSON_THROW_ON_ERROR);
 
 		$this->featureContext->setResponse(
-			GraphHelper::updateSpace(
-				$this->featureContext->getBaseUrl(),
+			$this->sendUpdateSpaceRequest(
 				$user,
 				$this->featureContext->getPasswordForUser($user),
 				$body,
@@ -1594,8 +1644,7 @@ class SpacesContext implements Context {
 		$body = json_encode($bodyData, JSON_THROW_ON_ERROR);
 
 		$this->featureContext->setResponse(
-			GraphHelper::updateSpace(
-				$this->featureContext->getBaseUrl(),
+			$this->sendUpdateSpaceRequest(
 				$user,
 				$this->featureContext->getPasswordForUser($user),
 				$body,
@@ -1636,8 +1685,7 @@ class SpacesContext implements Context {
 		$body = json_encode($bodyData, JSON_THROW_ON_ERROR);
 
 		$this->featureContext->setResponse(
-			GraphHelper::updateSpace(
-				$this->featureContext->getBaseUrl(),
+			$this->sendUpdateSpaceRequest(
 				$user,
 				$this->featureContext->getPasswordForUser($user),
 				$body,
@@ -1671,6 +1719,34 @@ class SpacesContext implements Context {
 		);
 	}
 
+	/**
+	 * Send Graph Update Space Request
+	 *
+	 * @param  string $user
+	 * @param  string $password
+	 * @param  mixed $body
+	 * @param  string $spaceId
+	 * @param  string $xRequestId
+	 * @param  array  $headers
+	 *
+	 * @return ResponseInterface
+	 *
+	 * @throws GuzzleException
+	 */
+	public function sendUpdateSpaceRequest(
+		string $user,
+		string $password,
+		$body,
+		string $spaceId,
+		string $xRequestId = '',
+		array $headers = []
+	): ResponseInterface {
+		$fullUrl = $this->baseUrl . "/graph/v1.0/drives/$spaceId";
+		$method = 'PATCH';
+
+		return HttpRequestHelper::sendRequest($fullUrl, $xRequestId, $method, $user, $password, $headers, $body);
+	}
+
 	/**
 	 * @Given /^user "([^"]*)" has created a space "([^"]*)" of type "([^"]*)" with quota "([^"]*)"$/
 	 *
@@ -1691,8 +1767,7 @@ class SpacesContext implements Context {
 		$space = ["Name" => $spaceName, "driveType" => $spaceType, "quota" => ["total" => $quota]];
 		$body = json_encode($space);
 		$this->featureContext->setResponse(
-			GraphHelper::createSpace(
-				$this->featureContext->getBaseUrl(),
+			$this->sendCreateSpaceRequest(
 				$user,
 				$this->featureContext->getPasswordForUser($user),
 				$body
@@ -1722,8 +1797,7 @@ class SpacesContext implements Context {
 		$space = ["Name" => $spaceName];
 		$body = json_encode($space, JSON_THROW_ON_ERROR);
 		$this->featureContext->setResponse(
-			GraphHelper::createSpace(
-				$this->featureContext->getBaseUrl(),
+			$this->sendCreateSpaceRequest(
 				$user,
 				$this->featureContext->getPasswordForUser($user),
 				$body
@@ -1772,7 +1846,6 @@ class SpacesContext implements Context {
 	 * @param string $spaceName
 	 *
 	 * @return void
-	 * @throws GuzzleException
 	 */
 	public function userMovesFileWithinSpaceUsingTheWebDAVAPI(
 		string $user,
@@ -1787,42 +1860,10 @@ class SpacesContext implements Context {
 			$spaceName
 		);
 
-		$fileSource = $this->escapePath(\trim($fileSource, "/"));
-		$fullUrl = $space["root"]["webDavUrl"] . '/' . $fileSource;
+		$fullUrl = $space["root"]["webDavUrl"] . '/' . \trim($fileSource, "/");
 		$this->moveFilesAndFoldersRequest($user, $fullUrl, $headers);
 	}
 
-	/**
-	 * @Given /^user "([^"]*)" has moved (?:file|folder) "([^"]*)" to "([^"]*)" in space "([^"]*)"$/
-	 *
-	 * @param string $user
-	 * @param string $fileSource
-	 * @param string $fileDestination
-	 * @param string $spaceName
-	 *
-	 * @return void
-	 * @throws GuzzleException
-	 */
-	public function userHasMovedFileWithinSpaceUsingTheWebDAVAPI(
-		string $user,
-		string $fileSource,
-		string $fileDestination,
-		string $spaceName
-	):void {
-		$this->userMovesFileWithinSpaceUsingTheWebDAVAPI(
-			$user,
-			$fileSource,
-			$fileDestination,
-			$spaceName
-		);
-		$this->featureContext->theHTTPStatusCodeShouldBe(
-			201,
-			__METHOD__ . "Expected response status code should be 201 (Created)\n" .
-			"Actual response status code was: " . $this->featureContext->getResponse()->getStatusCode() . "\n" .
-			"Actual response body was: " . $this->featureContext->getResponse()->getBody()
-		);
-	}
-
 	/**
 	 * MOVE request for files|folders
 	 *
@@ -1844,9 +1885,6 @@ class SpacesContext implements Context {
 				$headers,
 			)
 		);
-		$this->featureContext->pushToLastHttpStatusCodesArray(
-			(string)$this->featureContext->getResponse()->getStatusCode()
-		);
 	}
 
 	/**
@@ -1911,10 +1949,7 @@ class SpacesContext implements Context {
 	 */
 	public function destinationHeaderValueWithSpaceName(string $user, string $fileDestination, string $spaceName):string {
 		$space = $this->getSpaceByName($user, $spaceName);
-
-		$fileDestination = $this->escapePath(\ltrim($fileDestination, "/"));
-
-		return $space["root"]["webDavUrl"] . '/' . $fileDestination;
+		return $space["root"]["webDavUrl"] . '/' . \ltrim($fileDestination, '/');
 	}
 
 	/**
@@ -2018,7 +2053,7 @@ class SpacesContext implements Context {
 	}
 
 	/**
-	 * Request to send share of resource inside of space
+	 * @When /^user "([^"]*)" shares the following entity "([^"]*)" inside of space "([^"]*)" with user "([^"]*)" with role "([^"]*)"$/
 	 *
 	 * @param  string $user
 	 * @param  string $entity
@@ -2029,7 +2064,13 @@ class SpacesContext implements Context {
 	 * @return void
 	 * @throws GuzzleException
 	 */
-	public function sendRequestForShareOfEntityInsideOfSpace(string $user, string $entity, string $spaceName, string $userRecipient, string $role):void {
+	public function sendShareEntityInsideOfSpaceRequest(
+		string $user,
+		string $entity,
+		string $spaceName,
+		string $userRecipient,
+		string $role
+	): void {
 		$space = $this->getSpaceByName($user, $spaceName);
 		$body = [
 			"space_ref" => $space['id'] . "/" . $entity,
@@ -2051,54 +2092,6 @@ class SpacesContext implements Context {
 		$this->setLastShareData();
 	}
 
-	/**
-	 * @When /^user "([^"]*)" shares the following entity "([^"]*)" inside of space "([^"]*)" with user "([^"]*)" with role "([^"]*)"$/
-	 *
-	 * @param  string $user
-	 * @param  string $entity
-	 * @param  string $spaceName
-	 * @param  string $userRecipient
-	 * @param  string $role
-	 *
-	 * @return void
-	 * @throws GuzzleException
-	 */
-	public function sharesTheFollowingEntityInsideOfSpace(
-		string $user,
-		string $entity,
-		string $spaceName,
-		string $userRecipient,
-		string $role
-	): void {
-		$this->sendRequestForShareOfEntityInsideOfSpace($user, $entity, $spaceName, $userRecipient, $role);
-	}
-
-	/**
-	 * @Given /^user "([^"]*)" has shared the following entity "([^"]*)" inside of space "([^"]*)" with user "([^"]*)" with role "([^"]*)"$/
-	 *
-	 * @param  string $user
-	 * @param  string $entity
-	 * @param  string $spaceName
-	 * @param  string $userRecipient
-	 * @param  string $role
-	 *
-	 * @return void
-	 * @throws GuzzleException
-	 */
-	public function hasSharedTheFollowingEntityInsideOfSpace(
-		string $user,
-		string $entity,
-		string $spaceName,
-		string $userRecipient,
-		string $role
-	): void {
-		$this->sendRequestForShareOfEntityInsideOfSpace($user, $entity, $spaceName, $userRecipient, $role);
-		$this->featureContext->theHTTPStatusCodeShouldBe(
-			200,
-			"Expected response status code should be 200"
-		);
-	}
-
 	/**
 	 * @When /^user "([^"]*)" creates a public link share inside of space "([^"]*)" with settings:$/
 	 *
@@ -2267,12 +2260,13 @@ class SpacesContext implements Context {
 		string $spaceName
 	): void {
 		$space = $this->getSpaceByName($user, $spaceName);
+		$fullUrl = $this->baseUrl . "/graph/v1.0/drives/" . $space["id"];
 		$this->featureContext->setResponse(
-			GraphHelper::disableSpace(
-				$this->featureContext->getBaseUrl(),
+			HttpRequestHelper::delete(
+				$fullUrl,
+				"",
 				$user,
-				$this->featureContext->getPasswordForUser($user),
-				$space["id"]
+				$this->featureContext->getPasswordForUser($user)
 			)
 		);
 	}
@@ -2336,13 +2330,14 @@ class SpacesContext implements Context {
 	): void {
 		$header = ["Purge" => "T"];
 		$space = $this->getSpaceByName($user, $spaceName);
-		
+		$fullUrl = $this->baseUrl . "/graph/v1.0/drives/" . $space["id"];
+
 		$this->featureContext->setResponse(
-			GraphHelper::deleteSpace(
-				$this->featureContext->getBaseUrl(),
+			HttpRequestHelper::delete(
+				$fullUrl,
+				"",
 				$user,
 				$this->featureContext->getPasswordForUser($user),
-				$space["id"],
 				$header
 			)
 		);
@@ -2368,12 +2363,18 @@ class SpacesContext implements Context {
 		} else {
 			$space = $this->getSpaceByName($user, $spaceName);
 		}
+		$header = ["restore" => true];
+		$body = '{}';
+		$fullUrl = $this->baseUrl . "/graph/v1.0/drives/" . $space["id"];
 		$this->featureContext->setResponse(
-			GraphHelper::restoreSpace(
-				$this->featureContext->getBaseUrl(),
+			HttpRequestHelper::sendRequest(
+				$fullUrl,
+				"",
+				'PATCH',
 				$user,
 				$this->featureContext->getPasswordForUser($user),
-				$space["id"]
+				$header,
+				$body
 			)
 		);
 	}
@@ -2933,74 +2934,6 @@ class SpacesContext implements Context {
 		}
 	}
 
-	/**
-	 * Request to lock the resource inside of space
-	 *
-	 * @param string $user
-	 * @param string $resource
-	 * @param TableNode $properties
-	 * @param string $spaceName
-	 *
-	 * @return void
-	 * @throws GuzzleException
-	 */
-	public function sendRequestToLockResouceInsideOfSpace(string $user, string $resource, TableNode $properties, string $spaceName):void {
-		$body
-			= "<?xml version='1.0' encoding='UTF-8'?>" .
-			"<d:lockinfo xmlns:d='DAV:'> ";
-		$headers = [];
-		$this->featureContext->verifyTableNodeRows($properties, [], ['lockscope', 'depth', 'timeout']);
-		$propertiesRows = $properties->getRowsHash();
-		foreach ($propertiesRows as $property => $value) {
-			if ($property === "depth" || $property === "timeout") {
-				//properties that are set in the header not in the xml
-				$headers[$property] = $value;
-			} else {
-				$body .= "<d:$property><d:$value/></d:$property>";
-			}
-		}
-		$body .= "</d:lockinfo>";
-		$space = $this->getSpaceByName($user, $spaceName);
-		$fullUrl = $space['root']['webDavUrl'] . '/' . ltrim($resource, '/');
-		$this->featureContext->setResponse(
-			HttpRequestHelper::sendRequest(
-				$fullUrl,
-				"",
-				'LOCK',
-				$user,
-				$this->featureContext->getPasswordForUser($user),
-				[],
-				$body
-			)
-		);
-		$this->featureContext->theHTTPStatusCodeShouldBe(
-			200,
-			__METHOD__ . " Failed to lock the resource $resource"
-		);
-		$responseXml = $this->featureContext->getResponseXml(null, __METHOD__);
-		$this->featureContext->setResponseXmlObject($responseXml);
-		$xmlPart = $responseXml->xpath("//d:locktoken/d:href");
-		if (\is_array($xmlPart) && isset($xmlPart[0])) {
-			$this->tokenOfLastLock[$user][$resource] = (string) $xmlPart[0];
-		} else {
-			Assert::fail("could not find lock token after trying to lock '$resource'");
-		}
-	}
-
-	/**
-	 * @Given /^user "([^"]*)" has locked folder "([^"]*)" inside space "([^"]*)" setting the following properties$/
-	 *
-	 * @param string $user
-	 * @param string $resource
-	 * @param TableNode $properties
-	 * @param string $spaceName
-	 *
-	 * @throws Exception | GuzzleException
-	 */
-	public function userHasLockedResourceOfSpace(string $user, string $resource, TableNode $properties, string $spaceName) {
-		$this->sendRequestToLockResouceInsideOfSpace($user, $resource, $properties, $spaceName);
-	}
-
 	/**
 	 * @When /^user "([^"]*)" creates a public link share of the space "([^"]*)" with settings:$/
 	 *
@@ -3094,7 +3027,7 @@ class SpacesContext implements Context {
 		string $fileName = ''
 	): void {
 		$body = '';
-		if (!empty($fileName)) {
+		if (!empty ($fileName)) {
 			$body = $this->getFileId($user, $spaceName, $fileName);
 		} else {
 			$space = $this->getSpaceByName($user, $spaceName);
@@ -3209,38 +3142,4 @@ class SpacesContext implements Context {
 			$expectedValue
 		);
 	}
-
-	/**
-	 * @When /^user "([^"]*)" favorites element "([^"]*)" in space "([^"]*)" using the WebDAV API$/
-	 *
-	 * @param string $user
-	 * @param string $path
-	 * @param string $spaceName
-	 *
-	 * @return void
-	 * @throws GuzzleException
-	 */
-	public function userFavoritesElementInSpaceUsingTheWebdavApi(string $user, string $path, string $spaceName): void {
-		$space = $this->getSpaceByName($user, $spaceName);
-		$fullUrl = $space["root"]["webDavUrl"] . '/' . ltrim($path, "/");
-		$body = '<?xml version="1.0"?>
-				<d:propertyupdate xmlns:d="DAV:"
-				   xmlns:oc="http://owncloud.org/ns">
-				 <d:set>
-				  <d:prop>
-				    <oc:favorite xmlns:oc="http://owncloud.org/ns">1</oc:favorite>
-				  </d:prop>
-				 </d:set>
-				</d:propertyupdate>';
-		$this->featureContext->setResponse(
-			$this->sendProppatchRequest(
-				$fullUrl,
-				$user,
-				$this->featureContext->getPasswordForUser($user),
-				$this->featureContext->getStepLineRef(),
-				[],
-				$body
-			)
-		);
-	}
 }