Repository: owncloud/ocis
Pull request #2509 (2021-09-15 14:44:01)

Expose configuration for the reva archiver
<!--
Thanks for submitting a change to ownCloud!

This is the bug tracker for the oCIS component. Find other components at https://github.com/owncloud/core/blob/master/.github/CONTRIBUTING.md#guidelines

For fixing potential security issues please see https://owncloud.org/security/

To make it possible for us to get your change reviewed and merged please carefully fill out the requested information below.

Please note that any kind of change needs first be submitted to the master branch which holds the next version of oCIS.

Please set the following labels:

- Set label "Status:Needs-Review" for review or "Status:In-Progress" if the PR still has open tasks.
- Assignment: assign to self
- Reviewers: pick at least one
-->

## Description
Expose the reva archiver configuration

## Related Issue
https://github.com/owncloud/ocis/issues/2507

## Motivation and Context
<!--- Why is this change required? What problem does it solve? -->

## How Has This Been Tested?
1. Access ocis with the admin user
2. Create folder "zzz" and upload some files there
3. Connect to the archiver service:
    1. Assuming you've started a basic ocis installation with `ocis server`
    2. In the same host
```
root@f13b05e8714d:/# curl -v -u admin:admin -JO http://localhost:9140/archiver?dir=/home/zzz
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0*   Trying 127.0.0.1:9140...
* TCP_NODELAY set
* Connected to localhost (127.0.0.1) port 9140 (#0)
* Server auth using Basic with user 'admin'
> GET /archiver?dir=/home/zzz HTTP/1.1
> Host: localhost:9140
> Authorization: Basic YWRtaW46YWRtaW4=
> User-Agent: curl/7.68.0
> Accept: */*
> 
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0* Mark bundle as not supporting multiuse
< HTTP/1.1 200 OK
< Content-Disposition: attachment; filename="zzz.tar"
< Content-Transfer-Encoding: binary
< Vary: Origin
< X-Access-Token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJyZXZhIiwiZXhwIjoxNjMxNzk4NDYxLCJpYXQiOjE2MzE3MTIwNjEsImlzcyI6Imh0dHBzOi8vb2Npcy5qcC5zb2xpZGdlYXIucHJ2IiwidXNlciI6eyJpZCI6eyJpZHAiOiJodHRwczovL29jaXMuanAuc29saWRnZWFyLnBydiIsIm9wYXF1ZV9pZCI6ImRkYzIwMDRjLTA5NzctMTFlYi05ZDNmLWE3OTM4ODhjZDBmOCIsInR5cGUiOjF9LCJ1c2VybmFtZSI6ImFkbWluIiwibWFpbCI6ImFkbWluQGV4YW1wbGUub3JnIiwiZGlzcGxheV9uYW1lIjoiQWRtaW4iLCJ1aWRfbnVtYmVyIjoyMDAwNCwiZ2lkX251bWJlciI6MzAwMDB9LCJzY29wZSI6eyJ1c2VyIjp7InJlc291cmNlIjp7ImRlY29kZXIiOiJqc29uIiwidmFsdWUiOiJleUp3WVhSb0lqb2lMeUo5In0sInJvbGUiOjF9fX0.jf3Fxy5FGRLLKLss_gi8yxZ1MVof2-S3g17z4xtL_KA
< Date: Wed, 15 Sep 2021 13:21:02 GMT
< Content-Type: application/octet-stream
< Transfer-Encoding: chunked
< 
{ [3248 bytes data]
100 6782k    0 6782k    0     0  9566k      0 --:--:-- --:--:-- --:--:-- 9552k
* Connection #0 to host localhost left intact
curl: Saved to filename 'zzz.tar'
```

The tar file is downloaded and contains the files that were present in the folder.

## Screenshots (if appropriate):

## Types of changes
<!--- What types of changes does your code introduce? Put an `x` in all the boxes that apply: -->
- [ ] Bug fix (non-breaking change which fixes an issue)
- [x] New feature (non-breaking change which adds functionality)
- [ ] Breaking change (fix or feature that would cause existing functionality to change)
- [ ] Technical debt
- [ ] Tests only (no source changes)

## Checklist:
<!-- Tick the checkboxes when done. -->
<!-- Raise documentation ticket in owncloud.github.io/ -->
- [x] Code changes
- [ ] Unit tests added
- [ ] Acceptance tests added
- [ ] Documentation ticket raised: <link> 



Patch:
diff --git a/.codacy.yml b/.codacy.yml
index ec649ef51be..eac2c12c097 100644
--- a/.codacy.yml
+++ b/.codacy.yml
@@ -16,6 +16,5 @@ exclude_paths:
   - 'ocis/docker/eos-ocis-dev/Dockerfile'
   - 'deployments/**'
   - 'tests/acceptance/expected-failures-*.md'
-  - 'tests/acceptance/features/bootstrap/**'
 
 ...
diff --git a/.drone.env b/.drone.env
index 3ab9012f5ac..28cb39cf224 100644
--- a/.drone.env
+++ b/.drone.env
@@ -1,7 +1,7 @@
 # The test runner source for API tests
-CORE_COMMITID=1b22de18244312206653907997b2804b5751e6cc
+CORE_COMMITID=7d3b29708162facd5ba0291cd8a934eca09de6a2
 CORE_BRANCH=master
 
 # The test runner source for UI tests
-WEB_COMMITID=76036fd83dbd3a787db8321114e88d81d04cf63f
+WEB_COMMITID=e50b5cad7cbb2e13e269896e0ffffd798e5bb656
 WEB_BRANCH=master
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 92af004cedd..1229784dd6e 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,94 +2,18 @@
 
 The following sections list the changes for unreleased.
 
-[unreleased]: https://github.com/owncloud/ocis/compare/v1.12.0...master
-
-## Summary
-
-* Bugfix - Redirect invalid links to oC Web: [#2493](https://github.com/owncloud/ocis/pull/2493)
-* Bugfix - Use proper url path decode on the username: [#2511](https://github.com/owncloud/ocis/pull/2511)
-* Bugfix - Remove notifications placeholder: [#2514](https://github.com/owncloud/ocis/pull/2514)
-* Enhancement - Add option to skip generation of demo users and groups: [#2495](https://github.com/owncloud/ocis/pull/2495)
-* Enhancement - Allow overriding the cookie based route by claim: [#2508](https://github.com/owncloud/ocis/pull/2508)
-* Enhancement - Redirect invalid links to oC Web: [#2493](https://github.com/owncloud/ocis/pull/2493)
-* Enhancement - TLS config options for ldap in reva: [#2492](https://github.com/owncloud/ocis/pull/2492)
-
-## Details
-
-* Bugfix - Redirect invalid links to oC Web: [#2493](https://github.com/owncloud/ocis/pull/2493)
-
-   Invalid links ending with a slash(eg. https://foo.bar/index.php/apps/pdfviewer/) have
-   not been redirected to ownCloud Web. Instead the former 404 not found status page was
-   displayed.
-
-   https://github.com/owncloud/ocis/pull/2493
-   https://github.com/owncloud/ocis/pull/2512
-
-* Bugfix - Use proper url path decode on the username: [#2511](https://github.com/owncloud/ocis/pull/2511)
-
-   We now properly decode the username when reading it from a url parameter
-
-   https://github.com/owncloud/ocis/pull/2511
-
-* Bugfix - Remove notifications placeholder: [#2514](https://github.com/owncloud/ocis/pull/2514)
-
-   Since Reva was communicating its notification capabilities incorrectly, oCIS relied on a
-   hardcoded string to overwrite them. This has been fixed in
-   [reva#1819](https://github.com/cs3org/reva/pull/1819) so we now removed the hardcoded
-   string and don't modify Reva's notification capabilities anymore in order to fix clients
-   having to poll a (non-existent) notifications endpoint.
-
-   https://github.com/owncloud/ocis/pull/2514
-
-* Enhancement - Add option to skip generation of demo users and groups: [#2495](https://github.com/owncloud/ocis/pull/2495)
-
-   We've added a new environment variable to decide whether we should generate the demo users and
-   groups or not. This environment variable is set to `true` by default, so the demo users and
-   groups will get generated by default as long as oCIS is in its "technical preview" stage.
-
-   In any case, there are still some users and groups automatically generated: for users: Reva
-   IOP, Kopano IDP, admin; for groups: sysusers and users.
-
-   https://github.com/owncloud/ocis/pull/2495
-
-* Enhancement - Allow overriding the cookie based route by claim: [#2508](https://github.com/owncloud/ocis/pull/2508)
-
-   When determining the routing policy we now let the claim override the cookie so that users are
-   routed to the correct backend after login.
-
-   https://github.com/owncloud/ocis/pull/2508
-
-* Enhancement - Redirect invalid links to oC Web: [#2493](https://github.com/owncloud/ocis/pull/2493)
-
-   Invalid links (eg. https://foo.bar/index.php/apps/pdfviewer) will be redirect to
-   ownCloud Web instead of displaying a blank page with a "not found" message.
-
-   https://github.com/owncloud/ocis/pull/2493
-
-* Enhancement - TLS config options for ldap in reva: [#2492](https://github.com/owncloud/ocis/pull/2492)
-
-   We added the new config options "ldap-cacert" and "ldap-insecure" to the auth-, users- and
-   groups-provider services to be able to do proper TLS configuration for the LDAP clients.
-   "ldap-cacert" is by default configured to add the bundled glauth LDAP servers certificate to
-   the trusted set for the LDAP clients. "ldap-insecure" is set to "false" by default and can be
-   used to disable certificate checks (only advisable for development and test enviroments).
-
-   https://github.com/owncloud/ocis/pull/2492
-# Changelog for [1.12.0] (2021-09-14)
-
-The following sections list the changes for 1.12.0.
-
-[1.12.0]: https://github.com/owncloud/ocis/compare/v1.11.0...v1.12.0
+[unreleased]: https://github.com/owncloud/ocis/compare/v1.11.0...master
 
 ## Summary
 
 * Bugfix - Remove non working proxy route and fix cs3 users example: [#2474](https://github.com/owncloud/ocis/pull/2474)
 * Bugfix - Set English as default language in the dropdown in the settings page: [#2465](https://github.com/owncloud/ocis/pull/2465)
 * Change - Remove OnlyOffice extension: [#2433](https://github.com/owncloud/ocis/pull/2433)
-* Change - Remove OnlyOffice extension: [#2433](https://github.com/owncloud/ocis/pull/2433)
 * Change - Update ownCloud Web to v4.2.0: [#2501](https://github.com/owncloud/ocis/pull/2501)
 * Enhancement - Add app provider and app provider registry: [#2204](https://github.com/owncloud/ocis/pull/2204)
 * Enhancement - Add the create space permission: [#2461](https://github.com/owncloud/ocis/pull/2461)
+* Enhancement - Allow overriding the cookie based route by claim: [#2508](https://github.com/owncloud/ocis/pull/2508)
+* Enhancement - Redirect invalid links to oC Web: [#2493](https://github.com/owncloud/ocis/pull/2493)
 * Enhancement - Add set space quota permission: [#2459](https://github.com/owncloud/ocis/pull/2459)
 * Enhancement - Create a Space using the Graph API: [#2471](https://github.com/owncloud/ocis/pull/2471)
 * Enhancement - Update go-chi/chi to version 5.0.3: [#2429](https://github.com/owncloud/ocis/pull/2429)
@@ -124,17 +48,6 @@ The following sections list the changes for 1.12.0.
 
    https://github.com/owncloud/ocis/pull/2433
 
-* Change - Remove OnlyOffice extension: [#2433](https://github.com/owncloud/ocis/pull/2433)
-
-   Tags: OnlyOffice
-
-   We've removed the OnlyOffice extension in oCIS. OnlyOffice has their own web extension for
-   OC10 backend now with [a dedicated
-   guide](https://owncloud.dev/clients/web/deployments/oc10-app/#onlyoffice). In
-   oCIS, we will follow up with a guide on how to start a WOPI server providing OnlyOffice soon.
-
-   https://github.com/owncloud/ocis/pull/2433
-
 * Change - Update ownCloud Web to v4.2.0: [#2501](https://github.com/owncloud/ocis/pull/2501)
 
    Tags: web
@@ -159,6 +72,20 @@ The following sections list the changes for 1.12.0.
 
    https://github.com/owncloud/ocis/pull/2461
 
+* Enhancement - Allow overriding the cookie based route by claim: [#2508](https://github.com/owncloud/ocis/pull/2508)
+
+   When determining the routing policy we now let the claim override the cookie so that users are
+   routed to the correct backend after login.
+
+   https://github.com/owncloud/ocis/pull/2508
+
+* Enhancement - Redirect invalid links to oC Web: [#2493](https://github.com/owncloud/ocis/pull/2493)
+
+   Invalid links (eg. https://foo.bar/index.php/apps/pdfviewer) will be redirect to
+   ownCloud Web instead of displaying a blank page with a "not found" message.
+
+   https://github.com/owncloud/ocis/pull/2493
+
 * Enhancement - Add set space quota permission: [#2459](https://github.com/owncloud/ocis/pull/2459)
 
    In preparation for the upcoming spaces features a `SetSpaceQuota` permission was added.
@@ -179,7 +106,7 @@ The following sections list the changes for 1.12.0.
 
 * Enhancement - Update go-chi/chi to version 5.0.3: [#2429](https://github.com/owncloud/ocis/pull/2429)
 
-   Updated go-chi/chi to the latest release
+   Updated go-chi/chi to the lastest release
 
    https://github.com/owncloud/ocis/pull/2429
 
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index c494373239a..45378abee9e 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -44,7 +44,7 @@ We also have a [Rocket Chat Server](https://talk.owncloud.com/channel/ocis) to a
 
 ### ownCloud is hosted on Github
 
-To effectively contribute to ownCloud Infinite Scale, you need a Github account. You can get that for free at [Github](https://github.com/join). You can find howtos on the internet, for example [here](https://www.wikihow.com/Create-an-Account-on-GitHub).
+To effectivly contribute to ownCloud Infinite Scale, you need a Github account. You can get that for free at [Github](https://github.com/join). You can find howtos on the internet, for example [here](https://www.wikihow.com/Create-an-Account-on-GitHub).
 
 For other ways of contributing, for example with translations, other systems require you to have an account as well, for example [Transifex](https://www.transifex.com).
 
diff --git a/Makefile b/Makefile
index 9ee1af24ed2..6ccbe5d48f5 100644
--- a/Makefile
+++ b/Makefile
@@ -32,7 +32,7 @@ OCIS_MODULES = \
 	web \
 	webdav
 
-ifneq (, $(shell which go 2> /dev/null)) # suppress `command not found warnings` for non go targets in CI
+ifneq (, $(shell which go 2> /dev/null)) # supress `command not found warnings` for non go targets in CI
 include .bingo/Variables.mk
 endif
 
diff --git a/accounts/Makefile b/accounts/Makefile
index 28265c2934d..c22dfa6f1cd 100644
--- a/accounts/Makefile
+++ b/accounts/Makefile
@@ -7,7 +7,7 @@ test-acceptance-webui:
 
 
 ############ tooling ############
-ifneq (, $(shell which go 2> /dev/null)) # suppress `command not found warnings` for non go targets in CI
+ifneq (, $(shell which go 2> /dev/null)) # supress `command not found warnings` for non go targets in CI
 include ../.bingo/Variables.mk
 endif
 
diff --git a/accounts/l10n/translations.json b/accounts/l10n/translations.json
index 51fd94c9c97..3de729bc639 100644
--- a/accounts/l10n/translations.json
+++ b/accounts/l10n/translations.json
@@ -1,1 +1,1 @@
-{"ar":{"Account is activated":"تم تفعيل الحساب","Account is blocked":"تم حظر الحساب","Accounts":"حسابات","Activate":"فعل","Activated":"مُفعّلة","Admin":"المسؤول","Block":"حظر","Cancel":"إلغاء","Clear selection":"اختيار واضحة","Confirm":"تأكيد","Create":"إنشاء","Create new account":"إنشاء حساب جديد","Creating":"إنشاء","Delete":"حذف","Display name":"اسم العرض","Email":"البريد الإلكتروني","Email cannot be empty":"لا يمكن للبريد الإلكتروني أن يكون فارغا","Failed to change role.":"فشل في تغيير الدور","Guest":"ضيف","Invalid email address":"عنوان بريد إلكتروني غير صالح","Invalid username":"اسم مستخدم غير صالح","Loading":"تحميل","msg":"ام اس جي","Password":"كلمة المرور","Password cannot be empty":"لا يمكن أن تكون كلمة المرور فارغة","Role":"الدور","Select all users":"تحديد كل المستخدمين","Select role":"تحديد الدور","User":"المستخدم","Username":"اسم المستخدم","Username cannot be empty":"لا يمكن أن يكون إسم المستخدم فارغا","You don't have permissions to manage accounts.":"ليس لديك صلاحيات لإدارة الحسابات"},"de":{"%{ amount } selected user":["%{ amount } ausgewählter Benutzer","%{ amount } ausgewählte Benutzer"],"Account is activated":"Konto ist aktiviert","Account is blocked":"Konto ist geblockt","Accounts":"Konten","Activate":"Aktivieren","Activated":"Aktiviert","Admin":"Administration","Block":"Blockieren","Cancel":"Abbrechen","Clear selection":"Auswahl aufheben","Confirm":"Bestätigen","Create":"Erstellen","Create new account":"Neues Konto erstellen","Creating":"Erstelle","Delete":"Löschen","Delete the selected account?":["Ausgewählten Account löschen?","Ausgewählte Accounts löschen?"],"Display name":"Anzeigename","Email":"E-Mail","Email cannot be empty":"E-Mail darf nicht leer sein","Failed to change role.":"Ändern der Rolle fehlgeschlagen.","Guest":"Gast","Invalid email address":"Ungültige E-Mail-Adresse","Invalid username":"Ungültiger Benutzername","Loading":"Lade","msg":"msg","Password":"Passwort","Password cannot be empty":"Das Passwort darf nicht leer sein","Role":"Rolle","Select %{ account }":" %{ account } auswählen","Select all users":"Alle Benutzer auswählen","Select role":"Rolle auswählen","User":"Benutzer","Username":"Benutzername","Username cannot be empty":"Benutzername darf nicht leer sein","You don't have permissions to manage accounts.":"Keine Berechtigungen um Konten zu verwalten"},"el":{"%{ amount } selected user":["%{ amount } επιλεγμένος χρήστης","%{ amount } επιλεγμένοι χρήστες"],"Account is activated":"Ο λογαριασμός είναι ενεργοποιημένος.","Account is blocked":"Ο λογαριασμός είναι αποκλεισμένος","Accounts":"Λογαριασμοί","Activate":"Ενεργοποίηση","Activated":"Ενεργοποιημένο","Admin":"Διαχειριστής","Block":"Αποκλεισμός","Cancel":"Aκύρωση","Clear selection":"Εκκαθάριση επιλογής","Confirm":"Επιβεβαίωση","Create":"Δημιουργία","Create new account":"Δημιουργία νέου λογαριασμού","Creating":"Γίνεται δημιουργία","Delete":"Διαγραφή","Delete the selected account?":["Διαγραφή του επιλεγμένου λογαριασμού;","Διαγραφή των επιλεγμένων λογαριασμών;"],"Display name":"Εμφανιζόμενο όνομα","Email":"Ηλεκτρονική αλληλογραφία","Email cannot be empty":"Η διεύθυνση ηλεκτρονικού ταχυδρομείου δεν μπορεί να είναι κενή","Failed to change role.":"Αποτυχία αλλαγής ρόλου.","Guest":"Επισκέπτης","Invalid email address":"Μη έγκυρη διεύθυνση ηλεκτρονικού ταχυδρομείου","Invalid username":"Μη έγκυρο όνομα χρήστη","Loading":"Γίνεται φόρτωση","msg":"μνμ","Password":"Συνθηματικό","Password cannot be empty":"Το συνθηματικό δεν πρέπει να είναι κενό","Role":"Ρόλος","Select %{ account }":"Επιλογή %{ account }","Select all users":"Επιλογή όλων των χρηστών","Select role":"Επιλογή ρόλου","User":"Χρήστης","Username":"Όνομα χρήστη","Username cannot be empty":"Το όνομα χρήστη δεν μπορεί να είναι κενό","You don't have permissions to manage accounts.":"Δεν έχετε δικαιώματα να διαχειριστείτε λογαριασμούς."},"es":{"%{ amount } selected user":["%{ amount } usuario seleccionado","%{ amount } usuarios seleccionados"],"Account is activated":"La cuenta está activada","Account is blocked":"La cuenta está bloqueada","Accounts":"Cuentas","Activate":"Activar","Activated":"Activada","Admin":"Administración","Block":"Bloquear","Cancel":"Cancelar","Clear selection":"Selección clara","Confirm":"Confirmar","Create":"Crear","Create new account":"Crear una nueva cuenta","Creating":"Creando","Delete":"Eliminar","Delete the selected account?":["¿Eliminar la cuenta seleccionada?","¿Eliminar las cuentas seleccionadas?"],"Display name":"Nombre para mostrar","Email":"Correo electrónico","Email cannot be empty":"El correo electrónico no puede estar vacío","Failed to change role.":"Error al cambiar de rol.","Guest":"Invitado","Invalid email address":"Dirección de correo no válida","Invalid username":"Nombre de usuario no válido","Loading":"Cargando","msg":"msg","Password":"Contraseña","Password cannot be empty":"La contraseña no puede estar vacía","Role":"Rol","Select %{ account }":"Seleccionar %{ account }","Select all users":"Seleccionar todos los usuarios","Select role":"Seleccionar rol","User":"Usuario","Username":"Nombre de usuario","Username cannot be empty":"El nombre de usuario no puede estar vacío","You don't have permissions to manage accounts.":"No tienes permisos para gestionar cuentas."},"fr":{"%{ amount } selected user":["%{ amount } utilisateur sélectionné","%{ amount } utilisateurs sélectionnés"],"Account is activated":"Le compte est activé","Account is blocked":"Le compte est verrouillé","Accounts":"Comptes","Activate":"Activer","Activated":"Activé","Admin":"Administration","Block":"Bloquer","Cancel":"Annuler","Clear selection":"Vider la sélection","Confirm":"Confirmer","Create":"Créer","Create new account":"Créer un compte","Delete":"Supprimer","Delete the selected account?":["Supprimer le compte sélectionné ?","Supprimer les comptes sélectionnés ?"],"Display name":"Nom affiché","Email":"Adresse courriel","Email cannot be empty":"L'email ne peut pas être vide.","Guest":"Invité","Invalid email address":"Adresse mail invalide","Invalid username":"Noms d'utilisateur non valide","Loading":"Chargement","Password":"Mot de passe","Password cannot be empty":"Le mot de passe ne peut être vide","Role":"Rôle ","Select %{ account }":"%{ account } sélectionné","Select all users":"Sélectionner tous les utilisateurs","Select role":"Sélectionnez un rôle","User":"Utilisateur","Username":"Nom d'utilisateur","Username cannot be empty":"Le nom d'utilisateur ne peut pas être vide"},"id":{"%{ amount } selected user":"%{ amount } pengguna yang dipilih","Account is activated":"Akun diaktifkan","Account is blocked":"Akun di blokir","Accounts":"Akun","Activate":"Aktifkan","Activated":"Diaktifkan","Admin":"Admin","Block":"Blokir","Cancel":"Batal","Clear selection":"Bersihkan seleksi","Confirm":"Memastikan","Create":"Buat","Create new account":"Buat akun baru","Creating":"Membuat","Delete":"Hapus","Delete the selected account?":"Hapus akun yang dipilih?","Display name":"Nama tampilan","Email":"Email","Email cannot be empty":"Email tidak boleh kosong","Failed to change role.":"Gagal untuk mengubah peran.","Invalid email address":"Alamat surel tidak benar","Invalid username":"Nama pengguna tidak valid","Loading":"Memuat","msg":"psn","Password":"Kata Sandi","Password cannot be empty":"Kata sandi tidak boleh kosong","Role":"Peran","Select %{ account }":"Pilih %{ account }","Select all users":"Pilih semua pengguna","Select role":"Pilih peran","User":"Pengguna","Username":"Nama pengguna","Username cannot be empty":"Nama pengguna tidak boleh kosong","You don't have permissions to manage accounts.":"Anda tidak mempunyai perizinan untuk mengelola akun."},"id_ID":{"%{ amount } selected user":"%{ amount } pengguna yang dipilih","Account is activated":"Akun diaktifkan","Account is blocked":"Akun di blokir","Accounts":"Akun","Activate":"Aktifkan","Activated":"Diaktifkan","Block":"Blokir","Cancel":"Batal","Clear selection":"Bersihkan seleksi","Confirm":"Memastikan","Create":"Buat","Create new account":"Buat akun baru","Creating":"Membuat","Delete":"Hapus","Delete the selected account?":"Hapus akun yang dipilih?","Display name":"Nama tampilan","Email":"Email","Email cannot be empty":"Email tidak boleh kosong","Failed to change role.":"Gagal untuk mengubah peran.","Invalid email address":"Alamat surel tidak benar","Invalid username":"Nama pengguna tidak valid","Loading":"Memuat","msg":"psn","Password":"Kata Sandi","Password cannot be empty":"Kata sandi tidak boleh kosong","Role":"Peran","Select %{ account }":"Pilih %{ account }","Select all users":"Pilih semua pengguna","Select role":"Pilih peran","Username":"Nama pengguna","Username cannot be empty":"Nama pengguna tidak boleh kosong","You don't have permissions to manage accounts.":"Anda tidak mempunyai perizinan untuk mengelola akun."},"pl":{"%{ amount } selected user":["%{ amount } wybrany użytkownik","%{ amount } wybranych użytkowników","%{ amount } wybranych użytkowników","%{ amount } wybranych użytkowników"],"Account is activated":"Konto jest zaktywowane","Account is blocked":"Konto jest zablokowane","Accounts":"Konta","Activate":"Aktywacja","Activated":"Aktywowane","Admin":"Administrator","Block":"Blokada","Cancel":"Anuluj","Clear selection":"Wyczyść zaznaczenie","Confirm":"Potwierdź","Create":"Utwórz","Create new account":"Utwórz nowe konto","Creating":"Tworzenie","Delete":"Usuń","Delete the selected account?":["Czy usunąć wybrane konto?","Czy usunąć wybrane konta?","Czy usunąć wybrane konta?","Czy usunąć wybrane konta?"],"Display name":"Wyświetlana nazwa","Email":"Email","Email cannot be empty":"Email nie może być pusty","Failed to change role.":"Niepowodzenie zmiany roli.","Guest":"Gość","Invalid email address":"Nieprawidłowy adres email","Invalid username":"Nieprawidłowa nazwa użytkownika","Loading":"Ładowanie","msg":"wiad","Password":"Hasło","Password cannot be empty":"Hasło nie może być puste","Role":"Funkcja","Select %{ account }":"Wybór %{ account }","Select all users":"Wybierz wszystkich użytkowników","Select role":"Wybierz rolę","User":"Użytkownik","Username":"Użytkownik","Username cannot be empty":"Nazwa użytkownika nie może być pusta","You don't have permissions to manage accounts.":"Nie masz uprawnień do zarządzania kontami."},"pt_BR":{"%{ amount } selected user":["%{ amount } usuário selecionado","%{ amount } usuários selecionados"],"Account is activated":"Conta está ativada ","Account is blocked":"A conta está bloqueada ","Accounts":"Contas","Activate":"Ativar","Activated":"Ativada","Admin":"Admin","Block":"Bloco","Cancel":"Cancelar","Clear selection":"Limpar seleção","Confirm":"Confirmar","Create":"Criar","Create new account":"Criar uma nova conta","Creating":"Criando","Delete":"Excluir","Delete the selected account?":["Excluir a conta selecionada?","Excluir as contas selecionadas? "],"Display name":"Nome de exibição","Email":"E-mail","Email cannot be empty":"Email não pode estar vazio ","Failed to change role.":"Falha ao alterar a função. ","Guest":"Convidado","Invalid email address":"Endereço de email inválido","Invalid username":"Nome de usuário Inválido","Loading":"Carregando","msg":"msg","Password":"Senha","Password cannot be empty":"A senha não pode estar vazia","Role":"Função","Select %{ account }":"Selecione %{ account }","Select all users":"Selecione todos os usuários ","Select role":"Seleciona função","User":"Usuário","Username":"Nome do Usuário","Username cannot be empty":"O nome de usuário não pode estar vazio ","You don't have permissions to manage accounts.":"Você não tem permissão para gerenciar contas. "},"ru":{"%{ amount } selected user":["%{ amount } выбранный пользователь","%{ amount } выбранных пользователя","%{ amount } выбранных пользователей","%{ amount } выбранных пользователей"],"Account is activated":"Учётная запись активирована","Account is blocked":"Учётная запись заблокирована","Accounts":"Учётные записи","Activate":"Активировать","Activated":"Активирован","Admin":"Администрирование","Block":"Заблокировать","Cancel":"Отмена","Clear selection":"Очистить выбор","Confirm":"Подтвердите","Create":"Создать","Create new account":"Создать новую учётную запись","Creating":"Создание","Delete":"Удалить","Delete the selected account?":["Удалить выбранную учётную запись?","Удалить выбранные учётные записи?","Удалить выбранные учётные записи?","Удалить выбранные учётные записи?"],"Display name":"Отображаемое имя","Email":"Почта","Email cannot be empty":"Поле email не может быть пустым","Failed to change role.":"Не удалось сменить роль.","Guest":"Гость","Invalid email address":"Недопустимый адрес почты","Invalid username":"Недопустимое имя пользователя","Loading":"Загрузка","msg":"сообщ","Password":"Пароль","Password cannot be empty":"Пароль не может быть пустым","Role":"Роль","Select %{ account }":"Выбрать %{ account }","Select all users":"Выбрать всех пользователей","Select role":"Выбрать роль","User":"Пользователь","Username":"Имя пользователя","Username cannot be empty":"Поле \"Имя пользователя\" не может быть пустым","You don't have permissions to manage accounts.":"У вас нет прав доступа для управления учётными записями."},"sq":{"%{ amount } selected user":["%{ amount } përdorues i përzgjedhur","%{ amount } përdorues të përzgjedhur"],"Account is activated":"Llogaria është aktivizuar","Account is blocked":"Llogaria është bllokuar","Accounts":"Llogari","Activate":"Aktivizoje","Activated":"U aktivizua","Admin":"Përgjegjës","Block":"Bllokoje","Cancel":"Anuloje","Clear selection":"Spastro përzgjedhjen","Confirm":"Ripohojeni","Create":"Krijoje","Create new account":"Krijoni llogari të re","Creating":"Po krijohet","Delete":"Fshije","Delete the selected account?":["Email-i s’mund të jetë i zbrazët","Të fshihen llogaritë e përzgjedhura?"],"Display name":"Emër në ekran","Email":"Email","Email cannot be empty":"Email-i s’mund të jetë i zbrazët","Failed to change role.":"S’u arrit të ndryshohet rol.","Guest":"Vizitor","Invalid email address":"Adresë email e pavlefshme","Invalid username":"Emër i pavlefshëm përdoruesi","Loading":"Po ngarkohet","msg":"msz","Password":"Fjalëkalim","Password cannot be empty":"Fjalëkalimi s’mund të jetë i zbrazët","Role":"Rol","Select %{ account }":"Përzgjidh %{ account }","Select all users":"Përzgjidhni krejt përdoruesit","Select role":"Përzgjidhni rol","User":"Përdorues","Username":"Emër përdoruesi","Username cannot be empty":"Emri i përdoruesit s’mund të jetë i zbrazët","You don't have permissions to manage accounts.":"S’keni leje të administroni llogari."},"th_TH":{"%{ amount } selected user":"เลือกแล้ว %{ amount } ผู้ใช้","Account is activated":"เปิดใช้งานบัญชีแล้ว","Account is blocked":"บัญชีถูกบล็อก","Accounts":"บัญชี","Activate":"เปิดใช้งาน","Activated":"เปิดใช้งานแล้ว","Admin":"ผู้ดูแล","Block":"บล็อก","Cancel":"ยกเลิก","Clear selection":"ล้างการเลือก","Confirm":"ยืนยัน","Create":"สร้าง","Create new account":"สร้างบัญชีใหม่","Creating":"กำลังสร้าง","Delete":"ลบ","Delete the selected account?":"ลบบัญชีที่เลือก?","Display name":"ชื่อที่แสดง","Email":"อีเมล","Email cannot be empty":"จำเป็นต้องกรอกอีเมล","Failed to change role.":"เปลี่ยนหน้าที่ไม่สำเร็จ","Guest":"ผู้มาเยือน","Invalid email address":"ที่อยู่อีเมลไม่ถูกต้อง","Invalid username":"ชื่อผู้ใช้ที่ไม่ถูกต้อง","Loading":"กำลังโหลด","msg":"msg","Password":"รหัสผ่าน","Password cannot be empty":"จำเป็นต้องกรอกรหัสผ่าน","Role":"กฎ","Select %{ account }":"เลือก %{ account }","Select all users":"เลือกผู้ใช้ทั้งหมด","Select role":"เลือกหน้าที่","User":"ชื่อผู้ใช้","Username":"ชื่อผู้ใช้","Username cannot be empty":"จำเป็นต้องกรอกชื่อผู้ใช้งาน","You don't have permissions to manage accounts.":"คุณไม่มีสิทธิ์จัดการบัญชี"}}
\ No newline at end of file
+{"ar":{"Account is activated":"تم تفعيل الحساب","Account is blocked":"تم حظر الحساب","Accounts":"حسابات","Activate":"فعل","Activated":"مُفعّلة","Admin":"المسؤول","Block":"حظر","Cancel":"إلغاء","Clear selection":"اختيار واضحة","Confirm":"تأكيد","Create":"إنشاء","Create new account":"إنشاء حساب جديد","Creating":"إنشاء","Delete":"حذف","Display name":"اسم العرض","Email":"البريد الإلكتروني","Email cannot be empty":"لا يمكن للبريد الإلكتروني أن يكون فارغا","Failed to change role.":"فشل في تغيير الدور","Guest":"ضيف","Invalid email address":"عنوان بريد إلكتروني غير صالح","Invalid username":"اسم مستخدم غير صالح","Loading":"تحميل","msg":"ام اس جي","Password":"كلمة المرور","Password cannot be empty":"لا يمكن أن تكون كلمة المرور فارغة","Role":"الدور","Select all users":"تحديد كل المستخدمين","Select role":"تحديد الدور","User":"المستخدم","Username":"اسم المستخدم","Username cannot be empty":"لا يمكن أن يكون إسم المستخدم فارغا","You don't have permissions to manage accounts.":"ليس لديك صلاحيات لإدارة الحسابات"},"de":{"%{ amount } selected user":["%{ amount } ausgewählter Benutzer","%{ amount } ausgewählte Benutzer"],"Account is activated":"Konto ist aktiviert","Account is blocked":"Konto ist geblockt","Accounts":"Konten","Activate":"Aktivieren","Activated":"Aktiviert","Admin":"Administration","Block":"Blockieren","Cancel":"Abbrechen","Clear selection":"Auswahl aufheben","Confirm":"Bestätigen","Create":"Erstellen","Create new account":"Neues Konto erstellen","Creating":"Erstelle","Delete":"Löschen","Delete the selected account?":["Ausgewählten Account löschen?","Ausgewählte Accounts löschen?"],"Display name":"Anzeigename","Email":"E-Mail","Email cannot be empty":"E-Mail darf nicht leer sein","Failed to change role.":"Ändern der Rolle fehlgeschlagen.","Guest":"Gast","Invalid email address":"Ungültige E-Mail-Adresse","Invalid username":"Ungültiger Benutzername","Loading":"Lade","msg":"msg","Password":"Passwort","Password cannot be empty":"Das Passwort darf nicht leer sein","Role":"Rolle","Select %{ account }":" %{ account } auswählen","Select all users":"Alle Benutzer auswählen","Select role":"Rolle auswählen","User":"Benutzer","Username":"Benutzername","Username cannot be empty":"Benutzername darf nicht leer sein","You don't have permissions to manage accounts.":"Keine Berechtigungen um Konten zu verwalten"},"es":{"%{ amount } selected user":["%{ amount } usuario seleccionado","%{ amount } usuarios seleccionados"],"Account is activated":"La cuenta está activada","Account is blocked":"La cuenta está bloqueada","Accounts":"Cuentas","Activate":"Activar","Activated":"Activada","Admin":"Administración","Block":"Bloquear","Cancel":"Cancelar","Clear selection":"Selección clara","Confirm":"Confirmar","Create":"Crear","Create new account":"Crear una nueva cuenta","Creating":"Creando","Delete":"Eliminar","Delete the selected account?":["¿Eliminar la cuenta seleccionada?","¿Eliminar las cuentas seleccionadas?"],"Display name":"Nombre para mostrar","Email":"Correo electrónico","Email cannot be empty":"El correo electrónico no puede estar vacío","Failed to change role.":"Error al cambiar de rol.","Guest":"Invitado","Invalid email address":"Dirección de correo no válida","Invalid username":"Nombre de usuario no válido","Loading":"Cargando","msg":"msg","Password":"Contraseña","Password cannot be empty":"La contraseña no puede estar vacía","Role":"Rol","Select %{ account }":"Seleccionar %{ account }","Select all users":"Seleccionar todos los usuarios","Select role":"Seleccionar rol","User":"Usuario","Username":"Nombre de usuario","Username cannot be empty":"El nombre de usuario no puede estar vacío","You don't have permissions to manage accounts.":"No tienes permisos para gestionar cuentas."},"fr":{"%{ amount } selected user":["%{ amount } utilisateur sélectionné","%{ amount } utilisateurs sélectionnés"],"Account is activated":"Le compte est activé","Account is blocked":"Le compte est verrouillé","Accounts":"Comptes","Activate":"Activer","Activated":"Activé","Admin":"Administration","Block":"Bloquer","Cancel":"Annuler","Clear selection":"Vider la sélection","Confirm":"Confirmer","Create":"Créer","Create new account":"Créer un compte","Delete":"Supprimer","Delete the selected account?":["Supprimer le compte sélectionné ?","Supprimer les comptes sélectionnés ?"],"Display name":"Nom affiché","Email":"Adresse courriel","Email cannot be empty":"L'email ne peut pas être vide.","Guest":"Invité","Invalid email address":"Adresse mail invalide","Invalid username":"Noms d'utilisateur non valide","Loading":"Chargement","Password":"Mot de passe","Password cannot be empty":"Le mot de passe ne peut être vide","Role":"Rôle ","Select %{ account }":"%{ account } sélectionné","Select all users":"Sélectionner tous les utilisateurs","Select role":"Sélectionnez un rôle","User":"Utilisateur","Username":"Nom d'utilisateur","Username cannot be empty":"Le nom d'utilisateur ne peut pas être vide"},"id":{"%{ amount } selected user":"%{ amount } pengguna yang dipilih","Account is activated":"Akun diaktifkan","Account is blocked":"Akun di blokir","Accounts":"Akun","Activate":"Aktifkan","Activated":"Diaktifkan","Admin":"Admin","Block":"Blokir","Cancel":"Batal","Clear selection":"Bersihkan seleksi","Confirm":"Memastikan","Create":"Buat","Create new account":"Buat akun baru","Creating":"Membuat","Delete":"Hapus","Delete the selected account?":"Hapus akun yang dipilih?","Display name":"Nama tampilan","Email":"Email","Email cannot be empty":"Email tidak boleh kosong","Failed to change role.":"Gagal untuk mengubah peran.","Invalid email address":"Alamat surel tidak benar","Invalid username":"Nama pengguna tidak valid","Loading":"Memuat","msg":"psn","Password":"Kata Sandi","Password cannot be empty":"Kata sandi tidak boleh kosong","Role":"Peran","Select %{ account }":"Pilih %{ account }","Select all users":"Pilih semua pengguna","Select role":"Pilih peran","User":"Pengguna","Username":"Nama pengguna","Username cannot be empty":"Nama pengguna tidak boleh kosong","You don't have permissions to manage accounts.":"Anda tidak mempunyai perizinan untuk mengelola akun."},"id_ID":{"%{ amount } selected user":"%{ amount } pengguna yang dipilih","Account is activated":"Akun diaktifkan","Account is blocked":"Akun di blokir","Accounts":"Akun","Activate":"Aktifkan","Activated":"Diaktifkan","Block":"Blokir","Cancel":"Batal","Clear selection":"Bersihkan seleksi","Confirm":"Memastikan","Create":"Buat","Create new account":"Buat akun baru","Creating":"Membuat","Delete":"Hapus","Delete the selected account?":"Hapus akun yang dipilih?","Display name":"Nama tampilan","Email":"Email","Email cannot be empty":"Email tidak boleh kosong","Failed to change role.":"Gagal untuk mengubah peran.","Invalid email address":"Alamat surel tidak benar","Invalid username":"Nama pengguna tidak valid","Loading":"Memuat","msg":"psn","Password":"Kata Sandi","Password cannot be empty":"Kata sandi tidak boleh kosong","Role":"Peran","Select %{ account }":"Pilih %{ account }","Select all users":"Pilih semua pengguna","Select role":"Pilih peran","Username":"Nama pengguna","Username cannot be empty":"Nama pengguna tidak boleh kosong","You don't have permissions to manage accounts.":"Anda tidak mempunyai perizinan untuk mengelola akun."},"pl":{"%{ amount } selected user":["%{ amount } wybrany użytkownik","%{ amount } wybranych użytkowników","%{ amount } wybranych użytkowników","%{ amount } wybranych użytkowników"],"Account is activated":"Konto jest zaktywowane","Account is blocked":"Konto jest zablokowane","Accounts":"Konta","Activate":"Aktywacja","Activated":"Aktywowane","Admin":"Administrator","Block":"Blokada","Cancel":"Anuluj","Clear selection":"Wyczyść zaznaczenie","Confirm":"Potwierdź","Create":"Utwórz","Create new account":"Utwórz nowe konto","Creating":"Tworzenie","Delete":"Usuń","Delete the selected account?":["Czy usunąć wybrane konto?","Czy usunąć wybrane konta?","Czy usunąć wybrane konta?","Czy usunąć wybrane konta?"],"Display name":"Wyświetlana nazwa","Email":"Email","Email cannot be empty":"Email nie może być pusty","Failed to change role.":"Niepowodzenie zmiany roli.","Guest":"Gość","Invalid email address":"Nieprawidłowy adres email","Invalid username":"Nieprawidłowa nazwa użytkownika","Loading":"Ładowanie","msg":"wiad","Password":"Hasło","Password cannot be empty":"Hasło nie może być puste","Role":"Funkcja","Select %{ account }":"Wybór %{ account }","Select all users":"Wybierz wszystkich użytkowników","Select role":"Wybierz rolę","User":"Użytkownik","Username":"Użytkownik","Username cannot be empty":"Nazwa użytkownika nie może być pusta","You don't have permissions to manage accounts.":"Nie masz uprawnień do zarządzania kontami."},"pt_BR":{"%{ amount } selected user":["%{ amount } usuário selecionado","%{ amount } usuários selecionados"],"Account is activated":"Conta está ativada ","Account is blocked":"A conta está bloqueada ","Accounts":"Contas","Activate":"Ativar","Activated":"Ativada","Admin":"Admin","Block":"Bloco","Cancel":"Cancelar","Clear selection":"Limpar seleção","Confirm":"Confirmar","Create":"Criar","Create new account":"Criar uma nova conta","Creating":"Criando","Delete":"Excluir","Delete the selected account?":["Excluir a conta selecionada?","Excluir as contas selecionadas? "],"Display name":"Nome de exibição","Email":"E-mail","Email cannot be empty":"Email não pode estar vazio ","Failed to change role.":"Falha ao alterar a função. ","Guest":"Convidado","Invalid email address":"Endereço de email inválido","Invalid username":"Nome de usuário Inválido","Loading":"Carregando","msg":"msg","Password":"Senha","Password cannot be empty":"A senha não pode estar vazia","Role":"Função","Select %{ account }":"Selecione %{ account }","Select all users":"Selecione todos os usuários ","Select role":"Seleciona função","User":"Usuário","Username":"Nome do Usuário","Username cannot be empty":"O nome de usuário não pode estar vazio ","You don't have permissions to manage accounts.":"Você não tem permissão para gerenciar contas. "},"ru":{"%{ amount } selected user":["%{ amount } выбранный пользователь","%{ amount } выбранных пользователя","%{ amount } выбранных пользователей","%{ amount } выбранных пользователей"],"Account is activated":"Учётная запись активирована","Account is blocked":"Учётная запись заблокирована","Accounts":"Учётные записи","Activate":"Активировать","Activated":"Активирован","Admin":"Администрирование","Block":"Заблокировать","Cancel":"Отмена","Clear selection":"Очистить выбор","Confirm":"Подтвердите","Create":"Создать","Create new account":"Создать новую учётную запись","Creating":"Создание","Delete":"Удалить","Delete the selected account?":["Удалить выбранную учётную запись?","Удалить выбранные учётные записи?","Удалить выбранные учётные записи?","Удалить выбранные учётные записи?"],"Display name":"Отображаемое имя","Email":"Почта","Email cannot be empty":"Поле email не может быть пустым","Failed to change role.":"Не удалось сменить роль.","Guest":"Гость","Invalid email address":"Недопустимый адрес почты","Invalid username":"Недопустимое имя пользователя","Loading":"Загрузка","msg":"сообщ","Password":"Пароль","Password cannot be empty":"Пароль не может быть пустым","Role":"Роль","Select %{ account }":"Выбрать %{ account }","Select all users":"Выбрать всех пользователей","Select role":"Выбрать роль","User":"Пользователь","Username":"Имя пользователя","Username cannot be empty":"Поле \"Имя пользователя\" не может быть пустым","You don't have permissions to manage accounts.":"У вас нет прав доступа для управления учётными записями."},"sq":{"%{ amount } selected user":["%{ amount } përdorues i përzgjedhur","%{ amount } përdorues të përzgjedhur"],"Account is activated":"Llogaria është aktivizuar","Account is blocked":"Llogaria është bllokuar","Accounts":"Llogari","Activate":"Aktivizoje","Activated":"U aktivizua","Admin":"Përgjegjës","Block":"Bllokoje","Cancel":"Anuloje","Clear selection":"Spastro përzgjedhjen","Confirm":"Ripohojeni","Create":"Krijoje","Create new account":"Krijoni llogari të re","Creating":"Po krijohet","Delete":"Fshije","Delete the selected account?":["Email-i s’mund të jetë i zbrazët","Të fshihen llogaritë e përzgjedhura?"],"Display name":"Emër në ekran","Email":"Email","Email cannot be empty":"Email-i s’mund të jetë i zbrazët","Failed to change role.":"S’u arrit të ndryshohet rol.","Guest":"Vizitor","Invalid email address":"Adresë email e pavlefshme","Invalid username":"Emër i pavlefshëm përdoruesi","Loading":"Po ngarkohet","msg":"msz","Password":"Fjalëkalim","Password cannot be empty":"Fjalëkalimi s’mund të jetë i zbrazët","Role":"Rol","Select %{ account }":"Përzgjidh %{ account }","Select all users":"Përzgjidhni krejt përdoruesit","Select role":"Përzgjidhni rol","User":"Përdorues","Username":"Emër përdoruesi","Username cannot be empty":"Emri i përdoruesit s’mund të jetë i zbrazët","You don't have permissions to manage accounts.":"S’keni leje të administroni llogari."},"th_TH":{"%{ amount } selected user":"เลือกแล้ว %{ amount } ผู้ใช้","Account is activated":"เปิดใช้งานบัญชีแล้ว","Account is blocked":"บัญชีถูกบล็อก","Accounts":"บัญชี","Activate":"เปิดใช้งาน","Activated":"เปิดใช้งานแล้ว","Admin":"ผู้ดูแล","Block":"บล็อก","Cancel":"ยกเลิก","Clear selection":"ล้างการเลือก","Confirm":"ยืนยัน","Create":"สร้าง","Create new account":"สร้างบัญชีใหม่","Creating":"กำลังสร้าง","Delete":"ลบ","Delete the selected account?":"ลบบัญชีที่เลือก?","Display name":"ชื่อที่แสดง","Email":"อีเมล","Email cannot be empty":"จำเป็นต้องกรอกอีเมล","Failed to change role.":"เปลี่ยนหน้าที่ไม่สำเร็จ","Guest":"ผู้มาเยือน","Invalid email address":"ที่อยู่อีเมลไม่ถูกต้อง","Invalid username":"ชื่อผู้ใช้ที่ไม่ถูกต้อง","Loading":"กำลังโหลด","msg":"msg","Password":"รหัสผ่าน","Password cannot be empty":"จำเป็นต้องกรอกรหัสผ่าน","Role":"กฎ","Select %{ account }":"เลือก %{ account }","Select all users":"เลือกผู้ใช้ทั้งหมด","Select role":"เลือกหน้าที่","User":"ชื่อผู้ใช้","Username":"ชื่อผู้ใช้","Username cannot be empty":"จำเป็นต้องกรอกชื่อผู้ใช้งาน","You don't have permissions to manage accounts.":"คุณไม่มีสิทธิ์จัดการบัญชี"}}
\ No newline at end of file
diff --git a/accounts/pkg/config/config.go b/accounts/pkg/config/config.go
index c63c289f7ea..8863919429b 100644
--- a/accounts/pkg/config/config.go
+++ b/accounts/pkg/config/config.go
@@ -42,10 +42,9 @@ type GRPC struct {
 
 // Server configures a server.
 type Server struct {
-	Version            string
-	Name               string
-	HashDifficulty     int
-	DemoUsersAndGroups bool
+	Version        string
+	Name           string
+	HashDifficulty int
 }
 
 // Asset defines the available asset configuration.
diff --git a/accounts/pkg/flagset/flagset.go b/accounts/pkg/flagset/flagset.go
index 4a7954f6626..be9cc3fc9af 100644
--- a/accounts/pkg/flagset/flagset.go
+++ b/accounts/pkg/flagset/flagset.go
@@ -134,13 +134,6 @@ func ServerWithConfig(cfg *config.Config) []cli.Flag {
 			EnvVars:     []string{"ACCOUNTS_HASH_DIFFICULTY"},
 			Destination: &cfg.Server.HashDifficulty,
 		},
-		&cli.BoolFlag{
-			Name:        "demo-users-and-groups",
-			Value:       flags.OverrideDefaultBool(cfg.Server.DemoUsersAndGroups, true),
-			Usage:       "Enable demo users and groups",
-			EnvVars:     []string{"ACCOUNTS_DEMO_USERS_AND_GROUPS"},
-			Destination: &cfg.Server.DemoUsersAndGroups,
-		},
 		&cli.StringFlag{
 			Name:        "asset-path",
 			Value:       flags.OverrideDefaultString(cfg.Asset.Path, ""),
diff --git a/accounts/pkg/proto/v0/accounts.mock.go b/accounts/pkg/proto/v0/accounts.mock.go
index 049e23b9025..0cd08bfe746 100644
--- a/accounts/pkg/proto/v0/accounts.mock.go
+++ b/accounts/pkg/proto/v0/accounts.mock.go
@@ -9,7 +9,7 @@ import (
 
 // MockAccountsService can be used to write tests
 /*
-To create a mock overwrite the functions of an instance like this:
+To creata a mock overwrite the functions of an instance like this:
 
 ```go
 func mockAccSvc(retErr bool) proto.AccountsService {
diff --git a/accounts/pkg/proto/v0/accounts.pb.go b/accounts/pkg/proto/v0/accounts.pb.go
index 2193abbbfdb..cc01e6c8119 100644
--- a/accounts/pkg/proto/v0/accounts.pb.go
+++ b/accounts/pkg/proto/v0/accounts.pb.go
@@ -457,7 +457,7 @@ func (x *DeleteAccountRequest) GetId() string {
 	return ""
 }
 
-// Account follows the properties of the ms graph api user resource.
+// Account follows the properties of the ms graph api user resuorce.
 // See https://docs.microsoft.com/en-us/graph/api/resources/user?view=graph-rest-1.0#properties
 type Account struct {
 	state         protoimpl.MessageState
diff --git a/accounts/pkg/proto/v0/accounts.proto b/accounts/pkg/proto/v0/accounts.proto
index 3a52b5648ef..b7e8f4e4e2c 100644
--- a/accounts/pkg/proto/v0/accounts.proto
+++ b/accounts/pkg/proto/v0/accounts.proto
@@ -247,7 +247,7 @@ message DeleteAccountRequest {
     string id = 1;
 }
 
-// Account follows the properties of the ms graph api user resource.
+// Account follows the properties of the ms graph api user resuorce.
 // See https://docs.microsoft.com/en-us/graph/api/resources/user?view=graph-rest-1.0#properties
 message Account {
 
@@ -383,7 +383,7 @@ message Account {
     repeated OnPremisesProvisioningError on_premises_provisioning_errors = 29;
 
     // TODO do we need to sync uidnumber and gidnumber from the external ldap? we may assign different numbers so eos has a non colliding namespace.
-    // we can sync them to the (uid|gid)_number fields but what if they changed in the external ldap and now collide?
+    // we can sync them to the (uid|gid)_number fileds but what if they changed in the external ldap and now collide?
     // move those properties to a posixaccount message so we can exchange that part with an external (readonly or writeable) ldap server?
 
     // For an external user invited to the tenant using the invitation API, this property represents the invited user's invitation status.
diff --git a/accounts/pkg/proto/v0/accounts.swagger.json b/accounts/pkg/proto/v0/accounts.swagger.json
index 44305dfda29..ec18f706ce3 100644
--- a/accounts/pkg/proto/v0/accounts.swagger.json
+++ b/accounts/pkg/proto/v0/accounts.swagger.json
@@ -689,7 +689,7 @@
           "description": "Any refresh tokens or sessions tokens (session cookies) issued before this time are invalid, and applications will get\nan error when using an invalid refresh or sessions token to acquire a delegated access token (to access APIs such as Microsoft Graph).\nIf this happens, the application will need to acquire a new refresh token by making a request to the authorize endpoint.\nRead-only. Use revokeSignInSessions to reset."
         }
       },
-      "title": "Account follows the properties of the ms graph api user resource.\nSee https://docs.microsoft.com/en-us/graph/api/resources/user?view=graph-rest-1.0#properties"
+      "title": "Account follows the properties of the ms graph api user resuorce.\nSee https://docs.microsoft.com/en-us/graph/api/resources/user?view=graph-rest-1.0#properties"
     },
     "v0AddMemberRequest": {
       "type": "object",
diff --git a/accounts/pkg/service/v0/accounts.go b/accounts/pkg/service/v0/accounts.go
index d158303284b..53b3f127864 100644
--- a/accounts/pkg/service/v0/accounts.go
+++ b/accounts/pkg/service/v0/accounts.go
@@ -625,7 +625,7 @@ func (s Service) UpdateAccount(ctx context.Context, in *proto.UpdateAccountReque
 	return
 }
 
-// whitelist of all paths/fields which can be updated by users themselves
+// whitelist of all paths/fields which can be updated by users themself
 var selfUpdatableAccountPaths = map[string]struct{}{
 	"DisplayName":              {},
 	"Description":              {},
@@ -741,7 +741,7 @@ func validateAccountEmail(serviceID string, a *proto.Account) error {
 	return nil
 }
 
-// We want to allow email addresses as usernames so they show up when using them in ACLs on storages that allow integration with our glauth LDAP service
+// We want to allow email addresses as usernames so they show up when using them in ACLs on storages that allow intergration with our glauth LDAP service
 // so we are adding a few restrictions from https://stackoverflow.com/questions/6949667/what-are-the-real-rules-for-linux-usernames-on-centos-6-and-rhel-6
 // names should not start with numbers
 var usernameRegex = regexp.MustCompile("^[a-zA-Z_][a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]*(@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*)*$")
diff --git a/accounts/pkg/service/v0/groups.go b/accounts/pkg/service/v0/groups.go
index 98f87212fcb..42987a8d9b8 100644
--- a/accounts/pkg/service/v0/groups.go
+++ b/accounts/pkg/service/v0/groups.go
@@ -270,7 +270,7 @@ func (s Service) AddMember(c context.Context, in *proto.AddMemberRequest, out *p
 			break
 		}
 	}
-	// only store the reference to prevent recursion when marshaling json
+	// only store the reference to prevent recurision when marshaling json
 	gref := &proto.Group{
 		Id: g.Id,
 	}
diff --git a/accounts/pkg/service/v0/service.go b/accounts/pkg/service/v0/service.go
index ff6059f143e..dae86a5d254 100644
--- a/accounts/pkg/service/v0/service.go
+++ b/accounts/pkg/service/v0/service.go
@@ -73,11 +73,11 @@ func New(opts ...Option) (s *Service, err error) {
 		return nil, err
 	}
 
-	if err = s.createDefaultAccounts(cfg.Server.DemoUsersAndGroups); err != nil {
+	if err = s.createDefaultAccounts(); err != nil {
 		return nil, err
 	}
 
-	if err = s.createDefaultGroups(cfg.Server.DemoUsersAndGroups); err != nil {
+	if err = s.createDefaultGroups(); err != nil {
 		return nil, err
 	}
 	return
@@ -152,7 +152,7 @@ func configFromSvc(cfg *config.Config) (*idxcfg.Config, error) {
 	return c, nil
 }
 
-func (s Service) createDefaultAccounts(withDemoAccounts bool) (err error) {
+func (s Service) createDefaultAccounts() (err error) {
 	accounts := []proto.Account{
 		{
 			Id:                       "4c510ada-c86b-4815-8820-42cdf82c3d51",
@@ -278,19 +278,8 @@ func (s Service) createDefaultAccounts(withDemoAccounts bool) (err error) {
 			},
 		},
 	}
-
-	mustHaveAccounts := map[string]bool{
-		"bc596f3c-c955-4328-80a0-60d018b4ad57": true, // Reva IOP
-		"820ba2a1-3f54-4538-80a4-2d73007e30bf": true, // Kopano IDP
-		"ddc2004c-0977-11eb-9d3f-a793888cd0f8": true, // admin
-	}
-
 	// this only deals with the metadata service.
 	for i := range accounts {
-		if !withDemoAccounts && !mustHaveAccounts[accounts[i].Id] {
-			continue
-		}
-
 		a := &proto.Account{}
 		err := s.repo.LoadAccount(context.Background(), accounts[i].Id, a)
 		if !storage.IsNotFoundErr(err) {
@@ -334,7 +323,7 @@ func (s Service) createDefaultAccounts(withDemoAccounts bool) (err error) {
 	return nil
 }
 
-func (s Service) createDefaultGroups(withDemoGroups bool) (err error) {
+func (s Service) createDefaultGroups() (err error) {
 	groups := []proto.Group{
 		{Id: "34f38767-c937-4eb6-b847-1c175829a2a0", GidNumber: 15000, OnPremisesSamAccountName: "sysusers", DisplayName: "Technical users", Description: "A group for technical users. They should not show up in sharing dialogs.", Members: []*proto.Account{
 			{Id: "820ba2a1-3f54-4538-80a4-2d73007e30bf"}, // idp
@@ -369,17 +358,7 @@ func (s Service) createDefaultGroups(withDemoGroups bool) (err error) {
 			{Id: "932b4540-8d16-481e-8ef4-588e4b6b151c"}, // feynman
 		}},
 	}
-
-	mustHaveGroups := map[string]bool{
-		"34f38767-c937-4eb6-b847-1c175829a2a0": true, // sysusers
-		"509a9dcd-bb37-4f4f-a01a-19dca27d9cfa": true, // users
-	}
-
 	for i := range groups {
-		if !withDemoGroups && !mustHaveGroups[groups[i].Id] {
-			continue
-		}
-
 		g := &proto.Group{}
 		err := s.repo.LoadGroup(context.Background(), groups[i].Id, g)
 		if !storage.IsNotFoundErr(err) {
diff --git a/accounts/templates/CONFIGURATION.tmpl b/accounts/templates/CONFIGURATION.tmpl
index c180d7a56f7..e052ef5dfd3 100644
--- a/accounts/templates/CONFIGURATION.tmpl
+++ b/accounts/templates/CONFIGURATION.tmpl
@@ -45,9 +45,9 @@ If you prefer to configure the service with environment variables you can see th
 
 If multiple variables are listed for one option, they are in order of precedence. This means the leftmost variable will always win if given.
 
-### Command-line flags
+### Commandline flags
 
-If you prefer to configure the service with command-line flags you can see the available variables below. Command line flags are only working when calling the subcommand directly.
+If you prefer to configure the service with commandline flags you can see the available variables below. Command line flags are only working when calling the subcommand directly.
 
 {{ $options := .Options -}}
 {{ range $com := .Commands }}{{ with (list $options $com) -}}
diff --git a/accounts/ui/helpers/utils.js b/accounts/ui/helpers/utils.js
index 36ec1d0ac29..2fceea84e4c 100644
--- a/accounts/ui/helpers/utils.js
+++ b/accounts/ui/helpers/utils.js
@@ -1,5 +1,5 @@
 /**
- * Asserts whether the given object is empty
+ * Asserts wheter the given object is empty
  * @param {Object} obj Object to be checked
  * @returns {Boolean}
  */
diff --git a/changelog/1.12.0_2021-09-14/remove-onlyoffice-extension b/changelog/1.12.0_2021-09-14/remove-onlyoffice-extension
deleted file mode 100644
index 6ba9b678ef8..00000000000
--- a/changelog/1.12.0_2021-09-14/remove-onlyoffice-extension
+++ /dev/null
@@ -1,9 +0,0 @@
-Change: Remove OnlyOffice extension
-
-Tags: OnlyOffice
-
-We've removed the OnlyOffice extension in oCIS. 
-OnlyOffice has their own web extension for OC10 backend now with [a dedicated guide](https://owncloud.dev/clients/web/deployments/oc10-app/#onlyoffice).
-In oCIS, we will follow up with a guide on how to start a WOPI server providing OnlyOffice soon.
-
-https://github.com/owncloud/ocis/pull/2433
diff --git a/changelog/1.12.0_2021-09-14/app-provider.md b/changelog/unreleased/app-provider.md
similarity index 100%
rename from changelog/1.12.0_2021-09-14/app-provider.md
rename to changelog/unreleased/app-provider.md
diff --git a/changelog/1.12.0_2021-09-14/create-space-permission.md b/changelog/unreleased/create-space-permission.md
similarity index 100%
rename from changelog/1.12.0_2021-09-14/create-space-permission.md
rename to changelog/unreleased/create-space-permission.md
diff --git a/changelog/unreleased/expose-reva-archiver.md b/changelog/unreleased/expose-reva-archiver.md
new file mode 100644
index 00000000000..0beb0bdf2a9
--- /dev/null
+++ b/changelog/unreleased/expose-reva-archiver.md
@@ -0,0 +1,5 @@
+Enhancement: Expose the reva archiver in OCIS
+
+The reva archiver can now be accessed through the storage frontend service
+
+https://github.com/owncloud/ocis/pull/2509
diff --git a/changelog/unreleased/fix-redirect-invalid-links-to-oC-web.md b/changelog/unreleased/fix-redirect-invalid-links-to-oC-web.md
deleted file mode 100644
index 02e498ccc36..00000000000
--- a/changelog/unreleased/fix-redirect-invalid-links-to-oC-web.md
+++ /dev/null
@@ -1,6 +0,0 @@
-Bugfix: redirect invalid links to oC Web
-
-Invalid links ending with a slash(eg. https://foo.bar/index.php/apps/pdfviewer/) have not been redirected to ownCloud Web. Instead the former 404 not found status page was displayed.
-
-https://github.com/owncloud/ocis/pull/2493
-https://github.com/owncloud/ocis/pull/2512
diff --git a/changelog/unreleased/fix-username-encoding.md b/changelog/unreleased/fix-username-encoding.md
deleted file mode 100644
index 4bda8432765..00000000000
--- a/changelog/unreleased/fix-username-encoding.md
+++ /dev/null
@@ -1,5 +0,0 @@
-Bugfix: use proper url path decode on the username
-
-We now properly decode the username when reading it from a url parameter
-
-https://github.com/owncloud/ocis/pull/2511
diff --git a/changelog/unreleased/optional-skip-demo-users-creation.md b/changelog/unreleased/optional-skip-demo-users-creation.md
deleted file mode 100644
index ce3a68034b9..00000000000
--- a/changelog/unreleased/optional-skip-demo-users-creation.md
+++ /dev/null
@@ -1,8 +0,0 @@
-Enhancement: Add option to skip generation of demo users and groups
-
-We've added a new environment variable to decide whether we should generate the demo users and groups or not. 
-This environment variable is set to `true` by default, so the demo users and groups will get generated by default as long as oCIS is in its "technical preview" stage.
-
-In any case, there are still some users and groups automatically generated: for users: Reva IOP, Kopano IDP, admin; for groups: sysusers and users.
-
-https://github.com/owncloud/ocis/pull/2495
diff --git a/changelog/unreleased/remove-notifications-placeholder.md b/changelog/unreleased/remove-notifications-placeholder.md
deleted file mode 100644
index 6da325a58ea..00000000000
--- a/changelog/unreleased/remove-notifications-placeholder.md
+++ /dev/null
@@ -1,7 +0,0 @@
-Bugfix: Remove notifications placeholder
-
-Since Reva was communicating its notification capabilities incorrectly, oCIS relied on a hardcoded string to overwrite them.
-This has been fixed in [reva#1819](https://github.com/cs3org/reva/pull/1819) so we now removed the hardcoded string 
-and don't modify Reva's notification capabilities anymore in order to fix clients having to poll a (non-existent) notifications endpoint.
-
-https://github.com/owncloud/ocis/pull/2514
diff --git a/changelog/1.12.0_2021-09-14/remove-onlyoffice-extension.md b/changelog/unreleased/remove-onlyoffice-extension.md
similarity index 100%
rename from changelog/1.12.0_2021-09-14/remove-onlyoffice-extension.md
rename to changelog/unreleased/remove-onlyoffice-extension.md
diff --git a/changelog/1.12.0_2021-09-14/remove-proxy-route-fix-cs3-example.md b/changelog/unreleased/remove-proxy-route-fix-cs3-example.md
similarity index 100%
rename from changelog/1.12.0_2021-09-14/remove-proxy-route-fix-cs3-example.md
rename to changelog/unreleased/remove-proxy-route-fix-cs3-example.md
diff --git a/changelog/unreleased/reva-ldap-tls.md b/changelog/unreleased/reva-ldap-tls.md
deleted file mode 100644
index 8cc1846bbe5..00000000000
--- a/changelog/unreleased/reva-ldap-tls.md
+++ /dev/null
@@ -1,10 +0,0 @@
-Enhancement: TLS config options for ldap in reva
-
-We added the new config options "ldap-cacert" and "ldap-insecure" to the auth-,
-users- and groups-provider services to be able to do proper TLS configuration
-for the LDAP clients. "ldap-cacert" is by default configured to add the bundled
-glauth LDAP servers certificate to the trusted set for the LDAP clients.
-"ldap-insecure" is set to "false" by default and can be used to disable
-certificate checks (only advisable for development and test enviroments).
-
-https://github.com/owncloud/ocis/pull/2492
diff --git a/changelog/1.12.0_2021-09-14/set-english-default-dropdown.md b/changelog/unreleased/set-english-default-dropdown.md
similarity index 100%
rename from changelog/1.12.0_2021-09-14/set-english-default-dropdown.md
rename to changelog/unreleased/set-english-default-dropdown.md
diff --git a/changelog/1.12.0_2021-09-14/set-quota-permission.md b/changelog/unreleased/set-quota-permission.md
similarity index 100%
rename from changelog/1.12.0_2021-09-14/set-quota-permission.md
rename to changelog/unreleased/set-quota-permission.md
diff --git a/changelog/1.12.0_2021-09-14/spaces-post.md b/changelog/unreleased/spaces-post.md
similarity index 100%
rename from changelog/1.12.0_2021-09-14/spaces-post.md
rename to changelog/unreleased/spaces-post.md
diff --git a/changelog/1.12.0_2021-09-14/update-chi-v5.md b/changelog/unreleased/update-chi-v5.md
similarity index 68%
rename from changelog/1.12.0_2021-09-14/update-chi-v5.md
rename to changelog/unreleased/update-chi-v5.md
index 0d4fd5714ea..90bcd301c9b 100644
--- a/changelog/1.12.0_2021-09-14/update-chi-v5.md
+++ b/changelog/unreleased/update-chi-v5.md
@@ -1,5 +1,5 @@
 Enhancement: Update go-chi/chi to version 5.0.3
 
-Updated go-chi/chi to the latest release
+Updated go-chi/chi to the lastest release
 
 https://github.com/owncloud/ocis/pull/2429
diff --git a/changelog/1.12.0_2021-09-14/update-go-micro.md b/changelog/unreleased/update-go-micro.md
similarity index 100%
rename from changelog/1.12.0_2021-09-14/update-go-micro.md
rename to changelog/unreleased/update-go-micro.md
diff --git a/changelog/1.12.0_2021-09-14/update-reva-to-1.13.0.md b/changelog/unreleased/update-reva-to-1.13.0.md
similarity index 100%
rename from changelog/1.12.0_2021-09-14/update-reva-to-1.13.0.md
rename to changelog/unreleased/update-reva-to-1.13.0.md
diff --git a/changelog/1.12.0_2021-09-14/update-web-4.2.0.md b/changelog/unreleased/update-web-4.2.0.md
similarity index 100%
rename from changelog/1.12.0_2021-09-14/update-web-4.2.0.md
rename to changelog/unreleased/update-web-4.2.0.md
diff --git a/deployments/examples/cs3_users_ocis/docker-compose.yml b/deployments/examples/cs3_users_ocis/docker-compose.yml
index 9f6e8a3fe80..d2a80a77cdd 100644
--- a/deployments/examples/cs3_users_ocis/docker-compose.yml
+++ b/deployments/examples/cs3_users_ocis/docker-compose.yml
@@ -14,7 +14,7 @@ services:
       - "--certificatesResolvers.http.acme.email=${TRAEFIK_ACME_MAIL:-example@example.org}"
       - "--certificatesResolvers.http.acme.storage=/certs/acme.json"
       - "--certificatesResolvers.http.acme.httpChallenge.entryPoint=http"
-      # enable dashboard
+      # enable dasbhoard
       - "--api.dashboard=true"
       # define entrypoints
       - "--entryPoints.http.address=:80"
diff --git a/deployments/examples/ocis_hello/docker-compose.yml b/deployments/examples/ocis_hello/docker-compose.yml
index 6f36e848f87..9cbd68680dd 100644
--- a/deployments/examples/ocis_hello/docker-compose.yml
+++ b/deployments/examples/ocis_hello/docker-compose.yml
@@ -14,7 +14,7 @@ services:
       - "--certificatesResolvers.http.acme.email=${TRAEFIK_ACME_MAIL:-example@example.org}"
       - "--certificatesResolvers.http.acme.storage=/certs/acme.json"
       - "--certificatesResolvers.http.acme.httpChallenge.entryPoint=http"
-      # enable dashboard
+      # enable dasbhoard
       - "--api.dashboard=true"
       # define entrypoints
       - "--entryPoints.http.address=:80"
diff --git a/deployments/examples/ocis_keycloak/.env b/deployments/examples/ocis_keycloak/.env
index 3624398c561..b5c1bb02a5e 100644
--- a/deployments/examples/ocis_keycloak/.env
+++ b/deployments/examples/ocis_keycloak/.env
@@ -29,7 +29,7 @@ OCIS_JWT_SECRET=
 OCIS_TRANSFER_SECRET=
 
 ### Keycloak ###
-# Domain of Keycloak, where you can find the management and authentication frontend. Defaults to "keycloak.owncloud.test"
+# Domain of Keycloak, where you can find the managment and authentication frontend. Defaults to "keycloak.owncloud.test"
 KEYCLOAK_DOMAIN=
 # Realm which to be used with oCIS. Defaults to "oCIS"
 KEYCLOAK_REALM=
diff --git a/deployments/examples/ocis_keycloak/config/keycloak/ocis-realm.dist.json b/deployments/examples/ocis_keycloak/config/keycloak/ocis-realm.dist.json
index 6c82cf897f8..afd7c5ecf6e 100644
--- a/deployments/examples/ocis_keycloak/config/keycloak/ocis-realm.dist.json
+++ b/deployments/examples/ocis_keycloak/config/keycloak/ocis-realm.dist.json
@@ -1451,13 +1451,13 @@
       "requirement" : "ALTERNATIVE",
       "priority" : 10,
       "userSetupAllowed" : false,
-      "authenticatorFlow" : false
+      "autheticatorFlow" : false
     }, {
       "requirement" : "ALTERNATIVE",
       "priority" : 20,
       "flowAlias" : "Verify Existing Account by Re-authentication",
       "userSetupAllowed" : false,
-      "authenticatorFlow" : true
+      "autheticatorFlow" : true
     } ]
   }, {
     "id" : "ad3efe78-b66b-4f53-afc1-082022a83ea5",
@@ -1471,19 +1471,19 @@
       "requirement" : "REQUIRED",
       "priority" : 10,
       "userSetupAllowed" : false,
-      "authenticatorFlow" : false
+      "autheticatorFlow" : false
     }, {
       "authenticator" : "basic-auth-otp",
       "requirement" : "DISABLED",
       "priority" : 20,
       "userSetupAllowed" : false,
-      "authenticatorFlow" : false
+      "autheticatorFlow" : false
     }, {
       "authenticator" : "auth-spnego",
       "requirement" : "DISABLED",
       "priority" : 30,
       "userSetupAllowed" : false,
-      "authenticatorFlow" : false
+      "autheticatorFlow" : false
     } ]
   }, {
     "id" : "4efb4624-94a8-4eb6-b9cd-9eae0e355bc5",
@@ -1497,13 +1497,13 @@
       "requirement" : "REQUIRED",
       "priority" : 10,
       "userSetupAllowed" : false,
-      "authenticatorFlow" : false
+      "autheticatorFlow" : false
     }, {
       "authenticator" : "auth-otp-form",
       "requirement" : "REQUIRED",
       "priority" : 20,
       "userSetupAllowed" : false,
-      "authenticatorFlow" : false
+      "autheticatorFlow" : false
     } ]
   }, {
     "id" : "af0d79b5-adc0-4ef7-a8c2-c149f4cea9ec",
@@ -1517,13 +1517,13 @@
       "requirement" : "REQUIRED",
       "priority" : 10,
       "userSetupAllowed" : false,
-      "authenticatorFlow" : false
+      "autheticatorFlow" : false
     }, {
       "authenticator" : "direct-grant-validate-otp",
       "requirement" : "REQUIRED",
       "priority" : 20,
       "userSetupAllowed" : false,
-      "authenticatorFlow" : false
+      "autheticatorFlow" : false
     } ]
   }, {
     "id" : "e0b5c8fb-cc71-4653-9e01-92e4731bf11c",
@@ -1537,13 +1537,13 @@
       "requirement" : "REQUIRED",
       "priority" : 10,
       "userSetupAllowed" : false,
-      "authenticatorFlow" : false
+      "autheticatorFlow" : false
     }, {
       "authenticator" : "auth-otp-form",
       "requirement" : "REQUIRED",
       "priority" : 20,
       "userSetupAllowed" : false,
-      "authenticatorFlow" : false
+      "autheticatorFlow" : false
     } ]
   }, {
     "id" : "e3705c4a-d92f-4f22-9693-a5232fe31f69",
@@ -1557,13 +1557,13 @@
       "requirement" : "REQUIRED",
       "priority" : 10,
       "userSetupAllowed" : false,
-      "authenticatorFlow" : false
+      "autheticatorFlow" : false
     }, {
       "requirement" : "REQUIRED",
       "priority" : 20,
       "flowAlias" : "Account verification options",
       "userSetupAllowed" : false,
-      "authenticatorFlow" : true
+      "autheticatorFlow" : true
     } ]
   }, {
     "id" : "794618ff-52f6-4fad-a5c6-4e8fab00dd17",
@@ -1577,13 +1577,13 @@
       "requirement" : "REQUIRED",
       "priority" : 10,
       "userSetupAllowed" : false,
-      "authenticatorFlow" : false
+      "autheticatorFlow" : false
     }, {
       "authenticator" : "reset-otp",
       "requirement" : "REQUIRED",
       "priority" : 20,
       "userSetupAllowed" : false,
-      "authenticatorFlow" : false
+      "autheticatorFlow" : false
     } ]
   }, {
     "id" : "5ff78050-25cd-4895-8fef-7ec3631239c9",
@@ -1598,13 +1598,13 @@
       "requirement" : "ALTERNATIVE",
       "priority" : 10,
       "userSetupAllowed" : false,
-      "authenticatorFlow" : false
+      "autheticatorFlow" : false
     }, {
       "requirement" : "ALTERNATIVE",
       "priority" : 20,
       "flowAlias" : "Handle Existing Account",
       "userSetupAllowed" : false,
-      "authenticatorFlow" : true
+      "autheticatorFlow" : true
     } ]
   }, {
     "id" : "5ddaf74c-25b8-4cc1-98fd-325219811525",
@@ -1618,13 +1618,13 @@
       "requirement" : "REQUIRED",
       "priority" : 10,
       "userSetupAllowed" : false,
-      "authenticatorFlow" : false
+      "autheticatorFlow" : false
     }, {
       "requirement" : "CONDITIONAL",
       "priority" : 20,
       "flowAlias" : "First broker login - Conditional OTP",
       "userSetupAllowed" : false,
-      "authenticatorFlow" : true
+      "autheticatorFlow" : true
     } ]
   }, {
     "id" : "6b77b935-9cb8-4ae8-b23e-4fe8f4c1f93b",
@@ -1638,25 +1638,25 @@
       "requirement" : "ALTERNATIVE",
       "priority" : 10,
       "userSetupAllowed" : false,
-      "authenticatorFlow" : false
+      "autheticatorFlow" : false
     }, {
       "authenticator" : "auth-spnego",
       "requirement" : "DISABLED",
       "priority" : 20,
       "userSetupAllowed" : false,
-      "authenticatorFlow" : false
+      "autheticatorFlow" : false
     }, {
       "authenticator" : "identity-provider-redirector",
       "requirement" : "ALTERNATIVE",
       "priority" : 25,
       "userSetupAllowed" : false,
-      "authenticatorFlow" : false
+      "autheticatorFlow" : false
     }, {
       "requirement" : "ALTERNATIVE",
       "priority" : 30,
       "flowAlias" : "forms",
       "userSetupAllowed" : false,
-      "authenticatorFlow" : true
+      "autheticatorFlow" : true
     } ]
   }, {
     "id" : "9dfc0dc9-da89-48f1-95ae-dd3dc5dcb60b",
@@ -1670,25 +1670,25 @@
       "requirement" : "ALTERNATIVE",
       "priority" : 10,
       "userSetupAllowed" : false,
-      "authenticatorFlow" : false
+      "autheticatorFlow" : false
     }, {
       "authenticator" : "client-jwt",
       "requirement" : "ALTERNATIVE",
       "priority" : 20,
       "userSetupAllowed" : false,
-      "authenticatorFlow" : false
+      "autheticatorFlow" : false
     }, {
       "authenticator" : "client-secret-jwt",
       "requirement" : "ALTERNATIVE",
       "priority" : 30,
       "userSetupAllowed" : false,
-      "authenticatorFlow" : false
+      "autheticatorFlow" : false
     }, {
       "authenticator" : "client-x509",
       "requirement" : "ALTERNATIVE",
       "priority" : 40,
       "userSetupAllowed" : false,
-      "authenticatorFlow" : false
+      "autheticatorFlow" : false
     } ]
   }, {
     "id" : "4f5c0c90-6a28-46bc-a4c2-b216b1a387ca",
@@ -1702,19 +1702,19 @@
       "requirement" : "REQUIRED",
       "priority" : 10,
       "userSetupAllowed" : false,
-      "authenticatorFlow" : false
+      "autheticatorFlow" : false
     }, {
       "authenticator" : "direct-grant-validate-password",
       "requirement" : "REQUIRED",
       "priority" : 20,
       "userSetupAllowed" : false,
-      "authenticatorFlow" : false
+      "autheticatorFlow" : false
     }, {
       "requirement" : "CONDITIONAL",
       "priority" : 30,
       "flowAlias" : "Direct Grant - Conditional OTP",
       "userSetupAllowed" : false,
-      "authenticatorFlow" : true
+      "autheticatorFlow" : true
     } ]
   }, {
     "id" : "11bf67b6-6fa8-4b04-abc0-1fffe293e9fe",
@@ -1728,7 +1728,7 @@
       "requirement" : "REQUIRED",
       "priority" : 10,
       "userSetupAllowed" : false,
-      "authenticatorFlow" : false
+      "autheticatorFlow" : false
     } ]
   }, {
     "id" : "06fe5c40-d285-432d-ba8f-16e64d5c192b",
@@ -1743,13 +1743,13 @@
       "requirement" : "REQUIRED",
       "priority" : 10,
       "userSetupAllowed" : false,
-      "authenticatorFlow" : false
+      "autheticatorFlow" : false
     }, {
       "requirement" : "REQUIRED",
       "priority" : 20,
       "flowAlias" : "User creation or linking",
       "userSetupAllowed" : false,
-      "authenticatorFlow" : true
+      "autheticatorFlow" : true
     } ]
   }, {
     "id" : "38963f42-3cf9-467b-be8f-a23af94783fe",
@@ -1763,13 +1763,13 @@
       "requirement" : "REQUIRED",
       "priority" : 10,
       "userSetupAllowed" : false,
-      "authenticatorFlow" : false
+      "autheticatorFlow" : false
     }, {
       "requirement" : "CONDITIONAL",
       "priority" : 20,
       "flowAlias" : "Browser - Conditional OTP",
       "userSetupAllowed" : false,
-      "authenticatorFlow" : true
+      "autheticatorFlow" : true
     } ]
   }, {
     "id" : "1ba1842f-5b89-41cd-a54e-9262f5fdb9be",
@@ -1783,13 +1783,13 @@
       "requirement" : "REQUIRED",
       "priority" : 10,
       "userSetupAllowed" : false,
-      "authenticatorFlow" : false
+      "autheticatorFlow" : false
     }, {
       "requirement" : "REQUIRED",
       "priority" : 20,
       "flowAlias" : "Authentication Options",
       "userSetupAllowed" : false,
-      "authenticatorFlow" : true
+      "autheticatorFlow" : true
     } ]
   }, {
     "id" : "532769a0-01a2-472d-8a19-54ad730eb5cf",
@@ -1804,7 +1804,7 @@
       "priority" : 10,
       "flowAlias" : "registration form",
       "userSetupAllowed" : false,
-      "authenticatorFlow" : true
+      "autheticatorFlow" : true
     } ]
   }, {
     "id" : "1fedf0a2-d9a9-4060-8907-17ea2338d6f8",
@@ -1818,25 +1818,25 @@
       "requirement" : "REQUIRED",
       "priority" : 20,
       "userSetupAllowed" : false,
-      "authenticatorFlow" : false
+      "autheticatorFlow" : false
     }, {
       "authenticator" : "registration-profile-action",
       "requirement" : "REQUIRED",
       "priority" : 40,
       "userSetupAllowed" : false,
-      "authenticatorFlow" : false
+      "autheticatorFlow" : false
     }, {
       "authenticator" : "registration-password-action",
       "requirement" : "REQUIRED",
       "priority" : 50,
       "userSetupAllowed" : false,
-      "authenticatorFlow" : false
+      "autheticatorFlow" : false
     }, {
       "authenticator" : "registration-recaptcha-action",
       "requirement" : "DISABLED",
       "priority" : 60,
       "userSetupAllowed" : false,
-      "authenticatorFlow" : false
+      "autheticatorFlow" : false
     } ]
   }, {
     "id" : "86180e38-fb76-45ce-8778-3559cdf7d5c7",
@@ -1850,25 +1850,25 @@
       "requirement" : "REQUIRED",
       "priority" : 10,
       "userSetupAllowed" : false,
-      "authenticatorFlow" : false
+      "autheticatorFlow" : false
     }, {
       "authenticator" : "reset-credential-email",
       "requirement" : "REQUIRED",
       "priority" : 20,
       "userSetupAllowed" : false,
-      "authenticatorFlow" : false
+      "autheticatorFlow" : false
     }, {
       "authenticator" : "reset-password",
       "requirement" : "REQUIRED",
       "priority" : 30,
       "userSetupAllowed" : false,
-      "authenticatorFlow" : false
+      "autheticatorFlow" : false
     }, {
       "requirement" : "CONDITIONAL",
       "priority" : 40,
       "flowAlias" : "Reset - Conditional OTP",
       "userSetupAllowed" : false,
-      "authenticatorFlow" : true
+      "autheticatorFlow" : true
     } ]
   }, {
     "id" : "b2f6fc89-6970-464c-8854-e9d0c4187294",
@@ -1882,7 +1882,7 @@
       "requirement" : "REQUIRED",
       "priority" : 10,
       "userSetupAllowed" : false,
-      "authenticatorFlow" : false
+      "autheticatorFlow" : false
     } ]
   } ],
   "authenticatorConfig" : [ {
diff --git a/deployments/examples/ocis_keycloak/docker-compose.yml b/deployments/examples/ocis_keycloak/docker-compose.yml
index 32f8d22b898..344edcc1cff 100644
--- a/deployments/examples/ocis_keycloak/docker-compose.yml
+++ b/deployments/examples/ocis_keycloak/docker-compose.yml
@@ -15,7 +15,7 @@ services:
       - "--certificatesResolvers.http.acme.email=${TRAEFIK_ACME_MAIL:-example@example.org}"
       - "--certificatesResolvers.http.acme.storage=/certs/acme.json"
       - "--certificatesResolvers.http.acme.httpChallenge.entryPoint=http"
-      # enable dashboard
+      # enable dasbhoard
       - "--api.dashboard=true"
       # define entrypoints
       - "--entryPoints.http.address=:80"
diff --git a/deployments/examples/ocis_s3/docker-compose.yml b/deployments/examples/ocis_s3/docker-compose.yml
index 0b8e662c6fa..a69808bfd43 100644
--- a/deployments/examples/ocis_s3/docker-compose.yml
+++ b/deployments/examples/ocis_s3/docker-compose.yml
@@ -14,7 +14,7 @@ services:
       - "--certificatesResolvers.http.acme.email=${TRAEFIK_ACME_MAIL:-example@example.org}"
       - "--certificatesResolvers.http.acme.storage=/certs/acme.json"
       - "--certificatesResolvers.http.acme.httpChallenge.entryPoint=http"
-      # enable dashboard
+      # enable dasbhoard
       - "--api.dashboard=true"
       # define entrypoints
       - "--entryPoints.http.address=:80"
diff --git a/deployments/examples/ocis_traefik/docker-compose.yml b/deployments/examples/ocis_traefik/docker-compose.yml
index 043bad9799e..7e090cffc70 100644
--- a/deployments/examples/ocis_traefik/docker-compose.yml
+++ b/deployments/examples/ocis_traefik/docker-compose.yml
@@ -14,7 +14,7 @@ services:
       - "--certificatesResolvers.http.acme.email=${TRAEFIK_ACME_MAIL:-example@example.org}"
       - "--certificatesResolvers.http.acme.storage=/certs/acme.json"
       - "--certificatesResolvers.http.acme.httpChallenge.entryPoint=http"
-      # enable dashboard
+      # enable dasbhoard
       - "--api.dashboard=true"
       # define entrypoints
       - "--entryPoints.http.address=:80"
diff --git a/deployments/examples/ocis_wopi/docker-compose.yml b/deployments/examples/ocis_wopi/docker-compose.yml
index 7ee32156968..74a5f2b5fda 100644
--- a/deployments/examples/ocis_wopi/docker-compose.yml
+++ b/deployments/examples/ocis_wopi/docker-compose.yml
@@ -16,7 +16,7 @@ services:
       - "--certificatesResolvers.http.acme.email=${TRAEFIK_ACME_MAIL:-example@example.org}"
       - "--certificatesResolvers.http.acme.storage=/certs/acme.json"
       - "--certificatesResolvers.http.acme.httpChallenge.entryPoint=http"
-      # enable dashboard
+      # enable dasbhoard
       - "--api.dashboard=true"
       # define entrypoints
       - "--entryPoints.http.address=:80"
diff --git a/docs/extensions/storage/_index.md b/docs/extensions/storage/_index.md
index d166e6005f6..1f8bcf5e50b 100644
--- a/docs/extensions/storage/_index.md
+++ b/docs/extensions/storage/_index.md
@@ -26,7 +26,7 @@ The dashed lines in the diagram indicate requests that are made to authenticate
 2. The gateway will verify the JWT signature of the `x-access-token` or try to authenticate the request itself, e.g. using a public link token.
 
 {{< hint warning >}}
-The bottom part is lighter because we will deprecate it in favor of using only the CS3 user and group providers after moving some account functionality into reva and glauth. The metadata storage is not registered in the reva gateway to separate metadata necessary for running the service from data that is being served directly.
+The bottom part is lighter because we will deprecate it in favor of using only the CS3 user and group providers after moving some account functionality into reva and glauth. The metadata storage is not registered in the reva gateway to seperate metadata necessary for running the service from data that is being served directly.
 {{< /hint >}}
 
 ## Endpoints and references
diff --git a/docs/extensions/storage/architecture.md b/docs/extensions/storage/architecture.md
index 3e1a6cf67df..ab8683234b3 100644
--- a/docs/extensions/storage/architecture.md
+++ b/docs/extensions/storage/architecture.md
@@ -89,7 +89,7 @@ The OCS service makes a stat request to the storage provider to get a [ResourceI
 
 {{< hint >}}
 The user and public share provider implementations identify the file using the [`ResourceId`](https://cs3org.github.io/cs3apis/#cs3.storage.provider.v1beta1.ResourceId). The [`ResourceInfo`](https://cs3org.github.io/cs3apis/#cs3.storage.provider.v1beta1.ResourceInfo) is passed so the share provider can also store who the owner of the resource is. The *path* is not part of the other API calls, e.g. when listing shares.
-The OCM API takes an id based reference on the CS3 api, even if the OCM HTTP endpoint takes a path argument. *@jfd: Why? Does it not need the owner? It only stores the owner of the share, which is always the currently logged in user, when creating a share. Afterwards only the owner can update a share ... so collaborative management of shares is not possible. At least for OCM shares.*
+The OCM API takes an id based reference on the CS3 api, even if the OCM HTTP endpoint takes a path argument. *@jfd: Why? Does it not need the owner? It only stores the owner of the share, which is always the currently looged in user, when creating a share. Afterwards only the owner can update a share ... so collaborative management of shares is not possible. At least for OCM shares.*
 {{< /hint >}}
 
 ### User and Group provisioning
diff --git a/docs/extensions/storage/terminology.md b/docs/extensions/storage/terminology.md
index 5ff46f6048f..0b3ce00a4ec 100644
--- a/docs/extensions/storage/terminology.md
+++ b/docs/extensions/storage/terminology.md
@@ -79,13 +79,13 @@ It maps the *path* and *id* based CS3 *references* to an appropriate [*storage s
 
 {{< hint warning >}}
 **Proposed Change**
-iOS clients can only queue single requests to be executed in the background. The queue an upload and need to be able to identify the uploaded file after it has been uploaded to the server. The disconnected nature of the connection might cause workflows or manual user interaction with the file on the server to move the file to a different place or changing the content while the device is offline. However, on the device users might have marked the file as favorite or added it to other iOS specific collections. To be able to reliably identify the file the client can generate a `uuid` and attach it to the file metadata during the upload. While it is not necessary to look up files by this `uuid` having a second file id that serves exactly the same purpose as the `file id` is redundant.
+iOS clients can only queue single requests to be executed in the background. The queue an upload and need to be able to identify the uploaded file after it has been uploaded to the server. The disconnected nature of the connection might cause worksflows or manual user interaction with the file on the server to move the file to a different place or changing the content while the device is offline. However, on the device users might have marked the file as favorite or added it to other iOS specific collections. To be able to reliably identify the file the client can generate a `uuid` and attach it to the file metadata during the upload. While it is not necessary to look up files by this `uuid` having a second file id that serves exactly the same purpose as the `file id` is redundant.
 
 Another aspect for the `file id` / `uuid` is that it must be a logical identifier that can be set, at least by internal systems. Without a writeable fileid we cannot restore backups or migrate storage spaces from one storage provider to another storage provider.
 
-Technically, this means that every storage driver needs to have a map of a `uuid` to in internal resource identifier. This internal resource identifier can be
+Technically, this means that every storage driler needs to have a map of a `uuid` to in internal resource identifier. This internal resource identifier can be
 - an eos fileid, because eos can look up files by id
-- an inode if the filesystem and the storage driver support looking up by inode
+- an inode if the filesystem and the storage driver support lookung up by inode
 - a path if the storage driver has no way of looking up files by id.
   - In this case other mechanisms like inotify, kernel audit or a fuse overlay might be used to keep the paths up to date.
   - to prevent excessive writes when deep folders are renamed a reverse map might be used: it will map the `uuid` to `<parentuuid>:<childname>`, allowing to trade writes for reads
@@ -142,7 +142,7 @@ Examples would be every user's home storage space, project storage spaces or gro
 Finally, a logical `storage space id` is not tied to a specific [*storage provider*]({{< ref "#storage-providers" >}}). If the [*storage driver*]({{< ref "#storage-drivers" >}}) supports it, we can import existing files including their `file id`, which makes it possible to move [*storage spaces*]({{< ref "#storage-spaces" >}}) between [*storage providers*]({{< ref "#storage-providers" >}}) to implement storage classes, e.g. with or without archival, workflows, on SSDs or HDDs.
 
 ## Shares
-*To be clarified: we are aware that [*storage spaces*]({{< ref "#storage-spaces" >}}) may be too 'heavyweight' for ad hoc sharing with groups. That being said, there is no technical reason why group shares should not be treated like [*storage spaces*]({{< ref "#storage-spaces" >}}) that users can provision themselves. They would share the quota with the users home [*storage space*]({{< ref "#storage-spaces" >}}) and the share initiator would be the sole owner. Technically, the mechanism of treating a share like a new [*storage space*]({{< ref "#storage-spaces" >}}) would be the same. This obviously also extends to user shares and even file individual shares that would be wrapped in a virtual collection. It would also become possible to share collections of arbitrary files in a single storage space, e.g. the ten best pictures from a large album.*
+*To be clarified: we are aware that [*storage spaces*]({{< ref "#storage-spaces" >}}) may be too 'heavywheight' for ad hoc sharing with groups. That being said, there is no technical reason why group shares should not be treated like [*storage spaces*]({{< ref "#storage-spaces" >}}) that users can provision themselves. They would share the quota with the users home [*storage space*]({{< ref "#storage-spaces" >}}) and the share initiator would be the sole owner. Technically, the mechanism of treating a share like a new [*storage space*]({{< ref "#storage-spaces" >}}) would be the same. This obviously also extends to user shares and even file indvidual shares that would be wrapped in a virtual collection. It would also become possible to share collections of arbitrary files in a single storage space, e.g. the ten best pictures from a large album.*
 
 
 ## Storage Systems
diff --git a/docs/ocis/_index.md b/docs/ocis/_index.md
index 6b627e50db6..ed233878b11 100644
--- a/docs/ocis/_index.md
+++ b/docs/ocis/_index.md
@@ -15,11 +15,11 @@ Welcome to oCIS, the modern file-sync and share platform, which is based on our
 
 ### The idea of federated storage
 
-To create a truly federated storage architecture oCIS breaks down the old ownCloud 10 user specific namespace, which is assembled on the server side, and makes the individual parts accessible to clients as storage spaces and storage space registries.
+To creata a truly federated storage architecture oCIS breaks down the old ownCloud 10 user specific namespace, which is assembled on the server side, and makes the individual parts accessible to clients as storage spaces and storage space registries.
 
-The below diagram shows the core concepts that are the foundation for the new architecture:
+The below diagram shows the core conceps that are the foundation for the new architecture:
 - End user devices can fetch the list of *storage spaces* a user has access to, by querying one or multiple *storage space registries*. The list contains a unique endpoint for every *storage space*.
-- [*Storage space registries*]({{< ref "../extensions/storage/terminology#storage-space-registries" >}}) manage the list of storage spaces a user has access to. They may subscribe to *storage spaces* in order to receive notifications about changes on behalf of an end users mobile or desktop client.
+- [*Storage space registries*]({{< ref "../extensions/storage/terminology#storage-space-registries" >}}) manage the list of storage spaces a user has access to. They may subscrible to *storage spaces* in order to receive notifications about changes on behalf of an end users mobile or desktop client.
 - [*Storage spaces*]({{< ref "../extensions/storage/terminology#storage-spaces" >}}) represent a collection of files and folders. A users personal files are a *storage space*, a group or project drive is a *storage space*, and even incoming shares are treated and implemented as *storage spaces*. Each with properties like owners, permissions, quota and type.
 - [*Storage providers*]({{< ref "../extensions/storage/terminology#storage-providers" >}}) can hold multiple *storage spaces*. At an oCIS instance, there might be a dedicated *storage provider* responsible for users personal storage spaces. There might be multiple, sharing the load or there might be just one, hosting all types of *storage spaces*.
 
diff --git a/docs/ocis/adr/0003-external-user-management.md b/docs/ocis/adr/0003-external-user-management.md
index 025c2ec2101..dbb9fc702a5 100644
--- a/docs/ocis/adr/0003-external-user-management.md
+++ b/docs/ocis/adr/0003-external-user-management.md
@@ -69,7 +69,7 @@ Chosen option: "Move accounts functionality to GLAuth and name it accounts", by
 
 ### Negative Consequences
 
-* If users want to store users in their IDM and at the same time guests in a separate user management we need to implement GLAuth backends that support more than one LDAP server.
+* If users want to store users in their IDM and at the same time guests in a seperate user management we need to implement GLAuth backends that support more than one LDAP server.
 
 ## Pros and Cons of the Options
 
diff --git a/docs/ocis/adr/0004-support-hot-migration.md b/docs/ocis/adr/0004-support-hot-migration.md
index e1077ad09c1..3bb552dc2d1 100644
--- a/docs/ocis/adr/0004-support-hot-migration.md
+++ b/docs/ocis/adr/0004-support-hot-migration.md
@@ -60,7 +60,7 @@ The migration happens while the service is offline. File metadata, blobs and sha
 - Good, because oCIS can be tested in a staging system without writing to the production system.
 - Good, because file layout on disk can be changed to support new storage driver capabilities.
 - Bad, because the export and import might require significant amounts of storage.
-- Bad, because a rollback to the state before the migration might cause data loss of the changes that happened in between.
+- Bad, because a rollback to the state before the migration might cause data loss of the changes that happend in between.
 - Bad, because the cold migration can mean significant downtime.
 
 ### Hot Migration
diff --git a/docs/ocis/adr/0006-service-discovery.md b/docs/ocis/adr/0006-service-discovery.md
index b3412f9b4a8..bfc077a01c9 100644
--- a/docs/ocis/adr/0006-service-discovery.md
+++ b/docs/ocis/adr/0006-service-discovery.md
@@ -37,7 +37,7 @@ Chosen option: "Dynamic service registration". There were some drawbacks regardi
 * Having dynamic service registration delegates the entire lifecycle of finding a process to the service registry.
 * Removing a-priori knowledge of hostname + port for services.
 * Marrying go-micro's registry and a newly defined registry abstraction on Reva.
-* We will embrace go-micro interfaces by defining a third merger interface in order to marry go-micro registry and reva registry.
+* We will embrace go-micro interfaces by defining a third merger interface in order to marry go-micro registry and rega revistry.
 * The ability to fetch a service node relying only on its name (i.e: com.owncloud.proxy) and not on a tuple hostname + port that we rely on being preconfigured during runtime.
 * Conceptually speaking, a better framework to tie all the services together. Referring to services by names is less overall confusing than having to add a service name + where it is running. A registry is agnostic to "where is it running" because it, by definition, keeps track of this specific question, so when speaking about design or functionality, it will ease communication.
 
diff --git a/docs/ocis/adr/0010-policy-enforcement.md b/docs/ocis/adr/0010-policy-enforcement.md
index 73826bc2f43..ff7c17c8e05 100644
--- a/docs/ocis/adr/0010-policy-enforcement.md
+++ b/docs/ocis/adr/0010-policy-enforcement.md
@@ -23,11 +23,11 @@ There should be a way to impose certain limitations in areas of the code that re
 ## Considered Options
 
 1. Build the evaluation engine in-house.
-2. Use third party libraries such as Open Policy Agent (a CNCF approved project written in Go)
+2. Use third party libraries such as Open Policy Agent (a CNCF aproved project written in Go)
 
 ## Decision Outcome
 
-Chosen option: option 2; Use third party libraries such as Open Policy Agent (a CNCF approved project written in Go)
+Chosen option: option 2; Use third party libraries such as Open Policy Agent (a CNCF aproved project written in Go)
 
 ### Positive Consequences
 
diff --git a/docs/ocis/adr/0011-global-url-format.md b/docs/ocis/adr/0011-global-url-format.md
index cc9d432420b..6510163641e 100644
--- a/docs/ocis/adr/0011-global-url-format.md
+++ b/docs/ocis/adr/0011-global-url-format.md
@@ -177,7 +177,7 @@ There is a customized ownCloud instance that uses path only based URLs:
 {{< hint >}}
 * `/#` is used by the current vue router.
 * `/s` denotes that this is a space url.
-* `<space_id>` and `<resource_id>` both consist of `<storage_id>:<node_id>`, but the `space_id` can be replaced with a shorter id or an alias. See further down below.
+* `<space_id>` and `<resource_id>` both consist of `<storage_id>:<node_id>`, but the `space_id` can be replaced with a shorter id or an alias. See furthor down below.
 * `<relative/path>` takes precedence over the `<resource_id>`, both are optional
 {{< /hint >}}
 
@@ -245,11 +245,11 @@ When every space has a namespaced alias and a relative path we can build a globa
 | `https://demo.owncloud.com/files/personal/einstein/relative/path/to/resource?id=b78c2044-5b51-446f-82f6-907a664d089c:194b4a97-597c-4461-ab56-afd4f5a21608` | sub folder `/relative/path/to/resource` |
 | `https://demo.owncloud.com/files/shares/einstein/somesharename?id=b78c2044-5b51-446f-82f6-907a664d089c:194b4a97-597c-4461-ab56-afd4f5a21608` | shared URL for `/relative/path/to/resource` |
 | `https://demo.owncloud.com/files/personal/einstein/marie is stupid/and richard as well/resource?id=b78c2044-5b51-446f-82f6-907a664d089c:194b4a97-597c-4461-ab56-afd4f5a21608` | sub folder `marie is stupid/and richard as well/resource` ... something einstein might not want to reveal |
-| `https://demo.owncloud.com/files/shares/einstein/resource (2)?id=b78c2044-5b51-446f-82f6-907a664d089c:194b4a97-597c-4461-ab56-afd4f5a21608` | named link URL for `/marie is stupid/and richard as well/resource`, does not disclose the actual hierarchy, has an appended counter to avoid a collision |
+| `https://demo.owncloud.com/files/shares/einstein/resource (2)?id=b78c2044-5b51-446f-82f6-907a664d089c:194b4a97-597c-4461-ab56-afd4f5a21608` | named link URL for `/marie is stupid/and richard as well/resource`, does not disclose the actual hierarchy, has an appended counter to avaid a collision |
 | `https://demo.owncloud.com/files/shares/einstein/mybestfriends?id=b78c2044-5b51-446f-82f6-907a664d089c:194b4a97-597c-4461-ab56-afd4f5a21608` | named link URL for `/marie is stupid/and richard as well/resource`, does not disclose the actual hierarchy, has a custom alias for the share |
 | `https://demo.owncloud.com/files/public/kcZVYaXr7oZ66bg/relative/path/to/resource` | sub folder `/relative/path/to/resource` in public link with token `kcZVYaXr7oZ66bg` |
 | `https://demo.owncloud.com/files/public/kcZVYaXr7oZ66bg/relative/path/to/resource` | sub folder `/relative/path/to/resource` in public link with token `kcZVYaXr7oZ66bg` |
-| `https://demo.owncloud.com/s/kcZVYaXr7oZ66bg/` | shortened link to a resource. This is needed to be able to copy a link to a resource without leaking any metadata. |
+| `https://demo.owncloud.com/s/kcZVYaXr7oZ66bg/` | shortened link to a resource. This is needed to be able to copy a link to a resource whithout leaking any metadata. |
 
 
 `</namespaced/alias></relative/path/to/resource>` is the global path in the CS3 api. The CS3 Storage Registry is responsible by managing the mount points.
diff --git a/docs/ocis/deployment/_index.md b/docs/ocis/deployment/_index.md
index d2155cb0fa2..792049cbc25 100644
--- a/docs/ocis/deployment/_index.md
+++ b/docs/ocis/deployment/_index.md
@@ -45,9 +45,6 @@ You can change it by setting the `STORAGE_TRANSFER_SECRET` environment variable
 
 {{< hint info >}}
 Before deleting the demo users mentioned below, you must create a new account for yourself and assign it to the administrator role.
-
-To skip the generation of demo users in the first place, run the inital setup step with an additional environment variable.
-`ACCOUNTS_DEMO_USERS_AND_GROUPS=false ./bin/ocis server` generates only the admin, and one user for IDP and Reva respectively.
 {{< /hint >}}
 
 oCIS ships with a few demo users besides the system users:
diff --git a/docs/ocis/deployment/ocis_hello.md b/docs/ocis/deployment/ocis_hello.md
index e9abb62f365..554f9f315e5 100644
--- a/docs/ocis/deployment/ocis_hello.md
+++ b/docs/ocis/deployment/ocis_hello.md
@@ -115,7 +115,7 @@ On Linux and macOS you can add them to your `/etc/hosts` files like this:
 
 ```
 127.0.0.1 ocis.owncloud.test
-127.0.0.1 traefik.owncloud.test
+127.0.0.1 traefik.owncloud.testt
 ```
 
 After that you're ready to start the application stack:
diff --git a/docs/ocis/deployment/ocis_keycloak.md b/docs/ocis/deployment/ocis_keycloak.md
index d581c8c2367..46ef4ad0614 100644
--- a/docs/ocis/deployment/ocis_keycloak.md
+++ b/docs/ocis/deployment/ocis_keycloak.md
@@ -19,7 +19,7 @@ geekdocFilePath: ocis_keycloak.md
 
 The docker stack consists 4 containers. One of them is Traefik, a proxy which is terminating ssl and forwards the requests to oCIS in the internal docker network.
 
-Keycloak add two containers: Keycloak itself and a PostgreSQL as database. Keycloak will be configured as oCIS' IDP instead of the internal IDP [LibreGraph Connect]({{< ref "../../extensions/idp" >}})
+Keykloak add two containers: Keycloak itself and a PostgreSQL as database. Keycloak will be configured as oCIS' IDP instead of the internal IDP [LibreGraph Connect]({{< ref "../../extensions/idp" >}})
 
 The other container is oCIS itself running all extensions in one container. In this example oCIS uses [oCIS storage driver]({{< ref "../../extensions/storage/storages#storage-drivers" >}})
 
diff --git a/docs/ocis/development/extensions.md b/docs/ocis/development/extensions.md
index cef08f3bcd9..e8fbbbb1697 100644
--- a/docs/ocis/development/extensions.md
+++ b/docs/ocis/development/extensions.md
@@ -7,7 +7,7 @@ geekdocEditPath: edit/master/docs/ocis/development
 geekdocFilePath: extensions.md
 ---
 
-oCIS is all about files, sync and share - but most of the time there is more you want to do with your files, e.g. having a different view on your photo collection or editing your offices files in an online file editor. ownCloud 10 faced the same problem and solved it with `applications`, which can extend the functionality of ownCloud 10 in a wide range. Since oCIS is different in its architecture compared to ownCloud 10, we had to come up with a similar (yet slightly different) solution. To extend the functionality of oCIS, you can write or install `extensions`. An extension is basically any running code which integrates into oCIS and provides functionality to oCIS and its users. Because extensions are just microservices providing an API, you can technically choose any programming language you like - a huge improvement to ownCloud 10, where it was nearly impossible to use a different programming language than PHP.
+oCIS is all about files, sync and share - but most of the time there is more you want to do with your files, e.g. having a different view on your photo collection or editing your offices files in an online file editor. ownCloud 10 faced the same problem and solved it with `applications`, which can extend the functionality of ownCloud 10 in a wide range. Since oCIS is different in its architecture compared to ownCloud 10, we had to come up with a similiar (yet slightly different) solution. To extend the functionality of oCIS, you can write or install `extensions`. An extension is basically any running code which integrates into oCIS and provides functionality to oCIS and its users. Because extensions are just microservices providing an API, you can technically choose any programming language you like - a huge improvement to ownCloud 10, where it was nearly impossible to use a different programming language than PHP.
 
 We will now introduce you to the oCIS extension system and show you how you can create a custom extension yourself.
 
diff --git a/docs/ocis/development/getting-started.md b/docs/ocis/development/getting-started.md
index f7bff54147e..43cc1c9c9fb 100644
--- a/docs/ocis/development/getting-started.md
+++ b/docs/ocis/development/getting-started.md
@@ -27,7 +27,7 @@ If you find tools needed besides the mentioned above, please feel free to open a
 
 oCIS consists of multiple micro services, also called extensions. We started by having standalone repositories for each of them, but quickly noticed that this adds a time consuming overhead for developers. So we ended up with a monorepo housing all the extensions in one repository.
 
-Each extension lives in a subfolder (eg. `accounts` or `settings`) within this repository as an independent Go module, following the [golang-standard project-layout](https://github.com/golang-standards/project-layout). They have common Makefile targets and can be used to change, build and run individual extensions. This allows us to version and release each extension independently.
+Each extension lives in a subfolder (eg. `accounts` or `settings`) within this respository as an independent Go module, following the [golang-standard project-layout](https://github.com/golang-standards/project-layout). They have common Makefile targets and can be used to change, build and run individual extensions. This allows us to version and release each extension independently.
 
 The `ocis` folder contains our [go-micro](https://github.com/asim/go-micro/) and [suture](https://github.com/thejerf/suture) based runtime. It is used to import all extensions and implements commands to manage them, similar to a small orchestrator. With the resulting oCIS binary you can start single extensions or even all extensions at the same time.
 
diff --git a/docs/ocis/flow-docs/request-flow.md b/docs/ocis/flow-docs/request-flow.md
index 3e52eafc84c..36ca43dcb89 100644
--- a/docs/ocis/flow-docs/request-flow.md
+++ b/docs/ocis/flow-docs/request-flow.md
@@ -50,7 +50,7 @@ sequenceDiagram
             end
 
             proxy->>+accounts: TODO API call to exchange sub@iss with account UUID
-            Note over proxy,accounts: does not autoprovision users. They are explicitly provisioned later.
+            Note over proxy,accounts: does not autoprovision users. They are explicitly provsioned later.
 
             alt account exists or has been migrated
 
diff --git a/docs/ocis/getting-started/_index.md b/docs/ocis/getting-started/_index.md
index 081a9f5375d..96642f77f35 100644
--- a/docs/ocis/getting-started/_index.md
+++ b/docs/ocis/getting-started/_index.md
@@ -33,11 +33,11 @@ You can find the latest official release of oCIS at [our download mirror](https:
 The latest build from the master branch can be found at [our download mirrors testing section](https://download.owncloud.com/ocis/ocis/testing/).
 
 To run oCIS as binary you need to download it first and then run the following commands.
-For this example, assuming version 1.12.0 of oCIS running on a Linux AMD64 host:
+For this example, assuming version 1.11.0 of oCIS running on a Linux AMD64 host:
 
 ```console
 # download
-curl https://download.owncloud.com/ocis/ocis/1.12.0/ocis-1.12.0-linux-amd64 --output ocis
+curl https://download.owncloud.com/ocis/ocis/1.11.0/ocis-1.11.0-linux-amd64 --output ocis
 
 # make binary executable
 chmod +x ocis
diff --git a/docs/ocis/getting-started/demo-users.md b/docs/ocis/getting-started/demo-users.md
index 39da4f92c43..61e9664c5c1 100644
--- a/docs/ocis/getting-started/demo-users.md
+++ b/docs/ocis/getting-started/demo-users.md
@@ -9,11 +9,6 @@ geekdocFilePath: demo-users.md
 
 As long as oCIS is released as [technology preview]({{< ref "../release_roadmap#release_roadmap" >}}) it will come with default demo users. These enable you to do quick testing and developing.
 
-{{< hint info >}}
-To skip the generation of demo users, run the inital setup step with an additional environment variable.
-`ACCOUNTS_DEMO_USERS_AND_GROUPS=false ./bin/ocis server` generates only the admin, and one user for IDP and Reva respectively.
-{{< /hint >}}
-
 Following users are available in the demo set:
 
 | username | password      | email                | role  | groups                                                                  |
diff --git a/docs/ocis/migration.md b/docs/ocis/migration.md
index acc5985e750..46a73627157 100644
--- a/docs/ocis/migration.md
+++ b/docs/ocis/migration.md
@@ -78,7 +78,7 @@ _TODO @butonic add ADR for OpenID Connect_
 
 #### User impact
 When introducing OpenID Connect, the clients will detect the new authentication scheme when their current way of authenticating returns an error. Users will then have to
-reauthorize at the OpenID Connect IdP, which again, may be configured to skip the consent step for trusted clients.
+reauthorize at the OpenID Connecd IdP, which again, may be configured to skip the consent step for trusted clients.
 
 #### Steps
 1. There are multiple products that can be used as an OpenID Connect IdP. We test with [LibreGraph Connect](https://github.com/libregraph/lico), which is also [embedded in oCIS](https://github.com/owncloud/web/). Other alternatives include [Keycloak](https://www.keycloak.org/) or [Ping](https://www.pingidentity.com/). Please refer to the corresponding setup instructions for the product you intent to use.
@@ -106,7 +106,7 @@ Should there be problems with OpenID Connect at this point you can disable the a
 <div style="break-after: avoid"></div>
 Legacy clients relying on Basic auth or app passwords need to be migrated to OpenId Connect to work with oCIS. For a transition period Basic auth in oCIS can be enabled with `PROXY_ENABLE_BASIC_AUTH=true`, but we strongly recommend adopting OpenID Connect for other tools as well.
 
-While OpenID Connect providers will send an `iss` and `sub` claim that relying parties (services like oCIS or ownCloud 10) can use to identify users we recommend introducing a dedicated, globally unique, persistent, non-reassignable user identifier like a UUID for every user. This `ownclouduuid` should be sent as an additional claim to save additional lookups on the server side. It will become the user id in oCIS, e.g. when searching for recipients the `ownclouduuid` will be used to persist permissions with the share manager. It has a different purpose than the ownCloud 10 username, which is used to login. Using UUIDs we can not only mitigate username collisions when merging multiple instances but also allow renaming usernames after the migration to oCIS has been completed.
+While OpenID Connect providers will send an `iss` and `sub` claim that relying parties (services like oCIS or ownCloud 10) can use to identify users we recommend introducing a dedicated, globally unique, persistent, non-reassignable user identifier like a UUID for every user. This `ownclouduuid` shold be sent as an additional claim to save additional lookups on the server side. It will become the user id in oCIS, e.g. when searching for recipients the `ownclouduuid` will be used to persist permissions with the share manager. It has a different purpose than the ownCloud 10 username, which is used to login. Using UUIDs we can not only mitigate username collisions when merging multiple instances but also allow renaming usernames after the migration to oCIS has been completed.
 
 <div class="editpage">
 
@@ -322,8 +322,8 @@ _TODO @butonic update performance comparisons nightly_
 
 #### Steps
 There are several options to move users to the oCIS backend:
-- Use a canary app to let users decide themselves
-- Use an early adopters group with an opt in
+- Use a canary app to let users decide thamselves
+- Use an early adoptors group with an opt in
 - Force migrate users in batch or one by one at the administrators will
 
 #### Verification
@@ -333,7 +333,7 @@ The same verification steps as for the internal testing stage apply. Just from t
 Until now, the oCIS configuration mimics ownCloud 10 and uses the old data directory layout and the ownCloud 10 database. Users can seamlessly be switched from ownCloud 10 to oCIS and back again.
 <div class="editpage">
 
-_TODO @butonic we need a canary app that allows users to decide for themselves which backend to use_
+_TODO @butonic we need a canary app that allows users to decide for themself which backend to use_
 
 </div>
 
@@ -430,7 +430,7 @@ _TODO @butonic document how to manually do that until the storage registry can d
 Start with a test user, then move to early adopters and finally migrate all users.
 
 #### Rollback
-To switch the storage provider again the same storage space migration can be performed again: copy metadata and blob data using the CS3 api, then change the responsible storage provider in the storage registry.
+To switch the storage provider again the same storage space migration can be performed again: copy medatata and blob data using the CS3 api, then change the responsible storage provider in the storage registry.
 
 #### Notes
 <div style="break-after: avoid"></div>
@@ -473,7 +473,7 @@ _TODO for storage provider as source of truth persist ALL share data in the stor
 </div>
 
 #### Verification
-After copying all metadata start a dedicated gateway and change the configuration to use the new share manager. Route a test user, a test group and early adopters to the new gateway. When no problems occur you can start the desired number of share managers and roll out the change to all gateways.
+After copying all metadata start a dedicated gateway and change the configuration to use the new share manager. Route a test user, a test group and early adoptors to the new gateway. When no problems occur you can start the desired number of share managers and roll out the change to all gateways.
 
 <div class="editpage">
 
@@ -568,7 +568,7 @@ The `filecache` table itself has more metadata:
 
 | Field              | Type          | Null | Key | Default | Extra          | Comment        | Migration         |
 |--------------------|---------------|------|-----|---------|----------------|----------------|----------------|
-| `fileid`           | bigint(20)    | NO   | PRI | NULL    | auto_increment |                | MUST become the oCIS `opaqueid` of a file reference. `ocis` driver stores it in extended attributes and can use numbers as node ids on disk. for eos see note below table |
+| `fileid`           | bigint(20)    | NO   | PRI | NULL    | auto_increment |                | MUST become the oCIS `opaqueid` of a file reference. `ocis` driver stores it in extendet attributes and can use numbers as node ids on disk. for eos see note below table |
 | `storage`          | int(11)       | NO   | MUL | 0       |                | *the filecache holds metadata for multiple storages* | corresponds to an oCIS *storage space* |
 | `path`             | varchar(4000) | YES  |     | NULL    |                | *the path relative to the storages root* | MUST become the `path` relative to the storage root. `files` prefix needs to be trimmed. |
 | `path_hash`        | varchar(32)   | NO   |     |         |                | *mysql once had problems indexing long paths, so we stored a hash for lookup by path. | - |
diff --git a/docs/ocis/release_notes.md b/docs/ocis/release_notes.md
index 5aa286470d0..af009ab56d7 100644
--- a/docs/ocis/release_notes.md
+++ b/docs/ocis/release_notes.md
@@ -7,31 +7,6 @@ geekdocEditPath: edit/master/docs/ocis
 geekdocFilePath: release_notes.md
 ---
 
-## ownCloud Infinite Scale 1.12.0 Technology Preview
-
-Version 1.12.0 is a maintenance release with the foundations for the 'Spaces' feature and for viewer/editor application integrations. The Infinite Scale backend has been further hardened by fixing known issues, improving error handling and stabilizing existing features. Apart from bugfixing, ownCloud Web 4.2.0 has received a number of usability and design improvements for sharing and the file list.
-
-The most prominent changes in ownCloud Infinite Scale 1.12.0 and ownCloud Web 4.2.0 comprise:
-
-- The Infinite Scale backend now supports the first parts of the 'Spaces' feature
-  - Creating a new Space is now possible via Graph API [#2471](https://github.com/owncloud/ocis/pull/2471)
-  - A new sharing role, `Manager`, has been introduced for Spaces [cs3org/reva#2065](https://github.com/cs3org/reva/pull/2065)
-  - A capability for Spaces has been added [cs3org/reva#2015](https://github.com/cs3org/reva/pull/2015)
-- Infinite Scale now provides an app provider and an app registry as a foundation for integrations with viewer/editor applications. [#2204](https://github.com/owncloud/ocis/pull/2204)
-- ownCloud Web now has a re-designed sharing role selection. [#5632](https://github.com/owncloud/web/pull/5632)
-- ownCloud Web now shows people in sharing as a collapsed list of avatars to save space. This can be expanded to show more details and the full list. [#5758](https://github.com/owncloud/web/pull/5758)
-- ownCloud Web now shows sharing information in file/folder details. [#5735](https://github.com/owncloud/web/issues/5735)
-- The file size calculation in ownCloud Web has been changed from base-2 (e.g., KB / Kibibyte) to base-10 (e.g., kB / Kilobyte) to match better with user expectations. [#5739](https://github.com/owncloud/web/pull/5739)
-- The URL encoding/decoding in ownCloud Web has been improved. [#5714](https://github.com/owncloud/web/issues/5714)
-- ownCloud Web now provides a robots.txt file. [#5762](https://github.com/owncloud/web/pull/5762)
-
-You can also read the full [ownCloud Infinite Scale changelog](https://github.com/owncloud/ocis/releases/tag/v1.12.0) and [ownCloud Web changelog](https://github.com/owncloud/web/releases/tag/v4.2.0) for further details on what has changed.
-
-### Breaking changes
-{{< hint warning >}}
-We are currently in a Tech Preview state and breaking changes may occur at any time. For more information see our [release roadmap]({{< ref "./release_roadmap" >}})
-{{< /hint >}}
-
 ## ownCloud Infinite Scale 1.11.0 Technology Preview
 
 Version 1.11.0 brings new features, usability improvements and bug fixes. ownCloud Web 4.1.0 now supports drag & drop and allows users to do actions (e.g., sharing) for the folder they are currently in.
diff --git a/glauth/Makefile b/glauth/Makefile
index 7723d008e72..db06341bd3c 100644
--- a/glauth/Makefile
+++ b/glauth/Makefile
@@ -2,7 +2,7 @@ SHELL := bash
 NAME := glauth
 
 ############ tooling ############
-ifneq (, $(shell which go 2> /dev/null)) # suppress `command not found warnings` for non go targets in CI
+ifneq (, $(shell which go 2> /dev/null)) # supress `command not found warnings` for non go targets in CI
 include ../.bingo/Variables.mk
 endif
 
diff --git a/glauth/pkg/server/glauth/ocis.go b/glauth/pkg/server/glauth/ocis.go
index bd39717b1ea..9aee3133852 100644
--- a/glauth/pkg/server/glauth/ocis.go
+++ b/glauth/pkg/server/glauth/ocis.go
@@ -88,8 +88,8 @@ func (h ocisHandler) Bind(bindDN, bindSimplePw string, conn net.Conn) (ldap.LDAP
 	// check password
 	res, err := h.as.ListAccounts(ctx, &accounts.ListAccountsRequest{
 		//Query: fmt.Sprintf("username eq '%s'", username),
-		// TODO this allows looking up users when you know the username using basic auth
-		// adding the password to the query is an option but sending this over the wire a la scim seems ugly
+		// TODO this allows lookung up users when you know the username using basic auth
+		// adding the password to the query is an option but sending the sover the wira a la scim seems ugly
 		// but to set passwords our accounts need it anyway
 		Query: fmt.Sprintf("login eq '%s' and password eq '%s'", userName, bindSimplePw),
 	})
diff --git a/glauth/pkg/server/glauth/option.go b/glauth/pkg/server/glauth/option.go
index 981bd76972e..025410e0ad2 100644
--- a/glauth/pkg/server/glauth/option.go
+++ b/glauth/pkg/server/glauth/option.go
@@ -73,28 +73,28 @@ func Backend(val *config.Config) Option {
 	}
 }
 
-// Fallback provides a string to set the fallback option.
+// Fallback provides a strring to set the fallback option.
 func Fallback(val *config.Config) Option {
 	return func(o *Options) {
 		o.Fallback = val
 	}
 }
 
-// BaseDN provides a string to set the BaseDN option.
+// BaseDN provides a strring to set the BaseDN option.
 func BaseDN(val string) Option {
 	return func(o *Options) {
 		o.BaseDN = val
 	}
 }
 
-// NameFormat provides a string to set the NameFormat option.
+// NameFormat provides a strring to set the NameFormat option.
 func NameFormat(val string) Option {
 	return func(o *Options) {
 		o.NameFormat = val
 	}
 }
 
-// GroupFormat provides a string to set the GroupFormat option.
+// GroupFormat provides a strring to set the GroupFormat option.
 func GroupFormat(val string) Option {
 	return func(o *Options) {
 		o.GroupFormat = val
diff --git a/glauth/templates/CONFIGURATION.tmpl b/glauth/templates/CONFIGURATION.tmpl
index ac2fd7974a6..c4e3d2418b2 100644
--- a/glauth/templates/CONFIGURATION.tmpl
+++ b/glauth/templates/CONFIGURATION.tmpl
@@ -45,9 +45,9 @@ If you prefer to configure the service with environment variables you can see th
 
 If multiple variables are listed for one option, they are in order of precedence. This means the leftmost variable will always win if given.
 
-### Command-line flags
+### Commandline flags
 
-If you prefer to configure the service with command-line flags you can see the available variables below. Command line flags are only working when calling the subcommand directly.
+If you prefer to configure the service with commandline flags you can see the available variables below. Command line flags are only working when calling the subcommand directly.
 
 {{ $options := .Options -}}
 {{ range $com := .Commands }}{{ with (list $options $com) -}}
diff --git a/go.mod b/go.mod
index 3c5bd17bcec..79feea5b2c7 100644
--- a/go.mod
+++ b/go.mod
@@ -20,7 +20,7 @@ require (
 	github.com/blevesearch/bleve/v2 v2.1.0
 	github.com/coreos/go-oidc/v3 v3.0.0
 	github.com/cs3org/go-cs3apis v0.0.0-20210906133842-03e4a408c1f3
-	github.com/cs3org/reva v1.13.1-0.20210916113012-d83f20c3148d
+	github.com/cs3org/reva v1.13.0
 	github.com/disintegration/imaging v1.6.2
 	github.com/glauth/glauth v1.1.3-0.20210729125545-b9aecdfcac31
 	github.com/go-chi/chi/v5 v5.0.4
diff --git a/go.sum b/go.sum
index b57f539e28b..7dd9b4093f4 100644
--- a/go.sum
+++ b/go.sum
@@ -292,8 +292,6 @@ github.com/cs3org/go-cs3apis v0.0.0-20210906133842-03e4a408c1f3 h1:NcLk09WK4wx/i
 github.com/cs3org/go-cs3apis v0.0.0-20210906133842-03e4a408c1f3/go.mod h1:UXha4TguuB52H14EMoSsCqDj7k8a/t7g4gVP+bgY5LY=
 github.com/cs3org/reva v1.13.0 h1:mItKfxloJx0Q7MtMpPETZ1B7oKhIttP1qjrPTZcYgok=
 github.com/cs3org/reva v1.13.0/go.mod h1:DfORq7oDhBndLw++i8FbHS06RUsFpPhfhJqX7YXpjyc=
-github.com/cs3org/reva v1.13.1-0.20210916113012-d83f20c3148d h1:Z7565qS8LTF9m9OkxrA5VCpjY7GmGCO3zpAAZqUFc+s=
-github.com/cs3org/reva v1.13.1-0.20210916113012-d83f20c3148d/go.mod h1:DfORq7oDhBndLw++i8FbHS06RUsFpPhfhJqX7YXpjyc=
 github.com/cubewise-code/go-mime v0.0.0-20200519001935-8c5762b177d8 h1:Z9lwXumT5ACSmJ7WGnFl+OMLLjpz5uR2fyz7dC255FI=
 github.com/cubewise-code/go-mime v0.0.0-20200519001935-8c5762b177d8/go.mod h1:4abs/jPXcmJzYoYGF91JF9Uq9s/KL5n1jvFDix8KcqY=
 github.com/cyberdelia/templates v0.0.0-20141128023046-ca7fffd4298c/go.mod h1:GyV+0YP4qX0UQ7r2MoYZ+AvYDp12OF5yg4q8rGnyNh4=
diff --git a/graph-explorer/Makefile b/graph-explorer/Makefile
index e5ab1994f6c..c63bcdeceec 100644
--- a/graph-explorer/Makefile
+++ b/graph-explorer/Makefile
@@ -2,7 +2,7 @@ SHELL := bash
 NAME := graph-explorer
 
 ############ tooling ############
-ifneq (, $(shell which go 2> /dev/null)) # suppress `command not found warnings` for non go targets in CI
+ifneq (, $(shell which go 2> /dev/null)) # supress `command not found warnings` for non go targets in CI
 include ../.bingo/Variables.mk
 endif
 
diff --git a/graph-explorer/templates/CONFIGURATION.tmpl b/graph-explorer/templates/CONFIGURATION.tmpl
index ba9282bc2d6..248d16cda0a 100644
--- a/graph-explorer/templates/CONFIGURATION.tmpl
+++ b/graph-explorer/templates/CONFIGURATION.tmpl
@@ -45,9 +45,9 @@ If you prefer to configure the service with environment variables you can see th
 
 If multiple variables are listed for one option, they are in order of precedence. This means the leftmost variable will always win if given.
 
-### Command-line flags
+### Commandline flags
 
-If you prefer to configure the service with command-line flags you can see the available variables below. Command line flags are only working when calling the subcommand directly.
+If you prefer to configure the service with commandline flags you can see the available variables below. Command line flags are only working when calling the subcommand directly.
 
 {{ $options := .Options -}}
 {{ range $com := .Commands }}{{ with (list $options $com) -}}
diff --git a/graph/Makefile b/graph/Makefile
index dfc7d54a23e..7b62e9198be 100644
--- a/graph/Makefile
+++ b/graph/Makefile
@@ -2,7 +2,7 @@ SHELL := bash
 NAME := graph
 
 ############ tooling ############
-ifneq (, $(shell which go 2> /dev/null)) # suppress `command not found warnings` for non go targets in CI
+ifneq (, $(shell which go 2> /dev/null)) # supress `command not found warnings` for non go targets in CI
 include ../.bingo/Variables.mk
 endif
 
diff --git a/graph/pkg/middleware/auth.go b/graph/pkg/middleware/auth.go
index 1f4be2cd50a..cb624982aa9 100644
--- a/graph/pkg/middleware/auth.go
+++ b/graph/pkg/middleware/auth.go
@@ -22,7 +22,7 @@ func authOptions(opts ...account.Option) account.Options {
 	return opt
 }
 
-// Auth provides a middleware to authenticate requests using the x-access-token header value
+// Auth provides a middleware to authenticate requestrs using the x-access-token header value
 // and write it to the context. If there is no x-access-token the middleware prevents access and renders a json document.
 func Auth(opts ...account.Option) func(http.Handler) http.Handler {
 	opt := authOptions(opts...)
diff --git a/graph/templates/CONFIGURATION.tmpl b/graph/templates/CONFIGURATION.tmpl
index 24c1c4a99bf..33fe7a7d608 100644
--- a/graph/templates/CONFIGURATION.tmpl
+++ b/graph/templates/CONFIGURATION.tmpl
@@ -45,9 +45,9 @@ If you prefer to configure the service with environment variables you can see th
 
 If multiple variables are listed for one option, they are in order of precedence. This means the leftmost variable will always win if given.
 
-### Command-line flags
+### Commandline flags
 
-If you prefer to configure the service with command-line flags you can see the available variables below. Command line flags are only working when calling the subcommand directly.
+If you prefer to configure the service with commandline flags you can see the available variables below. Command line flags are only working when calling the subcommand directly.
 
 {{ $options := .Options -}}
 {{ range $com := .Commands }}{{ with (list $options $com) -}}
diff --git a/idp/Makefile b/idp/Makefile
index c0d158d8f6c..03df0baa615 100644
--- a/idp/Makefile
+++ b/idp/Makefile
@@ -2,7 +2,7 @@ SHELL := bash
 NAME := idp
 
 ############ tooling ############
-ifneq (, $(shell which go 2> /dev/null)) # suppress `command not found warnings` for non go targets in CI
+ifneq (, $(shell which go 2> /dev/null)) # supress `command not found warnings` for non go targets in CI
 include ../.bingo/Variables.mk
 endif
 
diff --git a/idp/pkg/flagset/flagset.go b/idp/pkg/flagset/flagset.go
index 7ee2542b8ef..ba4c2d328ea 100644
--- a/idp/pkg/flagset/flagset.go
+++ b/idp/pkg/flagset/flagset.go
@@ -270,7 +270,7 @@ func ServerWithConfig(cfg *config.Config) []cli.Flag {
 		},
 		&cli.StringFlag{
 			Name:        "validation-keys-path",
-			Usage:       "Full path to a folder containing PEM encoded private or public key files used for token validation (file name without extension is used as kid)",
+			Usage:       "Full path to a folder containg PEM encoded private or public key files used for token validaton (file name without extension is used as kid)",
 			EnvVars:     []string{"IDP_VALIDATION_KEYS_PATH"},
 			Value:       flags.OverrideDefaultString(cfg.IDP.ValidationKeysPath, ""),
 			Destination: &cfg.IDP.ValidationKeysPath,
diff --git a/idp/templates/CONFIGURATION.tmpl b/idp/templates/CONFIGURATION.tmpl
index a2fbcdad111..e49b30c1c2d 100644
--- a/idp/templates/CONFIGURATION.tmpl
+++ b/idp/templates/CONFIGURATION.tmpl
@@ -45,9 +45,9 @@ If you prefer to configure the service with environment variables you can see th
 
 If multiple variables are listed for one option, they are in order of precedence. This means the leftmost variable will always win if given.
 
-### Command-line flags
+### Commandline flags
 
-If you prefer to configure the service with command-line flags you can see the available variables below. Command line flags are only working when calling the subcommand directly.
+If you prefer to configure the service with commandline flags you can see the available variables below. Command line flags are only working when calling the subcommand directly.
 
 {{ $options := .Options -}}
 {{ range $com := .Commands }}{{ with (list $options $com) -}}
diff --git a/idp/ui/Makefile b/idp/ui/Makefile
index 136a346e9a2..16c687ae8d5 100644
--- a/idp/ui/Makefile
+++ b/idp/ui/Makefile
@@ -40,7 +40,7 @@ lint-checkstyle: vendor ; $(info running eslint checkstyle ...)	@
 .PHONY: vendor
 vendor: .yarninstall
 
-.yarninstall: package.json ; $(info getting dependencies with yarn ...)   @
+.yarninstall: package.json ; $(info getting depdencies with yarn ...)   @
 	@$(YARN) install --silent
 	@touch $@
 
diff --git a/idp/ui/src/errors/index.js b/idp/ui/src/errors/index.js
index 5ca38d65509..3a247a7b6dd 100644
--- a/idp/ui/src/errors/index.js
+++ b/idp/ui/src/errors/index.js
@@ -3,7 +3,7 @@ import { injectIntl, defineMessages } from 'react-intl';
 export const ERROR_LOGIN_VALIDATE_MISSINGUSERNAME = 'konnect.error.login.validate.missingUsername';
 export const ERROR_LOGIN_VALIDATE_MISSINGPASSWORD = 'konnect.error.login.validate.missingPassword';
 export const ERROR_LOGIN_FAILED = 'konnect.error.login.failed';
-export const ERROR_HTTP_NETWORK_ERROR = 'konnect.error.http.networkError';
+export const ERROR_HTTP_NETWORK_ERROR = 'konnet.error.http.networkError';
 export const ERROR_HTTP_UNEXPECTED_RESPONSE_STATUS = 'konnect.error.http.unexpectedResponseStatus';
 export const ERROR_HTTP_UNEXPECTED_RESPONSE_STATE = 'konnect.error.http.unexpectedResponseState';
 
diff --git a/idp/ui/src/utils.js b/idp/ui/src/utils.js
index 709dca3b975..cdb9d65fa95 100644
--- a/idp/ui/src/utils.js
+++ b/idp/ui/src/utils.js
@@ -34,7 +34,7 @@ export function propertyFromStylesheet(selector, attribute, asURL=false) {
         return false;
       });
     } catch(e) {
-      // Ignore sheets which caused errors. This for example can happen if an
+      // Ignore sheels which caused errors. This for example can happen if an
       // extension injected styles from an other origin.
       return false;
     }
diff --git a/ocis-pkg/Makefile b/ocis-pkg/Makefile
index c32326e5d3b..2eba870af1d 100644
--- a/ocis-pkg/Makefile
+++ b/ocis-pkg/Makefile
@@ -2,7 +2,7 @@ SHELL := bash
 NAME := ocis-pkg
 
 ############ tooling ############
-ifneq (, $(shell which go 2> /dev/null)) # suppress `command not found warnings` for non go targets in CI
+ifneq (, $(shell which go 2> /dev/null)) # supress `command not found warnings` for non go targets in CI
 include ../.bingo/Variables.mk
 endif
 
diff --git a/ocis/Makefile b/ocis/Makefile
index cec42f633dc..9a361f8d58d 100644
--- a/ocis/Makefile
+++ b/ocis/Makefile
@@ -2,7 +2,7 @@ SHELL := bash
 NAME := ocis
 
 ############ tooling ############
-ifneq (, $(shell which go 2> /dev/null)) # suppress `command not found warnings` for non go targets in CI
+ifneq (, $(shell which go 2> /dev/null)) # supress `command not found warnings` for non go targets in CI
 include ../.bingo/Variables.mk
 endif
 
diff --git a/ocis/docker/Dockerfile.linux.amd64 b/ocis/docker/Dockerfile.linux.amd64
index 8d145ff8756..57bbc44da73 100644
--- a/ocis/docker/Dockerfile.linux.amd64
+++ b/ocis/docker/Dockerfile.linux.amd64
@@ -28,7 +28,7 @@ RUN mkdir -p /var/tmp/ocis && \
  chown -R ocis-user:ocis-group /var/tmp/ocis && \
  chmod -R 777 /var/tmp/ocis
 
-# default artifact location for autogenerated certificates
+# default artifact location for autogenerated certifaces
 # needs to be a static location because of the docker uid switch mechanism
 ENV GLAUTH_LDAPS_CERT=/var/tmp/ocis/.config/ldap/ldaps.crt \
   GLAUTH_LDAPS_KEY=/var/tmp/ocis/.config/ldap/ldaps.key \
diff --git a/ocis/docker/Dockerfile.linux.arm b/ocis/docker/Dockerfile.linux.arm
index a0408d340b4..ed6ce63f576 100644
--- a/ocis/docker/Dockerfile.linux.arm
+++ b/ocis/docker/Dockerfile.linux.arm
@@ -28,7 +28,7 @@ RUN mkdir -p /var/tmp/ocis && \
  chown -R ocis-user:ocis-group /var/tmp/ocis && \
  chmod -R 777 /var/tmp/ocis
 
-# default artifact location for autogenerated certificates
+# default artifact location for autogenerated certifaces
 # needs to be a static location because of the docker uid switch mechanism
 ENV GLAUTH_LDAPS_CERT=/var/tmp/ocis/.config/ldap/ldaps.crt \
   GLAUTH_LDAPS_KEY=/var/tmp/ocis/.config/ldap/ldaps.key \
diff --git a/ocis/docker/Dockerfile.linux.arm64 b/ocis/docker/Dockerfile.linux.arm64
index b8c9e829270..35892e86545 100644
--- a/ocis/docker/Dockerfile.linux.arm64
+++ b/ocis/docker/Dockerfile.linux.arm64
@@ -28,7 +28,7 @@ RUN mkdir -p /var/tmp/ocis && \
  chown -R ocis-user:ocis-group /var/tmp/ocis && \
  chmod -R 777 /var/tmp/ocis
 
-# default artifact location for autogenerated certificates
+# default artifact location for autogenerated certifaces
 # needs to be a static location because of the docker uid switch mechanism
 ENV GLAUTH_LDAPS_CERT=/var/tmp/ocis/.config/ldap/ldaps.crt \
   GLAUTH_LDAPS_KEY=/var/tmp/ocis/.config/ldap/ldaps.key \
diff --git a/ocis/templates/CONFIGURATION.tmpl b/ocis/templates/CONFIGURATION.tmpl
index 465d32e27e6..bb0e419d14b 100644
--- a/ocis/templates/CONFIGURATION.tmpl
+++ b/ocis/templates/CONFIGURATION.tmpl
@@ -49,9 +49,9 @@ If you prefer to configure the service with environment variables you can see th
 
 If multiple variables are listed for one option, they are in order of precedence. This means the leftmost variable will always win if given.
 
-### Command-line flags
+### Commandline flags
 
-If you prefer to configure the service with command-line flags you can see the available variables below. Command line flags are only working when calling the subcommand directly.
+If you prefer to configure the service with commandline flags you can see the available variables below. Command line flags are only working when calling the subcommand directly.
 
 {{ $options := .Options -}}
 {{ range $com := .Commands }}{{ with (list $options $com) -}}
diff --git a/ocs/Makefile b/ocs/Makefile
index 0bfbe80f209..d1d11683eef 100644
--- a/ocs/Makefile
+++ b/ocs/Makefile
@@ -2,7 +2,7 @@ SHELL := bash
 NAME := ocs
 
 ############ tooling ############
-ifneq (, $(shell which go 2> /dev/null)) # suppress `command not found warnings` for non go targets in CI
+ifneq (, $(shell which go 2> /dev/null)) # supress `command not found warnings` for non go targets in CI
 include ../.bingo/Variables.mk
 endif
 
diff --git a/ocs/pkg/middleware/requireselforadmin.go b/ocs/pkg/middleware/requireselforadmin.go
index 16b19a78cd5..74d2f29a36a 100644
--- a/ocs/pkg/middleware/requireselforadmin.go
+++ b/ocs/pkg/middleware/requireselforadmin.go
@@ -2,7 +2,6 @@ package middleware
 
 import (
 	"net/http"
-	"net/url"
 
 	revactx "github.com/cs3org/reva/pkg/ctx"
 	"github.com/go-chi/chi/v5"
@@ -45,11 +44,6 @@ func RequireSelfOrAdmin(opts ...Option) func(next http.Handler) http.Handler {
 			// check if self management permission is present in roles of the authenticated account
 			if opt.RoleManager.FindPermissionByID(r.Context(), roleIDs, accounts.SelfManagementPermissionID) != nil {
 				userid := chi.URLParam(r, "userid")
-				var err error
-				if userid, err = url.PathUnescape(userid); err != nil {
-					mustNotFail(render.Render(w, r, response.ErrRender(data.MetaBadRequest.StatusCode, "malformed username")))
-				}
-
 				if userid == "" || userid == u.Id.OpaqueId || userid == u.Username {
 					next.ServeHTTP(w, r)
 					return
diff --git a/ocs/pkg/service/v0/response/response.go b/ocs/pkg/service/v0/response/response.go
index 40fecaa385b..c3cfa382426 100644
--- a/ocs/pkg/service/v0/response/response.go
+++ b/ocs/pkg/service/v0/response/response.go
@@ -90,7 +90,7 @@ func DataRender(d interface{}) render.Renderer {
 	}
 }
 
-// ErrRender creates an Error Payload with the given OCS error code and message
+// ErrRender creates an Error Paylod with the given OCS error code and message
 // The httpcode will be determined using the API version stored in the context
 func ErrRender(c int, m string) render.Renderer {
 	return &Response{
diff --git a/ocs/templates/CONFIGURATION.tmpl b/ocs/templates/CONFIGURATION.tmpl
index 5b58de0732f..87b3eb3882b 100644
--- a/ocs/templates/CONFIGURATION.tmpl
+++ b/ocs/templates/CONFIGURATION.tmpl
@@ -45,9 +45,9 @@ If you prefer to configure the service with environment variables you can see th
 
 If multiple variables are listed for one option, they are in order of precedence. This means the leftmost variable will always win if given.
 
-### Command-line flags
+### Commandline flags
 
-If you prefer to configure the service with command-line flags you can see the available variables below. Command line flags are only working when calling the subcommand directly.
+If you prefer to configure the service with commandline flags you can see the available variables below. Command line flags are only working when calling the subcommand directly.
 
 {{ $options := .Options -}}
 {{ range $com := .Commands }}{{ with (list $options $com) -}}
diff --git a/proxy/Makefile b/proxy/Makefile
index 85e94f59e05..eb4a47e2075 100644
--- a/proxy/Makefile
+++ b/proxy/Makefile
@@ -2,7 +2,7 @@ SHELL := bash
 NAME := proxy
 
 ############ tooling ############
-ifneq (, $(shell which go 2> /dev/null)) # suppress `command not found warnings` for non go targets in CI
+ifneq (, $(shell which go 2> /dev/null)) # supress `command not found warnings` for non go targets in CI
 include ../.bingo/Variables.mk
 endif
 
diff --git a/proxy/pkg/config/config.go b/proxy/pkg/config/config.go
index 3af176389f7..e2633027410 100644
--- a/proxy/pkg/config/config.go
+++ b/proxy/pkg/config/config.go
@@ -70,7 +70,7 @@ type RouteType string
 const (
 	// PrefixRoute are routes matched by a prefix
 	PrefixRoute RouteType = "prefix"
-	// QueryRoute are routes matched by a prefix and query parameters
+	// QueryRoute are routes machted by a prefix and query parameters
 	QueryRoute RouteType = "query"
 	// RegexRoute are routes matched by a pattern
 	RegexRoute RouteType = "regex"
diff --git a/proxy/pkg/proxy/proxy.go b/proxy/pkg/proxy/proxy.go
index 0d8aea603c0..e1b729df8d0 100644
--- a/proxy/pkg/proxy/proxy.go
+++ b/proxy/pkg/proxy/proxy.go
@@ -290,6 +290,10 @@ func defaultPolicies() []config.Policy {
 					Endpoint: "/signin/",
 					Backend:  "http://localhost:9130",
 				},
+				{
+					Endpoint: "/archiver",
+					Backend:  "http://localhost:9140",
+				},
 				{
 					Type:     config.RegexRoute,
 					Endpoint: "/ocs/v[12].php/cloud/(users?|groups)", // we have `user`, `users` and `groups` in ocis-ocs
@@ -379,6 +383,10 @@ func defaultPolicies() []config.Policy {
 					Endpoint: "/signin/",
 					Backend:  "http://localhost:9130",
 				},
+				{
+					Endpoint: "/archiver",
+					Backend:  "http://localhost:9140",
+				},
 				{
 					Endpoint:    "/ocs/",
 					Backend:     "https://demo.owncloud.com",
diff --git a/proxy/templates/CONFIGURATION.tmpl b/proxy/templates/CONFIGURATION.tmpl
index b944a58924d..43a4ada7868 100644
--- a/proxy/templates/CONFIGURATION.tmpl
+++ b/proxy/templates/CONFIGURATION.tmpl
@@ -45,9 +45,9 @@ If you prefer to configure the service with environment variables you can see th
 
 If multiple variables are listed for one option, they are in order of precedence. This means the leftmost variable will always win if given.
 
-### Command-line flags
+### Commandline flags
 
-If you prefer to configure the service with command-line flags you can see the available variables below. Command line flags are only working when calling the subcommand directly.
+If you prefer to configure the service with commandline flags you can see the available variables below. Command line flags are only working when calling the subcommand directly.
 
 {{ $options := .Options -}}
 {{ range $com := .Commands }}{{ with (list $options $com) -}}
diff --git a/settings/Makefile b/settings/Makefile
index 3889e4cb1a8..3d50e84a521 100644
--- a/settings/Makefile
+++ b/settings/Makefile
@@ -7,7 +7,7 @@ test-acceptance-webui:
 
 
 ############ tooling ############
-ifneq (, $(shell which go 2> /dev/null)) # suppress `command not found warnings` for non go targets in CI
+ifneq (, $(shell which go 2> /dev/null)) # supress `command not found warnings` for non go targets in CI
 include ../.bingo/Variables.mk
 endif
 
diff --git a/settings/l10n/translations.json b/settings/l10n/translations.json
index 6901aeb01fe..feb557c7e3b 100644
--- a/settings/l10n/translations.json
+++ b/settings/l10n/translations.json
@@ -1,1 +1,1 @@
-{"de":{"{{ bundle.displayName }}":"{{ bundle.displayName }}","Account":"Konto","Cancel":"Abbrechen","Hello":"Hallo","Language":"Sprache","Loading personal settings":"Lade persönliche Einstellungen","Loading personal settings...":"Lade persönliche Einstellungen...","msg":"msg","No settings available":"Keine Einstellungen verfügbar","Save":"Speichern","Settings":"Einstellungen","Settings type not implemented: %{type}":"Einstellungs-Typ nicht verfügbar: %{type}"},"de_DE":{"{{ bundle.displayName }}":"{{ bundle.displayName }}","Account":"Benutzerkonto","Cancel":"Abbrechen","Hello":"Hallo","Language":"Sprache","Loading personal settings":"Lade persönliche Einstellungen","Loading personal settings...":"Lade persönliche Einstellungen...","msg":"msg","No settings available":"Keine Einstellungen verfügbar","Save":"Speichern","Settings":"Einstellungen","Settings type not implemented: %{type}":"Einstellungs-Typ nicht verfügbar: %{type}"},"el":{"{{ bundle.displayName }}":"{{ bundle.displayName }}","Account":"Λογαριασμός","Cancel":"Aκύρωση","Hello":"Γεια σας","Language":"Γλώσσα","Loading personal settings":"Γίνεται φόρτωση προσωπικών ρυθμίσεων","Loading personal settings...":"Γίνεται φόρτωση προσωπικών ρυθμίσεων...","msg":"μνμ","No settings available":"Δεν υπάρχουν διαθέσιμες ρυθμίσεις","Save":"Αποθήκευση","Settings":"Ρυθμίσεις","Settings type not implemented: %{type}":"Ο τύπος ρυθμίσεων δεν εφαρμόστηκε: %{type}"},"es":{"{{ bundle.displayName }}":"{{bundle.displayName}}","Account":"Cuenta","Cancel":"Cancelar","Hello":"Hola","Language":"Idioma","Loading personal settings":"Cargando configuraciones personales","Loading personal settings...":"Cargando configuración personal ...","msg":"msg","No settings available":"No hay configuraciones disponibles","Save":"Guardar","Settings":"Configuración","Settings type not implemented: %{type}":"Tipo de configuración no implementado: %{type}"},"pl":{"{{ bundle.displayName }}":"{{ bundle.displayName }}","Account":"Konto","Cancel":"Anuluj","Hello":"Witaj","Language":"Język","Loading personal settings":"Ładowanie ustawień osobistych","Loading personal settings...":"Ładowanie ustawień osobistych...","msg":"wiad","No settings available":"Brak dostępnych ustawień","Save":"Zapisz","Settings":"Ustawienia","Settings type not implemented: %{type}":"Typ ustawień nie jest wdrożony: %{type}"},"pt_BR":{"{{ bundle.displayName }}":"{{ bundle.displayName }}","Account":"Conta","Cancel":"Cancelar","Hello":"Olá","Language":"Idioma","Loading personal settings":"Carregando configurações pessoais ","Loading personal settings...":"Carregando configurações pessoais... ","msg":"msg","No settings available":"Nenhuma configuração disponível ","Save":"Salvar","Settings":"Configurações","Settings type not implemented: %{type}":"Tipo de configuração não implementado: %{type}"},"ru":{"{{ bundle.displayName }}":"{{ bundle.displayName }}","Account":"Уч.запись","Cancel":"Отмена","Hello":"Здравствуйте","Language":"Язык","Loading personal settings":"Загрузка личных настроек","Loading personal settings...":"Загрузка личных настроек…","msg":"сообщ","No settings available":"Нет доступных настроек","Save":"Сохранить","Settings":"Настройки","Settings type not implemented: %{type}":"Тип настроек не реализован: %{type}"},"sq":{"{{ bundle.displayName }}":"{{ bundle.displayName }}","Account":"Llogari","Cancel":"Anuloje","Hello":"Tungjatjeta","Language":"Gjuhë","Loading personal settings":"Ngarkim rregullimesh personale","Loading personal settings...":"Po ngarkohen rregullime personale…","msg":"msz","No settings available":"S’ka rregullime","Save":"Ruaje","Settings":"Rregullime","Settings type not implemented: %{type}":"Lloj rregullimi i pasendërtuar: %{type}"},"th_TH":{"{{ bundle.displayName }}":"{{ bundle.displayName }}","Account":"บัญชี","Cancel":"ยกเลิก","Hello":"สวัสดี","Language":"ภาษา","Loading personal settings":"กำลังโหลดการตั้งค่าส่วนบุคคล","Loading personal settings...":"กำลังโหลดการตั้งค่าส่วนบุคคล...","msg":"msg","No settings available":"ไม่มีการตั้งค่า","Save":"บันทึก","Settings":"ตั้งค่า","Settings type not implemented: %{type}":"ประเภทการตั้งค่าที่ยังไม่ถูกดำเนินการ: %{type}"}}
\ No newline at end of file
+{"de":{"{{ bundle.displayName }}":"{{ bundle.displayName }}","Account":"Konto","Cancel":"Abbrechen","Hello":"Hallo","Language":"Sprache","Loading personal settings":"Lade persönliche Einstellungen","Loading personal settings...":"Lade persönliche Einstellungen...","msg":"msg","No settings available":"Keine Einstellungen verfügbar","Save":"Speichern","Settings":"Einstellungen","Settings type not implemented: %{type}":"Einstellungs-Typ nicht verfügbar: %{type}"},"de_DE":{"{{ bundle.displayName }}":"{{ bundle.displayName }}","Account":"Benutzerkonto","Cancel":"Abbrechen","Hello":"Hallo","Language":"Sprache","Loading personal settings":"Lade persönliche Einstellungen","Loading personal settings...":"Lade persönliche Einstellungen...","msg":"msg","No settings available":"Keine Einstellungen verfügbar","Save":"Speichern","Settings":"Einstellungen","Settings type not implemented: %{type}":"Einstellungs-Typ nicht verfügbar: %{type}"},"es":{"{{ bundle.displayName }}":"{{bundle.displayName}}","Account":"Cuenta","Cancel":"Cancelar","Hello":"Hola","Language":"Idioma","Loading personal settings":"Cargando configuraciones personales","Loading personal settings...":"Cargando configuración personal ...","msg":"msg","No settings available":"No hay configuraciones disponibles","Save":"Guardar","Settings":"Configuración","Settings type not implemented: %{type}":"Tipo de configuración no implementado: %{type}"},"pl":{"{{ bundle.displayName }}":"{{ bundle.displayName }}","Account":"Konto","Cancel":"Anuluj","Hello":"Witaj","Language":"Język","Loading personal settings":"Ładowanie ustawień osobistych","Loading personal settings...":"Ładowanie ustawień osobistych...","msg":"wiad","No settings available":"Brak dostępnych ustawień","Save":"Zapisz","Settings":"Ustawienia","Settings type not implemented: %{type}":"Typ ustawień nie jest wdrożony: %{type}"},"pt_BR":{"{{ bundle.displayName }}":"{{ bundle.displayName }}","Account":"Conta","Cancel":"Cancelar","Hello":"Olá","Language":"Idioma","Loading personal settings":"Carregando configurações pessoais ","Loading personal settings...":"Carregando configurações pessoais... ","msg":"msg","No settings available":"Nenhuma configuração disponível ","Save":"Salvar","Settings":"Configurações","Settings type not implemented: %{type}":"Tipo de configuração não implementado: %{type}"},"ru":{"{{ bundle.displayName }}":"{{ bundle.displayName }}","Account":"Уч.запись","Cancel":"Отмена","Hello":"Здравствуйте","Language":"Язык","Loading personal settings":"Загрузка личных настроек","Loading personal settings...":"Загрузка личных настроек…","msg":"сообщ","No settings available":"Нет доступных настроек","Save":"Сохранить","Settings":"Настройки","Settings type not implemented: %{type}":"Тип настроек не реализован: %{type}"},"sq":{"{{ bundle.displayName }}":"{{ bundle.displayName }}","Account":"Llogari","Cancel":"Anuloje","Hello":"Tungjatjeta","Language":"Gjuhë","Loading personal settings":"Ngarkim rregullimesh personale","Loading personal settings...":"Po ngarkohen rregullime personale…","msg":"msz","No settings available":"S’ka rregullime","Save":"Ruaje","Settings":"Rregullime","Settings type not implemented: %{type}":"Lloj rregullimi i pasendërtuar: %{type}"},"th_TH":{"{{ bundle.displayName }}":"{{ bundle.displayName }}","Account":"บัญชี","Cancel":"ยกเลิก","Hello":"สวัสดี","Language":"ภาษา","Loading personal settings":"กำลังโหลดการตั้งค่าส่วนบุคคล","Loading personal settings...":"กำลังโหลดการตั้งค่าส่วนบุคคล...","msg":"msg","No settings available":"ไม่มีการตั้งค่า","Save":"บันทึก","Settings":"ตั้งค่า","Settings type not implemented: %{type}":"ประเภทการตั้งค่าที่ยังไม่ถูกดำเนินการ: %{type}"}}
\ No newline at end of file
diff --git a/settings/templates/CONFIGURATION.tmpl b/settings/templates/CONFIGURATION.tmpl
index 0bbef699e9c..1c8924e1b15 100644
--- a/settings/templates/CONFIGURATION.tmpl
+++ b/settings/templates/CONFIGURATION.tmpl
@@ -45,9 +45,9 @@ If you prefer to configure the service with environment variables you can see th
 
 If multiple variables are listed for one option, they are in order of precedence. This means the leftmost variable will always win if given.
 
-### Command-line flags
+### Commandline flags
 
-If you prefer to configure the service with command-line flags you can see the available variables below. Command line flags are only working when calling the subcommand directly.
+If you prefer to configure the service with commandline flags you can see the available variables below. Command line flags are only working when calling the subcommand directly.
 
 {{ $options := .Options -}}
 {{ range $com := .Commands }}{{ with (list $options $com) -}}
diff --git a/settings/ui/components/SettingsApp.vue b/settings/ui/components/SettingsApp.vue
index acc0e85ad2b..eff825686c0 100644
--- a/settings/ui/components/SettingsApp.vue
+++ b/settings/ui/components/SettingsApp.vue
@@ -27,7 +27,7 @@
           </template>
           <div class="oc-mt" v-else>
             <oc-loader :aria-label="$gettext('Loading personal settings')" />
-            <oc-alert :aria-hidden="true" variation="primary" no-close>
+            <oc-alert :aria-hidden="true" varition="primary" no-close>
               <p v-translate>Loading personal settings...</p>
             </oc-alert>
           </div>
diff --git a/sonar-project.properties b/sonar-project.properties
index 41c6a0089a0..3e1ed159473 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=1.12.0
+sonar.projectVersion=1.10.0
 sonar.host.url=https://sonarcloud.io
 
 # =====================================================
diff --git a/storage/Makefile b/storage/Makefile
index bc2de8e8a8b..27a6a6ab322 100644
--- a/storage/Makefile
+++ b/storage/Makefile
@@ -2,7 +2,7 @@ SHELL := bash
 NAME := storage
 
 ############ tooling ############
-ifneq (, $(shell which go 2> /dev/null)) # suppress `command not found warnings` for non go targets in CI
+ifneq (, $(shell which go 2> /dev/null)) # supress `command not found warnings` for non go targets in CI
 include ../.bingo/Variables.mk
 endif
 
diff --git a/storage/pkg/command/authbasic.go b/storage/pkg/command/authbasic.go
index 7b1bd96b97c..3e0d11db410 100644
--- a/storage/pkg/command/authbasic.go
+++ b/storage/pkg/command/authbasic.go
@@ -114,8 +114,6 @@ func authBasicConfigFromStruct(c *cli.Context, cfg *config.Config) map[string]in
 						"ldap": map[string]interface{}{
 							"hostname":      cfg.Reva.LDAP.Hostname,
 							"port":          cfg.Reva.LDAP.Port,
-							"cacert":        cfg.Reva.LDAP.CACert,
-							"insecure":      cfg.Reva.LDAP.Insecure,
 							"base_dn":       cfg.Reva.LDAP.BaseDN,
 							"loginfilter":   cfg.Reva.LDAP.LoginFilter,
 							"bind_username": cfg.Reva.LDAP.BindDN,
diff --git a/storage/pkg/command/frontend.go b/storage/pkg/command/frontend.go
index 54be10196c3..1ad2ef05e56 100644
--- a/storage/pkg/command/frontend.go
+++ b/storage/pkg/command/frontend.go
@@ -30,7 +30,7 @@ func Frontend(cfg *config.Config) *cli.Command {
 		Flags: flagset.FrontendWithConfig(cfg),
 		Before: func(c *cli.Context) error {
 			cfg.Reva.Frontend.Services = c.StringSlice("service")
-			cfg.Reva.ChecksumSupportedTypes = c.StringSlice("checksum-supported-type")
+			cfg.Reva.ChecksumSupportedTypes = c.StringSlice("checksum-suppored-type")
 			return loadUserAgent(c, cfg)
 		},
 		Action: func(c *cli.Context) error {
@@ -147,6 +147,13 @@ func frontendConfigFromStruct(c *cli.Context, cfg *config.Config, filesCfg map[s
 					"timeout":                86400,
 					"insecure":               true,
 				},
+				"archiver": map[string]interface{}{
+					"prefix":        cfg.Reva.Frontend.ArchiverPrefix,
+					"timeout":       86400,
+					"insecure":      true,
+					"max_num_files": cfg.Reva.Archiver.MaxNumFiles,
+					"max_size":      cfg.Reva.Archiver.MaxSize,
+				},
 				"datagateway": map[string]interface{}{
 					"prefix":                 cfg.Reva.Frontend.DatagatewayPrefix,
 					"transfer_shared_secret": cfg.Reva.TransferSecret,
@@ -250,6 +257,9 @@ func frontendConfigFromStruct(c *cli.Context, cfg *config.Config, filesCfg map[s
 									"incoming": true,
 								},
 							},
+							"notifications": map[string]interface{}{
+								"endpoints": []string{"disable"},
+							},
 						},
 						"version": map[string]interface{}{
 							"edition": "reva",
diff --git a/storage/pkg/command/groups.go b/storage/pkg/command/groups.go
index 0c11d3d18a8..47f0bbb4e8d 100644
--- a/storage/pkg/command/groups.go
+++ b/storage/pkg/command/groups.go
@@ -118,8 +118,6 @@ func groupsConfigFromStruct(c *cli.Context, cfg *config.Config) map[string]inter
 						"ldap": map[string]interface{}{
 							"hostname":        cfg.Reva.LDAP.Hostname,
 							"port":            cfg.Reva.LDAP.Port,
-							"cacert":          cfg.Reva.LDAP.CACert,
-							"insecure":        cfg.Reva.LDAP.Insecure,
 							"base_dn":         cfg.Reva.LDAP.BaseDN,
 							"groupfilter":     cfg.Reva.LDAP.GroupFilter,
 							"attributefilter": cfg.Reva.LDAP.GroupAttributeFilter,
diff --git a/storage/pkg/command/users.go b/storage/pkg/command/users.go
index 24ef2b57369..4836afe6d49 100644
--- a/storage/pkg/command/users.go
+++ b/storage/pkg/command/users.go
@@ -121,8 +121,6 @@ func usersConfigFromStruct(c *cli.Context, cfg *config.Config) map[string]interf
 						"ldap": map[string]interface{}{
 							"hostname":        cfg.Reva.LDAP.Hostname,
 							"port":            cfg.Reva.LDAP.Port,
-							"cacert":          cfg.Reva.LDAP.CACert,
-							"insecure":        cfg.Reva.LDAP.Insecure,
 							"base_dn":         cfg.Reva.LDAP.BaseDN,
 							"userfilter":      cfg.Reva.LDAP.UserFilter,
 							"attributefilter": cfg.Reva.LDAP.UserAttributeFilter,
diff --git a/storage/pkg/config/config.go b/storage/pkg/config/config.go
index e50bc34c51a..7539eea6cb5 100644
--- a/storage/pkg/config/config.go
+++ b/storage/pkg/config/config.go
@@ -132,6 +132,7 @@ type FrontendPort struct {
 	Port
 
 	AppProviderPrefix       string
+	ArchiverPrefix          string
 	DatagatewayPrefix       string
 	OCDavPrefix             string
 	OCSPrefix               string
@@ -332,8 +333,6 @@ type OIDC struct {
 type LDAP struct {
 	Hostname             string
 	Port                 int
-	CACert               string
-	Insecure             bool
 	BaseDN               string
 	LoginFilter          string
 	UserFilter           string
@@ -403,6 +402,12 @@ type OCDav struct {
 	DavFilesNamespace string
 }
 
+// Archiver defines the available archiver configuration.
+type Archiver struct {
+	MaxNumFiles int64
+	MaxSize     int64
+}
+
 // Reva defines the available reva configuration.
 type Reva struct {
 	// JWTSecret used to sign jwt tokens between services
@@ -414,6 +419,7 @@ type Reva struct {
 	UserGroupRest   UserGroupRest
 	UserOwnCloudSQL UserOwnCloudSQL
 	OCDav           OCDav
+	Archiver        Archiver
 	Storages        StorageConfig
 	// Ports are used to configure which services to start on which port
 	Frontend          FrontendPort
diff --git a/storage/pkg/flagset/frontend.go b/storage/pkg/flagset/frontend.go
index aeebbb2aa2e..e2ccc3eea8b 100644
--- a/storage/pkg/flagset/frontend.go
+++ b/storage/pkg/flagset/frontend.go
@@ -57,6 +57,23 @@ func FrontendWithConfig(cfg *config.Config) []cli.Flag {
 			Destination: &cfg.Reva.OCDav.DavFilesNamespace,
 		},
 
+		// Archiver
+
+		&cli.Int64Flag{
+			Name:        "archiver-max-num-files",
+			Value:       flags.OverrideDefaultInt64(cfg.Reva.Archiver.MaxNumFiles, 10000),
+			Usage:       "Maximum number of files to be included in the archiver",
+			EnvVars:     []string{"STORAGE_ARCHIVER_MAX_NUM_FILES"},
+			Destination: &cfg.Reva.Archiver.MaxNumFiles,
+		},
+		&cli.Int64Flag{
+			Name:        "archiver-max-size",
+			Value:       flags.OverrideDefaultInt64(cfg.Reva.Archiver.MaxSize, 1073741824), // 1GB
+			Usage:       "Maximum size for the sum of the sizes of all the files included in the archive",
+			EnvVars:     []string{"STORAGE_ARCHIVER_MAX_SIZE"},
+			Destination: &cfg.Reva.Archiver.MaxSize,
+		},
+
 		// Services
 
 		// Frontend
@@ -98,6 +115,13 @@ func FrontendWithConfig(cfg *config.Config) []cli.Flag {
 			EnvVars:     []string{"STORAGE_FRONTEND_APPPROVIDER_PREFIX"},
 			Destination: &cfg.Reva.Frontend.AppProviderPrefix,
 		},
+		&cli.StringFlag{
+			Name:        "archiver-prefix",
+			Value:       flags.OverrideDefaultString(cfg.Reva.Frontend.ArchiverPrefix, "archiver"),
+			Usage:       "archiver prefix",
+			EnvVars:     []string{"STORAGE_FRONTEND_ARCHIVER_PREFIX"},
+			Destination: &cfg.Reva.Frontend.ArchiverPrefix,
+		},
 		&cli.StringFlag{
 			Name:        "datagateway-prefix",
 			Value:       flags.OverrideDefaultString(cfg.Reva.Frontend.DatagatewayPrefix, "data"),
@@ -180,9 +204,9 @@ func FrontendWithConfig(cfg *config.Config) []cli.Flag {
 			Destination: &cfg.Reva.UploadHTTPMethodOverride,
 		},
 		&cli.StringSliceFlag{
-			Name:    "checksum-supported-type",
+			Name:    "checksum-suppored-type",
 			Value:   cli.NewStringSlice("sha1", "md5", "adler32"),
-			Usage:   "--checksum-supported-type sha1 [--checksum-supported-type adler32]",
+			Usage:   "--checksum-suppored-type sha1 [--checksum-suppored-type adler32]",
 			EnvVars: []string{"STORAGE_FRONTEND_CHECKSUM_SUPPORTED_TYPES"},
 		},
 		&cli.StringFlag{
diff --git a/storage/pkg/flagset/ldap.go b/storage/pkg/flagset/ldap.go
index cea3c2bddba..b5f069a45b4 100644
--- a/storage/pkg/flagset/ldap.go
+++ b/storage/pkg/flagset/ldap.go
@@ -1,11 +1,8 @@
 package flagset
 
 import (
-	"path"
-
 	"github.com/micro/cli/v2"
 	"github.com/owncloud/ocis/ocis-pkg/flags"
-	pkgos "github.com/owncloud/ocis/ocis-pkg/os"
 	"github.com/owncloud/ocis/storage/pkg/config"
 )
 
@@ -26,20 +23,6 @@ func LDAPWithConfig(cfg *config.Config) []cli.Flag {
 			EnvVars:     []string{"STORAGE_LDAP_PORT"},
 			Destination: &cfg.Reva.LDAP.Port,
 		},
-		&cli.StringFlag{
-			Name:        "ldap-cacert",
-			Value:       flags.OverrideDefaultString(cfg.Reva.LDAP.CACert, path.Join(pkgos.MustUserConfigDir("ocis", "ldap"), "ldap.crt")),
-			Usage:       "Path to a trusted Certificate file (in PEM format) for the LDAP Connection",
-			EnvVars:     []string{"STORAGE_LDAP_CACERT"},
-			Destination: &cfg.Reva.LDAP.CACert,
-		},
-		&cli.BoolFlag{
-			Name:        "ldap-insecure",
-			Value:       flags.OverrideDefaultBool(cfg.Reva.LDAP.Insecure, false),
-			Usage:       "Disable TLS certificate and hostname validation",
-			EnvVars:     []string{"STORAGE_LDAP_INSECURE"},
-			Destination: &cfg.Reva.LDAP.Insecure,
-		},
 		&cli.StringFlag{
 			Name:        "ldap-base-dn",
 			Value:       flags.OverrideDefaultString(cfg.Reva.LDAP.BaseDN, "dc=example,dc=org"),
diff --git a/storage/pkg/flagset/sharingsql.go b/storage/pkg/flagset/sharingsql.go
index 5851c0bdfa5..e4770b4a9a4 100644
--- a/storage/pkg/flagset/sharingsql.go
+++ b/storage/pkg/flagset/sharingsql.go
@@ -6,7 +6,7 @@ import (
 	"github.com/owncloud/ocis/storage/pkg/config"
 )
 
-// SharingSQLWithConfig applies the Sharing SQL driver cfg to the flagset
+// SharingSQLWithConfig applies the Shring SQL driver cfg to the flagset
 func SharingSQLWithConfig(cfg *config.Config) []cli.Flag {
 	return []cli.Flag{
 		&cli.StringFlag{
diff --git a/storage/templates/CONFIGURATION.tmpl b/storage/templates/CONFIGURATION.tmpl
index ad41b82c7c1..b048073133d 100644
--- a/storage/templates/CONFIGURATION.tmpl
+++ b/storage/templates/CONFIGURATION.tmpl
@@ -58,9 +58,9 @@ If you prefer to configure the service with environment variables you can see th
 
 If multiple variables are listed for one option, they are in order of precedence. This means the leftmost variable will always win if given.
 
-### Command-line flags
+### Commandline flags
 
-If you prefer to configure the service with command-line flags you can see the available variables below. Command line flags are only working when calling the subcommand directly.
+If you prefer to configure the service with commandline flags you can see the available variables below. Command line flags are only working when calling the subcommand directly.
 
 {{ $options := .Options -}}
 {{ range $com := .Commands }}{{ with (list $options $com) -}}
diff --git a/store/Makefile b/store/Makefile
index 66bec57a365..6805484e234 100644
--- a/store/Makefile
+++ b/store/Makefile
@@ -2,7 +2,7 @@ SHELL := bash
 NAME := store
 
 ############ tooling ############
-ifneq (, $(shell which go 2> /dev/null)) # suppress `command not found warnings` for non go targets in CI
+ifneq (, $(shell which go 2> /dev/null)) # supress `command not found warnings` for non go targets in CI
 include ../.bingo/Variables.mk
 endif
 
diff --git a/store/templates/CONFIGURATION.tmpl b/store/templates/CONFIGURATION.tmpl
index b783d239bb5..724c9310a66 100644
--- a/store/templates/CONFIGURATION.tmpl
+++ b/store/templates/CONFIGURATION.tmpl
@@ -45,9 +45,9 @@ If you prefer to configure the service with environment variables you can see th
 
 If multiple variables are listed for one option, they are in order of precedence. This means the leftmost variable will always win if given.
 
-### Command-line flags
+### Commandline flags
 
-If you prefer to configure the service with command-line flags you can see the available variables below. Command line flags are only working when calling the subcommand directly.
+If you prefer to configure the service with commandline flags you can see the available variables below. Command line flags are only working when calling the subcommand directly.
 
 {{ $options := .Options -}}
 {{ range $com := .Commands }}{{ with (list $options $com) -}}
diff --git a/thumbnails/Makefile b/thumbnails/Makefile
index 373e21247fe..d4f4b8d9e47 100644
--- a/thumbnails/Makefile
+++ b/thumbnails/Makefile
@@ -2,7 +2,7 @@ SHELL := bash
 NAME := thumbnails
 
 ############ tooling ############
-ifneq (, $(shell which go 2> /dev/null)) # suppress `command not found warnings` for non go targets in CI
+ifneq (, $(shell which go 2> /dev/null)) # supress `command not found warnings` for non go targets in CI
 include ../.bingo/Variables.mk
 endif
 
diff --git a/thumbnails/pkg/thumbnail/resolutions.go b/thumbnails/pkg/thumbnail/resolutions.go
index 0a00054ddce..dc8c2719851 100644
--- a/thumbnails/pkg/thumbnail/resolutions.go
+++ b/thumbnails/pkg/thumbnail/resolutions.go
@@ -11,12 +11,12 @@ import (
 )
 
 const (
-	_resolutionSeparator = "x"
+	_resolutionSeperator = "x"
 )
 
 // ParseResolution returns an image.Rectangle representing the resolution given as a string
 func ParseResolution(s string) (image.Rectangle, error) {
-	parts := strings.Split(s, _resolutionSeparator)
+	parts := strings.Split(s, _resolutionSeperator)
 	if len(parts) != 2 {
 		return image.Rectangle{}, fmt.Errorf("failed to parse resolution: %s. Expected format <width>x<height>", s)
 	}
@@ -78,7 +78,7 @@ func (rs Resolutions) ClosestMatch(requested image.Rectangle, sourceSize image.R
 		}
 
 		// Convert diff to positive value
-		// Multiplying by -1 is safe since we aren't getting positive numbers here
+		// Multiplying by -1 is safe since we aren't getting postive numbers here
 		// because of the check above
 		absDiff := diff * -1
 		if absDiff < minDiff {
diff --git a/thumbnails/templates/CONFIGURATION.tmpl b/thumbnails/templates/CONFIGURATION.tmpl
index 02a7f7843b8..b9e2ec34798 100644
--- a/thumbnails/templates/CONFIGURATION.tmpl
+++ b/thumbnails/templates/CONFIGURATION.tmpl
@@ -45,9 +45,9 @@ If you prefer to configure the service with environment variables you can see th
 
 If multiple variables are listed for one option, they are in order of precedence. This means the leftmost variable will always win if given.
 
-### Command-line flags
+### Commandline flags
 
-If you prefer to configure the service with command-line flags you can see the available variables below. Command line flags are only working when calling the subcommand directly.
+If you prefer to configure the service with commandline flags you can see the available variables below. Command line flags are only working when calling the subcommand directly.
 
 {{ $options := .Options -}}
 {{ range $com := .Commands }}{{ with (list $options $com) -}}
diff --git a/web/Makefile b/web/Makefile
index e314196d7c4..2379a7970d0 100644
--- a/web/Makefile
+++ b/web/Makefile
@@ -2,7 +2,7 @@ SHELL := bash
 NAME := web
 
 ############ tooling ############
-ifneq (, $(shell which go 2> /dev/null)) # suppress `command not found warnings` for non go targets in CI
+ifneq (, $(shell which go 2> /dev/null)) # supress `command not found warnings` for non go targets in CI
 include ../.bingo/Variables.mk
 endif
 
diff --git a/web/pkg/service/v0/service.go b/web/pkg/service/v0/service.go
index 413e2ffcb21..ac022cb6d59 100644
--- a/web/pkg/service/v0/service.go
+++ b/web/pkg/service/v0/service.go
@@ -137,17 +137,11 @@ func (p Web) Static(ttl int) http.HandlerFunc {
 		assets.Logger(p.logger),
 		assets.Config(p.config),
 	)
-
-	notFoundFunc := func(w http.ResponseWriter, r *http.Request) {
-		// TODO: replace the redirect with a not found page containing a link to the Web UI
-		http.Redirect(w, r, rootWithSlash, http.StatusTemporaryRedirect)
-	}
-
 	static := http.StripPrefix(
 		rootWithSlash,
 		interceptNotFound(
 			http.FileServer(assets),
-			notFoundFunc,
+			rootWithSlash,
 		),
 	)
 
@@ -164,11 +158,16 @@ func (p Web) Static(ttl int) http.HandlerFunc {
 				rootWithSlash,
 				http.StatusMovedPermanently,
 			)
+
 			return
 		}
 
 		if r.URL.Path != rootWithSlash && strings.HasSuffix(r.URL.Path, "/") {
-			notFoundFunc(w, r)
+			http.NotFound(
+				w,
+				r,
+			)
+
 			return
 		}
 
@@ -185,12 +184,13 @@ func (p Web) Static(ttl int) http.HandlerFunc {
 	}
 }
 
-func interceptNotFound(h http.Handler, notFoundFunc func(http.ResponseWriter, *http.Request)) http.HandlerFunc {
+func interceptNotFound(h http.Handler, root string) http.HandlerFunc {
 	return func(w http.ResponseWriter, r *http.Request) {
 		notFoundInterceptor := &NotFoundInterceptor{ResponseWriter: w}
 		h.ServeHTTP(notFoundInterceptor, r)
 		if notFoundInterceptor.status == http.StatusNotFound {
-			notFoundFunc(w, r)
+			http.Redirect(w, r, root, http.StatusTemporaryRedirect)
+			// TODO: replace the redirect with a not found page containing a link to the Web UI
 		}
 	}
 }
diff --git a/web/templates/CONFIGURATION.tmpl b/web/templates/CONFIGURATION.tmpl
index 066be904561..05c4c8790da 100644
--- a/web/templates/CONFIGURATION.tmpl
+++ b/web/templates/CONFIGURATION.tmpl
@@ -45,9 +45,9 @@ If you prefer to configure the service with environment variables you can see th
 
 If multiple variables are listed for one option, they are in order of precedence. This means the leftmost variable will always win if given.
 
-### Command-line flags
+### Commandline flags
 
-If you prefer to configure the service with command-line flags you can see the available variables below. Command line flags are only working when calling the subcommand directly.
+If you prefer to configure the service with commandline flags you can see the available variables below. Command line flags are only working when calling the subcommand directly.
 
 {{ $options := .Options -}}
 {{ range $com := .Commands }}{{ with (list $options $com) -}}
diff --git a/webdav/Makefile b/webdav/Makefile
index ecbcb2a9783..beeb7a499ac 100644
--- a/webdav/Makefile
+++ b/webdav/Makefile
@@ -2,7 +2,7 @@ SHELL := bash
 NAME := webdav
 
 ############ tooling ############
-ifneq (, $(shell which go 2> /dev/null)) # suppress `command not found warnings` for non go targets in CI
+ifneq (, $(shell which go 2> /dev/null)) # supress `command not found warnings` for non go targets in CI
 include ../.bingo/Variables.mk
 endif
 
diff --git a/webdav/templates/CONFIGURATION.tmpl b/webdav/templates/CONFIGURATION.tmpl
index 6533998dcad..7d9007b0dbc 100644
--- a/webdav/templates/CONFIGURATION.tmpl
+++ b/webdav/templates/CONFIGURATION.tmpl
@@ -45,9 +45,9 @@ If you prefer to configure the service with environment variables you can see th
 
 If multiple variables are listed for one option, they are in order of precedence. This means the leftmost variable will always win if given.
 
-### Command-line flags
+### Commandline flags
 
-If you prefer to configure the service with command-line flags you can see the available variables below. Command line flags are only working when calling the subcommand directly.
+If you prefer to configure the service with commandline flags you can see the available variables below. Command line flags are only working when calling the subcommand directly.
 
 {{ $options := .Options -}}
 {{ range $com := .Commands }}{{ with (list $options $com) -}}


Test patch:
diff --git a/accounts/pkg/proto/v0/accounts.pb.micro_test.go b/accounts/pkg/proto/v0/accounts.pb.micro_test.go
index 67ea98334d0..22328f2ce71 100644
--- a/accounts/pkg/proto/v0/accounts.pb.micro_test.go
+++ b/accounts/pkg/proto/v0/accounts.pb.micro_test.go
@@ -81,7 +81,6 @@ func init() {
 
 	cfg := config.New()
 	cfg.Repo.Disk.Path = dataPath
-	cfg.Server.DemoUsersAndGroups = true
 	var hdlr *svc.Service
 	var err error
 
@@ -617,7 +616,7 @@ func TestUpdateNonUpdatableFieldsInAccount(t *testing.T) {
 				errMsg := fmt.Sprintf("can not update field %s, either unknown or readonly", tt.updateMask[0])
 				assert.Equal(t, errMsg, e.Detail)
 			} else {
-				t.Fatal("Expected merrors errors but found something else.")
+				t.Fatal("Expected merror errors but found something else.")
 			}
 		})
 	}
diff --git a/ocis-pkg/os/os_test.go b/ocis-pkg/os/os_test.go
index 9b11d795939..8f643b96a63 100644
--- a/ocis-pkg/os/os_test.go
+++ b/ocis-pkg/os/os_test.go
@@ -30,7 +30,7 @@ func TestMustUserConfigDir(t *testing.T) {
 			want: filepath.Join(configDir, "ocis", "testing"),
 		},
 		{
-			name: "location cannot be determined because $HOME is not set",
+			name: "location cannot be determined becahse $HOME is not set",
 			args: args{
 				prefix:    "ocis",
 				extension: "testing",
diff --git a/ocs/pkg/server/http/svc_test.go b/ocs/pkg/server/http/svc_test.go
index 7c46558f0ba..965edd3973a 100644
--- a/ocs/pkg/server/http/svc_test.go
+++ b/ocs/pkg/server/http/svc_test.go
@@ -538,9 +538,7 @@ func init() {
 	)
 
 	c := &accountsCfg.Config{
-		Server: accountsCfg.Server{
-			DemoUsersAndGroups: true,
-		},
+		Server: accountsCfg.Server{},
 		Repo: accountsCfg.Repo{
 			Disk: accountsCfg.Disk{
 				Path: dataPath,
diff --git a/proxy/pkg/proxy/policy/selector_test.go b/proxy/pkg/proxy/policy/selector_test.go
index a4ded577323..101eaae73e6 100644
--- a/proxy/pkg/proxy/policy/selector_test.go
+++ b/proxy/pkg/proxy/policy/selector_test.go
@@ -141,7 +141,7 @@ func TestClaimsSelector(t *testing.T) {
 	})
 
 	var tests = []testCase{
-		{"unauthenticated", context.Background(), nil, "unauthenticated"},
+		{"unatuhenticated", context.Background(), nil, "unauthenticated"},
 		{"default", oidc.NewContext(context.Background(), map[string]interface{}{oidc.OcisRoutingPolicy: ""}), nil, "default"},
 		{"claim-value", oidc.NewContext(context.Background(), map[string]interface{}{oidc.OcisRoutingPolicy: "ocis.routing.policy-value"}), nil, "ocis.routing.policy-value"},
 		{"cookie-only", context.Background(), &http.Cookie{Name: SelectorCookieName, Value: "cookie"}, "cookie"},
diff --git a/proxy/pkg/user/backend/accounts_test.go b/proxy/pkg/user/backend/accounts_test.go
index 5f57d3e67f3..c15e79a19b1 100644
--- a/proxy/pkg/user/backend/accounts_test.go
+++ b/proxy/pkg/user/backend/accounts_test.go
@@ -169,10 +169,10 @@ func getAccountService(expectedResponse []*accounts.Account, err error) *account
 	}
 }
 
-func getRoleService(expectedResponse []*settings.UserRoleAssignment, err error) *settings.MockRoleService {
+func getRoleService(expectedRespone []*settings.UserRoleAssignment, err error) *settings.MockRoleService {
 	return &settings.MockRoleService{
 		ListRoleAssignmentsFunc: func(ctx context.Context, req *settings.ListRoleAssignmentsRequest, opts ...client.CallOption) (*settings.ListRoleAssignmentsResponse, error) {
-			return &settings.ListRoleAssignmentsResponse{Assignments: expectedResponse}, err
+			return &settings.ListRoleAssignmentsResponse{Assignments: expectedRespone}, err
 		},
 	}
 
diff --git a/settings/pkg/proto/v0/settings.pb.micro_test.go b/settings/pkg/proto/v0/settings.pb.micro_test.go
index 28c24e253d2..d16a67f2df2 100644
--- a/settings/pkg/proto/v0/settings.pb.micro_test.go
+++ b/settings/pkg/proto/v0/settings.pb.micro_test.go
@@ -808,7 +808,7 @@ func TestCreateRoleAndAssign(t *testing.T) {
 }
 
 // // TODO this tests are non-deterministic at least on my machine. Find a way to make them deterministic.
-// func TestListBundlesOnAuthorizedUser(t *testing.T) {
+// func TestListBudlesOnAuthorizedUser(t *testing.T) {
 // 	client := service.Client()
 // 	client2 := service.Client()
 // 	cl := proto.NewBundleService("com.owncloud.api.settings", client)
diff --git a/settings/ui/tests/acceptance/pageobjects/settingsPage.js b/settings/ui/tests/acceptance/pageobjects/settingsPage.js
index b109ff72c1f..56adb878337 100644
--- a/settings/ui/tests/acceptance/pageobjects/settingsPage.js
+++ b/settings/ui/tests/acceptance/pageobjects/settingsPage.js
@@ -34,7 +34,7 @@ module.exports = {
           let elemfound = true
 
           // Language value is set to empty at beginning
-          // In that case just return false
+          // In that case jsut return false
           await this.api.element('@languageValue', result => {
             if (result.status < 0) {
               elemfound = false
diff --git a/tests/acceptance/docker/src/ocis-image.yml b/tests/acceptance/docker/src/ocis-image.yml
index ad5ce81c2f9..7bcd249a445 100644
--- a/tests/acceptance/docker/src/ocis-image.yml
+++ b/tests/acceptance/docker/src/ocis-image.yml
@@ -1,4 +1,3 @@
 services:
   ocis-server:
     image: owncloud/ocis:$OCIS_IMAGE_TAG
-    user: root
diff --git a/tests/acceptance/expected-failures-API-on-OCIS-storage.md b/tests/acceptance/expected-failures-API-on-OCIS-storage.md
index 69f9bbc4ca8..7127a58c313 100644
--- a/tests/acceptance/expected-failures-API-on-OCIS-storage.md
+++ b/tests/acceptance/expected-failures-API-on-OCIS-storage.md
@@ -508,7 +508,7 @@ cannot share a folder with create permission
 -   [apiSharePublicLink2/reShareAsPublicLinkToSharesNewDav.feature:181](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiSharePublicLink2/reShareAsPublicLinkToSharesNewDav.feature#L181)
 -   [apiSharePublicLink2/reShareAsPublicLinkToSharesNewDav.feature:182](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiSharePublicLink2/reShareAsPublicLinkToSharesNewDav.feature#L182)
 
-#### [Adding public upload to a read only shared folder as a recipient is allowed ](https://github.com/owncloud/ocis/issues/2164)
+#### [Adding public upload to a read only shared folder as a receipient is allowed ](https://github.com/owncloud/ocis/issues/2164)
 
 -   [apiSharePublicLink2/updatePublicLinkShare.feature:332](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiSharePublicLink2/updatePublicLinkShare.feature#L332)
 -   [apiSharePublicLink2/updatePublicLinkShare.feature:333](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiSharePublicLink2/updatePublicLinkShare.feature#L333)
@@ -849,7 +849,7 @@ _ocs: api compatibility, return correct status code_
 - [apiShareCreateSpecialToShares1/createShareReceivedInMultipleWays.feature:407](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiShareCreateSpecialToShares1/createShareReceivedInMultipleWays.feature#L407)
 - [apiShareCreateSpecialToShares1/createShareReceivedInMultipleWays.feature:439](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiShareCreateSpecialToShares1/createShareReceivedInMultipleWays.feature#L439)
 
-#### [Empty OCS response for a share create request using a disabled user](https://github.com/owncloud/ocis/issues/2212)
+#### [Empy OCS response for a share create request using a disabled user](https://github.com/owncloud/ocis/issues/2212)
 -   [apiShareCreateSpecialToShares2/createShareWithDisabledUser.feature:20](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiShareCreateSpecialToShares2/createShareWithDisabledUser.feature#L20)
 -   [apiShareCreateSpecialToShares2/createShareWithDisabledUser.feature:23](https://github.com/owncloud/core/blob/master/tests/acceptance/features/apiShareCreateSpecialToShares2/createShareWithDisabledUser.feature#L23)
 
@@ -1437,7 +1437,7 @@ Scenario Outline: Unauthenticated call
 ### Won't fix
 Not everything needs to be implemented for ocis. While the oc10 testsuite covers these things we are not looking at them right now.
 
-* _The `OC-LazyOps` header is [no longer supported by the client](https://github.com/owncloud/client/pull/8398), implementing this is not necessary for a first production release. We plan to have an upload state machine to visualize the state of a file, see https://github.com/owncloud/ocis/issues/214_
+* _The `OC-LazyOps` header is [no longer supported by the client](https://github.com/owncloud/client/pull/8398), implmenting this is not necessary for a first production release. We plan to have an uploed state machine to visualize the state of a file, see https://github.com/owncloud/ocis/issues/214_
 * _Blacklisted ignored files are no longer required because ocis can handle `.htaccess` files without security implications introduced by serving user provided files with apache._
 
 #### [uploading with old-chunking does not work](https://github.com/owncloud/ocis/issues/1343)