aboutsummaryrefslogtreecommitdiffstats
path: root/apps/provisioning_api
diff options
context:
space:
mode:
Diffstat (limited to 'apps/provisioning_api')
-rw-r--r--apps/provisioning_api/appinfo/info.xml15
-rw-r--r--apps/provisioning_api/appinfo/routes.php32
-rw-r--r--apps/provisioning_api/composer/composer/autoload_classmap.php2
-rw-r--r--apps/provisioning_api/composer/composer/autoload_static.php2
-rw-r--r--apps/provisioning_api/img/app.svg2
-rw-r--r--apps/provisioning_api/l10n/ar.js35
-rw-r--r--apps/provisioning_api/l10n/ar.json35
-rw-r--r--apps/provisioning_api/l10n/ast.js28
-rw-r--r--apps/provisioning_api/l10n/ast.json28
-rw-r--r--apps/provisioning_api/l10n/bg.js18
-rw-r--r--apps/provisioning_api/l10n/bg.json16
-rw-r--r--apps/provisioning_api/l10n/ca.js31
-rw-r--r--apps/provisioning_api/l10n/ca.json31
-rw-r--r--apps/provisioning_api/l10n/cs.js32
-rw-r--r--apps/provisioning_api/l10n/cs.json32
-rw-r--r--apps/provisioning_api/l10n/da.js43
-rw-r--r--apps/provisioning_api/l10n/da.json41
-rw-r--r--apps/provisioning_api/l10n/de.js40
-rw-r--r--apps/provisioning_api/l10n/de.json40
-rw-r--r--apps/provisioning_api/l10n/de_DE.js34
-rw-r--r--apps/provisioning_api/l10n/de_DE.json34
-rw-r--r--apps/provisioning_api/l10n/el.js16
-rw-r--r--apps/provisioning_api/l10n/el.json14
-rw-r--r--apps/provisioning_api/l10n/en_GB.js32
-rw-r--r--apps/provisioning_api/l10n/en_GB.json32
-rw-r--r--apps/provisioning_api/l10n/es.js37
-rw-r--r--apps/provisioning_api/l10n/es.json37
-rw-r--r--apps/provisioning_api/l10n/es_EC.js18
-rw-r--r--apps/provisioning_api/l10n/es_EC.json16
-rw-r--r--apps/provisioning_api/l10n/es_MX.js42
-rw-r--r--apps/provisioning_api/l10n/es_MX.json40
-rw-r--r--apps/provisioning_api/l10n/et_EE.js41
-rw-r--r--apps/provisioning_api/l10n/et_EE.json39
-rw-r--r--apps/provisioning_api/l10n/eu.js31
-rw-r--r--apps/provisioning_api/l10n/eu.json31
-rw-r--r--apps/provisioning_api/l10n/fa.js18
-rw-r--r--apps/provisioning_api/l10n/fa.json16
-rw-r--r--apps/provisioning_api/l10n/fr.js33
-rw-r--r--apps/provisioning_api/l10n/fr.json33
-rw-r--r--apps/provisioning_api/l10n/ga.js44
-rw-r--r--apps/provisioning_api/l10n/ga.json42
-rw-r--r--apps/provisioning_api/l10n/gl.js33
-rw-r--r--apps/provisioning_api/l10n/gl.json33
-rw-r--r--apps/provisioning_api/l10n/hr.js18
-rw-r--r--apps/provisioning_api/l10n/hr.json16
-rw-r--r--apps/provisioning_api/l10n/hu.js18
-rw-r--r--apps/provisioning_api/l10n/hu.json16
-rw-r--r--apps/provisioning_api/l10n/is.js15
-rw-r--r--apps/provisioning_api/l10n/is.json13
-rw-r--r--apps/provisioning_api/l10n/it.js18
-rw-r--r--apps/provisioning_api/l10n/it.json16
-rw-r--r--apps/provisioning_api/l10n/ja.js32
-rw-r--r--apps/provisioning_api/l10n/ja.json32
-rw-r--r--apps/provisioning_api/l10n/nb.js31
-rw-r--r--apps/provisioning_api/l10n/nb.json31
-rw-r--r--apps/provisioning_api/l10n/nl.js18
-rw-r--r--apps/provisioning_api/l10n/nl.json16
-rw-r--r--apps/provisioning_api/l10n/pl.js32
-rw-r--r--apps/provisioning_api/l10n/pl.json32
-rw-r--r--apps/provisioning_api/l10n/pt_BR.js36
-rw-r--r--apps/provisioning_api/l10n/pt_BR.json36
-rw-r--r--apps/provisioning_api/l10n/pt_PT.js17
-rw-r--r--apps/provisioning_api/l10n/pt_PT.json15
-rw-r--r--apps/provisioning_api/l10n/ro.js18
-rw-r--r--apps/provisioning_api/l10n/ro.json16
-rw-r--r--apps/provisioning_api/l10n/ru.js32
-rw-r--r--apps/provisioning_api/l10n/ru.json32
-rw-r--r--apps/provisioning_api/l10n/sc.js8
-rw-r--r--apps/provisioning_api/l10n/sc.json6
-rw-r--r--apps/provisioning_api/l10n/sk.js31
-rw-r--r--apps/provisioning_api/l10n/sk.json31
-rw-r--r--apps/provisioning_api/l10n/sl.js12
-rw-r--r--apps/provisioning_api/l10n/sl.json10
-rw-r--r--apps/provisioning_api/l10n/sr.js31
-rw-r--r--apps/provisioning_api/l10n/sr.json31
-rw-r--r--apps/provisioning_api/l10n/sv.js18
-rw-r--r--apps/provisioning_api/l10n/sv.json18
-rw-r--r--apps/provisioning_api/l10n/sw.js44
-rw-r--r--apps/provisioning_api/l10n/sw.json42
-rw-r--r--apps/provisioning_api/l10n/tr.js31
-rw-r--r--apps/provisioning_api/l10n/tr.json31
-rw-r--r--apps/provisioning_api/l10n/ug.js43
-rw-r--r--apps/provisioning_api/l10n/ug.json41
-rw-r--r--apps/provisioning_api/l10n/uk.js36
-rw-r--r--apps/provisioning_api/l10n/uk.json36
-rw-r--r--apps/provisioning_api/l10n/zh_CN.js34
-rw-r--r--apps/provisioning_api/l10n/zh_CN.json34
-rw-r--r--apps/provisioning_api/l10n/zh_HK.js32
-rw-r--r--apps/provisioning_api/l10n/zh_HK.json32
-rw-r--r--apps/provisioning_api/l10n/zh_TW.js40
-rw-r--r--apps/provisioning_api/l10n/zh_TW.json40
-rw-r--r--apps/provisioning_api/lib/AppInfo/Application.php28
-rw-r--r--apps/provisioning_api/lib/Capabilities.php34
-rw-r--r--apps/provisioning_api/lib/Controller/AUserDataOCSController.php (renamed from apps/provisioning_api/lib/Controller/AUserData.php)204
-rw-r--r--apps/provisioning_api/lib/Controller/AppConfigController.php69
-rw-r--r--apps/provisioning_api/lib/Controller/AppsController.php98
-rw-r--r--apps/provisioning_api/lib/Controller/GroupsController.php129
-rw-r--r--apps/provisioning_api/lib/Controller/PreferencesController.php55
-rw-r--r--apps/provisioning_api/lib/Controller/UsersController.php731
-rw-r--r--apps/provisioning_api/lib/Controller/VerificationController.php83
-rw-r--r--apps/provisioning_api/lib/FederatedShareProviderFactory.php31
-rw-r--r--apps/provisioning_api/lib/Listener/UserDeletedListener.php22
-rw-r--r--apps/provisioning_api/lib/Middleware/Exceptions/NotSubAdminException.php25
-rw-r--r--apps/provisioning_api/lib/Middleware/ProvisioningApiMiddleware.php43
-rw-r--r--apps/provisioning_api/lib/ResponseDefinitions.php105
-rw-r--r--apps/provisioning_api/openapi-administration.json737
-rw-r--r--apps/provisioning_api/openapi-administration.json.license2
-rw-r--r--apps/provisioning_api/openapi-full.json1730
-rw-r--r--apps/provisioning_api/openapi-full.json.license2
-rw-r--r--apps/provisioning_api/openapi.json860
-rw-r--r--apps/provisioning_api/openapi.json.license2
-rw-r--r--apps/provisioning_api/tests/CapabilitiesTest.php48
-rw-r--r--apps/provisioning_api/tests/Controller/AppConfigControllerTest.php190
-rw-r--r--apps/provisioning_api/tests/Controller/AppsControllerTest.php88
-rw-r--r--apps/provisioning_api/tests/Controller/GroupsControllerTest.php161
-rw-r--r--apps/provisioning_api/tests/Controller/UsersControllerTest.php986
-rw-r--r--apps/provisioning_api/tests/Middleware/ProvisioningApiMiddlewareTest.php72
-rw-r--r--apps/provisioning_api/tests/TestCase.php30
118 files changed, 5990 insertions, 3092 deletions
diff --git a/apps/provisioning_api/appinfo/info.xml b/apps/provisioning_api/appinfo/info.xml
index a38d9f20a61..68d36845354 100644
--- a/apps/provisioning_api/appinfo/info.xml
+++ b/apps/provisioning_api/appinfo/info.xml
@@ -1,19 +1,24 @@
<?xml version="1.0"?>
+<!--
+ - SPDX-FileCopyrightText: 2016-2024 Nextcloud GmbH and Nextcloud contributors
+ - SPDX-FileCopyrightText: 2014-2016 owncloud, Inc.
+ - SPDX-License-Identifier: AGPL-3.0-only
+-->
<info xmlns:xsi= "http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="https://apps.nextcloud.com/schema/apps/info.xsd">
<id>provisioning_api</id>
<name>Provisioning API</name>
- <summary>This application enables a set of APIs that external systems can use to manage users, groups and apps.</summary>
+ <summary>This application enables a set of APIs that external systems can use to manage accounts, groups and apps.</summary>
<description>
- This application enables a set of APIs that external systems can use to create, edit, delete and query user
- attributes, query, set and remove groups, set quota and query total storage used in Nextcloud. Group admin users
+ This application enables a set of APIs that external systems can use to create, edit, delete and query account
+ attributes, query, set and remove groups, set quota and query total storage used in Nextcloud. Group admin accounts
can also query Nextcloud and perform the same functions as an admin for groups they manage. The API also enables
an admin to query for active Nextcloud applications, application info, and to enable or disable an app remotely.
Once the app is enabled, HTTP requests can be used via a Basic Auth header to perform any of the functions
listed above. More information is available in the Provisioning API documentation, including example calls
and server responses.
</description>
- <version>1.19.0</version>
+ <version>1.22.0</version>
<licence>agpl</licence>
<author>Tom Needham</author>
<namespace>Provisioning_API</namespace>
@@ -26,6 +31,6 @@
<category>integration</category>
<bugs>https://github.com/nextcloud/server/issues</bugs>
<dependencies>
- <nextcloud min-version="29" max-version="29"/>
+ <nextcloud min-version="32" max-version="32"/>
</dependencies>
</info>
diff --git a/apps/provisioning_api/appinfo/routes.php b/apps/provisioning_api/appinfo/routes.php
index 6d9be753d45..df4f806fa08 100644
--- a/apps/provisioning_api/appinfo/routes.php
+++ b/apps/provisioning_api/appinfo/routes.php
@@ -1,29 +1,9 @@
<?php
+
/**
- * @copyright Copyright (c) 2016, ownCloud, Inc.
- *
- * @author Bjoern Schiessle <bjoern@schiessle.org>
- * @author Christoph Wurst <christoph@winzerhof-wurst.at>
- * @author Joas Schilling <coding@schilljs.com>
- * @author John Molakvoæ <skjnldsv@protonmail.com>
- * @author Morris Jobke <hey@morrisjobke.de>
- * @author Roeland Jago Douma <roeland@famdouma.nl>
- * @author Tom Needham <tom@owncloud.com>
- *
- * @license AGPL-3.0
- *
- * This code is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License, version 3,
- * as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License, version 3,
- * along with this program. If not, see <http://www.gnu.org/licenses/>
- *
+ * SPDX-FileCopyrightText: 2016-2024 Nextcloud GmbH and Nextcloud contributors
+ * SPDX-FileCopyrightText: 2016 ownCloud, Inc.
+ * SPDX-License-Identifier: AGPL-3.0-only
*/
return [
'ocs' => [
@@ -48,12 +28,14 @@ return [
['root' => '/cloud', 'name' => 'Users#getUsers', 'url' => '/users', 'verb' => 'GET'],
['root' => '/cloud', 'name' => 'Users#getUsersDetails', 'url' => '/users/details', 'verb' => 'GET'],
['root' => '/cloud', 'name' => 'Users#getDisabledUsersDetails', 'url' => '/users/disabled', 'verb' => 'GET'],
+ ['root' => '/cloud', 'name' => 'Users#getLastLoggedInUsers', 'url' => '/users/recent', 'verb' => 'GET'],
['root' => '/cloud', 'name' => 'Users#searchByPhoneNumbers', 'url' => '/users/search/by-phone', 'verb' => 'POST'],
['root' => '/cloud', 'name' => 'Users#addUser', 'url' => '/users', 'verb' => 'POST'],
['root' => '/cloud', 'name' => 'Users#getUser', 'url' => '/users/{userId}', 'verb' => 'GET'],
['root' => '/cloud', 'name' => 'Users#getCurrentUser', 'url' => '/user', 'verb' => 'GET'],
['root' => '/cloud', 'name' => 'Users#getEditableFields', 'url' => '/user/fields', 'verb' => 'GET'],
['root' => '/cloud', 'name' => 'Users#getEditableFieldsForUser', 'url' => '/user/fields/{userId}', 'verb' => 'GET'],
+ ['root' => '/cloud', 'name' => 'Users#getEnabledApps', 'url' => '/user/apps', 'verb' => 'GET'],
['root' => '/cloud', 'name' => 'Users#editUser', 'url' => '/users/{userId}', 'verb' => 'PUT'],
['root' => '/cloud', 'name' => 'Users#editUserMultiValue', 'url' => '/users/{userId}/{collectionName}', 'verb' => 'PUT', 'requirements' => ['collectionName' => '^(?!enable$|disable$)[a-zA-Z0-9_]*$']],
['root' => '/cloud', 'name' => 'Users#wipeUserDevices', 'url' => '/users/{userId}/wipe', 'verb' => 'POST'],
@@ -61,9 +43,11 @@ return [
['root' => '/cloud', 'name' => 'Users#enableUser', 'url' => '/users/{userId}/enable', 'verb' => 'PUT'],
['root' => '/cloud', 'name' => 'Users#disableUser', 'url' => '/users/{userId}/disable', 'verb' => 'PUT'],
['root' => '/cloud', 'name' => 'Users#getUsersGroups', 'url' => '/users/{userId}/groups', 'verb' => 'GET'],
+ ['root' => '/cloud', 'name' => 'Users#getUsersGroupsDetails', 'url' => '/users/{userId}/groups/details', 'verb' => 'GET'],
['root' => '/cloud', 'name' => 'Users#addToGroup', 'url' => '/users/{userId}/groups', 'verb' => 'POST'],
['root' => '/cloud', 'name' => 'Users#removeFromGroup', 'url' => '/users/{userId}/groups', 'verb' => 'DELETE'],
['root' => '/cloud', 'name' => 'Users#getUserSubAdminGroups', 'url' => '/users/{userId}/subadmins', 'verb' => 'GET'],
+ ['root' => '/cloud', 'name' => 'Users#getUserSubAdminGroupsDetails', 'url' => '/users/{userId}/subadmins/details', 'verb' => 'GET'],
['root' => '/cloud', 'name' => 'Users#addSubAdmin', 'url' => '/users/{userId}/subadmins', 'verb' => 'POST'],
['root' => '/cloud', 'name' => 'Users#removeSubAdmin', 'url' => '/users/{userId}/subadmins', 'verb' => 'DELETE'],
['root' => '/cloud', 'name' => 'Users#resendWelcomeMessage', 'url' => '/users/{userId}/welcome', 'verb' => 'POST'],
diff --git a/apps/provisioning_api/composer/composer/autoload_classmap.php b/apps/provisioning_api/composer/composer/autoload_classmap.php
index d702db318db..7a007f4577d 100644
--- a/apps/provisioning_api/composer/composer/autoload_classmap.php
+++ b/apps/provisioning_api/composer/composer/autoload_classmap.php
@@ -9,7 +9,7 @@ return array(
'Composer\\InstalledVersions' => $vendorDir . '/composer/InstalledVersions.php',
'OCA\\Provisioning_API\\AppInfo\\Application' => $baseDir . '/../lib/AppInfo/Application.php',
'OCA\\Provisioning_API\\Capabilities' => $baseDir . '/../lib/Capabilities.php',
- 'OCA\\Provisioning_API\\Controller\\AUserData' => $baseDir . '/../lib/Controller/AUserData.php',
+ 'OCA\\Provisioning_API\\Controller\\AUserDataOCSController' => $baseDir . '/../lib/Controller/AUserDataOCSController.php',
'OCA\\Provisioning_API\\Controller\\AppConfigController' => $baseDir . '/../lib/Controller/AppConfigController.php',
'OCA\\Provisioning_API\\Controller\\AppsController' => $baseDir . '/../lib/Controller/AppsController.php',
'OCA\\Provisioning_API\\Controller\\GroupsController' => $baseDir . '/../lib/Controller/GroupsController.php',
diff --git a/apps/provisioning_api/composer/composer/autoload_static.php b/apps/provisioning_api/composer/composer/autoload_static.php
index 4c987e24fc9..9480fc2d3f1 100644
--- a/apps/provisioning_api/composer/composer/autoload_static.php
+++ b/apps/provisioning_api/composer/composer/autoload_static.php
@@ -24,7 +24,7 @@ class ComposerStaticInitProvisioning_API
'Composer\\InstalledVersions' => __DIR__ . '/..' . '/composer/InstalledVersions.php',
'OCA\\Provisioning_API\\AppInfo\\Application' => __DIR__ . '/..' . '/../lib/AppInfo/Application.php',
'OCA\\Provisioning_API\\Capabilities' => __DIR__ . '/..' . '/../lib/Capabilities.php',
- 'OCA\\Provisioning_API\\Controller\\AUserData' => __DIR__ . '/..' . '/../lib/Controller/AUserData.php',
+ 'OCA\\Provisioning_API\\Controller\\AUserDataOCSController' => __DIR__ . '/..' . '/../lib/Controller/AUserDataOCSController.php',
'OCA\\Provisioning_API\\Controller\\AppConfigController' => __DIR__ . '/..' . '/../lib/Controller/AppConfigController.php',
'OCA\\Provisioning_API\\Controller\\AppsController' => __DIR__ . '/..' . '/../lib/Controller/AppsController.php',
'OCA\\Provisioning_API\\Controller\\GroupsController' => __DIR__ . '/..' . '/../lib/Controller/GroupsController.php',
diff --git a/apps/provisioning_api/img/app.svg b/apps/provisioning_api/img/app.svg
index b127bca1896..01b478213d1 100644
--- a/apps/provisioning_api/img/app.svg
+++ b/apps/provisioning_api/img/app.svg
@@ -1 +1 @@
-<svg width="32" height="32" version="1" viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg"><path d="M13.733 0a.915.915 0 0 0-.933.934V3.6c-1.182.304-2.243.794-3.267 1.4L7.6 3.068a.93.93 0 0 0-1.334 0l-3.2 3.2a.93.93 0 0 0 0 1.334L5 9.535c-.607 1.024-1.097 2.085-1.4 3.267H.933a.915.915 0 0 0-.933.934v4.533c0 .53.403.934.933.934H3.6c.303 1.182.793 2.243 1.4 3.267l-1.934 1.935a.93.93 0 0 0 0 1.333l3.2 3.2a.93.93 0 0 0 1.333 0L9.532 27c1.024.61 2.085 1.097 3.266 1.4v2.667c0 .53.402.933.932.933h4.534c.53 0 .933-.403.933-.935V28.4c1.18-.305 2.24-.795 3.265-1.4L24.4 28.93a.93.93 0 0 0 1.332 0l3.2-3.2a.93.93 0 0 0 0-1.333L27 22.465c.607-1.024 1.096-2.085 1.4-3.266h2.665a.915.915 0 0 0 .935-.933v-4.534a.915.915 0 0 0-.934-.933H28.4c-.304-1.182-.792-2.243-1.4-3.267L28.932 7.6a.93.93 0 0 0 0-1.334l-3.2-3.2a.93.93 0 0 0-1.333 0L22.465 5c-1.024-.607-2.084-1.097-3.266-1.4V.933A.915.915 0 0 0 18.267 0zM16 8.87A7.134 7.134 0 0 1 23.13 16 7.134 7.134 0 0 1 16 23.133c-3.936 0-7.13-3.196-7.13-7.132S12.063 8.87 16 8.87z" display="block" fill="#fff"/></svg>
+<svg xmlns="http://www.w3.org/2000/svg" height="20px" viewBox="0 -960 960 960" width="20px" fill="#fff"><path d="m236-484-14-61q-11-4-21.5-9.5T180-568l-59 20-42-72 51-40q-2-11-2-22t2-22l-50-40 42-72 59 20q10-8 20-14t22-9l14-61h77l14 61q12 3 22 9t20 14l59-20 42 72-51 40q2 11 2 22t-2 22l50 40-42 72-59-19q-10 8-20.5 13t-21.5 9l-14 61h-77Zm39-122q32 0 54-22t22-54q0-32-22-54t-54-22q-32 0-54 22t-22 54q0 32 22 54t54 22ZM581-40l-17-81q-15-6-29-13.5T508-153l-84 25-60-103 67-58q-2-16-2-31t2-31l-67-58 60-103 84 24q13-10 27-17.5t29-13.5l17-81h120l17 81q15 6 29 13.5t27 17.5l84-24 60 103-67 58q2 16 2 31t-2 31l67 58-60 103-84-25q-13 11-27 18.5T718-121l-17 81H581Zm60-166q48 0 81-33t33-81q0-48-33-81t-81-33q-48 0-81 33t-33 81q0 48 33 81t81 33Z"/></svg> \ No newline at end of file
diff --git a/apps/provisioning_api/l10n/ar.js b/apps/provisioning_api/l10n/ar.js
index cad061884e7..022d8695938 100644
--- a/apps/provisioning_api/l10n/ar.js
+++ b/apps/provisioning_api/l10n/ar.js
@@ -1,18 +1,43 @@
OC.L10N.register(
"provisioning_api",
{
- "Logged in user must be an administrator or have authorization to edit this setting." : "المستخدم الداخل يجب أن يكون مُشرفاً أو يملك صلاحية تعديل الإعدادات.",
+ "Logged in account must be an administrator or have authorization to edit this setting." : "يجب أن يكون الحساب الداخل مسؤول نظام أو لديه الصلاحية لتعديل هذا الإعداد.",
+ "Could not create non-existing user ID" : "يتعذّر إنشاء مُعرِّف ID لمستخدِم غير موجود",
"User already exists" : "أنت موجودٌ مُسبقاً",
+ "Group %1$s does not exist" : "المجموعة %1$s غير موجودة",
+ "Insufficient privileges for group %1$s" : "أذونات غير كافية للمجموعة %1$s",
+ "No group specified (required for sub-admins)" : "لم يتم تحديد أي مجموعة (مطلوبة للمديرين الفرعيين)",
+ "Sub-admin group does not exist" : "مجموعة المديرين الفرعيين غير موجودة",
+ "Cannot create sub-admins for admin group" : "تعذّر إنشاء مديرين فرعيين لمجموعة المديرين",
+ "No permissions to promote sub-admins" : "أذونات غير كافية لترقية المديرين الفرعيين",
+ "Invalid password value" : "قيمة غير صحيحة لكلمة المرور",
+ "An email address is required, to send a password link to the user." : "عنوان الإيميل مطلوب لإرسال رابط كلمة المرور للمستخدِم",
+ "Required email address was not provided" : "عنوان الإيميل المطلوب لم يتم توفيره",
+ "Invalid quota value: %1$s" : "قيمة غير صحيحة للحصة: %1$s",
+ "Invalid quota value. %1$s is exceeding the maximum quota" : "قيمة غير صحيحة للحصة. %1$s تزيد عن الحد الأقصى للحصة",
+ "Unlimited quota is forbidden on this instance" : "الحصة غير المحدودة غير مسموح بها على هذا الخادوم",
+ "Setting the password is not supported by the users backend" : "تعيين كلمة المرور غير مدعوم من قِبَل الواجهة الخلفية للمستخدمين.",
+ "Invalid language" : "لغة غير صالحة",
+ "Invalid locale" : "اختيار الدولة أو المنطقة غير صحيح",
+ "Invalid first day of week" : "اليوم الأول من الأسبوع غير صحيح",
+ "Cannot remove yourself from the admin group" : "لا يمكنك إزالة نفسك من قائمة المديرين",
+ "Cannot remove yourself from this group as you are a sub-admin" : "لا يمكنك إزالة نفسك من هذه المجموعة باعتبارك مدير فرعي فيها",
+ "Not viable to remove user from the last group you are sub-admin of" : "لا يمكن إزالة المستخدم من آخر مجموعة أنت مدير فرعي لها",
+ "User does not exist" : "المستخدِم غير موجود",
+ "Group does not exist" : "المجموعة غير موجودة",
+ "User is not a sub-admin of this group" : "المستخدِم ليس مدير فرعي على هذه المجموعة",
+ "Email address not available" : "عنوان الإيميل غير متاح",
+ "Sending email failed" : "تعذّر إرسال الإيميل",
"Email confirmation" : "تأكيد الإيميل",
"To enable the email address %s please click the button below." : "لتمكين عنوان الإيميل %s، إضغط الزر أدناه رجاءً.",
"Confirm" : "تأكيد",
- "Email was already removed from account and cannot be confirmed anymore." : "الإيميل سبق حذفه من الحساب و لا يمكن توكيده بعد الآن.",
+ "Email was already removed from account and cannot be confirmed anymore." : " البريد الإلكتروني سبق حذفه من الحساب و لا يمكن تأكيده بعد الآن.",
"Could not verify mail because the token is expired." : "لا يمكن التحقّق من الإيميل بسبب انتهاء صلاحية الأَمارة token.",
"Could not verify mail because the token is invalid." : "لا يمكن التحقّق من الإيميل بسبب أن الأَمارة token غير صحيحة.",
- "An unexpected error occurred. Please contact your admin." : "حدث خطأ غير متوقع. اتصل بالمشرف رجاءً.",
+ "An unexpected error occurred. Please contact your admin." : "حدث خطأ غير متوقع. اتصل بالمدير رجاءً.",
"Email confirmation successful" : "تمّ توكيد الإيميل بنجاح",
"Provisioning API" : "توفير واجهة برمجة التطبيقات API",
- "This application enables a set of APIs that external systems can use to manage users, groups and apps." : "هذا التطبيق يُفعّل مجموعة من واجهات API التي يمكن أن تستعملها نُظُم خارجية لإدارة المستخدمين و المجموعات و التطبيقات.",
- "This application enables a set of APIs that external systems can use to create, edit, delete and query user\n\t\tattributes, query, set and remove groups, set quota and query total storage used in Nextcloud. Group admin users\n\t\tcan also query Nextcloud and perform the same functions as an admin for groups they manage. The API also enables\n\t\tan admin to query for active Nextcloud applications, application info, and to enable or disable an app remotely.\n\t\tOnce the app is enabled, HTTP requests can be used via a Basic Auth header to perform any of the functions\n\t\tlisted above. More information is available in the Provisioning API documentation, including example calls\n\t\tand server responses." : "هذا التطبيق يُفعّل مجموعة من الواجهات API التي يُمكن أن تستعملها نُظُم خارجية للاستعلام و إضافة و تعديل و حذف المستخدمين و المجموعات في نكست كلاود، و تحديد حصصهم التخزينية بمن فيهم مجموعة المشرفين.\n\nكذلك تُمكّن الواجهة من الاستعلام عن تطبيقات نكست كلاود النشطة، و بياناتها، و تُمكّن من تفعيلها أو إلغاء تفعيلها عن بُعدٍ. \n\nبعدما يتم تفعيل التطبيق، يُمكن استخدام طلبيات HTTP request من خلال ترويسة تحقّق بسيطة Basic Auth header لتنفيذ أيٍّ من الوظائف المذكورة أعلاه.\n\nللمزيد، أنظر توثيق Provisioning API؛ وفيه أمثلة عن الاستدعاء call ،و استجابات الخادوم response. \n "
+ "This application enables a set of APIs that external systems can use to manage accounts, groups and apps." : "يتيح هذا التطبيق مجموعة من واجهات برمجة التطبيقات التي يمكن للأنظمة الخارجية استخدامها لإدارة الحسابات والمجموعات والتطبيقات.",
+ "This application enables a set of APIs that external systems can use to create, edit, delete and query account\n\t\tattributes, query, set and remove groups, set quota and query total storage used in Nextcloud. Group admin accounts\n\t\tcan also query Nextcloud and perform the same functions as an admin for groups they manage. The API also enables\n\t\tan admin to query for active Nextcloud applications, application info, and to enable or disable an app remotely.\n\t\tOnce the app is enabled, HTTP requests can be used via a Basic Auth header to perform any of the functions\n\t\tlisted above. More information is available in the Provisioning API documentation, including example calls\n\t\tand server responses." : "يتيح هذا التطبيق مجموعة من واجهات برمجة التطبيقات التي يمكن للأنظمة الخارجية استخدامها لإنشاء الحساب وتحريره وحذفه والاستعلام عنه\n\t\tالخصائص، و الاستعلامات، و تعيين المجموعات و إزالتها، و تعيين الحصص، و الاستعلام عن إجمالي مساحة التخزين المستخدمة في نكست كلاود. حسابات مشرف المجموعة \n\t\t يمكنه أيضًا الاستعلام عن نكست كلاود و تنفيذ نفس الوظائف كمشرف للمجموعات التي يديرونها. تتيح واجهة برمجة التطبيقات API أيضاً \n\t\tمشرف للاستعلام عن تطبيقات نكست كلاود النشطة، و معلومات التطبيق، و تمكين التطبيق أو تعطيله عن بُعد. \n\t\tبمجرد تمكين التطبيق، يمكن استخدام طلبات HTTP عبر رأس المصادقة الأساسية لتنفيذ أي من الوظائف \n\t\t المذكورة أعلاه. \nللمزيد من المعلومات، أنظُر توثيق Provisioning API، بما في ذلك أمثلة على الاستدعاءات \n\t\t واستجابات الخادوم."
},
"nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;");
diff --git a/apps/provisioning_api/l10n/ar.json b/apps/provisioning_api/l10n/ar.json
index 67acf0ee06d..4bb2da2a2ff 100644
--- a/apps/provisioning_api/l10n/ar.json
+++ b/apps/provisioning_api/l10n/ar.json
@@ -1,16 +1,41 @@
{ "translations": {
- "Logged in user must be an administrator or have authorization to edit this setting." : "المستخدم الداخل يجب أن يكون مُشرفاً أو يملك صلاحية تعديل الإعدادات.",
+ "Logged in account must be an administrator or have authorization to edit this setting." : "يجب أن يكون الحساب الداخل مسؤول نظام أو لديه الصلاحية لتعديل هذا الإعداد.",
+ "Could not create non-existing user ID" : "يتعذّر إنشاء مُعرِّف ID لمستخدِم غير موجود",
"User already exists" : "أنت موجودٌ مُسبقاً",
+ "Group %1$s does not exist" : "المجموعة %1$s غير موجودة",
+ "Insufficient privileges for group %1$s" : "أذونات غير كافية للمجموعة %1$s",
+ "No group specified (required for sub-admins)" : "لم يتم تحديد أي مجموعة (مطلوبة للمديرين الفرعيين)",
+ "Sub-admin group does not exist" : "مجموعة المديرين الفرعيين غير موجودة",
+ "Cannot create sub-admins for admin group" : "تعذّر إنشاء مديرين فرعيين لمجموعة المديرين",
+ "No permissions to promote sub-admins" : "أذونات غير كافية لترقية المديرين الفرعيين",
+ "Invalid password value" : "قيمة غير صحيحة لكلمة المرور",
+ "An email address is required, to send a password link to the user." : "عنوان الإيميل مطلوب لإرسال رابط كلمة المرور للمستخدِم",
+ "Required email address was not provided" : "عنوان الإيميل المطلوب لم يتم توفيره",
+ "Invalid quota value: %1$s" : "قيمة غير صحيحة للحصة: %1$s",
+ "Invalid quota value. %1$s is exceeding the maximum quota" : "قيمة غير صحيحة للحصة. %1$s تزيد عن الحد الأقصى للحصة",
+ "Unlimited quota is forbidden on this instance" : "الحصة غير المحدودة غير مسموح بها على هذا الخادوم",
+ "Setting the password is not supported by the users backend" : "تعيين كلمة المرور غير مدعوم من قِبَل الواجهة الخلفية للمستخدمين.",
+ "Invalid language" : "لغة غير صالحة",
+ "Invalid locale" : "اختيار الدولة أو المنطقة غير صحيح",
+ "Invalid first day of week" : "اليوم الأول من الأسبوع غير صحيح",
+ "Cannot remove yourself from the admin group" : "لا يمكنك إزالة نفسك من قائمة المديرين",
+ "Cannot remove yourself from this group as you are a sub-admin" : "لا يمكنك إزالة نفسك من هذه المجموعة باعتبارك مدير فرعي فيها",
+ "Not viable to remove user from the last group you are sub-admin of" : "لا يمكن إزالة المستخدم من آخر مجموعة أنت مدير فرعي لها",
+ "User does not exist" : "المستخدِم غير موجود",
+ "Group does not exist" : "المجموعة غير موجودة",
+ "User is not a sub-admin of this group" : "المستخدِم ليس مدير فرعي على هذه المجموعة",
+ "Email address not available" : "عنوان الإيميل غير متاح",
+ "Sending email failed" : "تعذّر إرسال الإيميل",
"Email confirmation" : "تأكيد الإيميل",
"To enable the email address %s please click the button below." : "لتمكين عنوان الإيميل %s، إضغط الزر أدناه رجاءً.",
"Confirm" : "تأكيد",
- "Email was already removed from account and cannot be confirmed anymore." : "الإيميل سبق حذفه من الحساب و لا يمكن توكيده بعد الآن.",
+ "Email was already removed from account and cannot be confirmed anymore." : " البريد الإلكتروني سبق حذفه من الحساب و لا يمكن تأكيده بعد الآن.",
"Could not verify mail because the token is expired." : "لا يمكن التحقّق من الإيميل بسبب انتهاء صلاحية الأَمارة token.",
"Could not verify mail because the token is invalid." : "لا يمكن التحقّق من الإيميل بسبب أن الأَمارة token غير صحيحة.",
- "An unexpected error occurred. Please contact your admin." : "حدث خطأ غير متوقع. اتصل بالمشرف رجاءً.",
+ "An unexpected error occurred. Please contact your admin." : "حدث خطأ غير متوقع. اتصل بالمدير رجاءً.",
"Email confirmation successful" : "تمّ توكيد الإيميل بنجاح",
"Provisioning API" : "توفير واجهة برمجة التطبيقات API",
- "This application enables a set of APIs that external systems can use to manage users, groups and apps." : "هذا التطبيق يُفعّل مجموعة من واجهات API التي يمكن أن تستعملها نُظُم خارجية لإدارة المستخدمين و المجموعات و التطبيقات.",
- "This application enables a set of APIs that external systems can use to create, edit, delete and query user\n\t\tattributes, query, set and remove groups, set quota and query total storage used in Nextcloud. Group admin users\n\t\tcan also query Nextcloud and perform the same functions as an admin for groups they manage. The API also enables\n\t\tan admin to query for active Nextcloud applications, application info, and to enable or disable an app remotely.\n\t\tOnce the app is enabled, HTTP requests can be used via a Basic Auth header to perform any of the functions\n\t\tlisted above. More information is available in the Provisioning API documentation, including example calls\n\t\tand server responses." : "هذا التطبيق يُفعّل مجموعة من الواجهات API التي يُمكن أن تستعملها نُظُم خارجية للاستعلام و إضافة و تعديل و حذف المستخدمين و المجموعات في نكست كلاود، و تحديد حصصهم التخزينية بمن فيهم مجموعة المشرفين.\n\nكذلك تُمكّن الواجهة من الاستعلام عن تطبيقات نكست كلاود النشطة، و بياناتها، و تُمكّن من تفعيلها أو إلغاء تفعيلها عن بُعدٍ. \n\nبعدما يتم تفعيل التطبيق، يُمكن استخدام طلبيات HTTP request من خلال ترويسة تحقّق بسيطة Basic Auth header لتنفيذ أيٍّ من الوظائف المذكورة أعلاه.\n\nللمزيد، أنظر توثيق Provisioning API؛ وفيه أمثلة عن الاستدعاء call ،و استجابات الخادوم response. \n "
+ "This application enables a set of APIs that external systems can use to manage accounts, groups and apps." : "يتيح هذا التطبيق مجموعة من واجهات برمجة التطبيقات التي يمكن للأنظمة الخارجية استخدامها لإدارة الحسابات والمجموعات والتطبيقات.",
+ "This application enables a set of APIs that external systems can use to create, edit, delete and query account\n\t\tattributes, query, set and remove groups, set quota and query total storage used in Nextcloud. Group admin accounts\n\t\tcan also query Nextcloud and perform the same functions as an admin for groups they manage. The API also enables\n\t\tan admin to query for active Nextcloud applications, application info, and to enable or disable an app remotely.\n\t\tOnce the app is enabled, HTTP requests can be used via a Basic Auth header to perform any of the functions\n\t\tlisted above. More information is available in the Provisioning API documentation, including example calls\n\t\tand server responses." : "يتيح هذا التطبيق مجموعة من واجهات برمجة التطبيقات التي يمكن للأنظمة الخارجية استخدامها لإنشاء الحساب وتحريره وحذفه والاستعلام عنه\n\t\tالخصائص، و الاستعلامات، و تعيين المجموعات و إزالتها، و تعيين الحصص، و الاستعلام عن إجمالي مساحة التخزين المستخدمة في نكست كلاود. حسابات مشرف المجموعة \n\t\t يمكنه أيضًا الاستعلام عن نكست كلاود و تنفيذ نفس الوظائف كمشرف للمجموعات التي يديرونها. تتيح واجهة برمجة التطبيقات API أيضاً \n\t\tمشرف للاستعلام عن تطبيقات نكست كلاود النشطة، و معلومات التطبيق، و تمكين التطبيق أو تعطيله عن بُعد. \n\t\tبمجرد تمكين التطبيق، يمكن استخدام طلبات HTTP عبر رأس المصادقة الأساسية لتنفيذ أي من الوظائف \n\t\t المذكورة أعلاه. \nللمزيد من المعلومات، أنظُر توثيق Provisioning API، بما في ذلك أمثلة على الاستدعاءات \n\t\t واستجابات الخادوم."
},"pluralForm" :"nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;"
} \ No newline at end of file
diff --git a/apps/provisioning_api/l10n/ast.js b/apps/provisioning_api/l10n/ast.js
index 9e8911fb4f9..d7d3bfb88bb 100644
--- a/apps/provisioning_api/l10n/ast.js
+++ b/apps/provisioning_api/l10n/ast.js
@@ -1,8 +1,31 @@
OC.L10N.register(
"provisioning_api",
{
- "Logged in user must be an administrator or have authorization to edit this setting." : "L'usuariu qu'anició la sesión ha ser alministrador o tener autorización pa editar esta opción.",
+ "Logged in account must be an administrator or have authorization to edit this setting." : "La cuenta qu'anició la sesión ha ser de l'alministración o tener l'autorización pa editar esta opción.",
+ "Could not create non-existing user ID" : "Nun se pudo crear la ID d'usuariu inexistente",
"User already exists" : "L'usuariu yá esiste",
+ "Group %1$s does not exist" : "El grupu «%1$s» nun esiste",
+ "Insufficient privileges for group %1$s" : "El grupu «%1$s» nun tien los permisos abondos",
+ "No group specified (required for sub-admins)" : "Nun s'especificó nengún grupu (ríquese pa los soalministradores)",
+ "Sub-admin group does not exist" : "El grupu soalministrador nun esiste",
+ "Cannot create sub-admins for admin group" : "Nun se puen crear soalministradores pal grupu d'alministradores",
+ "No permissions to promote sub-admins" : "Nun hai nengún permisu p'ascender a soalministradores",
+ "Invalid password value" : "El valor de la contraseña ye inválidu",
+ "Required email address was not provided" : "Nun se fornió la direición de corréu electrónicu riquida",
+ "Invalid quota value: %1$s" : "El valor de la cuota ye inválidu: %1$s",
+ "Invalid quota value. %1$s is exceeding the maximum quota" : "El valor de la cuota ye inválidu. %1$s supera la cuota máxima.",
+ "Unlimited quota is forbidden on this instance" : "Prohíbese la cuota infinita nesta instancia",
+ "Setting the password is not supported by the users backend" : "El backend d'usuarios nun ye compatible cola configuración de la contraseña",
+ "Invalid language" : "La llingua ye inválida",
+ "Invalid locale" : "La locale ye inválida",
+ "Cannot remove yourself from the admin group" : "Nun pues quitate del grupu d'alministradores",
+ "Cannot remove yourself from this group as you are a sub-admin" : "Nun pues quitate d'esti grupu darréu que yes un soalministrador",
+ "Not viable to remove user from the last group you are sub-admin of" : "Nun ye viable quitar l'usuariu del últimu grupu del que yes soalministrador",
+ "User does not exist" : "L'usuariu nun esiste",
+ "Group does not exist" : "El grupu nun esiste",
+ "User is not a sub-admin of this group" : "L'usuariu nun ye un soalministrador d'esti grupu",
+ "Email address not available" : "La direición de corréu electrónicu nun ta disponible",
+ "Sending email failed" : "Falló l'unviu del corréu electrónicu",
"Email confirmation" : "Confirmación del corréu electrónicu",
"To enable the email address %s please click the button below." : "P'activar la direición de corréu electrónicu «%s», calca nel botón d'abaxo.",
"Confirm" : "Confirmar",
@@ -10,7 +33,8 @@ OC.L10N.register(
"Could not verify mail because the token is expired." : "Nun se pudo verificar la direición de corréu electrónicu porque'l pase caducó.",
"Could not verify mail because the token is invalid." : "Nun se pudo verificar la direición de corréu electrónicu porque'l pase ye inválidu.",
"An unexpected error occurred. Please contact your admin." : "Prodúxose un error inesperáu. Ponte en contautu cola alministración.",
+ "Email confirmation successful" : "El mensaxe de cofirmación foi correutu",
"Provisioning API" : "API d'aprovisionamientu",
- "This application enables a set of APIs that external systems can use to manage users, groups and apps." : "Esta aplicación activa un conxuntu d'APIs que los sistemes esternos puen usar pa xestionar usuarios, grupos y aplicaciones."
+ "This application enables a set of APIs that external systems can use to manage accounts, groups and apps." : "Esta aplicación activa un conxuntu d'APIs que los sistemes esternos puen usar pa xestionar cuentes grupos y aplicaciones."
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/provisioning_api/l10n/ast.json b/apps/provisioning_api/l10n/ast.json
index b4331803b00..3369728f28c 100644
--- a/apps/provisioning_api/l10n/ast.json
+++ b/apps/provisioning_api/l10n/ast.json
@@ -1,6 +1,29 @@
{ "translations": {
- "Logged in user must be an administrator or have authorization to edit this setting." : "L'usuariu qu'anició la sesión ha ser alministrador o tener autorización pa editar esta opción.",
+ "Logged in account must be an administrator or have authorization to edit this setting." : "La cuenta qu'anició la sesión ha ser de l'alministración o tener l'autorización pa editar esta opción.",
+ "Could not create non-existing user ID" : "Nun se pudo crear la ID d'usuariu inexistente",
"User already exists" : "L'usuariu yá esiste",
+ "Group %1$s does not exist" : "El grupu «%1$s» nun esiste",
+ "Insufficient privileges for group %1$s" : "El grupu «%1$s» nun tien los permisos abondos",
+ "No group specified (required for sub-admins)" : "Nun s'especificó nengún grupu (ríquese pa los soalministradores)",
+ "Sub-admin group does not exist" : "El grupu soalministrador nun esiste",
+ "Cannot create sub-admins for admin group" : "Nun se puen crear soalministradores pal grupu d'alministradores",
+ "No permissions to promote sub-admins" : "Nun hai nengún permisu p'ascender a soalministradores",
+ "Invalid password value" : "El valor de la contraseña ye inválidu",
+ "Required email address was not provided" : "Nun se fornió la direición de corréu electrónicu riquida",
+ "Invalid quota value: %1$s" : "El valor de la cuota ye inválidu: %1$s",
+ "Invalid quota value. %1$s is exceeding the maximum quota" : "El valor de la cuota ye inválidu. %1$s supera la cuota máxima.",
+ "Unlimited quota is forbidden on this instance" : "Prohíbese la cuota infinita nesta instancia",
+ "Setting the password is not supported by the users backend" : "El backend d'usuarios nun ye compatible cola configuración de la contraseña",
+ "Invalid language" : "La llingua ye inválida",
+ "Invalid locale" : "La locale ye inválida",
+ "Cannot remove yourself from the admin group" : "Nun pues quitate del grupu d'alministradores",
+ "Cannot remove yourself from this group as you are a sub-admin" : "Nun pues quitate d'esti grupu darréu que yes un soalministrador",
+ "Not viable to remove user from the last group you are sub-admin of" : "Nun ye viable quitar l'usuariu del últimu grupu del que yes soalministrador",
+ "User does not exist" : "L'usuariu nun esiste",
+ "Group does not exist" : "El grupu nun esiste",
+ "User is not a sub-admin of this group" : "L'usuariu nun ye un soalministrador d'esti grupu",
+ "Email address not available" : "La direición de corréu electrónicu nun ta disponible",
+ "Sending email failed" : "Falló l'unviu del corréu electrónicu",
"Email confirmation" : "Confirmación del corréu electrónicu",
"To enable the email address %s please click the button below." : "P'activar la direición de corréu electrónicu «%s», calca nel botón d'abaxo.",
"Confirm" : "Confirmar",
@@ -8,7 +31,8 @@
"Could not verify mail because the token is expired." : "Nun se pudo verificar la direición de corréu electrónicu porque'l pase caducó.",
"Could not verify mail because the token is invalid." : "Nun se pudo verificar la direición de corréu electrónicu porque'l pase ye inválidu.",
"An unexpected error occurred. Please contact your admin." : "Prodúxose un error inesperáu. Ponte en contautu cola alministración.",
+ "Email confirmation successful" : "El mensaxe de cofirmación foi correutu",
"Provisioning API" : "API d'aprovisionamientu",
- "This application enables a set of APIs that external systems can use to manage users, groups and apps." : "Esta aplicación activa un conxuntu d'APIs que los sistemes esternos puen usar pa xestionar usuarios, grupos y aplicaciones."
+ "This application enables a set of APIs that external systems can use to manage accounts, groups and apps." : "Esta aplicación activa un conxuntu d'APIs que los sistemes esternos puen usar pa xestionar cuentes grupos y aplicaciones."
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/provisioning_api/l10n/bg.js b/apps/provisioning_api/l10n/bg.js
deleted file mode 100644
index 65f85f8e42a..00000000000
--- a/apps/provisioning_api/l10n/bg.js
+++ /dev/null
@@ -1,18 +0,0 @@
-OC.L10N.register(
- "provisioning_api",
- {
- "Logged in user must be an administrator or have authorization to edit this setting." : "Влезлият потребител трябва да е администратор или да има разрешение за редактиране на тази настройка.",
- "User already exists" : "Вече съществува потребител",
- "Email confirmation" : "Потвърждение по имейл",
- "To enable the email address %s please click the button below." : "За да активирате имейл адреса %s, моля, щракнете върху долния бутон.",
- "Confirm" : "Потвърди",
- "Email was already removed from account and cannot be confirmed anymore." : "Имейлът вече е премахнат от профила и не може да бъде потвърден повече.",
- "Could not verify mail because the token is expired." : "Не можа да се потвърди пощата, защото токенът е изтекъл.",
- "Could not verify mail because the token is invalid." : "Не можа да се потвърди пощата, защото токенът е невалиден.",
- "An unexpected error occurred. Please contact your admin." : "Възникна неочаквана грешка. Моля, свържете се с вашия администратор.",
- "Email confirmation successful" : "Потвърждението по имейл е успешно",
- "Provisioning API" : "Осигуряващ API",
- "This application enables a set of APIs that external systems can use to manage users, groups and apps." : "Това приложение активира набор от API, които външните системи могат да използват за управление на потребители, групи и приложения.",
- "This application enables a set of APIs that external systems can use to create, edit, delete and query user\n\t\tattributes, query, set and remove groups, set quota and query total storage used in Nextcloud. Group admin users\n\t\tcan also query Nextcloud and perform the same functions as an admin for groups they manage. The API also enables\n\t\tan admin to query for active Nextcloud applications, application info, and to enable or disable an app remotely.\n\t\tOnce the app is enabled, HTTP requests can be used via a Basic Auth header to perform any of the functions\n\t\tlisted above. More information is available in the Provisioning API documentation, including example calls\n\t\tand server responses." : "Това приложение активира набор от API, които външните системи могат да използват за създаване, редактиране, изтриване и запитване на потребител\n\t\tатрибути, заявка, задаване и премахване на групи, задаване на квота и заявка за общо хранилище, използвано в Nextcloud. Потребители с администратор на групата\n\t\tможе също да подава заявка към Nextcloud и да изпълнява същите функции като администратор за групи, които управляват. API също позволява\n\t\tадминистратор, който да потърси активни приложения Nextcloud, информация за приложението и да активира или деактивира приложение от разстояние.\n\t\tСлед като приложението е активирано, HTTP заявките могат да се използват чрез Basic Auth заглавка за изпълнение на някоя от функциите\n\t\tизброени по-горе. Повече информация е налична в документацията на API за предоставяне, включително примерни повиквания\n\t\tи отговори на сървъра."
-},
-"nplurals=2; plural=(n != 1);");
diff --git a/apps/provisioning_api/l10n/bg.json b/apps/provisioning_api/l10n/bg.json
deleted file mode 100644
index 52b2fdb313f..00000000000
--- a/apps/provisioning_api/l10n/bg.json
+++ /dev/null
@@ -1,16 +0,0 @@
-{ "translations": {
- "Logged in user must be an administrator or have authorization to edit this setting." : "Влезлият потребител трябва да е администратор или да има разрешение за редактиране на тази настройка.",
- "User already exists" : "Вече съществува потребител",
- "Email confirmation" : "Потвърждение по имейл",
- "To enable the email address %s please click the button below." : "За да активирате имейл адреса %s, моля, щракнете върху долния бутон.",
- "Confirm" : "Потвърди",
- "Email was already removed from account and cannot be confirmed anymore." : "Имейлът вече е премахнат от профила и не може да бъде потвърден повече.",
- "Could not verify mail because the token is expired." : "Не можа да се потвърди пощата, защото токенът е изтекъл.",
- "Could not verify mail because the token is invalid." : "Не можа да се потвърди пощата, защото токенът е невалиден.",
- "An unexpected error occurred. Please contact your admin." : "Възникна неочаквана грешка. Моля, свържете се с вашия администратор.",
- "Email confirmation successful" : "Потвърждението по имейл е успешно",
- "Provisioning API" : "Осигуряващ API",
- "This application enables a set of APIs that external systems can use to manage users, groups and apps." : "Това приложение активира набор от API, които външните системи могат да използват за управление на потребители, групи и приложения.",
- "This application enables a set of APIs that external systems can use to create, edit, delete and query user\n\t\tattributes, query, set and remove groups, set quota and query total storage used in Nextcloud. Group admin users\n\t\tcan also query Nextcloud and perform the same functions as an admin for groups they manage. The API also enables\n\t\tan admin to query for active Nextcloud applications, application info, and to enable or disable an app remotely.\n\t\tOnce the app is enabled, HTTP requests can be used via a Basic Auth header to perform any of the functions\n\t\tlisted above. More information is available in the Provisioning API documentation, including example calls\n\t\tand server responses." : "Това приложение активира набор от API, които външните системи могат да използват за създаване, редактиране, изтриване и запитване на потребител\n\t\tатрибути, заявка, задаване и премахване на групи, задаване на квота и заявка за общо хранилище, използвано в Nextcloud. Потребители с администратор на групата\n\t\tможе също да подава заявка към Nextcloud и да изпълнява същите функции като администратор за групи, които управляват. API също позволява\n\t\tадминистратор, който да потърси активни приложения Nextcloud, информация за приложението и да активира или деактивира приложение от разстояние.\n\t\tСлед като приложението е активирано, HTTP заявките могат да се използват чрез Basic Auth заглавка за изпълнение на някоя от функциите\n\t\tизброени по-горе. Повече информация е налична в документацията на API за предоставяне, включително примерни повиквания\n\t\tи отговори на сървъра."
-},"pluralForm" :"nplurals=2; plural=(n != 1);"
-} \ No newline at end of file
diff --git a/apps/provisioning_api/l10n/ca.js b/apps/provisioning_api/l10n/ca.js
index 344668e4511..dd83b291c48 100644
--- a/apps/provisioning_api/l10n/ca.js
+++ b/apps/provisioning_api/l10n/ca.js
@@ -1,8 +1,33 @@
OC.L10N.register(
"provisioning_api",
{
- "Logged in user must be an administrator or have authorization to edit this setting." : "L'usuari que ha iniciat la sessió ha de ser administrador o tenir autorització per a editar aquest paràmetre.",
+ "Logged in account must be an administrator or have authorization to edit this setting." : "El compte que ha iniciat la sessió ha de ser administrador o tenir autorització per a editar aquest paràmetre.",
+ "Could not create non-existing user ID" : "No s'ha pogut crear l'ID d'usuari inexistent",
"User already exists" : "L'usuari ja existeix",
+ "Group %1$s does not exist" : "El grup %1$s no existeix",
+ "Insufficient privileges for group %1$s" : "El grup %1$s té privilegis insuficients",
+ "No group specified (required for sub-admins)" : "No s'ha especificat cap grup (obligatori per als subadministradors)",
+ "Sub-admin group does not exist" : "El grup de subadministradors no existeix",
+ "Cannot create sub-admins for admin group" : "No es poden crear subadministradors per al grup d'administració",
+ "No permissions to promote sub-admins" : "No teniu permís per a ascendir subadministradors",
+ "Invalid password value" : "El valor de la contrasenya no és vàlid",
+ "An email address is required, to send a password link to the user." : "Es requereix una adreça de correu electrònic per enviar un enllaç de contrasenya a l'usuari.",
+ "Required email address was not provided" : "No s'ha proporcionat l'adreça electrònica obligatòria",
+ "Invalid quota value: %1$s" : "El valor de quota no és vàlid: %1$s",
+ "Invalid quota value. %1$s is exceeding the maximum quota" : "El valor de quota no és vàlid. %1$s supera la quota màxima",
+ "Unlimited quota is forbidden on this instance" : "Aquesta instància prohibeix definir una quota sense límits",
+ "Setting the password is not supported by the users backend" : "El rerefons d'usuaris no permet definir la contrasenya",
+ "Invalid language" : "La llengua no és vàlida",
+ "Invalid locale" : "La configuració regional no és vàlida",
+ "Invalid first day of week" : "El primer dia de la setmana no és vàlid",
+ "Cannot remove yourself from the admin group" : "No us podeu suprimir del grup d'administració",
+ "Cannot remove yourself from this group as you are a sub-admin" : "No us podeu suprimir d'aquest grup perquè en sou subadministrador",
+ "Not viable to remove user from the last group you are sub-admin of" : "No és viable suprimir l'usuari del darrer grup del qual sou subadministrador",
+ "User does not exist" : "L'usuari no existeix",
+ "Group does not exist" : "El grup no existeix",
+ "User is not a sub-admin of this group" : "L'usuari no és un subadministrador d'aquest grup",
+ "Email address not available" : "L'adreça electrònica no està disponible",
+ "Sending email failed" : "No s'ha pogut enviar el correu electrònic",
"Email confirmation" : "Confirmació de l'adreça electrònica",
"To enable the email address %s please click the button below." : "Per a habilitar l'adreça electrònica %s, feu clic en el botó següent.",
"Confirm" : "Confirma",
@@ -12,7 +37,7 @@ OC.L10N.register(
"An unexpected error occurred. Please contact your admin." : "S'ha produït un error inesperat. Contacteu amb l'administrador.",
"Email confirmation successful" : "S'ha confirmat l'adreça electrònica",
"Provisioning API" : "API d'aprovisionament",
- "This application enables a set of APIs that external systems can use to manage users, groups and apps." : "Aquesta aplicació habilita un conjunt d'API que els sistemes externs poden utilitzar per a administrar usuaris, grups i aplicacions.",
- "This application enables a set of APIs that external systems can use to create, edit, delete and query user\n\t\tattributes, query, set and remove groups, set quota and query total storage used in Nextcloud. Group admin users\n\t\tcan also query Nextcloud and perform the same functions as an admin for groups they manage. The API also enables\n\t\tan admin to query for active Nextcloud applications, application info, and to enable or disable an app remotely.\n\t\tOnce the app is enabled, HTTP requests can be used via a Basic Auth header to perform any of the functions\n\t\tlisted above. More information is available in the Provisioning API documentation, including example calls\n\t\tand server responses." : "Aquesta aplicació habilita un conjunt d'API que els sistemes externs poden utilitzar per a crear, editar, suprimir i consultar atributs\n\t\td'usuari, consultar, definir i suprimir grups, definir la quota i consultar l'emmagatzematge total en ús al Nextcloud. Els usuaris administradors de grup\n\t\ttambé poden enviar consultes al Nextcloud i realitzar les mateixes funcions que un administrador per als grups que administren. L'API també permet a\n\t\tun administrador consultar les aplicacions actives del Nextcloud, la informació de l'aplicació i habilitar o inhabilitar una aplicació de forma remota.\n\t\tUn cop habilitada l'aplicació, es poden utilitzar sol·licituds HTTP mitjançant una capçalera d'autenticació bàsica per a realitzar qualsevol de les funcions\n\t\tindicades anteriorment. Podeu trobar més informació en la documentació de l'API d'aprovisionament, incloent-hi exemples\n\t\tde trucades i respostes del servidor."
+ "This application enables a set of APIs that external systems can use to manage accounts, groups and apps." : "Aquesta aplicació habilita un conjunt d'API que els sistemes externs poden utilitzar per a administrar comptes, grups i aplicacions.",
+ "This application enables a set of APIs that external systems can use to create, edit, delete and query account\n\t\tattributes, query, set and remove groups, set quota and query total storage used in Nextcloud. Group admin accounts\n\t\tcan also query Nextcloud and perform the same functions as an admin for groups they manage. The API also enables\n\t\tan admin to query for active Nextcloud applications, application info, and to enable or disable an app remotely.\n\t\tOnce the app is enabled, HTTP requests can be used via a Basic Auth header to perform any of the functions\n\t\tlisted above. More information is available in the Provisioning API documentation, including example calls\n\t\tand server responses." : "Aquesta aplicació habilita un conjunt d'API que els sistemes externs poden utilitzar per a crear, editar, suprimir i consultar atributs\n\t\tde compte, consultar, definir i suprimir grups, definir la quota i consultar l'emmagatzematge total en ús al Nextcloud. Els comptes administradors de grup\n\t\ttambé poden enviar consultes al Nextcloud i realitzar les mateixes funcions que un administrador per als grups que administren. L'API també permet a\n\t\tun administrador consultar les aplicacions actives del Nextcloud, la informació de l'aplicació i habilitar o inhabilitar una aplicació de forma remota.\n\t\tUn cop habilitada l'aplicació, es poden utilitzar sol·licituds HTTP mitjançant una capçalera d'autenticació bàsica per a realitzar qualsevol de les funcions\n\t\tindicades anteriorment. Podeu trobar més informació en la documentació de l'API d'aprovisionament, incloent-hi exemples\n\t\tde trucades i respostes del servidor."
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/provisioning_api/l10n/ca.json b/apps/provisioning_api/l10n/ca.json
index 72893984751..6d39192d835 100644
--- a/apps/provisioning_api/l10n/ca.json
+++ b/apps/provisioning_api/l10n/ca.json
@@ -1,6 +1,31 @@
{ "translations": {
- "Logged in user must be an administrator or have authorization to edit this setting." : "L'usuari que ha iniciat la sessió ha de ser administrador o tenir autorització per a editar aquest paràmetre.",
+ "Logged in account must be an administrator or have authorization to edit this setting." : "El compte que ha iniciat la sessió ha de ser administrador o tenir autorització per a editar aquest paràmetre.",
+ "Could not create non-existing user ID" : "No s'ha pogut crear l'ID d'usuari inexistent",
"User already exists" : "L'usuari ja existeix",
+ "Group %1$s does not exist" : "El grup %1$s no existeix",
+ "Insufficient privileges for group %1$s" : "El grup %1$s té privilegis insuficients",
+ "No group specified (required for sub-admins)" : "No s'ha especificat cap grup (obligatori per als subadministradors)",
+ "Sub-admin group does not exist" : "El grup de subadministradors no existeix",
+ "Cannot create sub-admins for admin group" : "No es poden crear subadministradors per al grup d'administració",
+ "No permissions to promote sub-admins" : "No teniu permís per a ascendir subadministradors",
+ "Invalid password value" : "El valor de la contrasenya no és vàlid",
+ "An email address is required, to send a password link to the user." : "Es requereix una adreça de correu electrònic per enviar un enllaç de contrasenya a l'usuari.",
+ "Required email address was not provided" : "No s'ha proporcionat l'adreça electrònica obligatòria",
+ "Invalid quota value: %1$s" : "El valor de quota no és vàlid: %1$s",
+ "Invalid quota value. %1$s is exceeding the maximum quota" : "El valor de quota no és vàlid. %1$s supera la quota màxima",
+ "Unlimited quota is forbidden on this instance" : "Aquesta instància prohibeix definir una quota sense límits",
+ "Setting the password is not supported by the users backend" : "El rerefons d'usuaris no permet definir la contrasenya",
+ "Invalid language" : "La llengua no és vàlida",
+ "Invalid locale" : "La configuració regional no és vàlida",
+ "Invalid first day of week" : "El primer dia de la setmana no és vàlid",
+ "Cannot remove yourself from the admin group" : "No us podeu suprimir del grup d'administració",
+ "Cannot remove yourself from this group as you are a sub-admin" : "No us podeu suprimir d'aquest grup perquè en sou subadministrador",
+ "Not viable to remove user from the last group you are sub-admin of" : "No és viable suprimir l'usuari del darrer grup del qual sou subadministrador",
+ "User does not exist" : "L'usuari no existeix",
+ "Group does not exist" : "El grup no existeix",
+ "User is not a sub-admin of this group" : "L'usuari no és un subadministrador d'aquest grup",
+ "Email address not available" : "L'adreça electrònica no està disponible",
+ "Sending email failed" : "No s'ha pogut enviar el correu electrònic",
"Email confirmation" : "Confirmació de l'adreça electrònica",
"To enable the email address %s please click the button below." : "Per a habilitar l'adreça electrònica %s, feu clic en el botó següent.",
"Confirm" : "Confirma",
@@ -10,7 +35,7 @@
"An unexpected error occurred. Please contact your admin." : "S'ha produït un error inesperat. Contacteu amb l'administrador.",
"Email confirmation successful" : "S'ha confirmat l'adreça electrònica",
"Provisioning API" : "API d'aprovisionament",
- "This application enables a set of APIs that external systems can use to manage users, groups and apps." : "Aquesta aplicació habilita un conjunt d'API que els sistemes externs poden utilitzar per a administrar usuaris, grups i aplicacions.",
- "This application enables a set of APIs that external systems can use to create, edit, delete and query user\n\t\tattributes, query, set and remove groups, set quota and query total storage used in Nextcloud. Group admin users\n\t\tcan also query Nextcloud and perform the same functions as an admin for groups they manage. The API also enables\n\t\tan admin to query for active Nextcloud applications, application info, and to enable or disable an app remotely.\n\t\tOnce the app is enabled, HTTP requests can be used via a Basic Auth header to perform any of the functions\n\t\tlisted above. More information is available in the Provisioning API documentation, including example calls\n\t\tand server responses." : "Aquesta aplicació habilita un conjunt d'API que els sistemes externs poden utilitzar per a crear, editar, suprimir i consultar atributs\n\t\td'usuari, consultar, definir i suprimir grups, definir la quota i consultar l'emmagatzematge total en ús al Nextcloud. Els usuaris administradors de grup\n\t\ttambé poden enviar consultes al Nextcloud i realitzar les mateixes funcions que un administrador per als grups que administren. L'API també permet a\n\t\tun administrador consultar les aplicacions actives del Nextcloud, la informació de l'aplicació i habilitar o inhabilitar una aplicació de forma remota.\n\t\tUn cop habilitada l'aplicació, es poden utilitzar sol·licituds HTTP mitjançant una capçalera d'autenticació bàsica per a realitzar qualsevol de les funcions\n\t\tindicades anteriorment. Podeu trobar més informació en la documentació de l'API d'aprovisionament, incloent-hi exemples\n\t\tde trucades i respostes del servidor."
+ "This application enables a set of APIs that external systems can use to manage accounts, groups and apps." : "Aquesta aplicació habilita un conjunt d'API que els sistemes externs poden utilitzar per a administrar comptes, grups i aplicacions.",
+ "This application enables a set of APIs that external systems can use to create, edit, delete and query account\n\t\tattributes, query, set and remove groups, set quota and query total storage used in Nextcloud. Group admin accounts\n\t\tcan also query Nextcloud and perform the same functions as an admin for groups they manage. The API also enables\n\t\tan admin to query for active Nextcloud applications, application info, and to enable or disable an app remotely.\n\t\tOnce the app is enabled, HTTP requests can be used via a Basic Auth header to perform any of the functions\n\t\tlisted above. More information is available in the Provisioning API documentation, including example calls\n\t\tand server responses." : "Aquesta aplicació habilita un conjunt d'API que els sistemes externs poden utilitzar per a crear, editar, suprimir i consultar atributs\n\t\tde compte, consultar, definir i suprimir grups, definir la quota i consultar l'emmagatzematge total en ús al Nextcloud. Els comptes administradors de grup\n\t\ttambé poden enviar consultes al Nextcloud i realitzar les mateixes funcions que un administrador per als grups que administren. L'API també permet a\n\t\tun administrador consultar les aplicacions actives del Nextcloud, la informació de l'aplicació i habilitar o inhabilitar una aplicació de forma remota.\n\t\tUn cop habilitada l'aplicació, es poden utilitzar sol·licituds HTTP mitjançant una capçalera d'autenticació bàsica per a realitzar qualsevol de les funcions\n\t\tindicades anteriorment. Podeu trobar més informació en la documentació de l'API d'aprovisionament, incloent-hi exemples\n\t\tde trucades i respostes del servidor."
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/provisioning_api/l10n/cs.js b/apps/provisioning_api/l10n/cs.js
index 7c666793a08..a6fdb3482fa 100644
--- a/apps/provisioning_api/l10n/cs.js
+++ b/apps/provisioning_api/l10n/cs.js
@@ -1,8 +1,34 @@
OC.L10N.register(
"provisioning_api",
{
- "Logged in user must be an administrator or have authorization to edit this setting." : "Aby měl pověření upravovat toto nastavení, je třeba, aby přihlášený uživatel byl správce.",
+ "Logged in account must be an administrator or have authorization to edit this setting." : "Aby mohl upravovat toto nastavení, je třeba, aby přihlášený účet byl správcem nebo měl potřebná pověření.",
+ "Could not create non-existing user ID" : "Není možné vytvořit neexistující identifikátor uživatele",
"User already exists" : "Uživatel už existuje",
+ "Group %1$s does not exist" : "Skupina %1$s neexistuje",
+ "Insufficient privileges for group %1$s" : "Nedostatečná oprávnění pro skupinu %1$s",
+ "No group specified (required for sub-admins)" : "Neurčena žádná skupina (vyžadováno pro dílčí správce)",
+ "Sub-admin group does not exist" : "Skupina dílčích správců neexistuje",
+ "Cannot create sub-admins for admin group" : "Nepodařilo se vytvořit dílčí správce pro skupinu správců",
+ "No permissions to promote sub-admins" : "Chybí oprávnění povyšovat dílčí správce",
+ "Invalid password value" : "Neplatná hodnota hesla",
+ "An email address is required, to send a password link to the user." : "Je vyžadována e-mailová adresa (pro zaslání odkazu na heslo uživateli).",
+ "Required email address was not provided" : "Nebyla poskytnuta potřebná e-mailová adresa",
+ "User creation failed" : "Vytváření uživatele se nezdařilo",
+ "Invalid quota value: %1$s" : "Neplatná hodnota kvóty: %1$s",
+ "Invalid quota value. %1$s is exceeding the maximum quota" : "Neplatná hodnota kvóty. %1$s překračuje maximální kvótu",
+ "Unlimited quota is forbidden on this instance" : "Neomezená kvóta není na této instanci dovolena",
+ "Setting the password is not supported by the users backend" : "Nastavování hesla není touto podpůrnou vrstvou pro uživatelské účty podporována",
+ "Invalid language" : "Neplatný jazyk",
+ "Invalid locale" : "Neplatná místní a jazyková nastavení",
+ "Invalid first day of week" : "Neplatný první den v týdnu",
+ "Cannot remove yourself from the admin group" : "Není možné odebrat sama sebe ze skupiny správců",
+ "Cannot remove yourself from this group as you are a sub-admin" : "Není možné odebrat sama sebe z této skupiny protože jste dílčím správcem",
+ "Not viable to remove user from the last group you are sub-admin of" : "Není uskutečnitelné odebrat uživatele z poslední skupiny, které jste dílčím správcem",
+ "User does not exist" : "Uživatel neexistuje",
+ "Group does not exist" : "Skupina neexistuje",
+ "User is not a sub-admin of this group" : "Uživatel není dílčím správcem této skupiny",
+ "Email address not available" : "E-mailová adresa není k dispozici",
+ "Sending email failed" : "Odeslání e-mailu se nezdařilo",
"Email confirmation" : "Potvrzení e-mailu",
"To enable the email address %s please click the button below." : "Pokud chcete povolit e-mailovou adresu %s, klikněte na tlačítko níže.",
"Confirm" : "Potvrdit",
@@ -12,7 +38,7 @@ OC.L10N.register(
"An unexpected error occurred. Please contact your admin." : "Došlo k neočekávané chybě. Obraťte se na svého správce.",
"Email confirmation successful" : "E-mail úspěšně potvrzen",
"Provisioning API" : "Provisioning API",
- "This application enables a set of APIs that external systems can use to manage users, groups and apps." : "Tato aplikace umožňuje nastavovat API rozhraní, které externí systémy mohou používat pro správu uživatelů, skupin a aplikací.",
- "This application enables a set of APIs that external systems can use to create, edit, delete and query user\n\t\tattributes, query, set and remove groups, set quota and query total storage used in Nextcloud. Group admin users\n\t\tcan also query Nextcloud and perform the same functions as an admin for groups they manage. The API also enables\n\t\tan admin to query for active Nextcloud applications, application info, and to enable or disable an app remotely.\n\t\tOnce the app is enabled, HTTP requests can be used via a Basic Auth header to perform any of the functions\n\t\tlisted above. More information is available in the Provisioning API documentation, including example calls\n\t\tand server responses." : "Tato aplikace umožňuje nastavit aplikační programová rozhraní (API) pro externí systémy, která je možné použít pro vytváření, upravování, mazání a dotazování se na atributy uživatelů,\n\t\tdotazovat se na, nastavovat a odebírat skupiny, nastavovat kvóty a dotazovat se na celkové využívání úložiště v Nextcloud. Správci skupin\n\t\tse také mohou Nextcloud dotazovat a provádět stejné funkce jako správci pro skupiny, které spravují. API také umožňuje\n\t\tsprávci dotazovat se na aktivní Nextcloud aplikace, informace o nic a zapínat nebo vypínat aplikace na dálku.\n\t\tJakmile je aplikace zapnutá, HTTP požadavky je možné použít prostřednictvím Basic Auth záhlaví pro provádění jakékoli\n\t\tz výše zmíněných funkcí. Více informací je k dispozici v dokumentaci k Provisioning API, včetně ukázek volání\n\t\ta odpovědí ze serveru."
+ "This application enables a set of APIs that external systems can use to manage accounts, groups and apps." : "Tato aplikace zapíná sadu PI rozhraní, kterou mohou využívat externí systémy pro správu účtů, skupin a aplikací.",
+ "This application enables a set of APIs that external systems can use to create, edit, delete and query account\n\t\tattributes, query, set and remove groups, set quota and query total storage used in Nextcloud. Group admin accounts\n\t\tcan also query Nextcloud and perform the same functions as an admin for groups they manage. The API also enables\n\t\tan admin to query for active Nextcloud applications, application info, and to enable or disable an app remotely.\n\t\tOnce the app is enabled, HTTP requests can be used via a Basic Auth header to perform any of the functions\n\t\tlisted above. More information is available in the Provisioning API documentation, including example calls\n\t\tand server responses." : "Tato aplikace umožňuje nastavit aplikační programová rozhraní (API) pro externí systémy, která je možné použít pro vytváření, upravování, mazání a dotazování se na atributy účtů,\n\t\tdotazovat se na, nastavovat a odebírat skupiny, nastavovat kvóty a dotazovat se na celkové využívání úložiště v Nextcloud. Správci skupin\n\t\tse také mohou Nextcloud dotazovat a provádět stejné funkce jako správci pro skupiny, které spravují. API také umožňuje\n\t\tsprávci dotazovat se na aktivní Nextcloud aplikace, informace o nich a zapínat nebo vypínat aplikace na dálku.\n\t\tJakmile je aplikace zapnutá, HTTP požadavky je možné použít prostřednictvím Basic Auth záhlaví pro provádění jakékoli\n\t\tz výše zmíněných funkcí. Více informací je k dispozici v dokumentaci k Provisioning API, včetně ukázek volání\n\t\ta odpovědí ze serveru."
},
"nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n >= 2 && n <= 4 && n % 1 == 0) ? 1: (n % 1 != 0 ) ? 2 : 3;");
diff --git a/apps/provisioning_api/l10n/cs.json b/apps/provisioning_api/l10n/cs.json
index bdb9e4dbbfd..6f9ad347813 100644
--- a/apps/provisioning_api/l10n/cs.json
+++ b/apps/provisioning_api/l10n/cs.json
@@ -1,6 +1,32 @@
{ "translations": {
- "Logged in user must be an administrator or have authorization to edit this setting." : "Aby měl pověření upravovat toto nastavení, je třeba, aby přihlášený uživatel byl správce.",
+ "Logged in account must be an administrator or have authorization to edit this setting." : "Aby mohl upravovat toto nastavení, je třeba, aby přihlášený účet byl správcem nebo měl potřebná pověření.",
+ "Could not create non-existing user ID" : "Není možné vytvořit neexistující identifikátor uživatele",
"User already exists" : "Uživatel už existuje",
+ "Group %1$s does not exist" : "Skupina %1$s neexistuje",
+ "Insufficient privileges for group %1$s" : "Nedostatečná oprávnění pro skupinu %1$s",
+ "No group specified (required for sub-admins)" : "Neurčena žádná skupina (vyžadováno pro dílčí správce)",
+ "Sub-admin group does not exist" : "Skupina dílčích správců neexistuje",
+ "Cannot create sub-admins for admin group" : "Nepodařilo se vytvořit dílčí správce pro skupinu správců",
+ "No permissions to promote sub-admins" : "Chybí oprávnění povyšovat dílčí správce",
+ "Invalid password value" : "Neplatná hodnota hesla",
+ "An email address is required, to send a password link to the user." : "Je vyžadována e-mailová adresa (pro zaslání odkazu na heslo uživateli).",
+ "Required email address was not provided" : "Nebyla poskytnuta potřebná e-mailová adresa",
+ "User creation failed" : "Vytváření uživatele se nezdařilo",
+ "Invalid quota value: %1$s" : "Neplatná hodnota kvóty: %1$s",
+ "Invalid quota value. %1$s is exceeding the maximum quota" : "Neplatná hodnota kvóty. %1$s překračuje maximální kvótu",
+ "Unlimited quota is forbidden on this instance" : "Neomezená kvóta není na této instanci dovolena",
+ "Setting the password is not supported by the users backend" : "Nastavování hesla není touto podpůrnou vrstvou pro uživatelské účty podporována",
+ "Invalid language" : "Neplatný jazyk",
+ "Invalid locale" : "Neplatná místní a jazyková nastavení",
+ "Invalid first day of week" : "Neplatný první den v týdnu",
+ "Cannot remove yourself from the admin group" : "Není možné odebrat sama sebe ze skupiny správců",
+ "Cannot remove yourself from this group as you are a sub-admin" : "Není možné odebrat sama sebe z této skupiny protože jste dílčím správcem",
+ "Not viable to remove user from the last group you are sub-admin of" : "Není uskutečnitelné odebrat uživatele z poslední skupiny, které jste dílčím správcem",
+ "User does not exist" : "Uživatel neexistuje",
+ "Group does not exist" : "Skupina neexistuje",
+ "User is not a sub-admin of this group" : "Uživatel není dílčím správcem této skupiny",
+ "Email address not available" : "E-mailová adresa není k dispozici",
+ "Sending email failed" : "Odeslání e-mailu se nezdařilo",
"Email confirmation" : "Potvrzení e-mailu",
"To enable the email address %s please click the button below." : "Pokud chcete povolit e-mailovou adresu %s, klikněte na tlačítko níže.",
"Confirm" : "Potvrdit",
@@ -10,7 +36,7 @@
"An unexpected error occurred. Please contact your admin." : "Došlo k neočekávané chybě. Obraťte se na svého správce.",
"Email confirmation successful" : "E-mail úspěšně potvrzen",
"Provisioning API" : "Provisioning API",
- "This application enables a set of APIs that external systems can use to manage users, groups and apps." : "Tato aplikace umožňuje nastavovat API rozhraní, které externí systémy mohou používat pro správu uživatelů, skupin a aplikací.",
- "This application enables a set of APIs that external systems can use to create, edit, delete and query user\n\t\tattributes, query, set and remove groups, set quota and query total storage used in Nextcloud. Group admin users\n\t\tcan also query Nextcloud and perform the same functions as an admin for groups they manage. The API also enables\n\t\tan admin to query for active Nextcloud applications, application info, and to enable or disable an app remotely.\n\t\tOnce the app is enabled, HTTP requests can be used via a Basic Auth header to perform any of the functions\n\t\tlisted above. More information is available in the Provisioning API documentation, including example calls\n\t\tand server responses." : "Tato aplikace umožňuje nastavit aplikační programová rozhraní (API) pro externí systémy, která je možné použít pro vytváření, upravování, mazání a dotazování se na atributy uživatelů,\n\t\tdotazovat se na, nastavovat a odebírat skupiny, nastavovat kvóty a dotazovat se na celkové využívání úložiště v Nextcloud. Správci skupin\n\t\tse také mohou Nextcloud dotazovat a provádět stejné funkce jako správci pro skupiny, které spravují. API také umožňuje\n\t\tsprávci dotazovat se na aktivní Nextcloud aplikace, informace o nic a zapínat nebo vypínat aplikace na dálku.\n\t\tJakmile je aplikace zapnutá, HTTP požadavky je možné použít prostřednictvím Basic Auth záhlaví pro provádění jakékoli\n\t\tz výše zmíněných funkcí. Více informací je k dispozici v dokumentaci k Provisioning API, včetně ukázek volání\n\t\ta odpovědí ze serveru."
+ "This application enables a set of APIs that external systems can use to manage accounts, groups and apps." : "Tato aplikace zapíná sadu PI rozhraní, kterou mohou využívat externí systémy pro správu účtů, skupin a aplikací.",
+ "This application enables a set of APIs that external systems can use to create, edit, delete and query account\n\t\tattributes, query, set and remove groups, set quota and query total storage used in Nextcloud. Group admin accounts\n\t\tcan also query Nextcloud and perform the same functions as an admin for groups they manage. The API also enables\n\t\tan admin to query for active Nextcloud applications, application info, and to enable or disable an app remotely.\n\t\tOnce the app is enabled, HTTP requests can be used via a Basic Auth header to perform any of the functions\n\t\tlisted above. More information is available in the Provisioning API documentation, including example calls\n\t\tand server responses." : "Tato aplikace umožňuje nastavit aplikační programová rozhraní (API) pro externí systémy, která je možné použít pro vytváření, upravování, mazání a dotazování se na atributy účtů,\n\t\tdotazovat se na, nastavovat a odebírat skupiny, nastavovat kvóty a dotazovat se na celkové využívání úložiště v Nextcloud. Správci skupin\n\t\tse také mohou Nextcloud dotazovat a provádět stejné funkce jako správci pro skupiny, které spravují. API také umožňuje\n\t\tsprávci dotazovat se na aktivní Nextcloud aplikace, informace o nich a zapínat nebo vypínat aplikace na dálku.\n\t\tJakmile je aplikace zapnutá, HTTP požadavky je možné použít prostřednictvím Basic Auth záhlaví pro provádění jakékoli\n\t\tz výše zmíněných funkcí. Více informací je k dispozici v dokumentaci k Provisioning API, včetně ukázek volání\n\t\ta odpovědí ze serveru."
},"pluralForm" :"nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n >= 2 && n <= 4 && n % 1 == 0) ? 1: (n % 1 != 0 ) ? 2 : 3;"
} \ No newline at end of file
diff --git a/apps/provisioning_api/l10n/da.js b/apps/provisioning_api/l10n/da.js
new file mode 100644
index 00000000000..b752d549f6e
--- /dev/null
+++ b/apps/provisioning_api/l10n/da.js
@@ -0,0 +1,43 @@
+OC.L10N.register(
+ "provisioning_api",
+ {
+ "Logged in account must be an administrator or have authorization to edit this setting." : "Den indloggede konto skal være en administrator eller have autorisation til at redigere denne indstilling.",
+ "Could not create non-existing user ID" : "Kunne ikke oprette en ikke-eksisterende bruger-ID",
+ "User already exists" : "Brugeren eksisterer allerede",
+ "Group %1$s does not exist" : "Gruppen %1$s eksisterer ikke",
+ "Insufficient privileges for group %1$s" : "Utilstrækkelige privilegier for gruppen %1$s",
+ "No group specified (required for sub-admins)" : "Ingen gruppe specificeret (påkrævet for underadministratorer)",
+ "Sub-admin group does not exist" : "Underadministratorgruppen eksisterer ikke",
+ "Cannot create sub-admins for admin group" : "Kan ikke oprette underadministratorer for administratorgruppen",
+ "No permissions to promote sub-admins" : "Ingen tilladelser til at forfremme underadministratorer",
+ "Invalid password value" : "Ugyldig adgangskodeværdi",
+ "An email address is required, to send a password link to the user." : "En e-mailadresse er krævet for at sende et adgangskodelink til brugeren.",
+ "Required email address was not provided" : "Den krævede e-mailadresse blev ikke oplyst",
+ "Invalid quota value: %1$s" : "Ugyldig kvoteværdi: %1$s",
+ "Invalid quota value. %1$s is exceeding the maximum quota" : "Ugyldig kvoteværdi. %1$s overskrider den maksimale kvote",
+ "Unlimited quota is forbidden on this instance" : "Ubegrænset kvote er forbudt i denne instans",
+ "Setting the password is not supported by the users backend" : "Indstilling af adgangskode understøttes ikke af brugernes backend",
+ "Invalid language" : "Ugyldigt sprog",
+ "Invalid locale" : "Ugyldigt landestandard",
+ "Invalid first day of week" : "Ugyldig første dag i ugen",
+ "Cannot remove yourself from the admin group" : "Du kan ikke fjerne dig selv fra administratorgruppen",
+ "Cannot remove yourself from this group as you are a sub-admin" : "Du kan ikke fjerne dig selv fra denne gruppe, da du er en underadministrator",
+ "Not viable to remove user from the last group you are sub-admin of" : "Ikke muligt at fjerne brugeren fra den sidste gruppe, du er underadministrator for",
+ "User does not exist" : "Brugeren eksisterer ikke",
+ "Group does not exist" : "Gruppen eksisterer ikke",
+ "User is not a sub-admin of this group" : "Brugeren er ikke underadministrator for denne gruppe",
+ "Email address not available" : "E-mailadresse ikke tilgængelig",
+ "Sending email failed" : "Det lykkedes ikke at sende e-mailen",
+ "Email confirmation" : "E-mailbekræftelse",
+ "To enable the email address %s please click the button below." : "For at aktivere e-mailadressen %s, klik venligst på knappen nedenfor.",
+ "Confirm" : "Bekræft",
+ "Email was already removed from account and cannot be confirmed anymore." : "E-mailen er allerede fjernet fra kontoen og kan ikke bekræftes længere.",
+ "Could not verify mail because the token is expired." : "Kunne ikke bekræfte e-mail, da token er udløbet.",
+ "Could not verify mail because the token is invalid." : "Kunne ikke bekræfte e-mail, da token er ugyldig.",
+ "An unexpected error occurred. Please contact your admin." : "Der opstod en uventet fejl. Kontakt venligst din administrator.",
+ "Email confirmation successful" : "E-mailbekræftelse lykkedes",
+ "Provisioning API" : "Provisioning API",
+ "This application enables a set of APIs that external systems can use to manage accounts, groups and apps." : "Denne applikation muliggør et sæt af API'er, som eksterne systemer kan bruge til at administrere konti, grupper og apps.",
+ "This application enables a set of APIs that external systems can use to create, edit, delete and query account\n\t\tattributes, query, set and remove groups, set quota and query total storage used in Nextcloud. Group admin accounts\n\t\tcan also query Nextcloud and perform the same functions as an admin for groups they manage. The API also enables\n\t\tan admin to query for active Nextcloud applications, application info, and to enable or disable an app remotely.\n\t\tOnce the app is enabled, HTTP requests can be used via a Basic Auth header to perform any of the functions\n\t\tlisted above. More information is available in the Provisioning API documentation, including example calls\n\t\tand server responses." : "Denne applikation muliggør et sæt af API'er, som eksterne systemer kan bruge til at oprette, redigere, slette og forespørge på kontoattributter, forespørge på, oprette og fjerne grupper, sætte kvoter og forespørge på det totale lagerforbrug i Nextcloud. Gruppeadministrator-konti kan også forespørge på Nextcloud og udføre de samme funktioner som en administrator for de grupper, de administrerer. API'en giver også en administrator mulighed for at forespørge på aktive Nextcloud-applikationer, applikationsinformation og til at aktivere eller deaktivere en app fjernstyret. Når appen er aktiveret, kan HTTP-anmodninger bruges via en Basic Auth header til at udføre nogen af de funktioner, der er nævnt ovenfor. Mere information er tilgængelig i dokumentationen for Provisioning API, inklusive eksempelopkald og serverrespons."
+},
+"nplurals=2; plural=(n != 1);");
diff --git a/apps/provisioning_api/l10n/da.json b/apps/provisioning_api/l10n/da.json
new file mode 100644
index 00000000000..2156565221f
--- /dev/null
+++ b/apps/provisioning_api/l10n/da.json
@@ -0,0 +1,41 @@
+{ "translations": {
+ "Logged in account must be an administrator or have authorization to edit this setting." : "Den indloggede konto skal være en administrator eller have autorisation til at redigere denne indstilling.",
+ "Could not create non-existing user ID" : "Kunne ikke oprette en ikke-eksisterende bruger-ID",
+ "User already exists" : "Brugeren eksisterer allerede",
+ "Group %1$s does not exist" : "Gruppen %1$s eksisterer ikke",
+ "Insufficient privileges for group %1$s" : "Utilstrækkelige privilegier for gruppen %1$s",
+ "No group specified (required for sub-admins)" : "Ingen gruppe specificeret (påkrævet for underadministratorer)",
+ "Sub-admin group does not exist" : "Underadministratorgruppen eksisterer ikke",
+ "Cannot create sub-admins for admin group" : "Kan ikke oprette underadministratorer for administratorgruppen",
+ "No permissions to promote sub-admins" : "Ingen tilladelser til at forfremme underadministratorer",
+ "Invalid password value" : "Ugyldig adgangskodeværdi",
+ "An email address is required, to send a password link to the user." : "En e-mailadresse er krævet for at sende et adgangskodelink til brugeren.",
+ "Required email address was not provided" : "Den krævede e-mailadresse blev ikke oplyst",
+ "Invalid quota value: %1$s" : "Ugyldig kvoteværdi: %1$s",
+ "Invalid quota value. %1$s is exceeding the maximum quota" : "Ugyldig kvoteværdi. %1$s overskrider den maksimale kvote",
+ "Unlimited quota is forbidden on this instance" : "Ubegrænset kvote er forbudt i denne instans",
+ "Setting the password is not supported by the users backend" : "Indstilling af adgangskode understøttes ikke af brugernes backend",
+ "Invalid language" : "Ugyldigt sprog",
+ "Invalid locale" : "Ugyldigt landestandard",
+ "Invalid first day of week" : "Ugyldig første dag i ugen",
+ "Cannot remove yourself from the admin group" : "Du kan ikke fjerne dig selv fra administratorgruppen",
+ "Cannot remove yourself from this group as you are a sub-admin" : "Du kan ikke fjerne dig selv fra denne gruppe, da du er en underadministrator",
+ "Not viable to remove user from the last group you are sub-admin of" : "Ikke muligt at fjerne brugeren fra den sidste gruppe, du er underadministrator for",
+ "User does not exist" : "Brugeren eksisterer ikke",
+ "Group does not exist" : "Gruppen eksisterer ikke",
+ "User is not a sub-admin of this group" : "Brugeren er ikke underadministrator for denne gruppe",
+ "Email address not available" : "E-mailadresse ikke tilgængelig",
+ "Sending email failed" : "Det lykkedes ikke at sende e-mailen",
+ "Email confirmation" : "E-mailbekræftelse",
+ "To enable the email address %s please click the button below." : "For at aktivere e-mailadressen %s, klik venligst på knappen nedenfor.",
+ "Confirm" : "Bekræft",
+ "Email was already removed from account and cannot be confirmed anymore." : "E-mailen er allerede fjernet fra kontoen og kan ikke bekræftes længere.",
+ "Could not verify mail because the token is expired." : "Kunne ikke bekræfte e-mail, da token er udløbet.",
+ "Could not verify mail because the token is invalid." : "Kunne ikke bekræfte e-mail, da token er ugyldig.",
+ "An unexpected error occurred. Please contact your admin." : "Der opstod en uventet fejl. Kontakt venligst din administrator.",
+ "Email confirmation successful" : "E-mailbekræftelse lykkedes",
+ "Provisioning API" : "Provisioning API",
+ "This application enables a set of APIs that external systems can use to manage accounts, groups and apps." : "Denne applikation muliggør et sæt af API'er, som eksterne systemer kan bruge til at administrere konti, grupper og apps.",
+ "This application enables a set of APIs that external systems can use to create, edit, delete and query account\n\t\tattributes, query, set and remove groups, set quota and query total storage used in Nextcloud. Group admin accounts\n\t\tcan also query Nextcloud and perform the same functions as an admin for groups they manage. The API also enables\n\t\tan admin to query for active Nextcloud applications, application info, and to enable or disable an app remotely.\n\t\tOnce the app is enabled, HTTP requests can be used via a Basic Auth header to perform any of the functions\n\t\tlisted above. More information is available in the Provisioning API documentation, including example calls\n\t\tand server responses." : "Denne applikation muliggør et sæt af API'er, som eksterne systemer kan bruge til at oprette, redigere, slette og forespørge på kontoattributter, forespørge på, oprette og fjerne grupper, sætte kvoter og forespørge på det totale lagerforbrug i Nextcloud. Gruppeadministrator-konti kan også forespørge på Nextcloud og udføre de samme funktioner som en administrator for de grupper, de administrerer. API'en giver også en administrator mulighed for at forespørge på aktive Nextcloud-applikationer, applikationsinformation og til at aktivere eller deaktivere en app fjernstyret. Når appen er aktiveret, kan HTTP-anmodninger bruges via en Basic Auth header til at udføre nogen af de funktioner, der er nævnt ovenfor. Mere information er tilgængelig i dokumentationen for Provisioning API, inklusive eksempelopkald og serverrespons."
+},"pluralForm" :"nplurals=2; plural=(n != 1);"
+} \ No newline at end of file
diff --git a/apps/provisioning_api/l10n/de.js b/apps/provisioning_api/l10n/de.js
index dbc31e7fe6c..f4e30f174f7 100644
--- a/apps/provisioning_api/l10n/de.js
+++ b/apps/provisioning_api/l10n/de.js
@@ -1,18 +1,44 @@
OC.L10N.register(
"provisioning_api",
{
- "Logged in user must be an administrator or have authorization to edit this setting." : "Der angemeldete Benutzer muss ein Administrator sein oder die Berechtigung haben, diese Einstellung zu bearbeiten.",
+ "Logged in account must be an administrator or have authorization to edit this setting." : "Das angemeldete Konto muss ein Administrationskonto sein oder die Berechtigung haben, diese Einstellung zu bearbeiten.",
+ "Could not create non-existing user ID" : "Nicht vorhandene Benutzer-ID konnte nicht erstellen werden",
"User already exists" : "Benutzer existiert bereits",
+ "Group %1$s does not exist" : "Gruppe %1$s existiert nicht",
+ "Insufficient privileges for group %1$s" : "Unzureichende Berechtigungen für Gruppe %1$s",
+ "No group specified (required for sub-admins)" : "Keine Gruppe angegeben (erforderlich für Unteradministration)",
+ "Sub-admin group does not exist" : "Die Unteradministrations-Gruppe existiert nicht",
+ "Cannot create sub-admins for admin group" : "Kann keine Unteradministration für die Administrations-Gruppe erstellen",
+ "No permissions to promote sub-admins" : "Keine Berechtigungen, um Unteradministration zu ernennen",
+ "Invalid password value" : "Ungültiger Passwort-Wert",
+ "An email address is required, to send a password link to the user." : "Um dem Benutzer einen Passwortlink zu senden, ist eine E-Mail-Adresse erforderlich.",
+ "Required email address was not provided" : "Erforderliche E-Mail-Adresse wurde nicht angegeben",
+ "User creation failed" : "Benutzererstellung fehlgeschlagen",
+ "Invalid quota value: %1$s" : "Ungültiger Wert für Speicherkontigent: %1$s",
+ "Invalid quota value. %1$s is exceeding the maximum quota" : "Ungültiger Wert für Speicherkontigent. %1$s überschreitet das maximale Kontigent",
+ "Unlimited quota is forbidden on this instance" : "Unbegrenztes Speicherkontigent ist auf dieser Instanz unzulässig",
+ "Setting the password is not supported by the users backend" : "Das Passwort kann nicht über das Benutzerbackend festgelegt werden",
+ "Invalid language" : "Ungültige Sprache",
+ "Invalid locale" : "Ungültige Lokalisierung",
+ "Invalid first day of week" : "Ungültiger erster Tag der Woche",
+ "Cannot remove yourself from the admin group" : "Du kannst dich nicht selbst aus der Administrationsgruppe entfernen.",
+ "Cannot remove yourself from this group as you are a sub-admin" : "Du kannst dich nicht selbst aus dieser Gruppe entfernen, da du zur Unteradministration gehörst.",
+ "Not viable to remove user from the last group you are sub-admin of" : "Das Konto aus der letzten Gruppe zu entfernen, in der du zur Unteradministration gehörst ist nicht möglich.",
+ "User does not exist" : "Konto existiert nicht",
+ "Group does not exist" : "Gruppe existiert nicht",
+ "User is not a sub-admin of this group" : "Konto ist kein Unteradministrator dieser Gruppe",
+ "Email address not available" : "E-Mail-Adresse nicht verfügbar",
+ "Sending email failed" : "Senden der E-Mail ist fehlgeschlagen",
"Email confirmation" : "E-Mail-Bestätigung",
- "To enable the email address %s please click the button below." : "Um die E-Mail-Adresse %s zu bestätigen, klicke bitte auf die untenstehende Schaltfläche.",
+ "To enable the email address %s please click the button below." : "Um die E-Mailadresse %s zu bestätigen, auf die untenstehende Schaltfläche klicken.",
"Confirm" : "Bestätigen",
"Email was already removed from account and cannot be confirmed anymore." : "Diese E-Mail-Adresse wurde bereits aus dem Konto entfernt und kann nicht mehr bestätigt werden.",
- "Could not verify mail because the token is expired." : "Die E-Mail konnte nicht verifiziert werden, da die Frist des Tokens abgelaufen ist.",
- "Could not verify mail because the token is invalid." : "Die E-Mail konnte nicht verifiziert werden, da der Token ungültig ist.",
- "An unexpected error occurred. Please contact your admin." : "Es ist ein unerwarteter Fehler aufgetreten, bitte kontaktiere deinen Administrator.",
+ "Could not verify mail because the token is expired." : "Die E-Mailadresse konnte nicht verifiziert werden, da das Token abgelaufen ist.",
+ "Could not verify mail because the token is invalid." : "Die E-Mailadresse konnte nicht verifiziert werden, da der Token ungültig ist.",
+ "An unexpected error occurred. Please contact your admin." : "Es ist ein unerwarteter Fehler aufgetreten, bitte kontaktiere deine Administration.",
"Email confirmation successful" : "Die E-Mail Bestätigung war erfolgreich.",
"Provisioning API" : "Bereitstellungs-API",
- "This application enables a set of APIs that external systems can use to manage users, groups and apps." : "Diese Anwendung stellt eine API bereit, um von anderen Systemen aus Benutzer, Gruppen und Apps zu verwalten.",
- "This application enables a set of APIs that external systems can use to create, edit, delete and query user\n\t\tattributes, query, set and remove groups, set quota and query total storage used in Nextcloud. Group admin users\n\t\tcan also query Nextcloud and perform the same functions as an admin for groups they manage. The API also enables\n\t\tan admin to query for active Nextcloud applications, application info, and to enable or disable an app remotely.\n\t\tOnce the app is enabled, HTTP requests can be used via a Basic Auth header to perform any of the functions\n\t\tlisted above. More information is available in the Provisioning API documentation, including example calls\n\t\tand server responses." : "Diese Anwendung aktiviert eine Reihe von APIs, mit denen externe Systeme Benutzer erstellen, bearbeiten, löschen und abfragen können\n\t\tAttribute, Gruppen abfragen, festlegen und entfernen, Kontingent festlegen und Gesamtspeicher abfragen, der in Nextcloud verwendet wird. Gruppenadministratorbenutzer\n\t\tSie können auch Nextcloud abfragen und dieselben Funktionen wie ein Administrator für von ihnen verwaltete Gruppen ausführen. Die API ermöglicht auch\n\t\tEin Administrator, der nach aktiven Nextcloud-Anwendungen und Anwendungsinformationen fragt und eine App entfernt aktiviert oder deaktiviert.\n\t\tSobald die App aktiviert ist, können HTTP-Anforderungen über einen Basic Auth-Header verwendet werden, um eine der Funktionen auszuführen\n\t\toben aufgelistet. Weitere Informationen findest du in der Bereitstellung-API Dokumentation, einschließlich Beispielaufrufen\n\t\tund Serverantworten."
+ "This application enables a set of APIs that external systems can use to manage accounts, groups and apps." : "Diese Applikation stellt einen Satz von APIs für externe Systeme zur Verfügung um Konten, Gruppen und Apps zu verwalten.",
+ "This application enables a set of APIs that external systems can use to create, edit, delete and query account\n\t\tattributes, query, set and remove groups, set quota and query total storage used in Nextcloud. Group admin accounts\n\t\tcan also query Nextcloud and perform the same functions as an admin for groups they manage. The API also enables\n\t\tan admin to query for active Nextcloud applications, application info, and to enable or disable an app remotely.\n\t\tOnce the app is enabled, HTTP requests can be used via a Basic Auth header to perform any of the functions\n\t\tlisted above. More information is available in the Provisioning API documentation, including example calls\n\t\tand server responses." : "Diese Anwendung aktiviert eine Reihe von APIs, mit denen externe Systeme Konten erstellen, bearbeiten, löschen und abfragen können\n\t\tAttribute, Gruppen abfragen, festlegen und entfernen, Kontingent festlegen und Gesamtspeicher abfragen, der in Nextcloud verwendet wird. Gruppenadministrationskonto\n\t\tDu kannst auch Nextcloud abfragen und dieselben Funktionen wie ein Administrator für von dir verwaltete Gruppen ausführen. Die API ermöglicht auch\n\t\tEine Administration, die nach aktiven Nextcloud-Anwendungen und Anwendungsinformationen fragt und eine App entfernt aktiviert oder deaktiviert.\n\t\tSobald die App aktiviert ist, können HTTP-Anforderungen über einen Basic Auth-Header verwendet werden, um eine der Funktionen auszuführen\n\t\toben aufgelistet. Weitere Informationen findest du in der Bereitstellung-API Dokumentation, einschließlich Beispielaufrufen\n\t\tund Serverantworten."
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/provisioning_api/l10n/de.json b/apps/provisioning_api/l10n/de.json
index f0f2d5ae672..85c24424b21 100644
--- a/apps/provisioning_api/l10n/de.json
+++ b/apps/provisioning_api/l10n/de.json
@@ -1,16 +1,42 @@
{ "translations": {
- "Logged in user must be an administrator or have authorization to edit this setting." : "Der angemeldete Benutzer muss ein Administrator sein oder die Berechtigung haben, diese Einstellung zu bearbeiten.",
+ "Logged in account must be an administrator or have authorization to edit this setting." : "Das angemeldete Konto muss ein Administrationskonto sein oder die Berechtigung haben, diese Einstellung zu bearbeiten.",
+ "Could not create non-existing user ID" : "Nicht vorhandene Benutzer-ID konnte nicht erstellen werden",
"User already exists" : "Benutzer existiert bereits",
+ "Group %1$s does not exist" : "Gruppe %1$s existiert nicht",
+ "Insufficient privileges for group %1$s" : "Unzureichende Berechtigungen für Gruppe %1$s",
+ "No group specified (required for sub-admins)" : "Keine Gruppe angegeben (erforderlich für Unteradministration)",
+ "Sub-admin group does not exist" : "Die Unteradministrations-Gruppe existiert nicht",
+ "Cannot create sub-admins for admin group" : "Kann keine Unteradministration für die Administrations-Gruppe erstellen",
+ "No permissions to promote sub-admins" : "Keine Berechtigungen, um Unteradministration zu ernennen",
+ "Invalid password value" : "Ungültiger Passwort-Wert",
+ "An email address is required, to send a password link to the user." : "Um dem Benutzer einen Passwortlink zu senden, ist eine E-Mail-Adresse erforderlich.",
+ "Required email address was not provided" : "Erforderliche E-Mail-Adresse wurde nicht angegeben",
+ "User creation failed" : "Benutzererstellung fehlgeschlagen",
+ "Invalid quota value: %1$s" : "Ungültiger Wert für Speicherkontigent: %1$s",
+ "Invalid quota value. %1$s is exceeding the maximum quota" : "Ungültiger Wert für Speicherkontigent. %1$s überschreitet das maximale Kontigent",
+ "Unlimited quota is forbidden on this instance" : "Unbegrenztes Speicherkontigent ist auf dieser Instanz unzulässig",
+ "Setting the password is not supported by the users backend" : "Das Passwort kann nicht über das Benutzerbackend festgelegt werden",
+ "Invalid language" : "Ungültige Sprache",
+ "Invalid locale" : "Ungültige Lokalisierung",
+ "Invalid first day of week" : "Ungültiger erster Tag der Woche",
+ "Cannot remove yourself from the admin group" : "Du kannst dich nicht selbst aus der Administrationsgruppe entfernen.",
+ "Cannot remove yourself from this group as you are a sub-admin" : "Du kannst dich nicht selbst aus dieser Gruppe entfernen, da du zur Unteradministration gehörst.",
+ "Not viable to remove user from the last group you are sub-admin of" : "Das Konto aus der letzten Gruppe zu entfernen, in der du zur Unteradministration gehörst ist nicht möglich.",
+ "User does not exist" : "Konto existiert nicht",
+ "Group does not exist" : "Gruppe existiert nicht",
+ "User is not a sub-admin of this group" : "Konto ist kein Unteradministrator dieser Gruppe",
+ "Email address not available" : "E-Mail-Adresse nicht verfügbar",
+ "Sending email failed" : "Senden der E-Mail ist fehlgeschlagen",
"Email confirmation" : "E-Mail-Bestätigung",
- "To enable the email address %s please click the button below." : "Um die E-Mail-Adresse %s zu bestätigen, klicke bitte auf die untenstehende Schaltfläche.",
+ "To enable the email address %s please click the button below." : "Um die E-Mailadresse %s zu bestätigen, auf die untenstehende Schaltfläche klicken.",
"Confirm" : "Bestätigen",
"Email was already removed from account and cannot be confirmed anymore." : "Diese E-Mail-Adresse wurde bereits aus dem Konto entfernt und kann nicht mehr bestätigt werden.",
- "Could not verify mail because the token is expired." : "Die E-Mail konnte nicht verifiziert werden, da die Frist des Tokens abgelaufen ist.",
- "Could not verify mail because the token is invalid." : "Die E-Mail konnte nicht verifiziert werden, da der Token ungültig ist.",
- "An unexpected error occurred. Please contact your admin." : "Es ist ein unerwarteter Fehler aufgetreten, bitte kontaktiere deinen Administrator.",
+ "Could not verify mail because the token is expired." : "Die E-Mailadresse konnte nicht verifiziert werden, da das Token abgelaufen ist.",
+ "Could not verify mail because the token is invalid." : "Die E-Mailadresse konnte nicht verifiziert werden, da der Token ungültig ist.",
+ "An unexpected error occurred. Please contact your admin." : "Es ist ein unerwarteter Fehler aufgetreten, bitte kontaktiere deine Administration.",
"Email confirmation successful" : "Die E-Mail Bestätigung war erfolgreich.",
"Provisioning API" : "Bereitstellungs-API",
- "This application enables a set of APIs that external systems can use to manage users, groups and apps." : "Diese Anwendung stellt eine API bereit, um von anderen Systemen aus Benutzer, Gruppen und Apps zu verwalten.",
- "This application enables a set of APIs that external systems can use to create, edit, delete and query user\n\t\tattributes, query, set and remove groups, set quota and query total storage used in Nextcloud. Group admin users\n\t\tcan also query Nextcloud and perform the same functions as an admin for groups they manage. The API also enables\n\t\tan admin to query for active Nextcloud applications, application info, and to enable or disable an app remotely.\n\t\tOnce the app is enabled, HTTP requests can be used via a Basic Auth header to perform any of the functions\n\t\tlisted above. More information is available in the Provisioning API documentation, including example calls\n\t\tand server responses." : "Diese Anwendung aktiviert eine Reihe von APIs, mit denen externe Systeme Benutzer erstellen, bearbeiten, löschen und abfragen können\n\t\tAttribute, Gruppen abfragen, festlegen und entfernen, Kontingent festlegen und Gesamtspeicher abfragen, der in Nextcloud verwendet wird. Gruppenadministratorbenutzer\n\t\tSie können auch Nextcloud abfragen und dieselben Funktionen wie ein Administrator für von ihnen verwaltete Gruppen ausführen. Die API ermöglicht auch\n\t\tEin Administrator, der nach aktiven Nextcloud-Anwendungen und Anwendungsinformationen fragt und eine App entfernt aktiviert oder deaktiviert.\n\t\tSobald die App aktiviert ist, können HTTP-Anforderungen über einen Basic Auth-Header verwendet werden, um eine der Funktionen auszuführen\n\t\toben aufgelistet. Weitere Informationen findest du in der Bereitstellung-API Dokumentation, einschließlich Beispielaufrufen\n\t\tund Serverantworten."
+ "This application enables a set of APIs that external systems can use to manage accounts, groups and apps." : "Diese Applikation stellt einen Satz von APIs für externe Systeme zur Verfügung um Konten, Gruppen und Apps zu verwalten.",
+ "This application enables a set of APIs that external systems can use to create, edit, delete and query account\n\t\tattributes, query, set and remove groups, set quota and query total storage used in Nextcloud. Group admin accounts\n\t\tcan also query Nextcloud and perform the same functions as an admin for groups they manage. The API also enables\n\t\tan admin to query for active Nextcloud applications, application info, and to enable or disable an app remotely.\n\t\tOnce the app is enabled, HTTP requests can be used via a Basic Auth header to perform any of the functions\n\t\tlisted above. More information is available in the Provisioning API documentation, including example calls\n\t\tand server responses." : "Diese Anwendung aktiviert eine Reihe von APIs, mit denen externe Systeme Konten erstellen, bearbeiten, löschen und abfragen können\n\t\tAttribute, Gruppen abfragen, festlegen und entfernen, Kontingent festlegen und Gesamtspeicher abfragen, der in Nextcloud verwendet wird. Gruppenadministrationskonto\n\t\tDu kannst auch Nextcloud abfragen und dieselben Funktionen wie ein Administrator für von dir verwaltete Gruppen ausführen. Die API ermöglicht auch\n\t\tEine Administration, die nach aktiven Nextcloud-Anwendungen und Anwendungsinformationen fragt und eine App entfernt aktiviert oder deaktiviert.\n\t\tSobald die App aktiviert ist, können HTTP-Anforderungen über einen Basic Auth-Header verwendet werden, um eine der Funktionen auszuführen\n\t\toben aufgelistet. Weitere Informationen findest du in der Bereitstellung-API Dokumentation, einschließlich Beispielaufrufen\n\t\tund Serverantworten."
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/provisioning_api/l10n/de_DE.js b/apps/provisioning_api/l10n/de_DE.js
index 2388ae65bf3..0a44ee87126 100644
--- a/apps/provisioning_api/l10n/de_DE.js
+++ b/apps/provisioning_api/l10n/de_DE.js
@@ -1,18 +1,44 @@
OC.L10N.register(
"provisioning_api",
{
- "Logged in user must be an administrator or have authorization to edit this setting." : "Der angemeldete Benutzer muss ein Administrator sein oder die Berechtigung haben, diese Einstellung zu bearbeiten.",
+ "Logged in account must be an administrator or have authorization to edit this setting." : "Das angemeldete Konto muss ein Administrationskonto sein oder die Berechtigung haben, diese Einstellung zu bearbeiten.",
+ "Could not create non-existing user ID" : "Nicht vorhandene Benutzer-ID konnte nicht erstellen werden",
"User already exists" : "Benutzer existiert bereits",
+ "Group %1$s does not exist" : "Gruppe %1$s existiert nicht",
+ "Insufficient privileges for group %1$s" : "Unzureichende Berechtigungen für Gruppe %1$s",
+ "No group specified (required for sub-admins)" : "Keine Gruppe angegeben (erforderlich für Unteradministratoren)",
+ "Sub-admin group does not exist" : "Die Unteradministratoren-Gruppe existiert nicht",
+ "Cannot create sub-admins for admin group" : "Kann keine Unteradministratoren für die Administrationsgruppe erstellen",
+ "No permissions to promote sub-admins" : "Keine Berechtigungen, um Unteradministratoren zu ernennen",
+ "Invalid password value" : "Ungültiger Passwort-Wert",
+ "An email address is required, to send a password link to the user." : "Um dem Benutzer einen Passwortlink zu senden, ist eine E-Mail-Adresse erforderlich.",
+ "Required email address was not provided" : "Erforderliche E-Mail-Adresse wurde nicht angegeben",
+ "User creation failed" : "Benutzererstellung fehlgeschlagen",
+ "Invalid quota value: %1$s" : "Ungültiger Wert für Speicherkontigent: %1$s",
+ "Invalid quota value. %1$s is exceeding the maximum quota" : "Ungültiger Wert für Speicherkontigent. %1$s überschreitet das maximale Kontigent",
+ "Unlimited quota is forbidden on this instance" : "Unbegrenztes Speicherkontigent ist auf dieser Instanz unzulässig",
+ "Setting the password is not supported by the users backend" : "Das Passwort kann nicht über das Benutzerbackend festgelegt werden",
+ "Invalid language" : "Ungültige Sprache",
+ "Invalid locale" : "Ungültige Lokalisierung",
+ "Invalid first day of week" : "Ungültiger erster Tag der Woche",
+ "Cannot remove yourself from the admin group" : "Sie können sich nicht selbst aus der Administrationsgruppe entfernen",
+ "Cannot remove yourself from this group as you are a sub-admin" : "Sie können sich nicht selbst aus dieser Gruppe entfernen, da Sie ein Unteradministrator sind",
+ "Not viable to remove user from the last group you are sub-admin of" : "Den Benutzer aus der letzten Gruppe zu entfernen, in der Sie Unteradministrator sind ist nicht möglich.",
+ "User does not exist" : "Benutzer existiert nicht",
+ "Group does not exist" : "Gruppe existiert nicht",
+ "User is not a sub-admin of this group" : "Benutzer ist kein Unteradministrator dieser Gruppe",
+ "Email address not available" : "E-Mail-Adresse nicht verfügbar",
+ "Sending email failed" : "Senden der E-Mail ist fehlgeschlagen",
"Email confirmation" : "E-Mail-Bestätigung",
"To enable the email address %s please click the button below." : "Um die E-Mail-Adresse %s zu bestätigen, klicken Sie bitte auf die untenstehende Schaltfläche.",
"Confirm" : "Bestätigen",
"Email was already removed from account and cannot be confirmed anymore." : "Diese E-Mail-Adresse wurde bereits aus dem Konto entfernt und kann nicht mehr bestätigt werden.",
"Could not verify mail because the token is expired." : "Die E-Mail-Adresse konnte aufgrund eines abgelaufenen Tokens nicht zurückgesetzt werden",
"Could not verify mail because the token is invalid." : "Das Passwort konnte aufgrund eines ungültigen Tokens nicht bestätigt werden",
- "An unexpected error occurred. Please contact your admin." : "Es ist ein unerwarteter Fehler aufgetreten, bitte kontaktieren Sie Ihren Administrator.",
+ "An unexpected error occurred. Please contact your admin." : "Es ist ein unerwarteter Fehler aufgetreten, bitte kontaktieren Sie Ihre Administration.",
"Email confirmation successful" : "E-Mail-Adresse wurde bestätgt",
"Provisioning API" : "Bereitstellung-API",
- "This application enables a set of APIs that external systems can use to manage users, groups and apps." : "Diese Applikation stellt einen Satz von APIs für externe Systeme zur Verfügung um Benutzer, Gruppen und Applikationen zu Verwalten.",
- "This application enables a set of APIs that external systems can use to create, edit, delete and query user\n\t\tattributes, query, set and remove groups, set quota and query total storage used in Nextcloud. Group admin users\n\t\tcan also query Nextcloud and perform the same functions as an admin for groups they manage. The API also enables\n\t\tan admin to query for active Nextcloud applications, application info, and to enable or disable an app remotely.\n\t\tOnce the app is enabled, HTTP requests can be used via a Basic Auth header to perform any of the functions\n\t\tlisted above. More information is available in the Provisioning API documentation, including example calls\n\t\tand server responses." : "Diese Anwendung aktiviert eine Reihe von APIs, mit denen externe Systeme Benutzer erstellen, bearbeiten, löschen und abfragen können\n\t\tAttribute, Gruppen abfragen, festlegen und entfernen, Kontingent festlegen und Gesamtspeicher abfragen, der in Nextcloud verwendet wird. Gruppenadministratorbenutzer\n\t\tSie können auch Nextcloud abfragen und dieselben Funktionen wie ein Administrator für von ihnen verwaltete Gruppen ausführen. Die API ermöglicht auch\n\t\tEin Administrator, der nach aktiven Nextcloud-Anwendungen und Anwendungsinformationen fragt und eine App entfernt aktiviert oder deaktiviert.\n\t\tSobald die App aktiviert ist, können HTTP-Anforderungen über einen Basic Auth-Header verwendet werden, um eine der Funktionen auszuführen\n\t\toben aufgelistet. Weitere Informationen finden Sie in der Bereitstellung-API Dokumentation, einschließlich Beispielaufrufen\n\t\tund Serverantworten."
+ "This application enables a set of APIs that external systems can use to manage accounts, groups and apps." : "Diese Applikation stellt einen Satz von APIs für externe Systeme zur Verfügung um Konten, Gruppen und Apps zu verwalten.",
+ "This application enables a set of APIs that external systems can use to create, edit, delete and query account\n\t\tattributes, query, set and remove groups, set quota and query total storage used in Nextcloud. Group admin accounts\n\t\tcan also query Nextcloud and perform the same functions as an admin for groups they manage. The API also enables\n\t\tan admin to query for active Nextcloud applications, application info, and to enable or disable an app remotely.\n\t\tOnce the app is enabled, HTTP requests can be used via a Basic Auth header to perform any of the functions\n\t\tlisted above. More information is available in the Provisioning API documentation, including example calls\n\t\tand server responses." : "Diese Anwendung aktiviert eine Reihe von APIs, mit denen externe Systeme Konten erstellen, bearbeiten, löschen und abfragen können\n\t\tAttribute, Gruppen abfragen, festlegen und entfernen, Kontingent festlegen und Gesamtspeicher abfragen, der in Nextcloud verwendet wird. Gruppenadministrationskonto\n\t\tSie können auch Nextcloud abfragen und dieselben Funktionen wie ein Administrator für von ihnen verwaltete Gruppen ausführen. Die API ermöglicht auch\n\t\tEin Administrator, der nach aktiven Nextcloud-Anwendungen und Anwendungsinformationen fragt und eine App entfernt aktiviert oder deaktiviert.\n\t\tSobald die App aktiviert ist, können HTTP-Anforderungen über einen Basic Auth-Header verwendet werden, um eine der Funktionen auszuführen\n\t\toben aufgelistet. Weitere Informationen finden Sie in der Bereitstellung-API Dokumentation, einschließlich Beispielaufrufen\n\t\tund Serverantworten."
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/provisioning_api/l10n/de_DE.json b/apps/provisioning_api/l10n/de_DE.json
index 5414afbc85b..84036ced30b 100644
--- a/apps/provisioning_api/l10n/de_DE.json
+++ b/apps/provisioning_api/l10n/de_DE.json
@@ -1,16 +1,42 @@
{ "translations": {
- "Logged in user must be an administrator or have authorization to edit this setting." : "Der angemeldete Benutzer muss ein Administrator sein oder die Berechtigung haben, diese Einstellung zu bearbeiten.",
+ "Logged in account must be an administrator or have authorization to edit this setting." : "Das angemeldete Konto muss ein Administrationskonto sein oder die Berechtigung haben, diese Einstellung zu bearbeiten.",
+ "Could not create non-existing user ID" : "Nicht vorhandene Benutzer-ID konnte nicht erstellen werden",
"User already exists" : "Benutzer existiert bereits",
+ "Group %1$s does not exist" : "Gruppe %1$s existiert nicht",
+ "Insufficient privileges for group %1$s" : "Unzureichende Berechtigungen für Gruppe %1$s",
+ "No group specified (required for sub-admins)" : "Keine Gruppe angegeben (erforderlich für Unteradministratoren)",
+ "Sub-admin group does not exist" : "Die Unteradministratoren-Gruppe existiert nicht",
+ "Cannot create sub-admins for admin group" : "Kann keine Unteradministratoren für die Administrationsgruppe erstellen",
+ "No permissions to promote sub-admins" : "Keine Berechtigungen, um Unteradministratoren zu ernennen",
+ "Invalid password value" : "Ungültiger Passwort-Wert",
+ "An email address is required, to send a password link to the user." : "Um dem Benutzer einen Passwortlink zu senden, ist eine E-Mail-Adresse erforderlich.",
+ "Required email address was not provided" : "Erforderliche E-Mail-Adresse wurde nicht angegeben",
+ "User creation failed" : "Benutzererstellung fehlgeschlagen",
+ "Invalid quota value: %1$s" : "Ungültiger Wert für Speicherkontigent: %1$s",
+ "Invalid quota value. %1$s is exceeding the maximum quota" : "Ungültiger Wert für Speicherkontigent. %1$s überschreitet das maximale Kontigent",
+ "Unlimited quota is forbidden on this instance" : "Unbegrenztes Speicherkontigent ist auf dieser Instanz unzulässig",
+ "Setting the password is not supported by the users backend" : "Das Passwort kann nicht über das Benutzerbackend festgelegt werden",
+ "Invalid language" : "Ungültige Sprache",
+ "Invalid locale" : "Ungültige Lokalisierung",
+ "Invalid first day of week" : "Ungültiger erster Tag der Woche",
+ "Cannot remove yourself from the admin group" : "Sie können sich nicht selbst aus der Administrationsgruppe entfernen",
+ "Cannot remove yourself from this group as you are a sub-admin" : "Sie können sich nicht selbst aus dieser Gruppe entfernen, da Sie ein Unteradministrator sind",
+ "Not viable to remove user from the last group you are sub-admin of" : "Den Benutzer aus der letzten Gruppe zu entfernen, in der Sie Unteradministrator sind ist nicht möglich.",
+ "User does not exist" : "Benutzer existiert nicht",
+ "Group does not exist" : "Gruppe existiert nicht",
+ "User is not a sub-admin of this group" : "Benutzer ist kein Unteradministrator dieser Gruppe",
+ "Email address not available" : "E-Mail-Adresse nicht verfügbar",
+ "Sending email failed" : "Senden der E-Mail ist fehlgeschlagen",
"Email confirmation" : "E-Mail-Bestätigung",
"To enable the email address %s please click the button below." : "Um die E-Mail-Adresse %s zu bestätigen, klicken Sie bitte auf die untenstehende Schaltfläche.",
"Confirm" : "Bestätigen",
"Email was already removed from account and cannot be confirmed anymore." : "Diese E-Mail-Adresse wurde bereits aus dem Konto entfernt und kann nicht mehr bestätigt werden.",
"Could not verify mail because the token is expired." : "Die E-Mail-Adresse konnte aufgrund eines abgelaufenen Tokens nicht zurückgesetzt werden",
"Could not verify mail because the token is invalid." : "Das Passwort konnte aufgrund eines ungültigen Tokens nicht bestätigt werden",
- "An unexpected error occurred. Please contact your admin." : "Es ist ein unerwarteter Fehler aufgetreten, bitte kontaktieren Sie Ihren Administrator.",
+ "An unexpected error occurred. Please contact your admin." : "Es ist ein unerwarteter Fehler aufgetreten, bitte kontaktieren Sie Ihre Administration.",
"Email confirmation successful" : "E-Mail-Adresse wurde bestätgt",
"Provisioning API" : "Bereitstellung-API",
- "This application enables a set of APIs that external systems can use to manage users, groups and apps." : "Diese Applikation stellt einen Satz von APIs für externe Systeme zur Verfügung um Benutzer, Gruppen und Applikationen zu Verwalten.",
- "This application enables a set of APIs that external systems can use to create, edit, delete and query user\n\t\tattributes, query, set and remove groups, set quota and query total storage used in Nextcloud. Group admin users\n\t\tcan also query Nextcloud and perform the same functions as an admin for groups they manage. The API also enables\n\t\tan admin to query for active Nextcloud applications, application info, and to enable or disable an app remotely.\n\t\tOnce the app is enabled, HTTP requests can be used via a Basic Auth header to perform any of the functions\n\t\tlisted above. More information is available in the Provisioning API documentation, including example calls\n\t\tand server responses." : "Diese Anwendung aktiviert eine Reihe von APIs, mit denen externe Systeme Benutzer erstellen, bearbeiten, löschen und abfragen können\n\t\tAttribute, Gruppen abfragen, festlegen und entfernen, Kontingent festlegen und Gesamtspeicher abfragen, der in Nextcloud verwendet wird. Gruppenadministratorbenutzer\n\t\tSie können auch Nextcloud abfragen und dieselben Funktionen wie ein Administrator für von ihnen verwaltete Gruppen ausführen. Die API ermöglicht auch\n\t\tEin Administrator, der nach aktiven Nextcloud-Anwendungen und Anwendungsinformationen fragt und eine App entfernt aktiviert oder deaktiviert.\n\t\tSobald die App aktiviert ist, können HTTP-Anforderungen über einen Basic Auth-Header verwendet werden, um eine der Funktionen auszuführen\n\t\toben aufgelistet. Weitere Informationen finden Sie in der Bereitstellung-API Dokumentation, einschließlich Beispielaufrufen\n\t\tund Serverantworten."
+ "This application enables a set of APIs that external systems can use to manage accounts, groups and apps." : "Diese Applikation stellt einen Satz von APIs für externe Systeme zur Verfügung um Konten, Gruppen und Apps zu verwalten.",
+ "This application enables a set of APIs that external systems can use to create, edit, delete and query account\n\t\tattributes, query, set and remove groups, set quota and query total storage used in Nextcloud. Group admin accounts\n\t\tcan also query Nextcloud and perform the same functions as an admin for groups they manage. The API also enables\n\t\tan admin to query for active Nextcloud applications, application info, and to enable or disable an app remotely.\n\t\tOnce the app is enabled, HTTP requests can be used via a Basic Auth header to perform any of the functions\n\t\tlisted above. More information is available in the Provisioning API documentation, including example calls\n\t\tand server responses." : "Diese Anwendung aktiviert eine Reihe von APIs, mit denen externe Systeme Konten erstellen, bearbeiten, löschen und abfragen können\n\t\tAttribute, Gruppen abfragen, festlegen und entfernen, Kontingent festlegen und Gesamtspeicher abfragen, der in Nextcloud verwendet wird. Gruppenadministrationskonto\n\t\tSie können auch Nextcloud abfragen und dieselben Funktionen wie ein Administrator für von ihnen verwaltete Gruppen ausführen. Die API ermöglicht auch\n\t\tEin Administrator, der nach aktiven Nextcloud-Anwendungen und Anwendungsinformationen fragt und eine App entfernt aktiviert oder deaktiviert.\n\t\tSobald die App aktiviert ist, können HTTP-Anforderungen über einen Basic Auth-Header verwendet werden, um eine der Funktionen auszuführen\n\t\toben aufgelistet. Weitere Informationen finden Sie in der Bereitstellung-API Dokumentation, einschließlich Beispielaufrufen\n\t\tund Serverantworten."
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/provisioning_api/l10n/el.js b/apps/provisioning_api/l10n/el.js
deleted file mode 100644
index 5b10b4adafe..00000000000
--- a/apps/provisioning_api/l10n/el.js
+++ /dev/null
@@ -1,16 +0,0 @@
-OC.L10N.register(
- "provisioning_api",
- {
- "User already exists" : "Ο χρήστης υπάρχει ήδη",
- "Email confirmation" : "Επιβεβαίωση ηλεκτρονικού ταχυδρομείου",
- "To enable the email address %s please click the button below." : "Για να ενεργοποιήσετε τη διεύθυνση ηλεκτρονικού ταχυδρομείου %s κάντε κλικ στο παρακάτω κουμπί.",
- "Confirm" : "Επιβεβαίωση",
- "Email was already removed from account and cannot be confirmed anymore." : "Η διεύθυνση ηλεκτρονικού ταχυδρομείου έχει ήδη αφαιρεθεί από τον λογαριασμό και δεν μπορεί πλέον να επιβεβαιωθεί.",
- "Could not verify mail because the token is expired." : "Δεν ήταν δυνατή η επαλήθευση της αλληλογραφίας επειδή το διακριτικό έχει λήξει.",
- "Could not verify mail because the token is invalid." : "Αδυναμία επαλήθευσης ηλεκτρονικής αλληλογραφίας επειδή το διακριτικό δεν είναι έγκυρο.",
- "Email confirmation successful" : "Η επιβεβαίωση μέσω ηλεκτρονικού ταχυδρομείου ήταν επιτυχής",
- "Provisioning API" : "API παροχής",
- "This application enables a set of APIs that external systems can use to manage users, groups and apps." : "Αυτή η εφαρμογή επιτρέπει ένα σύνολο API που μπορούν να χρησιμοποιήσουν τα εξωτερικά συστήματα για τη διαχείριση χρηστών, ομάδων και εφαρμογών.",
- "This application enables a set of APIs that external systems can use to create, edit, delete and query user\n\t\tattributes, query, set and remove groups, set quota and query total storage used in Nextcloud. Group admin users\n\t\tcan also query Nextcloud and perform the same functions as an admin for groups they manage. The API also enables\n\t\tan admin to query for active Nextcloud applications, application info, and to enable or disable an app remotely.\n\t\tOnce the app is enabled, HTTP requests can be used via a Basic Auth header to perform any of the functions\n\t\tlisted above. More information is available in the Provisioning API documentation, including example calls\n\t\tand server responses." : "Αυτή η εφαρμογή επιτρέπει ένα σύνολο API που μπορούν να χρησιμοποιήσουν τα εξωτερικά συστήματα για να δημιουργήσουν, να επεξεργαστούν, να διαγράψουν και να ρωτήσουν τις ιδιότητες των χρηστών, το ερώτημα, να ορίσουν και να αφαιρέσουν ομάδες, να ορίσουν το όριο και το συνολικό χώρο αποθήκευσης ερωτημάτων που χρησιμοποιούνται στο Nextcloud. Οι χρήστες διαχειριστή ομάδας μπορούν επίσης να υποβάλουν ερώτημα στο Nextcloud και να εκτελούν τις ίδιες λειτουργίες με έναν διαχειριστή για ομάδες που αυτοί διαχειρίζονται. Το API επιτρέπει επίσης σε έναν διαχειριστή να υποβάλλει ερώτημα για ενεργές εφαρμογές Nextcloud, πληροφορίες εφαρμογής και να ενεργοποιήσει ή να απενεργοποιήσει μια εφαρμογή από απόσταση. Μόλις ενεργοποιηθεί η εφαρμογή, τα αιτήματα HTTP μπορούν να χρησιμοποιηθούν μέσω κεφαλίδας Basic Auth για να εκτελέσουν οποιαδήποτε των λειτουργιών που αναφέρονται παραπάνω. Περισσότερες πληροφορίες διατίθενται στην τεκμηρίωση Provisioning API, συμπεριλαμβανομένων παραδειγμάτων κλήσεων και απαντήσεων διακομιστή."
-},
-"nplurals=2; plural=(n != 1);");
diff --git a/apps/provisioning_api/l10n/el.json b/apps/provisioning_api/l10n/el.json
deleted file mode 100644
index 525148a11a8..00000000000
--- a/apps/provisioning_api/l10n/el.json
+++ /dev/null
@@ -1,14 +0,0 @@
-{ "translations": {
- "User already exists" : "Ο χρήστης υπάρχει ήδη",
- "Email confirmation" : "Επιβεβαίωση ηλεκτρονικού ταχυδρομείου",
- "To enable the email address %s please click the button below." : "Για να ενεργοποιήσετε τη διεύθυνση ηλεκτρονικού ταχυδρομείου %s κάντε κλικ στο παρακάτω κουμπί.",
- "Confirm" : "Επιβεβαίωση",
- "Email was already removed from account and cannot be confirmed anymore." : "Η διεύθυνση ηλεκτρονικού ταχυδρομείου έχει ήδη αφαιρεθεί από τον λογαριασμό και δεν μπορεί πλέον να επιβεβαιωθεί.",
- "Could not verify mail because the token is expired." : "Δεν ήταν δυνατή η επαλήθευση της αλληλογραφίας επειδή το διακριτικό έχει λήξει.",
- "Could not verify mail because the token is invalid." : "Αδυναμία επαλήθευσης ηλεκτρονικής αλληλογραφίας επειδή το διακριτικό δεν είναι έγκυρο.",
- "Email confirmation successful" : "Η επιβεβαίωση μέσω ηλεκτρονικού ταχυδρομείου ήταν επιτυχής",
- "Provisioning API" : "API παροχής",
- "This application enables a set of APIs that external systems can use to manage users, groups and apps." : "Αυτή η εφαρμογή επιτρέπει ένα σύνολο API που μπορούν να χρησιμοποιήσουν τα εξωτερικά συστήματα για τη διαχείριση χρηστών, ομάδων και εφαρμογών.",
- "This application enables a set of APIs that external systems can use to create, edit, delete and query user\n\t\tattributes, query, set and remove groups, set quota and query total storage used in Nextcloud. Group admin users\n\t\tcan also query Nextcloud and perform the same functions as an admin for groups they manage. The API also enables\n\t\tan admin to query for active Nextcloud applications, application info, and to enable or disable an app remotely.\n\t\tOnce the app is enabled, HTTP requests can be used via a Basic Auth header to perform any of the functions\n\t\tlisted above. More information is available in the Provisioning API documentation, including example calls\n\t\tand server responses." : "Αυτή η εφαρμογή επιτρέπει ένα σύνολο API που μπορούν να χρησιμοποιήσουν τα εξωτερικά συστήματα για να δημιουργήσουν, να επεξεργαστούν, να διαγράψουν και να ρωτήσουν τις ιδιότητες των χρηστών, το ερώτημα, να ορίσουν και να αφαιρέσουν ομάδες, να ορίσουν το όριο και το συνολικό χώρο αποθήκευσης ερωτημάτων που χρησιμοποιούνται στο Nextcloud. Οι χρήστες διαχειριστή ομάδας μπορούν επίσης να υποβάλουν ερώτημα στο Nextcloud και να εκτελούν τις ίδιες λειτουργίες με έναν διαχειριστή για ομάδες που αυτοί διαχειρίζονται. Το API επιτρέπει επίσης σε έναν διαχειριστή να υποβάλλει ερώτημα για ενεργές εφαρμογές Nextcloud, πληροφορίες εφαρμογής και να ενεργοποιήσει ή να απενεργοποιήσει μια εφαρμογή από απόσταση. Μόλις ενεργοποιηθεί η εφαρμογή, τα αιτήματα HTTP μπορούν να χρησιμοποιηθούν μέσω κεφαλίδας Basic Auth για να εκτελέσουν οποιαδήποτε των λειτουργιών που αναφέρονται παραπάνω. Περισσότερες πληροφορίες διατίθενται στην τεκμηρίωση Provisioning API, συμπεριλαμβανομένων παραδειγμάτων κλήσεων και απαντήσεων διακομιστή."
-},"pluralForm" :"nplurals=2; plural=(n != 1);"
-} \ No newline at end of file
diff --git a/apps/provisioning_api/l10n/en_GB.js b/apps/provisioning_api/l10n/en_GB.js
index b4df5f8a743..3469fee516d 100644
--- a/apps/provisioning_api/l10n/en_GB.js
+++ b/apps/provisioning_api/l10n/en_GB.js
@@ -1,8 +1,34 @@
OC.L10N.register(
"provisioning_api",
{
- "Logged in user must be an administrator or have authorization to edit this setting." : "Logged in user must be an administrator or have authorization to edit this setting.",
+ "Logged in account must be an administrator or have authorization to edit this setting." : "Logged in account must be an administrator or have authorization to edit this setting.",
+ "Could not create non-existing user ID" : "Could not create non-existing user ID",
"User already exists" : "User already exists",
+ "Group %1$s does not exist" : "Group %1$s does not exist",
+ "Insufficient privileges for group %1$s" : "Insufficient privileges for group %1$s",
+ "No group specified (required for sub-admins)" : "No group specified (required for sub-admins)",
+ "Sub-admin group does not exist" : "Sub-admin group does not exist",
+ "Cannot create sub-admins for admin group" : "Cannot create sub-admins for admin group",
+ "No permissions to promote sub-admins" : "No permissions to promote sub-admins",
+ "Invalid password value" : "Invalid password value",
+ "An email address is required, to send a password link to the user." : "An email address is required, to send a password link to the user.",
+ "Required email address was not provided" : "Required email address was not provided",
+ "User creation failed" : "User creation failed",
+ "Invalid quota value: %1$s" : "Invalid quota value: %1$s",
+ "Invalid quota value. %1$s is exceeding the maximum quota" : "Invalid quota value. %1$s is exceeding the maximum quota",
+ "Unlimited quota is forbidden on this instance" : "Unlimited quota is forbidden on this instance",
+ "Setting the password is not supported by the users backend" : "Setting the password is not supported by the users backend",
+ "Invalid language" : "Invalid language",
+ "Invalid locale" : "Invalid locale",
+ "Invalid first day of week" : "Invalid first day of week",
+ "Cannot remove yourself from the admin group" : "Cannot remove yourself from the admin group",
+ "Cannot remove yourself from this group as you are a sub-admin" : "Cannot remove yourself from this group as you are a sub-admin",
+ "Not viable to remove user from the last group you are sub-admin of" : "Not viable to remove user from the last group you are sub-admin of",
+ "User does not exist" : "User does not exist",
+ "Group does not exist" : "Group does not exist",
+ "User is not a sub-admin of this group" : "User is not a sub-admin of this group",
+ "Email address not available" : "Email address not available",
+ "Sending email failed" : "Sending email failed",
"Email confirmation" : "Email confirmation",
"To enable the email address %s please click the button below." : "To enable the email address %s please click the button below.",
"Confirm" : "Confirm",
@@ -12,7 +38,7 @@ OC.L10N.register(
"An unexpected error occurred. Please contact your admin." : "An unexpected error occurred. Please contact your admin.",
"Email confirmation successful" : "Email confirmation successful",
"Provisioning API" : "Provisioning API",
- "This application enables a set of APIs that external systems can use to manage users, groups and apps." : "This application enables a set of APIs that external systems can use to manage users, groups and apps.",
- "This application enables a set of APIs that external systems can use to create, edit, delete and query user\n\t\tattributes, query, set and remove groups, set quota and query total storage used in Nextcloud. Group admin users\n\t\tcan also query Nextcloud and perform the same functions as an admin for groups they manage. The API also enables\n\t\tan admin to query for active Nextcloud applications, application info, and to enable or disable an app remotely.\n\t\tOnce the app is enabled, HTTP requests can be used via a Basic Auth header to perform any of the functions\n\t\tlisted above. More information is available in the Provisioning API documentation, including example calls\n\t\tand server responses." : "This application enables a set of APIs that external systems can use to create, edit, delete and query user\n\t\tattributes, query, set and remove groups, set quota and query total storage used in Nextcloud. Group admin users\n\t\tcan also query Nextcloud and perform the same functions as an admin for groups they manage. The API also enables\n\t\tan admin to query for active Nextcloud applications, application info, and to enable or disable an app remotely.\n\t\tOnce the app is enabled, HTTP requests can be used via a Basic Auth header to perform any of the functions\n\t\tlisted above. More information is available in the Provisioning API documentation, including example calls\n\t\tand server responses."
+ "This application enables a set of APIs that external systems can use to manage accounts, groups and apps." : "This application enables a set of APIs that external systems can use to manage accounts, groups and apps.",
+ "This application enables a set of APIs that external systems can use to create, edit, delete and query account\n\t\tattributes, query, set and remove groups, set quota and query total storage used in Nextcloud. Group admin accounts\n\t\tcan also query Nextcloud and perform the same functions as an admin for groups they manage. The API also enables\n\t\tan admin to query for active Nextcloud applications, application info, and to enable or disable an app remotely.\n\t\tOnce the app is enabled, HTTP requests can be used via a Basic Auth header to perform any of the functions\n\t\tlisted above. More information is available in the Provisioning API documentation, including example calls\n\t\tand server responses." : "This application enables a set of APIs that external systems can use to create, edit, delete and query account\n\t\tattributes, query, set and remove groups, set quota and query total storage used in Nextcloud. Group admin accounts\n\t\tcan also query Nextcloud and perform the same functions as an admin for groups they manage. The API also enables\n\t\tan admin to query for active Nextcloud applications, application info, and to enable or disable an app remotely.\n\t\tOnce the app is enabled, HTTP requests can be used via a Basic Auth header to perform any of the functions\n\t\tlisted above. More information is available in the Provisioning API documentation, including example calls\n\t\tand server responses."
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/provisioning_api/l10n/en_GB.json b/apps/provisioning_api/l10n/en_GB.json
index 1b7e7027ecb..6a6898da4c4 100644
--- a/apps/provisioning_api/l10n/en_GB.json
+++ b/apps/provisioning_api/l10n/en_GB.json
@@ -1,6 +1,32 @@
{ "translations": {
- "Logged in user must be an administrator or have authorization to edit this setting." : "Logged in user must be an administrator or have authorization to edit this setting.",
+ "Logged in account must be an administrator or have authorization to edit this setting." : "Logged in account must be an administrator or have authorization to edit this setting.",
+ "Could not create non-existing user ID" : "Could not create non-existing user ID",
"User already exists" : "User already exists",
+ "Group %1$s does not exist" : "Group %1$s does not exist",
+ "Insufficient privileges for group %1$s" : "Insufficient privileges for group %1$s",
+ "No group specified (required for sub-admins)" : "No group specified (required for sub-admins)",
+ "Sub-admin group does not exist" : "Sub-admin group does not exist",
+ "Cannot create sub-admins for admin group" : "Cannot create sub-admins for admin group",
+ "No permissions to promote sub-admins" : "No permissions to promote sub-admins",
+ "Invalid password value" : "Invalid password value",
+ "An email address is required, to send a password link to the user." : "An email address is required, to send a password link to the user.",
+ "Required email address was not provided" : "Required email address was not provided",
+ "User creation failed" : "User creation failed",
+ "Invalid quota value: %1$s" : "Invalid quota value: %1$s",
+ "Invalid quota value. %1$s is exceeding the maximum quota" : "Invalid quota value. %1$s is exceeding the maximum quota",
+ "Unlimited quota is forbidden on this instance" : "Unlimited quota is forbidden on this instance",
+ "Setting the password is not supported by the users backend" : "Setting the password is not supported by the users backend",
+ "Invalid language" : "Invalid language",
+ "Invalid locale" : "Invalid locale",
+ "Invalid first day of week" : "Invalid first day of week",
+ "Cannot remove yourself from the admin group" : "Cannot remove yourself from the admin group",
+ "Cannot remove yourself from this group as you are a sub-admin" : "Cannot remove yourself from this group as you are a sub-admin",
+ "Not viable to remove user from the last group you are sub-admin of" : "Not viable to remove user from the last group you are sub-admin of",
+ "User does not exist" : "User does not exist",
+ "Group does not exist" : "Group does not exist",
+ "User is not a sub-admin of this group" : "User is not a sub-admin of this group",
+ "Email address not available" : "Email address not available",
+ "Sending email failed" : "Sending email failed",
"Email confirmation" : "Email confirmation",
"To enable the email address %s please click the button below." : "To enable the email address %s please click the button below.",
"Confirm" : "Confirm",
@@ -10,7 +36,7 @@
"An unexpected error occurred. Please contact your admin." : "An unexpected error occurred. Please contact your admin.",
"Email confirmation successful" : "Email confirmation successful",
"Provisioning API" : "Provisioning API",
- "This application enables a set of APIs that external systems can use to manage users, groups and apps." : "This application enables a set of APIs that external systems can use to manage users, groups and apps.",
- "This application enables a set of APIs that external systems can use to create, edit, delete and query user\n\t\tattributes, query, set and remove groups, set quota and query total storage used in Nextcloud. Group admin users\n\t\tcan also query Nextcloud and perform the same functions as an admin for groups they manage. The API also enables\n\t\tan admin to query for active Nextcloud applications, application info, and to enable or disable an app remotely.\n\t\tOnce the app is enabled, HTTP requests can be used via a Basic Auth header to perform any of the functions\n\t\tlisted above. More information is available in the Provisioning API documentation, including example calls\n\t\tand server responses." : "This application enables a set of APIs that external systems can use to create, edit, delete and query user\n\t\tattributes, query, set and remove groups, set quota and query total storage used in Nextcloud. Group admin users\n\t\tcan also query Nextcloud and perform the same functions as an admin for groups they manage. The API also enables\n\t\tan admin to query for active Nextcloud applications, application info, and to enable or disable an app remotely.\n\t\tOnce the app is enabled, HTTP requests can be used via a Basic Auth header to perform any of the functions\n\t\tlisted above. More information is available in the Provisioning API documentation, including example calls\n\t\tand server responses."
+ "This application enables a set of APIs that external systems can use to manage accounts, groups and apps." : "This application enables a set of APIs that external systems can use to manage accounts, groups and apps.",
+ "This application enables a set of APIs that external systems can use to create, edit, delete and query account\n\t\tattributes, query, set and remove groups, set quota and query total storage used in Nextcloud. Group admin accounts\n\t\tcan also query Nextcloud and perform the same functions as an admin for groups they manage. The API also enables\n\t\tan admin to query for active Nextcloud applications, application info, and to enable or disable an app remotely.\n\t\tOnce the app is enabled, HTTP requests can be used via a Basic Auth header to perform any of the functions\n\t\tlisted above. More information is available in the Provisioning API documentation, including example calls\n\t\tand server responses." : "This application enables a set of APIs that external systems can use to create, edit, delete and query account\n\t\tattributes, query, set and remove groups, set quota and query total storage used in Nextcloud. Group admin accounts\n\t\tcan also query Nextcloud and perform the same functions as an admin for groups they manage. The API also enables\n\t\tan admin to query for active Nextcloud applications, application info, and to enable or disable an app remotely.\n\t\tOnce the app is enabled, HTTP requests can be used via a Basic Auth header to perform any of the functions\n\t\tlisted above. More information is available in the Provisioning API documentation, including example calls\n\t\tand server responses."
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/provisioning_api/l10n/es.js b/apps/provisioning_api/l10n/es.js
index 4dc7200abf7..c8706c3cde7 100644
--- a/apps/provisioning_api/l10n/es.js
+++ b/apps/provisioning_api/l10n/es.js
@@ -1,18 +1,41 @@
OC.L10N.register(
"provisioning_api",
{
- "Logged in user must be an administrator or have authorization to edit this setting." : "La sesión del usuario debe corresponder a un administrador o debe tener autorización para editar esta configuración.",
+ "Logged in account must be an administrator or have authorization to edit this setting." : "El usuario que ha iniciado sesión debe ser un administrador o tener autorización para editar esta configuración.",
+ "Could not create non-existing user ID" : "No se pudo crear el ID de usuario no existente",
"User already exists" : "El usuario ya existe",
+ "Group %1$s does not exist" : "El grupo %1$s no existe",
+ "Insufficient privileges for group %1$s" : "Privilegios insuficientes para el grupo %1$s",
+ "No group specified (required for sub-admins)" : "No se especificó ningún grupo (requerido para subadministradores)",
+ "Sub-admin group does not exist" : "El grupo subadministrador no existe",
+ "Cannot create sub-admins for admin group" : "No se pueden crear subadministradores para el grupo admin",
+ "No permissions to promote sub-admins" : "No tiene permisos para promover subadministradores",
+ "Invalid password value" : "Valor de contraseña inválido",
+ "Required email address was not provided" : "La dirección de correo electrónico requerida no fue proporcionada",
+ "Invalid quota value: %1$s" : "Valor de cuota inválido: %1$s",
+ "Invalid quota value. %1$s is exceeding the maximum quota" : "Valor de cuota inválido. %1$s excede la cuota máxima",
+ "Unlimited quota is forbidden on this instance" : "La cuota ilimitada está prohibida en esta instancia",
+ "Setting the password is not supported by the users backend" : "El backend de los usuarios no soporta establecer la contraseña",
+ "Invalid language" : "Idioma inválido",
+ "Invalid locale" : "Configuración regional inválida",
+ "Cannot remove yourself from the admin group" : "No se puede remover a Ud. mismo del grupo de administración",
+ "Cannot remove yourself from this group as you are a sub-admin" : "No se puede remover así mismo de este grupo dado que Ud. es un subadministrador",
+ "Not viable to remove user from the last group you are sub-admin of" : "No es viable remover el usuario del último grupo del que Ud. es subadministrador",
+ "User does not exist" : "El usuario no existe",
+ "Group does not exist" : "El grupo no existe",
+ "User is not a sub-admin of this group" : "El usuario no es un subadministrador de este grupo",
+ "Email address not available" : "Dirección de correo electrónico no disponible",
+ "Sending email failed" : "Falló el envío del correo electrónico",
"Email confirmation" : "Confirmación del correo electrónico",
- "To enable the email address %s please click the button below." : "Para habilitar la dirección de correo electrónico %s haz click en el botón que hay a continuación, por favor.",
+ "To enable the email address %s please click the button below." : "Para habilitar la dirección de correo electrónico %s , por favor, haga clic en el botón a continuación.",
"Confirm" : "Confirmar",
"Email was already removed from account and cannot be confirmed anymore." : "El correo electrónico ha sido eliminado de la cuenta y ya no puede ser confirmado.",
- "Could not verify mail because the token is expired." : "No se ha podido verificar el correo electrónico porque el código ha caducado.",
- "Could not verify mail because the token is invalid." : "No se ha podido verificar el correo electrónico porque el código es inválido.",
- "An unexpected error occurred. Please contact your admin." : "Ha ocurrido un error inesperado. Por favor contacta con tu administrador.",
+ "Could not verify mail because the token is expired." : "No se ha podido verificar el correo electrónico porque el token ha expirado.",
+ "Could not verify mail because the token is invalid." : "No se ha podido verificar el correo electrónico porque el token es inválido.",
+ "An unexpected error occurred. Please contact your admin." : "Ha ocurrido un error inesperado. Por favor contacte a su administrador.",
"Email confirmation successful" : "Correo electrónico confirmado con éxito",
"Provisioning API" : "API de aprovisionamiento",
- "This application enables a set of APIs that external systems can use to manage users, groups and apps." : "Esta aplicación activa un conjunto de apis que sistemas externos pueden usar para manejar usuarios, grupos y aplicaciones.",
- "This application enables a set of APIs that external systems can use to create, edit, delete and query user\n\t\tattributes, query, set and remove groups, set quota and query total storage used in Nextcloud. Group admin users\n\t\tcan also query Nextcloud and perform the same functions as an admin for groups they manage. The API also enables\n\t\tan admin to query for active Nextcloud applications, application info, and to enable or disable an app remotely.\n\t\tOnce the app is enabled, HTTP requests can be used via a Basic Auth header to perform any of the functions\n\t\tlisted above. More information is available in the Provisioning API documentation, including example calls\n\t\tand server responses." : "Esta aplicación activa una serie de API que se pueden usar por sistemas externos para crear, editar, eliminar y seleccionar atributos\n\t\tde usuarios; seleccionar, configurar y eliminar grupos, marcar la cuota y marcar el almacenamiento total usado en Nextcloud. El grupo de usuarios administradores\t\ttambién pueden buscar en Nextcloud y realizar las mismas funciones como administrador para los grupos que manejas. La API también permite\t\ta un administrador que busque aplicaciones activas en Nextcloud, información de las apps, y activar o desactivar remotamente una app.\t\tUna vez que se activa la app, se pueden usar peticiones HTTP vía una cabecera Basic Auth para realizar cualquier función\t\tde las listadas arriba. Más información disponible en la documentación de la API de aprovisionamiento, incluyendo llamadas de ejemplo\t\ty respuestas del servidor."
+ "This application enables a set of APIs that external systems can use to manage accounts, groups and apps." : "Esta aplicación habilita un conjunto de APIs que los sistemas externos pueden usar para administrar usuarios, grupos y aplicaciones.",
+ "This application enables a set of APIs that external systems can use to create, edit, delete and query account\n\t\tattributes, query, set and remove groups, set quota and query total storage used in Nextcloud. Group admin accounts\n\t\tcan also query Nextcloud and perform the same functions as an admin for groups they manage. The API also enables\n\t\tan admin to query for active Nextcloud applications, application info, and to enable or disable an app remotely.\n\t\tOnce the app is enabled, HTTP requests can be used via a Basic Auth header to perform any of the functions\n\t\tlisted above. More information is available in the Provisioning API documentation, including example calls\n\t\tand server responses." : "Esta aplicación habilita una serie de APIs que pueden ser usadas por sistemas externos para crear, editar, eliminar y seleccionar atributos\n\t\tde usuarios; seleccionar, configurar y eliminar grupos, establecer cuotas y consultar el almacenamiento total usado en Nextcloud. Las cuentas administradoras de grupos\n\t\ttambién pueden buscar en Nextcloud y realizar las mismas funciones como administrador para los grupos que manejan. La API también permite\n\t\ta un administrador que busque aplicaciones activas en Nextcloud, información de las apps, y activar o desactivar remotamente una app.\n\t\tUna vez que se activa la app, se pueden usar peticiones HTTP vía un encabezado Basic Auth para realizar cualesquiera de las funciones\n\t\t listadas anteriormente. Más información disponible en la documentación de la API de aprovisionamiento, incluyendo llamadas de ejemplo\n\t\ty respuestas del servidor."
},
"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;");
diff --git a/apps/provisioning_api/l10n/es.json b/apps/provisioning_api/l10n/es.json
index 426cc5820b4..791714eae46 100644
--- a/apps/provisioning_api/l10n/es.json
+++ b/apps/provisioning_api/l10n/es.json
@@ -1,16 +1,39 @@
{ "translations": {
- "Logged in user must be an administrator or have authorization to edit this setting." : "La sesión del usuario debe corresponder a un administrador o debe tener autorización para editar esta configuración.",
+ "Logged in account must be an administrator or have authorization to edit this setting." : "El usuario que ha iniciado sesión debe ser un administrador o tener autorización para editar esta configuración.",
+ "Could not create non-existing user ID" : "No se pudo crear el ID de usuario no existente",
"User already exists" : "El usuario ya existe",
+ "Group %1$s does not exist" : "El grupo %1$s no existe",
+ "Insufficient privileges for group %1$s" : "Privilegios insuficientes para el grupo %1$s",
+ "No group specified (required for sub-admins)" : "No se especificó ningún grupo (requerido para subadministradores)",
+ "Sub-admin group does not exist" : "El grupo subadministrador no existe",
+ "Cannot create sub-admins for admin group" : "No se pueden crear subadministradores para el grupo admin",
+ "No permissions to promote sub-admins" : "No tiene permisos para promover subadministradores",
+ "Invalid password value" : "Valor de contraseña inválido",
+ "Required email address was not provided" : "La dirección de correo electrónico requerida no fue proporcionada",
+ "Invalid quota value: %1$s" : "Valor de cuota inválido: %1$s",
+ "Invalid quota value. %1$s is exceeding the maximum quota" : "Valor de cuota inválido. %1$s excede la cuota máxima",
+ "Unlimited quota is forbidden on this instance" : "La cuota ilimitada está prohibida en esta instancia",
+ "Setting the password is not supported by the users backend" : "El backend de los usuarios no soporta establecer la contraseña",
+ "Invalid language" : "Idioma inválido",
+ "Invalid locale" : "Configuración regional inválida",
+ "Cannot remove yourself from the admin group" : "No se puede remover a Ud. mismo del grupo de administración",
+ "Cannot remove yourself from this group as you are a sub-admin" : "No se puede remover así mismo de este grupo dado que Ud. es un subadministrador",
+ "Not viable to remove user from the last group you are sub-admin of" : "No es viable remover el usuario del último grupo del que Ud. es subadministrador",
+ "User does not exist" : "El usuario no existe",
+ "Group does not exist" : "El grupo no existe",
+ "User is not a sub-admin of this group" : "El usuario no es un subadministrador de este grupo",
+ "Email address not available" : "Dirección de correo electrónico no disponible",
+ "Sending email failed" : "Falló el envío del correo electrónico",
"Email confirmation" : "Confirmación del correo electrónico",
- "To enable the email address %s please click the button below." : "Para habilitar la dirección de correo electrónico %s haz click en el botón que hay a continuación, por favor.",
+ "To enable the email address %s please click the button below." : "Para habilitar la dirección de correo electrónico %s , por favor, haga clic en el botón a continuación.",
"Confirm" : "Confirmar",
"Email was already removed from account and cannot be confirmed anymore." : "El correo electrónico ha sido eliminado de la cuenta y ya no puede ser confirmado.",
- "Could not verify mail because the token is expired." : "No se ha podido verificar el correo electrónico porque el código ha caducado.",
- "Could not verify mail because the token is invalid." : "No se ha podido verificar el correo electrónico porque el código es inválido.",
- "An unexpected error occurred. Please contact your admin." : "Ha ocurrido un error inesperado. Por favor contacta con tu administrador.",
+ "Could not verify mail because the token is expired." : "No se ha podido verificar el correo electrónico porque el token ha expirado.",
+ "Could not verify mail because the token is invalid." : "No se ha podido verificar el correo electrónico porque el token es inválido.",
+ "An unexpected error occurred. Please contact your admin." : "Ha ocurrido un error inesperado. Por favor contacte a su administrador.",
"Email confirmation successful" : "Correo electrónico confirmado con éxito",
"Provisioning API" : "API de aprovisionamiento",
- "This application enables a set of APIs that external systems can use to manage users, groups and apps." : "Esta aplicación activa un conjunto de apis que sistemas externos pueden usar para manejar usuarios, grupos y aplicaciones.",
- "This application enables a set of APIs that external systems can use to create, edit, delete and query user\n\t\tattributes, query, set and remove groups, set quota and query total storage used in Nextcloud. Group admin users\n\t\tcan also query Nextcloud and perform the same functions as an admin for groups they manage. The API also enables\n\t\tan admin to query for active Nextcloud applications, application info, and to enable or disable an app remotely.\n\t\tOnce the app is enabled, HTTP requests can be used via a Basic Auth header to perform any of the functions\n\t\tlisted above. More information is available in the Provisioning API documentation, including example calls\n\t\tand server responses." : "Esta aplicación activa una serie de API que se pueden usar por sistemas externos para crear, editar, eliminar y seleccionar atributos\n\t\tde usuarios; seleccionar, configurar y eliminar grupos, marcar la cuota y marcar el almacenamiento total usado en Nextcloud. El grupo de usuarios administradores\t\ttambién pueden buscar en Nextcloud y realizar las mismas funciones como administrador para los grupos que manejas. La API también permite\t\ta un administrador que busque aplicaciones activas en Nextcloud, información de las apps, y activar o desactivar remotamente una app.\t\tUna vez que se activa la app, se pueden usar peticiones HTTP vía una cabecera Basic Auth para realizar cualquier función\t\tde las listadas arriba. Más información disponible en la documentación de la API de aprovisionamiento, incluyendo llamadas de ejemplo\t\ty respuestas del servidor."
+ "This application enables a set of APIs that external systems can use to manage accounts, groups and apps." : "Esta aplicación habilita un conjunto de APIs que los sistemas externos pueden usar para administrar usuarios, grupos y aplicaciones.",
+ "This application enables a set of APIs that external systems can use to create, edit, delete and query account\n\t\tattributes, query, set and remove groups, set quota and query total storage used in Nextcloud. Group admin accounts\n\t\tcan also query Nextcloud and perform the same functions as an admin for groups they manage. The API also enables\n\t\tan admin to query for active Nextcloud applications, application info, and to enable or disable an app remotely.\n\t\tOnce the app is enabled, HTTP requests can be used via a Basic Auth header to perform any of the functions\n\t\tlisted above. More information is available in the Provisioning API documentation, including example calls\n\t\tand server responses." : "Esta aplicación habilita una serie de APIs que pueden ser usadas por sistemas externos para crear, editar, eliminar y seleccionar atributos\n\t\tde usuarios; seleccionar, configurar y eliminar grupos, establecer cuotas y consultar el almacenamiento total usado en Nextcloud. Las cuentas administradoras de grupos\n\t\ttambién pueden buscar en Nextcloud y realizar las mismas funciones como administrador para los grupos que manejan. La API también permite\n\t\ta un administrador que busque aplicaciones activas en Nextcloud, información de las apps, y activar o desactivar remotamente una app.\n\t\tUna vez que se activa la app, se pueden usar peticiones HTTP vía un encabezado Basic Auth para realizar cualesquiera de las funciones\n\t\t listadas anteriormente. Más información disponible en la documentación de la API de aprovisionamiento, incluyendo llamadas de ejemplo\n\t\ty respuestas del servidor."
},"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"
} \ No newline at end of file
diff --git a/apps/provisioning_api/l10n/es_EC.js b/apps/provisioning_api/l10n/es_EC.js
deleted file mode 100644
index 5f62f67c552..00000000000
--- a/apps/provisioning_api/l10n/es_EC.js
+++ /dev/null
@@ -1,18 +0,0 @@
-OC.L10N.register(
- "provisioning_api",
- {
- "Logged in user must be an administrator or have authorization to edit this setting." : "El usuario conectado debe ser un administrador o tener autorización para editar esta configuración.",
- "User already exists" : "El usuario ya existe",
- "Email confirmation" : "Confirmación de correo electrónico",
- "To enable the email address %s please click the button below." : "Para habilitar la dirección de correo electrónico %s, haz clic en el botón de abajo.",
- "Confirm" : "Confirmar",
- "Email was already removed from account and cannot be confirmed anymore." : "El correo electrónico ya fue eliminado de la cuenta y no se puede confirmar.",
- "Could not verify mail because the token is expired." : "No se pudo verificar el correo porque el token ha expirado.",
- "Could not verify mail because the token is invalid." : "No se pudo verificar el correo porque el token no es válido.",
- "An unexpected error occurred. Please contact your admin." : "Se produjo un error inesperado. Por favor, contacta al administrador.",
- "Email confirmation successful" : "Confirmación de correo electrónico exitosa",
- "Provisioning API" : "API de aprovisionamiento",
- "This application enables a set of APIs that external systems can use to manage users, groups and apps." : "Esta aplicación habilita un conjunto de API que los sistemas externos pueden usar para administrar usuarios, grupos y aplicaciones.",
- "This application enables a set of APIs that external systems can use to create, edit, delete and query user\n\t\tattributes, query, set and remove groups, set quota and query total storage used in Nextcloud. Group admin users\n\t\tcan also query Nextcloud and perform the same functions as an admin for groups they manage. The API also enables\n\t\tan admin to query for active Nextcloud applications, application info, and to enable or disable an app remotely.\n\t\tOnce the app is enabled, HTTP requests can be used via a Basic Auth header to perform any of the functions\n\t\tlisted above. More information is available in the Provisioning API documentation, including example calls\n\t\tand server responses." : "Esta aplicación habilita un conjunto de API que los sistemas externos pueden usar para crear, editar, eliminar y consultar atributos de usuarios, consultar, establecer y eliminar grupos, establecer cuotas y consultar el almacenamiento total utilizado en Nextcloud. Los usuarios administradores de grupos también pueden consultar Nextcloud y realizar las mismas funciones que un administrador para los grupos que administran. La API también permite a un administrador consultar las aplicaciones activas de Nextcloud, la información de las aplicaciones y habilitar o deshabilitar una aplicación de forma remota. Una vez que la aplicación está habilitada, se pueden utilizar solicitudes HTTP a través de un encabezado de autenticación básica para realizar cualquiera de las funciones mencionadas anteriormente. Hay más información disponible en la documentación de la API de aprovisionamiento, que incluye ejemplos de llamadas y respuestas del servidor."
-},
-"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;");
diff --git a/apps/provisioning_api/l10n/es_EC.json b/apps/provisioning_api/l10n/es_EC.json
deleted file mode 100644
index f37c9a17418..00000000000
--- a/apps/provisioning_api/l10n/es_EC.json
+++ /dev/null
@@ -1,16 +0,0 @@
-{ "translations": {
- "Logged in user must be an administrator or have authorization to edit this setting." : "El usuario conectado debe ser un administrador o tener autorización para editar esta configuración.",
- "User already exists" : "El usuario ya existe",
- "Email confirmation" : "Confirmación de correo electrónico",
- "To enable the email address %s please click the button below." : "Para habilitar la dirección de correo electrónico %s, haz clic en el botón de abajo.",
- "Confirm" : "Confirmar",
- "Email was already removed from account and cannot be confirmed anymore." : "El correo electrónico ya fue eliminado de la cuenta y no se puede confirmar.",
- "Could not verify mail because the token is expired." : "No se pudo verificar el correo porque el token ha expirado.",
- "Could not verify mail because the token is invalid." : "No se pudo verificar el correo porque el token no es válido.",
- "An unexpected error occurred. Please contact your admin." : "Se produjo un error inesperado. Por favor, contacta al administrador.",
- "Email confirmation successful" : "Confirmación de correo electrónico exitosa",
- "Provisioning API" : "API de aprovisionamiento",
- "This application enables a set of APIs that external systems can use to manage users, groups and apps." : "Esta aplicación habilita un conjunto de API que los sistemas externos pueden usar para administrar usuarios, grupos y aplicaciones.",
- "This application enables a set of APIs that external systems can use to create, edit, delete and query user\n\t\tattributes, query, set and remove groups, set quota and query total storage used in Nextcloud. Group admin users\n\t\tcan also query Nextcloud and perform the same functions as an admin for groups they manage. The API also enables\n\t\tan admin to query for active Nextcloud applications, application info, and to enable or disable an app remotely.\n\t\tOnce the app is enabled, HTTP requests can be used via a Basic Auth header to perform any of the functions\n\t\tlisted above. More information is available in the Provisioning API documentation, including example calls\n\t\tand server responses." : "Esta aplicación habilita un conjunto de API que los sistemas externos pueden usar para crear, editar, eliminar y consultar atributos de usuarios, consultar, establecer y eliminar grupos, establecer cuotas y consultar el almacenamiento total utilizado en Nextcloud. Los usuarios administradores de grupos también pueden consultar Nextcloud y realizar las mismas funciones que un administrador para los grupos que administran. La API también permite a un administrador consultar las aplicaciones activas de Nextcloud, la información de las aplicaciones y habilitar o deshabilitar una aplicación de forma remota. Una vez que la aplicación está habilitada, se pueden utilizar solicitudes HTTP a través de un encabezado de autenticación básica para realizar cualquiera de las funciones mencionadas anteriormente. Hay más información disponible en la documentación de la API de aprovisionamiento, que incluye ejemplos de llamadas y respuestas del servidor."
-},"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"
-} \ No newline at end of file
diff --git a/apps/provisioning_api/l10n/es_MX.js b/apps/provisioning_api/l10n/es_MX.js
new file mode 100644
index 00000000000..16162a08a3b
--- /dev/null
+++ b/apps/provisioning_api/l10n/es_MX.js
@@ -0,0 +1,42 @@
+OC.L10N.register(
+ "provisioning_api",
+ {
+ "Logged in account must be an administrator or have authorization to edit this setting." : "El usuario que ha iniciado sesión debe ser un administrador o tener autorización para editar esta configuración.",
+ "Could not create non-existing user ID" : "No se pudo crear el identificador de usuario no existente",
+ "User already exists" : "El usuario ya existe",
+ "Group %1$s does not exist" : "El grupo %1$s no existe",
+ "Insufficient privileges for group %1$s" : "Privilegios insuficientes para el grupo %1$s",
+ "No group specified (required for sub-admins)" : "No se especificó ningún grupo (requerido para subadministradores)",
+ "Sub-admin group does not exist" : "El grupo subadministrador no existe",
+ "Cannot create sub-admins for admin group" : "No se pueden crear subadministradores para el grupo administrador",
+ "No permissions to promote sub-admins" : "Sin permisos para promover subadministradores",
+ "Invalid password value" : "Valor de contraseña inválido",
+ "Required email address was not provided" : "La dirección de correo electrónico requerido no fue proporcionado",
+ "Invalid quota value: %1$s" : "Valor de cuota inválido: %1$s",
+ "Invalid quota value. %1$s is exceeding the maximum quota" : "Valor de cuota inválido. %1$s excede la cuota máxima",
+ "Unlimited quota is forbidden on this instance" : "La cuota ilimitada está prohibida en esta instancia",
+ "Setting the password is not supported by the users backend" : "El backend de los usuarios no soporta establecer la contraseña",
+ "Invalid language" : "Idioma inválido",
+ "Invalid locale" : "Configuración regional inválida",
+ "Invalid first day of week" : "Día de inicio de semana inválido",
+ "Cannot remove yourself from the admin group" : "No se puede remover a sí mismo del grupo administrador",
+ "Cannot remove yourself from this group as you are a sub-admin" : "No se puede remover así mismo de este grupo dado que es un subadministrador",
+ "Not viable to remove user from the last group you are sub-admin of" : "No es viable remover el usuario del último grupo que es subadministrador",
+ "User does not exist" : "El usuario no existe",
+ "Group does not exist" : "El grupo no existe",
+ "User is not a sub-admin of this group" : "El usuario no es un subadministrador de este grupo",
+ "Email address not available" : "Dirección de correo electrónico no disponible",
+ "Sending email failed" : "Falló el envío del correo electrónico",
+ "Email confirmation" : "Confirmación del correo electrónico",
+ "To enable the email address %s please click the button below." : "Para habilitar la dirección de correo electrónico %s, por favor, haga clic en el botón de abajo.",
+ "Confirm" : "Confirmar",
+ "Email was already removed from account and cannot be confirmed anymore." : "El correo electrónico ya fue eliminado de la cuenta y ya no puede ser confirmado.",
+ "Could not verify mail because the token is expired." : "No se pudo verificar el correo porque el token ha caducado.",
+ "Could not verify mail because the token is invalid." : "No se pudo verificar el correo porque el token es inválido.",
+ "An unexpected error occurred. Please contact your admin." : "Ocurrió un error inesperado. Por favor, contacte a su administrador.",
+ "Email confirmation successful" : "Confirmación del correo electrónico exitosa",
+ "Provisioning API" : "API de aprovisionamiento",
+ "This application enables a set of APIs that external systems can use to manage accounts, groups and apps." : "Esta aplicación habilita un conjunto de APIs que los sistemas externos pueden usar para administrar usuarios, grupos y aplicaciones.",
+ "This application enables a set of APIs that external systems can use to create, edit, delete and query account\n\t\tattributes, query, set and remove groups, set quota and query total storage used in Nextcloud. Group admin accounts\n\t\tcan also query Nextcloud and perform the same functions as an admin for groups they manage. The API also enables\n\t\tan admin to query for active Nextcloud applications, application info, and to enable or disable an app remotely.\n\t\tOnce the app is enabled, HTTP requests can be used via a Basic Auth header to perform any of the functions\n\t\tlisted above. More information is available in the Provisioning API documentation, including example calls\n\t\tand server responses." : "Esta aplicación habilita un conjunto de APIs que pueden ser usadas por sistemas externos para crear, editar, eliminar y seleccionar atributos\n\t\tde usuarios; seleccionar, configurar y eliminar grupos, establecer cuotas y consultar el almacenamiento total usado en Nextcloud. Las cuentas administradoras de grupos\n\t\ttambién pueden buscar en Nextcloud y desempeñar las mismas funciones como administrador para los grupos que administran. La API también permite\n\t\ta un administrador que busque aplicaciones activas en Nextcloud, información de la aplicación, y activar o desactivar una aplicación remotamente.\n\t\tUna vez activada la aplicación, se pueden usar peticiones HTTP mediante un encabezado Basic Auth para realizar cualquiera de las funciones\n\t\t listadas anteriormente. Más información disponible en la documentación de la API de aprovisionamiento, incluyendo llamadas de ejemplo\n\t\ty respuestas del servidor."
+},
+"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;");
diff --git a/apps/provisioning_api/l10n/es_MX.json b/apps/provisioning_api/l10n/es_MX.json
new file mode 100644
index 00000000000..9acf9efa87e
--- /dev/null
+++ b/apps/provisioning_api/l10n/es_MX.json
@@ -0,0 +1,40 @@
+{ "translations": {
+ "Logged in account must be an administrator or have authorization to edit this setting." : "El usuario que ha iniciado sesión debe ser un administrador o tener autorización para editar esta configuración.",
+ "Could not create non-existing user ID" : "No se pudo crear el identificador de usuario no existente",
+ "User already exists" : "El usuario ya existe",
+ "Group %1$s does not exist" : "El grupo %1$s no existe",
+ "Insufficient privileges for group %1$s" : "Privilegios insuficientes para el grupo %1$s",
+ "No group specified (required for sub-admins)" : "No se especificó ningún grupo (requerido para subadministradores)",
+ "Sub-admin group does not exist" : "El grupo subadministrador no existe",
+ "Cannot create sub-admins for admin group" : "No se pueden crear subadministradores para el grupo administrador",
+ "No permissions to promote sub-admins" : "Sin permisos para promover subadministradores",
+ "Invalid password value" : "Valor de contraseña inválido",
+ "Required email address was not provided" : "La dirección de correo electrónico requerido no fue proporcionado",
+ "Invalid quota value: %1$s" : "Valor de cuota inválido: %1$s",
+ "Invalid quota value. %1$s is exceeding the maximum quota" : "Valor de cuota inválido. %1$s excede la cuota máxima",
+ "Unlimited quota is forbidden on this instance" : "La cuota ilimitada está prohibida en esta instancia",
+ "Setting the password is not supported by the users backend" : "El backend de los usuarios no soporta establecer la contraseña",
+ "Invalid language" : "Idioma inválido",
+ "Invalid locale" : "Configuración regional inválida",
+ "Invalid first day of week" : "Día de inicio de semana inválido",
+ "Cannot remove yourself from the admin group" : "No se puede remover a sí mismo del grupo administrador",
+ "Cannot remove yourself from this group as you are a sub-admin" : "No se puede remover así mismo de este grupo dado que es un subadministrador",
+ "Not viable to remove user from the last group you are sub-admin of" : "No es viable remover el usuario del último grupo que es subadministrador",
+ "User does not exist" : "El usuario no existe",
+ "Group does not exist" : "El grupo no existe",
+ "User is not a sub-admin of this group" : "El usuario no es un subadministrador de este grupo",
+ "Email address not available" : "Dirección de correo electrónico no disponible",
+ "Sending email failed" : "Falló el envío del correo electrónico",
+ "Email confirmation" : "Confirmación del correo electrónico",
+ "To enable the email address %s please click the button below." : "Para habilitar la dirección de correo electrónico %s, por favor, haga clic en el botón de abajo.",
+ "Confirm" : "Confirmar",
+ "Email was already removed from account and cannot be confirmed anymore." : "El correo electrónico ya fue eliminado de la cuenta y ya no puede ser confirmado.",
+ "Could not verify mail because the token is expired." : "No se pudo verificar el correo porque el token ha caducado.",
+ "Could not verify mail because the token is invalid." : "No se pudo verificar el correo porque el token es inválido.",
+ "An unexpected error occurred. Please contact your admin." : "Ocurrió un error inesperado. Por favor, contacte a su administrador.",
+ "Email confirmation successful" : "Confirmación del correo electrónico exitosa",
+ "Provisioning API" : "API de aprovisionamiento",
+ "This application enables a set of APIs that external systems can use to manage accounts, groups and apps." : "Esta aplicación habilita un conjunto de APIs que los sistemas externos pueden usar para administrar usuarios, grupos y aplicaciones.",
+ "This application enables a set of APIs that external systems can use to create, edit, delete and query account\n\t\tattributes, query, set and remove groups, set quota and query total storage used in Nextcloud. Group admin accounts\n\t\tcan also query Nextcloud and perform the same functions as an admin for groups they manage. The API also enables\n\t\tan admin to query for active Nextcloud applications, application info, and to enable or disable an app remotely.\n\t\tOnce the app is enabled, HTTP requests can be used via a Basic Auth header to perform any of the functions\n\t\tlisted above. More information is available in the Provisioning API documentation, including example calls\n\t\tand server responses." : "Esta aplicación habilita un conjunto de APIs que pueden ser usadas por sistemas externos para crear, editar, eliminar y seleccionar atributos\n\t\tde usuarios; seleccionar, configurar y eliminar grupos, establecer cuotas y consultar el almacenamiento total usado en Nextcloud. Las cuentas administradoras de grupos\n\t\ttambién pueden buscar en Nextcloud y desempeñar las mismas funciones como administrador para los grupos que administran. La API también permite\n\t\ta un administrador que busque aplicaciones activas en Nextcloud, información de la aplicación, y activar o desactivar una aplicación remotamente.\n\t\tUna vez activada la aplicación, se pueden usar peticiones HTTP mediante un encabezado Basic Auth para realizar cualquiera de las funciones\n\t\t listadas anteriormente. Más información disponible en la documentación de la API de aprovisionamiento, incluyendo llamadas de ejemplo\n\t\ty respuestas del servidor."
+},"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"
+} \ No newline at end of file
diff --git a/apps/provisioning_api/l10n/et_EE.js b/apps/provisioning_api/l10n/et_EE.js
new file mode 100644
index 00000000000..2081f8c467c
--- /dev/null
+++ b/apps/provisioning_api/l10n/et_EE.js
@@ -0,0 +1,41 @@
+OC.L10N.register(
+ "provisioning_api",
+ {
+ "Logged in account must be an administrator or have authorization to edit this setting." : "Sisselogitud kasutajakonto peab olema peakasutajat või omama eraldi õigust selle seadustuse muutmiseks.",
+ "User already exists" : "Kasutaja on juba olemas",
+ "Group %1$s does not exist" : "%1$s gruppi pole olemas",
+ "Insufficient privileges for group %1$s" : "%1$s grupi jaoks pole pole piisavalt õigusi",
+ "No group specified (required for sub-admins)" : "Ühtegi gruppi pole määratud (vajalik peakasutajate alamgrupi puhul)",
+ "Sub-admin group does not exist" : "Peakasutajate alamgruppi pole olemas",
+ "Cannot create sub-admins for admin group" : "Peakasutajate grupi alamgruppi loomine ei õnnestu",
+ "No permissions to promote sub-admins" : "Pole õigusi peakasutajat alamgruppi määramiseks",
+ "Invalid password value" : "Vigane salasõna väärtus",
+ "An email address is required, to send a password link to the user." : "Salasõnalingi saatmiseks kasutajale on vajalik e-posti aadress.",
+ "Required email address was not provided" : "Vajalik e-posti aadress on lisamata",
+ "User creation failed" : "Kasutaja loomine ei õnnestunud",
+ "Invalid quota value: %1$s" : "Vigane kvoodi väärtus: %1$s",
+ "Invalid quota value. %1$s is exceeding the maximum quota" : "Vigane kvoodi väärtus. %1$s üledab maksimumkvoodi piiri",
+ "Unlimited quota is forbidden on this instance" : "Piiramatu kvoodi kasutamine on selles serveris keelatud",
+ "Setting the password is not supported by the users backend" : "Salasõna lisamine pole kasutajate taustateenuse poolt toetatud",
+ "Invalid language" : "Vigane keel",
+ "Invalid locale" : "Vigane lokaat",
+ "Invalid first day of week" : "Vigane nädala esimene päev",
+ "Cannot remove yourself from the admin group" : "Sa ei saa end peakasutajate grupist eemaldada",
+ "Cannot remove yourself from this group as you are a sub-admin" : "Kuna oled peakasutajate alamgrupi liige, siis sa ei saa end eemaldada",
+ "Not viable to remove user from the last group you are sub-admin of" : "Pole mõistlik eemaldada kasutajat viimasest grupist, kus oled peakasutajate alamgrupi liige",
+ "User does not exist" : "Kasutajat pole olemas",
+ "Group does not exist" : "Gruppi pole olemas",
+ "User is not a sub-admin of this group" : "Kasutaja pole selle grupi peakasutajate alamgrupi liige",
+ "Email address not available" : "E-posti aadress pole saadaval",
+ "Sending email failed" : "E-kirja saatmine ei õnnestunud",
+ "Email confirmation" : "E-posti aadressi kinnitamine",
+ "To enable the email address %s please click the button below." : "%s e-posti aadressi kinnitamiseks palun klõpsi järgnevat nuppu.",
+ "Confirm" : "Kinnita",
+ "Email was already removed from account and cannot be confirmed anymore." : "E-posti aadress on kasutaja andmetest eemaldatud ja seda ei saa enam kinnitada.",
+ "Could not verify mail because the token is expired." : "Kuna tunnusluba on aegunud, siis e-posti aadressi kinnitamine pole võimalik.",
+ "Could not verify mail because the token is invalid." : "Kuna tunnusluba on vigane, siis e-posti aadressi kinnitamine pole võimalik.",
+ "An unexpected error occurred. Please contact your admin." : "Tekkis ootamatu viga. Palun võta ühendust peakasutajaga.",
+ "Email confirmation successful" : "E-posti aadressi kinnitamine õnnestus.",
+ "This application enables a set of APIs that external systems can use to manage accounts, groups and apps." : "See rakendus võtab kasutusele sellised API-d mis võimaldavad välistel süsteemidel hallata kasutajakontosid, gruppe ja rakendusi."
+},
+"nplurals=2; plural=(n != 1);");
diff --git a/apps/provisioning_api/l10n/et_EE.json b/apps/provisioning_api/l10n/et_EE.json
new file mode 100644
index 00000000000..f339e224be0
--- /dev/null
+++ b/apps/provisioning_api/l10n/et_EE.json
@@ -0,0 +1,39 @@
+{ "translations": {
+ "Logged in account must be an administrator or have authorization to edit this setting." : "Sisselogitud kasutajakonto peab olema peakasutajat või omama eraldi õigust selle seadustuse muutmiseks.",
+ "User already exists" : "Kasutaja on juba olemas",
+ "Group %1$s does not exist" : "%1$s gruppi pole olemas",
+ "Insufficient privileges for group %1$s" : "%1$s grupi jaoks pole pole piisavalt õigusi",
+ "No group specified (required for sub-admins)" : "Ühtegi gruppi pole määratud (vajalik peakasutajate alamgrupi puhul)",
+ "Sub-admin group does not exist" : "Peakasutajate alamgruppi pole olemas",
+ "Cannot create sub-admins for admin group" : "Peakasutajate grupi alamgruppi loomine ei õnnestu",
+ "No permissions to promote sub-admins" : "Pole õigusi peakasutajat alamgruppi määramiseks",
+ "Invalid password value" : "Vigane salasõna väärtus",
+ "An email address is required, to send a password link to the user." : "Salasõnalingi saatmiseks kasutajale on vajalik e-posti aadress.",
+ "Required email address was not provided" : "Vajalik e-posti aadress on lisamata",
+ "User creation failed" : "Kasutaja loomine ei õnnestunud",
+ "Invalid quota value: %1$s" : "Vigane kvoodi väärtus: %1$s",
+ "Invalid quota value. %1$s is exceeding the maximum quota" : "Vigane kvoodi väärtus. %1$s üledab maksimumkvoodi piiri",
+ "Unlimited quota is forbidden on this instance" : "Piiramatu kvoodi kasutamine on selles serveris keelatud",
+ "Setting the password is not supported by the users backend" : "Salasõna lisamine pole kasutajate taustateenuse poolt toetatud",
+ "Invalid language" : "Vigane keel",
+ "Invalid locale" : "Vigane lokaat",
+ "Invalid first day of week" : "Vigane nädala esimene päev",
+ "Cannot remove yourself from the admin group" : "Sa ei saa end peakasutajate grupist eemaldada",
+ "Cannot remove yourself from this group as you are a sub-admin" : "Kuna oled peakasutajate alamgrupi liige, siis sa ei saa end eemaldada",
+ "Not viable to remove user from the last group you are sub-admin of" : "Pole mõistlik eemaldada kasutajat viimasest grupist, kus oled peakasutajate alamgrupi liige",
+ "User does not exist" : "Kasutajat pole olemas",
+ "Group does not exist" : "Gruppi pole olemas",
+ "User is not a sub-admin of this group" : "Kasutaja pole selle grupi peakasutajate alamgrupi liige",
+ "Email address not available" : "E-posti aadress pole saadaval",
+ "Sending email failed" : "E-kirja saatmine ei õnnestunud",
+ "Email confirmation" : "E-posti aadressi kinnitamine",
+ "To enable the email address %s please click the button below." : "%s e-posti aadressi kinnitamiseks palun klõpsi järgnevat nuppu.",
+ "Confirm" : "Kinnita",
+ "Email was already removed from account and cannot be confirmed anymore." : "E-posti aadress on kasutaja andmetest eemaldatud ja seda ei saa enam kinnitada.",
+ "Could not verify mail because the token is expired." : "Kuna tunnusluba on aegunud, siis e-posti aadressi kinnitamine pole võimalik.",
+ "Could not verify mail because the token is invalid." : "Kuna tunnusluba on vigane, siis e-posti aadressi kinnitamine pole võimalik.",
+ "An unexpected error occurred. Please contact your admin." : "Tekkis ootamatu viga. Palun võta ühendust peakasutajaga.",
+ "Email confirmation successful" : "E-posti aadressi kinnitamine õnnestus.",
+ "This application enables a set of APIs that external systems can use to manage accounts, groups and apps." : "See rakendus võtab kasutusele sellised API-d mis võimaldavad välistel süsteemidel hallata kasutajakontosid, gruppe ja rakendusi."
+},"pluralForm" :"nplurals=2; plural=(n != 1);"
+} \ No newline at end of file
diff --git a/apps/provisioning_api/l10n/eu.js b/apps/provisioning_api/l10n/eu.js
index 75a294b4159..528224b780b 100644
--- a/apps/provisioning_api/l10n/eu.js
+++ b/apps/provisioning_api/l10n/eu.js
@@ -1,8 +1,33 @@
OC.L10N.register(
"provisioning_api",
{
- "Logged in user must be an administrator or have authorization to edit this setting." : "Saioa hasitako erabiltzaileak administratzailea edo ezarpen hau editatzeko baimena duena izan behar du.",
+ "Logged in account must be an administrator or have authorization to edit this setting." : "Saioa hasitako erabiltzaileak administratzailea edo ezarpen hau editatzeko baimena duena izan behar du.",
+ "Could not create non-existing user ID" : "Ezin izan da sortu existitzen ez den erabiltzailearen IDa",
"User already exists" : "Erabiltzailea dagoeneko existitzen da",
+ "Group %1$s does not exist" : "%1$s taldea ez da existitzen",
+ "Insufficient privileges for group %1$s" : "%1$s taldeak baimen gutxiegi dauzka",
+ "No group specified (required for sub-admins)" : "Ez da talderik zehaztu (beharrezkoa da azpi-administratzaileentzat)",
+ "Sub-admin group does not exist" : "Azpi-administratzaileen taldea ez da existitzen",
+ "Cannot create sub-admins for admin group" : "Ezin da azpi-administratzailerik sortu administratzaile taldearentzat",
+ "No permissions to promote sub-admins" : "Ez duzu baimenik azpi-administratzaileak mailaz igotzeko",
+ "Invalid password value" : "Pasahitz baliogabea",
+ "An email address is required, to send a password link to the user." : "Helbide elektroniko bat behar da erabiltzaileari pasahitz-esteka bat bidaltzeko.",
+ "Required email address was not provided" : "Beharrezkoa den helbide elektronikoa falta da",
+ "Invalid quota value: %1$s" : "Kuota baliogabea: %1$s",
+ "Invalid quota value. %1$s is exceeding the maximum quota" : "Kuota baliogabea. %1$s kuota maximotik gain dago",
+ "Unlimited quota is forbidden on this instance" : "Kuota mugagabea debekatuta dago instantzia honetan",
+ "Setting the password is not supported by the users backend" : "Erabiltzailearen atzeko aldeak ez du onartzen pasahitza ezartzea",
+ "Invalid language" : "Hizkuntza baliogabea",
+ "Invalid locale" : "Eskualde ezarpen baliogabea",
+ "Invalid first day of week" : "Asteko lehen egun baliogabea",
+ "Cannot remove yourself from the admin group" : "Ezin duzu zeure burua kendu admin taldetik",
+ "Cannot remove yourself from this group as you are a sub-admin" : "Ezin duzu zeure burua talde honetatik kendu, azpi-administratzailea zarelako",
+ "Not viable to remove user from the last group you are sub-admin of" : "Ez dago modurik azpi-administratzaile zaren talde horretatik erabiltzailea kentzeko",
+ "User does not exist" : "Erabiltzailea ez da existitzen",
+ "Group does not exist" : "Taldea ez da existitzen",
+ "User is not a sub-admin of this group" : "Erabiltzailea ez da talde honetako azpi-administratzailea",
+ "Email address not available" : "Helbide elektronikoa ez dago erabilgarri",
+ "Sending email failed" : "Mezu elektronikoa bidaltzeak huts egin du",
"Email confirmation" : "Posta elektronikoaren berrespena",
"To enable the email address %s please click the button below." : "%shelbide elektronikoa gaitzeko, egin klik beheko botoian.",
"Confirm" : "Berretsi",
@@ -12,7 +37,7 @@ OC.L10N.register(
"An unexpected error occurred. Please contact your admin." : "Ustekabeko errorea gertatu da. Jarri harremanetan zure administratzailearekin.",
"Email confirmation successful" : "Mezu elektronikoaren berrespena ongi egin da",
"Provisioning API" : "API hornitzen",
- "This application enables a set of APIs that external systems can use to manage users, groups and apps." : "Aplikazio honek API multzo bat gaitzen du kanpoko sistemei aukera emanez erabiltzaileak, taldeak eta aplikazioak kudeatzeko. ",
- "This application enables a set of APIs that external systems can use to create, edit, delete and query user\n\t\tattributes, query, set and remove groups, set quota and query total storage used in Nextcloud. Group admin users\n\t\tcan also query Nextcloud and perform the same functions as an admin for groups they manage. The API also enables\n\t\tan admin to query for active Nextcloud applications, application info, and to enable or disable an app remotely.\n\t\tOnce the app is enabled, HTTP requests can be used via a Basic Auth header to perform any of the functions\n\t\tlisted above. More information is available in the Provisioning API documentation, including example calls\n\t\tand server responses." : "Aplikazio honek gaitzen du kanpoko sistemek erabiltzailea sortu, editatu, ezabatu eta kontsultatzeko erabili ditzaketen API multzo bat\n\t\tatributuak, kontsultak, taldeak ezarri eta kendu, kuota ezarri eta Nextcloud-en erabilitako biltegiratze osoa kontsultatu. Taldeko administratzaileek\n\t\tNextcloud ere kontsulta dezakete eta administratzaile baten funtzio berdinak bete kudeatzen dituzten taldeentzako. APIak ere gaitzen du\n\t\tadministratzaile bat Nextcloud kontsultatzeko aplikazio aktiboak, aplikazioen informazioa eta aplikazio bat urrunetik gaitzeko edo desgaitzeko.\n\t\tAplikazioa gaituta dagoenean, HTTP eskaerak oinarrizko autentifikazio goiburu baten bidez erabili daitezke betetzeko\n\t\tgoian zerrendatuko edozein funtzio. Informazio gehiago eskuragarri dago API hornitze- dokumentazioan, adibide-deiak\n\t\teta zerbitzariaren erantzunak barne."
+ "This application enables a set of APIs that external systems can use to manage accounts, groups and apps." : "Aplikazio honek API multzo bat gaitzen du kanpoko sistemei aukera emanez kontuak, taldeak eta aplikazioak kudeatzeko. ",
+ "This application enables a set of APIs that external systems can use to create, edit, delete and query account\n\t\tattributes, query, set and remove groups, set quota and query total storage used in Nextcloud. Group admin accounts\n\t\tcan also query Nextcloud and perform the same functions as an admin for groups they manage. The API also enables\n\t\tan admin to query for active Nextcloud applications, application info, and to enable or disable an app remotely.\n\t\tOnce the app is enabled, HTTP requests can be used via a Basic Auth header to perform any of the functions\n\t\tlisted above. More information is available in the Provisioning API documentation, including example calls\n\t\tand server responses." : "Aplikazio honek gaitzen du kanpoko sistemek kontuak sortu, editatu, ezabatu eta kontsultatzeko erabili ditzaketen API multzo bat\n\t\tatributuak, kontsultak, taldeak ezarri eta kendu, kuota ezarri eta Nextcloud-en erabilitako biltegiratze osoa kontsultatu. Taldeko administratzaileek\n\t\tNextcloud ere kontsulta dezakete eta administratzaile baten funtzio berdinak bete kudeatzen dituzten taldeentzako. APIak ere gaitzen du\n\t\tadministratzaile bat Nextcloud kontsultatzeko aplikazio aktiboak, aplikazioen informazioa eta aplikazio bat urrunetik gaitzeko edo desgaitzeko.\n\t\tAplikazioa gaituta dagoenean, HTTP eskaerak oinarrizko autentifikazio goiburu baten bidez erabili daitezke betetzeko\n\t\tgoian zerrendatuko edozein funtzio. Informazio gehiago eskuragarri dago API hornitze- dokumentazioan, adibide-deiak\n\t\teta zerbitzariaren erantzunak barne."
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/provisioning_api/l10n/eu.json b/apps/provisioning_api/l10n/eu.json
index c7216c4d87b..9ba4c5d3475 100644
--- a/apps/provisioning_api/l10n/eu.json
+++ b/apps/provisioning_api/l10n/eu.json
@@ -1,6 +1,31 @@
{ "translations": {
- "Logged in user must be an administrator or have authorization to edit this setting." : "Saioa hasitako erabiltzaileak administratzailea edo ezarpen hau editatzeko baimena duena izan behar du.",
+ "Logged in account must be an administrator or have authorization to edit this setting." : "Saioa hasitako erabiltzaileak administratzailea edo ezarpen hau editatzeko baimena duena izan behar du.",
+ "Could not create non-existing user ID" : "Ezin izan da sortu existitzen ez den erabiltzailearen IDa",
"User already exists" : "Erabiltzailea dagoeneko existitzen da",
+ "Group %1$s does not exist" : "%1$s taldea ez da existitzen",
+ "Insufficient privileges for group %1$s" : "%1$s taldeak baimen gutxiegi dauzka",
+ "No group specified (required for sub-admins)" : "Ez da talderik zehaztu (beharrezkoa da azpi-administratzaileentzat)",
+ "Sub-admin group does not exist" : "Azpi-administratzaileen taldea ez da existitzen",
+ "Cannot create sub-admins for admin group" : "Ezin da azpi-administratzailerik sortu administratzaile taldearentzat",
+ "No permissions to promote sub-admins" : "Ez duzu baimenik azpi-administratzaileak mailaz igotzeko",
+ "Invalid password value" : "Pasahitz baliogabea",
+ "An email address is required, to send a password link to the user." : "Helbide elektroniko bat behar da erabiltzaileari pasahitz-esteka bat bidaltzeko.",
+ "Required email address was not provided" : "Beharrezkoa den helbide elektronikoa falta da",
+ "Invalid quota value: %1$s" : "Kuota baliogabea: %1$s",
+ "Invalid quota value. %1$s is exceeding the maximum quota" : "Kuota baliogabea. %1$s kuota maximotik gain dago",
+ "Unlimited quota is forbidden on this instance" : "Kuota mugagabea debekatuta dago instantzia honetan",
+ "Setting the password is not supported by the users backend" : "Erabiltzailearen atzeko aldeak ez du onartzen pasahitza ezartzea",
+ "Invalid language" : "Hizkuntza baliogabea",
+ "Invalid locale" : "Eskualde ezarpen baliogabea",
+ "Invalid first day of week" : "Asteko lehen egun baliogabea",
+ "Cannot remove yourself from the admin group" : "Ezin duzu zeure burua kendu admin taldetik",
+ "Cannot remove yourself from this group as you are a sub-admin" : "Ezin duzu zeure burua talde honetatik kendu, azpi-administratzailea zarelako",
+ "Not viable to remove user from the last group you are sub-admin of" : "Ez dago modurik azpi-administratzaile zaren talde horretatik erabiltzailea kentzeko",
+ "User does not exist" : "Erabiltzailea ez da existitzen",
+ "Group does not exist" : "Taldea ez da existitzen",
+ "User is not a sub-admin of this group" : "Erabiltzailea ez da talde honetako azpi-administratzailea",
+ "Email address not available" : "Helbide elektronikoa ez dago erabilgarri",
+ "Sending email failed" : "Mezu elektronikoa bidaltzeak huts egin du",
"Email confirmation" : "Posta elektronikoaren berrespena",
"To enable the email address %s please click the button below." : "%shelbide elektronikoa gaitzeko, egin klik beheko botoian.",
"Confirm" : "Berretsi",
@@ -10,7 +35,7 @@
"An unexpected error occurred. Please contact your admin." : "Ustekabeko errorea gertatu da. Jarri harremanetan zure administratzailearekin.",
"Email confirmation successful" : "Mezu elektronikoaren berrespena ongi egin da",
"Provisioning API" : "API hornitzen",
- "This application enables a set of APIs that external systems can use to manage users, groups and apps." : "Aplikazio honek API multzo bat gaitzen du kanpoko sistemei aukera emanez erabiltzaileak, taldeak eta aplikazioak kudeatzeko. ",
- "This application enables a set of APIs that external systems can use to create, edit, delete and query user\n\t\tattributes, query, set and remove groups, set quota and query total storage used in Nextcloud. Group admin users\n\t\tcan also query Nextcloud and perform the same functions as an admin for groups they manage. The API also enables\n\t\tan admin to query for active Nextcloud applications, application info, and to enable or disable an app remotely.\n\t\tOnce the app is enabled, HTTP requests can be used via a Basic Auth header to perform any of the functions\n\t\tlisted above. More information is available in the Provisioning API documentation, including example calls\n\t\tand server responses." : "Aplikazio honek gaitzen du kanpoko sistemek erabiltzailea sortu, editatu, ezabatu eta kontsultatzeko erabili ditzaketen API multzo bat\n\t\tatributuak, kontsultak, taldeak ezarri eta kendu, kuota ezarri eta Nextcloud-en erabilitako biltegiratze osoa kontsultatu. Taldeko administratzaileek\n\t\tNextcloud ere kontsulta dezakete eta administratzaile baten funtzio berdinak bete kudeatzen dituzten taldeentzako. APIak ere gaitzen du\n\t\tadministratzaile bat Nextcloud kontsultatzeko aplikazio aktiboak, aplikazioen informazioa eta aplikazio bat urrunetik gaitzeko edo desgaitzeko.\n\t\tAplikazioa gaituta dagoenean, HTTP eskaerak oinarrizko autentifikazio goiburu baten bidez erabili daitezke betetzeko\n\t\tgoian zerrendatuko edozein funtzio. Informazio gehiago eskuragarri dago API hornitze- dokumentazioan, adibide-deiak\n\t\teta zerbitzariaren erantzunak barne."
+ "This application enables a set of APIs that external systems can use to manage accounts, groups and apps." : "Aplikazio honek API multzo bat gaitzen du kanpoko sistemei aukera emanez kontuak, taldeak eta aplikazioak kudeatzeko. ",
+ "This application enables a set of APIs that external systems can use to create, edit, delete and query account\n\t\tattributes, query, set and remove groups, set quota and query total storage used in Nextcloud. Group admin accounts\n\t\tcan also query Nextcloud and perform the same functions as an admin for groups they manage. The API also enables\n\t\tan admin to query for active Nextcloud applications, application info, and to enable or disable an app remotely.\n\t\tOnce the app is enabled, HTTP requests can be used via a Basic Auth header to perform any of the functions\n\t\tlisted above. More information is available in the Provisioning API documentation, including example calls\n\t\tand server responses." : "Aplikazio honek gaitzen du kanpoko sistemek kontuak sortu, editatu, ezabatu eta kontsultatzeko erabili ditzaketen API multzo bat\n\t\tatributuak, kontsultak, taldeak ezarri eta kendu, kuota ezarri eta Nextcloud-en erabilitako biltegiratze osoa kontsultatu. Taldeko administratzaileek\n\t\tNextcloud ere kontsulta dezakete eta administratzaile baten funtzio berdinak bete kudeatzen dituzten taldeentzako. APIak ere gaitzen du\n\t\tadministratzaile bat Nextcloud kontsultatzeko aplikazio aktiboak, aplikazioen informazioa eta aplikazio bat urrunetik gaitzeko edo desgaitzeko.\n\t\tAplikazioa gaituta dagoenean, HTTP eskaerak oinarrizko autentifikazio goiburu baten bidez erabili daitezke betetzeko\n\t\tgoian zerrendatuko edozein funtzio. Informazio gehiago eskuragarri dago API hornitze- dokumentazioan, adibide-deiak\n\t\teta zerbitzariaren erantzunak barne."
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/provisioning_api/l10n/fa.js b/apps/provisioning_api/l10n/fa.js
deleted file mode 100644
index be264dd36af..00000000000
--- a/apps/provisioning_api/l10n/fa.js
+++ /dev/null
@@ -1,18 +0,0 @@
-OC.L10N.register(
- "provisioning_api",
- {
- "Logged in user must be an administrator or have authorization to edit this setting." : "Logged in user must be an administrator or have authorization to edit this setting.",
- "User already exists" : "User already exists",
- "Email confirmation" : "Email confirmation",
- "To enable the email address %s please click the button below." : "To enable the email address %s please click the button below.",
- "Confirm" : "تائید",
- "Email was already removed from account and cannot be confirmed anymore." : "Email was already removed from account and cannot be confirmed anymore.",
- "Could not verify mail because the token is expired." : "Could not verify mail because the token is expired.",
- "Could not verify mail because the token is invalid." : "Could not verify mail because the token is invalid.",
- "An unexpected error occurred. Please contact your admin." : "An unexpected error occurred. Please contact your admin.",
- "Email confirmation successful" : "Email confirmation successful",
- "Provisioning API" : "Provisioning API",
- "This application enables a set of APIs that external systems can use to manage users, groups and apps." : "This application enables a set of APIs that external systems can use to manage users, groups and apps.",
- "This application enables a set of APIs that external systems can use to create, edit, delete and query user\n\t\tattributes, query, set and remove groups, set quota and query total storage used in Nextcloud. Group admin users\n\t\tcan also query Nextcloud and perform the same functions as an admin for groups they manage. The API also enables\n\t\tan admin to query for active Nextcloud applications, application info, and to enable or disable an app remotely.\n\t\tOnce the app is enabled, HTTP requests can be used via a Basic Auth header to perform any of the functions\n\t\tlisted above. More information is available in the Provisioning API documentation, including example calls\n\t\tand server responses." : "This application enables a set of APIs that external systems can use to create, edit, delete and query user\n\t\tattributes, query, set and remove groups, set quota and query total storage used in Nextcloud. Group admin users\n\t\tcan also query Nextcloud and perform the same functions as an admin for groups they manage. The API also enables\n\t\tan admin to query for active Nextcloud applications, application info, and to enable or disable an app remotely.\n\t\tOnce the app is enabled, HTTP requests can be used via a Basic Auth header to perform any of the functions\n\t\tlisted above. More information is available in the Provisioning API documentation, including example calls\n\t\tand server responses."
-},
-"nplurals=2; plural=(n > 1);");
diff --git a/apps/provisioning_api/l10n/fa.json b/apps/provisioning_api/l10n/fa.json
deleted file mode 100644
index bffa08e9c25..00000000000
--- a/apps/provisioning_api/l10n/fa.json
+++ /dev/null
@@ -1,16 +0,0 @@
-{ "translations": {
- "Logged in user must be an administrator or have authorization to edit this setting." : "Logged in user must be an administrator or have authorization to edit this setting.",
- "User already exists" : "User already exists",
- "Email confirmation" : "Email confirmation",
- "To enable the email address %s please click the button below." : "To enable the email address %s please click the button below.",
- "Confirm" : "تائید",
- "Email was already removed from account and cannot be confirmed anymore." : "Email was already removed from account and cannot be confirmed anymore.",
- "Could not verify mail because the token is expired." : "Could not verify mail because the token is expired.",
- "Could not verify mail because the token is invalid." : "Could not verify mail because the token is invalid.",
- "An unexpected error occurred. Please contact your admin." : "An unexpected error occurred. Please contact your admin.",
- "Email confirmation successful" : "Email confirmation successful",
- "Provisioning API" : "Provisioning API",
- "This application enables a set of APIs that external systems can use to manage users, groups and apps." : "This application enables a set of APIs that external systems can use to manage users, groups and apps.",
- "This application enables a set of APIs that external systems can use to create, edit, delete and query user\n\t\tattributes, query, set and remove groups, set quota and query total storage used in Nextcloud. Group admin users\n\t\tcan also query Nextcloud and perform the same functions as an admin for groups they manage. The API also enables\n\t\tan admin to query for active Nextcloud applications, application info, and to enable or disable an app remotely.\n\t\tOnce the app is enabled, HTTP requests can be used via a Basic Auth header to perform any of the functions\n\t\tlisted above. More information is available in the Provisioning API documentation, including example calls\n\t\tand server responses." : "This application enables a set of APIs that external systems can use to create, edit, delete and query user\n\t\tattributes, query, set and remove groups, set quota and query total storage used in Nextcloud. Group admin users\n\t\tcan also query Nextcloud and perform the same functions as an admin for groups they manage. The API also enables\n\t\tan admin to query for active Nextcloud applications, application info, and to enable or disable an app remotely.\n\t\tOnce the app is enabled, HTTP requests can be used via a Basic Auth header to perform any of the functions\n\t\tlisted above. More information is available in the Provisioning API documentation, including example calls\n\t\tand server responses."
-},"pluralForm" :"nplurals=2; plural=(n > 1);"
-} \ No newline at end of file
diff --git a/apps/provisioning_api/l10n/fr.js b/apps/provisioning_api/l10n/fr.js
index ce96559be3a..071d85c05dd 100644
--- a/apps/provisioning_api/l10n/fr.js
+++ b/apps/provisioning_api/l10n/fr.js
@@ -1,9 +1,34 @@
OC.L10N.register(
"provisioning_api",
{
- "Logged in user must be an administrator or have authorization to edit this setting." : "L'utilisateur connecté doit être un administrateur ou avoir l'autorisation de modifier ce paramètre.",
+ "Logged in account must be an administrator or have authorization to edit this setting." : "Le compte connecté doit être un administrateur ou avoir l'autorisation de modifier ce paramètre.",
+ "Could not create non-existing user ID" : "IImpossible de créer un ID d'utilisateur inexistant",
"User already exists" : "Cet utilisateur existe déjà",
- "Email confirmation" : "Confirmation de l'adresse e-mail",
+ "Group %1$s does not exist" : "Le groupe %1$s n’existe pas",
+ "Insufficient privileges for group %1$s" : "Privilèges insuffisants pour le groupe %1$s",
+ "No group specified (required for sub-admins)" : "Aucun groupe spécifié (requis pour les sous-administrateurs)",
+ "Sub-admin group does not exist" : "Le groupe des sous-administrateurs n'existe pas",
+ "Cannot create sub-admins for admin group" : "Impossible de créer des sous-administrateurs pour le groupe des administrateurs",
+ "No permissions to promote sub-admins" : "Aucune autorisation pour promouvoir des sous-administrateurs",
+ "Invalid password value" : "Valeur de mot de passe invalide",
+ "An email address is required, to send a password link to the user." : "Une adresse email est requise pour envoyer un lien de mot de passe à l'utilisateur.",
+ "Required email address was not provided" : "L'adresse e-mail exigée n'a pas été fournie",
+ "Invalid quota value: %1$s" : "Valeur de quota invalide : %1$s",
+ "Invalid quota value. %1$s is exceeding the maximum quota" : "Valeur de quota invalide : %1$s dépasse le quota maximum",
+ "Unlimited quota is forbidden on this instance" : "Un quota illimité est interdit sur cette instance",
+ "Setting the password is not supported by the users backend" : "La définition du mot de passe n'est pas prise en charge par le backend des utilisateurs",
+ "Invalid language" : "Langue invalide",
+ "Invalid locale" : "Paramètres régionaux invalides",
+ "Invalid first day of week" : "Premier jour de la semaine invalide",
+ "Cannot remove yourself from the admin group" : "Impossible de vous retirer vous-même du groupe des administrateurs",
+ "Cannot remove yourself from this group as you are a sub-admin" : "Impossible de vous retirer de ce groupe car vous êtes le sous-administrateur",
+ "Not viable to remove user from the last group you are sub-admin of" : "Il n'est pas possible de supprimer un utilisateur du dernier groupe dont vous êtes sous-administrateur",
+ "User does not exist" : "L'utilisateur n'existe pas",
+ "Group does not exist" : "Le groupe n'existe pas",
+ "User is not a sub-admin of this group" : "L'utilisateur n'est pas un sous-administrateur de ce groupe",
+ "Email address not available" : "Adresse e-mail indisponible ",
+ "Sending email failed" : "L'envoi de l'e-mail a échoué",
+ "Email confirmation" : "Confirmation par e-mail",
"To enable the email address %s please click the button below." : "Pour activer l'adresse e-mail %s, veuillez cliquer sur le bouton ci-dessous.",
"Confirm" : "Confirmer",
"Email was already removed from account and cannot be confirmed anymore." : "L'adresse e-mail a déjà été supprimée du compte et ne peut donc plus être confirmée.",
@@ -12,7 +37,7 @@ OC.L10N.register(
"An unexpected error occurred. Please contact your admin." : "Une erreur inattendue est survenue. Veuillez contacter votre administrateur.",
"Email confirmation successful" : "Adresse e-mail confirmée avec succès.",
"Provisioning API" : "API de provisionnement",
- "This application enables a set of APIs that external systems can use to manage users, groups and apps." : "Cette application active un ensemble d'API que les systèmes externes peuvent utiliser pour gérer les utilisateurs, les groupes et les applications.",
- "This application enables a set of APIs that external systems can use to create, edit, delete and query user\n\t\tattributes, query, set and remove groups, set quota and query total storage used in Nextcloud. Group admin users\n\t\tcan also query Nextcloud and perform the same functions as an admin for groups they manage. The API also enables\n\t\tan admin to query for active Nextcloud applications, application info, and to enable or disable an app remotely.\n\t\tOnce the app is enabled, HTTP requests can be used via a Basic Auth header to perform any of the functions\n\t\tlisted above. More information is available in the Provisioning API documentation, including example calls\n\t\tand server responses." : "Cette application active un ensemble d'API qui peuvent être utilisées par un système externe pour créer, modifier, supprimer et rechercher des attributs d'utilisateur, rechercher, ajouter et retirer des groupes, fixer des quotas et rechercher l'espace de stockage total utilisé sur Nextcloud. Les administrateurs de groupe peuvent aussi rechercher Nextcloud et accéder aux même fonctionnalités que les administrateurs pour les groupes dont ils ont la gestion. L'API permet aussi à un administrateur de rechercher les applications Nextcloud actives et les informations d'application ainsi que d'activer et désactiver les applications à distance. Une fois l'application activée, des requêtes HTTP peuvent être utilisées au moyen d'un entête Basic Auth pour exécuter chacune des fonctionnalités listées ci-dessus. Des informations supplémentaires sont accessibles dans la documentation sur l'API de provisionnement, avec des exemples de demandes et réponses serveur."
+ "This application enables a set of APIs that external systems can use to manage accounts, groups and apps." : "Cette application active un ensemble d'API que les systèmes externes peuvent utiliser pour gérer les comptes, les groupes et les applications.",
+ "This application enables a set of APIs that external systems can use to create, edit, delete and query account\n\t\tattributes, query, set and remove groups, set quota and query total storage used in Nextcloud. Group admin accounts\n\t\tcan also query Nextcloud and perform the same functions as an admin for groups they manage. The API also enables\n\t\tan admin to query for active Nextcloud applications, application info, and to enable or disable an app remotely.\n\t\tOnce the app is enabled, HTTP requests can be used via a Basic Auth header to perform any of the functions\n\t\tlisted above. More information is available in the Provisioning API documentation, including example calls\n\t\tand server responses." : "Cette application active un ensemble d'API qui peuvent être utilisées par un système externe pour créer, modifier, supprimer et rechercher des\n\t\tattributs de compte, rechercher, ajouter et retirer des groupes, fixer des quotas et rechercher l'espace de stockage total utilisé sur Nextcloud. Les administrateurs de groupe\n\t\tpeuvent aussi rechercher Nextcloud et accéder aux même fonctionnalités que les administrateurs pour les groupes dont ils ont la gestion. L'API permet aussi\n\t\tà un administrateur de rechercher les applications Nextcloud actives et les informations d'application ainsi que d'activer et désactiver les applications à distance.\n\t\tUne fois l'application activée, des requêtes HTTP peuvent être utilisées au moyen d'un entête Basic Auth pour exécuter chacune des fonctionnalités listées\n\t\tci-dessus. Des informations supplémentaires sont accessibles dans la documentation sur l'API de provisionnement, avec des exemples de demandes\n\t\tet réponses serveur."
},
"nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;");
diff --git a/apps/provisioning_api/l10n/fr.json b/apps/provisioning_api/l10n/fr.json
index 2fd1daa3d32..c25a0b91c91 100644
--- a/apps/provisioning_api/l10n/fr.json
+++ b/apps/provisioning_api/l10n/fr.json
@@ -1,7 +1,32 @@
{ "translations": {
- "Logged in user must be an administrator or have authorization to edit this setting." : "L'utilisateur connecté doit être un administrateur ou avoir l'autorisation de modifier ce paramètre.",
+ "Logged in account must be an administrator or have authorization to edit this setting." : "Le compte connecté doit être un administrateur ou avoir l'autorisation de modifier ce paramètre.",
+ "Could not create non-existing user ID" : "IImpossible de créer un ID d'utilisateur inexistant",
"User already exists" : "Cet utilisateur existe déjà",
- "Email confirmation" : "Confirmation de l'adresse e-mail",
+ "Group %1$s does not exist" : "Le groupe %1$s n’existe pas",
+ "Insufficient privileges for group %1$s" : "Privilèges insuffisants pour le groupe %1$s",
+ "No group specified (required for sub-admins)" : "Aucun groupe spécifié (requis pour les sous-administrateurs)",
+ "Sub-admin group does not exist" : "Le groupe des sous-administrateurs n'existe pas",
+ "Cannot create sub-admins for admin group" : "Impossible de créer des sous-administrateurs pour le groupe des administrateurs",
+ "No permissions to promote sub-admins" : "Aucune autorisation pour promouvoir des sous-administrateurs",
+ "Invalid password value" : "Valeur de mot de passe invalide",
+ "An email address is required, to send a password link to the user." : "Une adresse email est requise pour envoyer un lien de mot de passe à l'utilisateur.",
+ "Required email address was not provided" : "L'adresse e-mail exigée n'a pas été fournie",
+ "Invalid quota value: %1$s" : "Valeur de quota invalide : %1$s",
+ "Invalid quota value. %1$s is exceeding the maximum quota" : "Valeur de quota invalide : %1$s dépasse le quota maximum",
+ "Unlimited quota is forbidden on this instance" : "Un quota illimité est interdit sur cette instance",
+ "Setting the password is not supported by the users backend" : "La définition du mot de passe n'est pas prise en charge par le backend des utilisateurs",
+ "Invalid language" : "Langue invalide",
+ "Invalid locale" : "Paramètres régionaux invalides",
+ "Invalid first day of week" : "Premier jour de la semaine invalide",
+ "Cannot remove yourself from the admin group" : "Impossible de vous retirer vous-même du groupe des administrateurs",
+ "Cannot remove yourself from this group as you are a sub-admin" : "Impossible de vous retirer de ce groupe car vous êtes le sous-administrateur",
+ "Not viable to remove user from the last group you are sub-admin of" : "Il n'est pas possible de supprimer un utilisateur du dernier groupe dont vous êtes sous-administrateur",
+ "User does not exist" : "L'utilisateur n'existe pas",
+ "Group does not exist" : "Le groupe n'existe pas",
+ "User is not a sub-admin of this group" : "L'utilisateur n'est pas un sous-administrateur de ce groupe",
+ "Email address not available" : "Adresse e-mail indisponible ",
+ "Sending email failed" : "L'envoi de l'e-mail a échoué",
+ "Email confirmation" : "Confirmation par e-mail",
"To enable the email address %s please click the button below." : "Pour activer l'adresse e-mail %s, veuillez cliquer sur le bouton ci-dessous.",
"Confirm" : "Confirmer",
"Email was already removed from account and cannot be confirmed anymore." : "L'adresse e-mail a déjà été supprimée du compte et ne peut donc plus être confirmée.",
@@ -10,7 +35,7 @@
"An unexpected error occurred. Please contact your admin." : "Une erreur inattendue est survenue. Veuillez contacter votre administrateur.",
"Email confirmation successful" : "Adresse e-mail confirmée avec succès.",
"Provisioning API" : "API de provisionnement",
- "This application enables a set of APIs that external systems can use to manage users, groups and apps." : "Cette application active un ensemble d'API que les systèmes externes peuvent utiliser pour gérer les utilisateurs, les groupes et les applications.",
- "This application enables a set of APIs that external systems can use to create, edit, delete and query user\n\t\tattributes, query, set and remove groups, set quota and query total storage used in Nextcloud. Group admin users\n\t\tcan also query Nextcloud and perform the same functions as an admin for groups they manage. The API also enables\n\t\tan admin to query for active Nextcloud applications, application info, and to enable or disable an app remotely.\n\t\tOnce the app is enabled, HTTP requests can be used via a Basic Auth header to perform any of the functions\n\t\tlisted above. More information is available in the Provisioning API documentation, including example calls\n\t\tand server responses." : "Cette application active un ensemble d'API qui peuvent être utilisées par un système externe pour créer, modifier, supprimer et rechercher des attributs d'utilisateur, rechercher, ajouter et retirer des groupes, fixer des quotas et rechercher l'espace de stockage total utilisé sur Nextcloud. Les administrateurs de groupe peuvent aussi rechercher Nextcloud et accéder aux même fonctionnalités que les administrateurs pour les groupes dont ils ont la gestion. L'API permet aussi à un administrateur de rechercher les applications Nextcloud actives et les informations d'application ainsi que d'activer et désactiver les applications à distance. Une fois l'application activée, des requêtes HTTP peuvent être utilisées au moyen d'un entête Basic Auth pour exécuter chacune des fonctionnalités listées ci-dessus. Des informations supplémentaires sont accessibles dans la documentation sur l'API de provisionnement, avec des exemples de demandes et réponses serveur."
+ "This application enables a set of APIs that external systems can use to manage accounts, groups and apps." : "Cette application active un ensemble d'API que les systèmes externes peuvent utiliser pour gérer les comptes, les groupes et les applications.",
+ "This application enables a set of APIs that external systems can use to create, edit, delete and query account\n\t\tattributes, query, set and remove groups, set quota and query total storage used in Nextcloud. Group admin accounts\n\t\tcan also query Nextcloud and perform the same functions as an admin for groups they manage. The API also enables\n\t\tan admin to query for active Nextcloud applications, application info, and to enable or disable an app remotely.\n\t\tOnce the app is enabled, HTTP requests can be used via a Basic Auth header to perform any of the functions\n\t\tlisted above. More information is available in the Provisioning API documentation, including example calls\n\t\tand server responses." : "Cette application active un ensemble d'API qui peuvent être utilisées par un système externe pour créer, modifier, supprimer et rechercher des\n\t\tattributs de compte, rechercher, ajouter et retirer des groupes, fixer des quotas et rechercher l'espace de stockage total utilisé sur Nextcloud. Les administrateurs de groupe\n\t\tpeuvent aussi rechercher Nextcloud et accéder aux même fonctionnalités que les administrateurs pour les groupes dont ils ont la gestion. L'API permet aussi\n\t\tà un administrateur de rechercher les applications Nextcloud actives et les informations d'application ainsi que d'activer et désactiver les applications à distance.\n\t\tUne fois l'application activée, des requêtes HTTP peuvent être utilisées au moyen d'un entête Basic Auth pour exécuter chacune des fonctionnalités listées\n\t\tci-dessus. Des informations supplémentaires sont accessibles dans la documentation sur l'API de provisionnement, avec des exemples de demandes\n\t\tet réponses serveur."
},"pluralForm" :"nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"
} \ No newline at end of file
diff --git a/apps/provisioning_api/l10n/ga.js b/apps/provisioning_api/l10n/ga.js
new file mode 100644
index 00000000000..6d6b3944c48
--- /dev/null
+++ b/apps/provisioning_api/l10n/ga.js
@@ -0,0 +1,44 @@
+OC.L10N.register(
+ "provisioning_api",
+ {
+ "Logged in account must be an administrator or have authorization to edit this setting." : "Ní mór gur riarthóir é cuntas logáilte isteach nó údarú a bheith agat an socrú seo a chur in eagar.",
+ "Could not create non-existing user ID" : "Níorbh fhéidir aitheantas úsáideora nach bhfuil ann cheana a chruthú",
+ "User already exists" : "Úsáideoir ann cheana féin",
+ "Group %1$s does not exist" : "Níl grúpa %1$s ann",
+ "Insufficient privileges for group %1$s" : "Pribhléidí neamhleor don ghrúpa %1$s",
+ "No group specified (required for sub-admins)" : "Níor sonraíodh grúpa ar bith (riachtanach le haghaidh fo-riaracháin)",
+ "Sub-admin group does not exist" : "Níl foghrúpa riaracháin ann",
+ "Cannot create sub-admins for admin group" : "Ní féidir fo-riaracháin a chruthú don ghrúpa riaracháin",
+ "No permissions to promote sub-admins" : "Níl aon chead chun fo-riaracháin a chur chun cinn",
+ "Invalid password value" : "Luach pasfhocail neamhbhailí",
+ "An email address is required, to send a password link to the user." : "Tá seoladh ríomhphoist ag teastáil, chun nasc pasfhocal a sheoladh chuig an úsáideoir.",
+ "Required email address was not provided" : "Níor cuireadh an seoladh ríomhphoist riachtanach ar fáil",
+ "User creation failed" : "Theip ar chruthú úsáideora",
+ "Invalid quota value: %1$s" : "Luach cuóta neamhbhailí: %1$s",
+ "Invalid quota value. %1$s is exceeding the maximum quota" : "Luach cuóta neamhbhailí. Tá %1$s níos mó ná an t-uaschuóta",
+ "Unlimited quota is forbidden on this instance" : "Tá cosc ​​ar chuóta neamhtheoranta sa chás seo",
+ "Setting the password is not supported by the users backend" : "Ní thacaíonn inneall na n-úsáideoirí leis an bhfocal faire a shocrú",
+ "Invalid language" : "Teanga neamhbhailí",
+ "Invalid locale" : "Logán neamhbhailí",
+ "Invalid first day of week" : "An chéad lá den tseachtain neamhbhailí",
+ "Cannot remove yourself from the admin group" : "Ní féidir tú féin a bhaint den ghrúpa riaracháin",
+ "Cannot remove yourself from this group as you are a sub-admin" : "Ní féidir tú féin a bhaint den ghrúpa seo toisc gur fo-riarthóir tú",
+ "Not viable to remove user from the last group you are sub-admin of" : "Níl sé inmharthana an t-úsáideoir a bhaint den ghrúpa deiridh a bhfuil tú ina fho-riarachán de",
+ "User does not exist" : "Níl an t-úsáideoir ann",
+ "Group does not exist" : "Níl an grúpa ann",
+ "User is not a sub-admin of this group" : "Ní fo-riarthóir den ghrúpa seo é an t-úsáideoir",
+ "Email address not available" : "Níl an seoladh ríomhphoist ar fáil",
+ "Sending email failed" : "Theip ar sheoladh ríomhphoist",
+ "Email confirmation" : "Deimhniú ríomhphoist",
+ "To enable the email address %s please click the button below." : "Chun an seoladh ríomhphoist %s a chumasú cliceáil ar an gcnaipe thíos le do thoil.",
+ "Confirm" : "Deimhnigh",
+ "Email was already removed from account and cannot be confirmed anymore." : "Baineadh an ríomhphost den chuntas cheana agus ní féidir é a dheimhniú a thuilleadh.",
+ "Could not verify mail because the token is expired." : "Níorbh fhéidir ríomhphost a fhíorú toisc go bhfuil an comhartha imithe in éag.",
+ "Could not verify mail because the token is invalid." : "Níorbh fhéidir ríomhphost a fhíorú toisc go bhfuil an comhartha neamhbhailí.",
+ "An unexpected error occurred. Please contact your admin." : "Tharla earráid gan choinne. Déan teagmháil le do riarthóir le do thoil.",
+ "Email confirmation successful" : "D'éirigh le dearbhú ríomhphoist",
+ "Provisioning API" : "Soláthar API",
+ "This application enables a set of APIs that external systems can use to manage accounts, groups and apps." : "Cumasaíonn an feidhmchlár seo sraith APIanna is féidir le córais sheachtracha a úsáid chun cuntais, grúpaí agus aipeanna a bhainistiú.",
+ "This application enables a set of APIs that external systems can use to create, edit, delete and query account\n\t\tattributes, query, set and remove groups, set quota and query total storage used in Nextcloud. Group admin accounts\n\t\tcan also query Nextcloud and perform the same functions as an admin for groups they manage. The API also enables\n\t\tan admin to query for active Nextcloud applications, application info, and to enable or disable an app remotely.\n\t\tOnce the app is enabled, HTTP requests can be used via a Basic Auth header to perform any of the functions\n\t\tlisted above. More information is available in the Provisioning API documentation, including example calls\n\t\tand server responses." : "Cumasaíonn an feidhmchlár seo sraith APIanna is féidir le córais sheachtracha a úsáid chun cuntas a chruthú, a chur in eagar, a scriosadh agus a cheistiú\n\t\t tréithe, ceistigh, socraigh agus bain grúpaí, socraigh cuóta agus ceistigh an stór iomlán a úsáidtear in Nextcloud. Cuntais riaracháin ghrúpa\n\t\t is féidir Nextcloud a cheistiú freisin agus na feidhmeanna céanna a chomhlíonadh agus a fheidhmíonn riarthóir do ghrúpaí a bhainistíonn siad. Cuireann an API ar chumas freisin\n\t\t admin chun iarratas a dhéanamh maidir le feidhmchláir ghníomhacha Nextcloud, faisnéis feidhmchláir, agus chun aip a chumasú nó a dhíchumasú go cianda.\n\t\t Nuair atá an aip cumasaithe, is féidir iarratais HTTP a úsáid trí cheanntásc Basic Auth chun aon cheann de na feidhmeanna a dhéanamh\n\t\t liostaithe thuas. Tá tuilleadh faisnéise ar fáil i gcáipéisíocht an API Soláthar, lena n-áirítear glaonna mar shampla\n\t\t agus freagraí freastalaí."
+},
+"nplurals=5; plural=(n==1 ? 0 : n==2 ? 1 : n<7 ? 2 : n<11 ? 3 : 4);");
diff --git a/apps/provisioning_api/l10n/ga.json b/apps/provisioning_api/l10n/ga.json
new file mode 100644
index 00000000000..691a2dc7af6
--- /dev/null
+++ b/apps/provisioning_api/l10n/ga.json
@@ -0,0 +1,42 @@
+{ "translations": {
+ "Logged in account must be an administrator or have authorization to edit this setting." : "Ní mór gur riarthóir é cuntas logáilte isteach nó údarú a bheith agat an socrú seo a chur in eagar.",
+ "Could not create non-existing user ID" : "Níorbh fhéidir aitheantas úsáideora nach bhfuil ann cheana a chruthú",
+ "User already exists" : "Úsáideoir ann cheana féin",
+ "Group %1$s does not exist" : "Níl grúpa %1$s ann",
+ "Insufficient privileges for group %1$s" : "Pribhléidí neamhleor don ghrúpa %1$s",
+ "No group specified (required for sub-admins)" : "Níor sonraíodh grúpa ar bith (riachtanach le haghaidh fo-riaracháin)",
+ "Sub-admin group does not exist" : "Níl foghrúpa riaracháin ann",
+ "Cannot create sub-admins for admin group" : "Ní féidir fo-riaracháin a chruthú don ghrúpa riaracháin",
+ "No permissions to promote sub-admins" : "Níl aon chead chun fo-riaracháin a chur chun cinn",
+ "Invalid password value" : "Luach pasfhocail neamhbhailí",
+ "An email address is required, to send a password link to the user." : "Tá seoladh ríomhphoist ag teastáil, chun nasc pasfhocal a sheoladh chuig an úsáideoir.",
+ "Required email address was not provided" : "Níor cuireadh an seoladh ríomhphoist riachtanach ar fáil",
+ "User creation failed" : "Theip ar chruthú úsáideora",
+ "Invalid quota value: %1$s" : "Luach cuóta neamhbhailí: %1$s",
+ "Invalid quota value. %1$s is exceeding the maximum quota" : "Luach cuóta neamhbhailí. Tá %1$s níos mó ná an t-uaschuóta",
+ "Unlimited quota is forbidden on this instance" : "Tá cosc ​​ar chuóta neamhtheoranta sa chás seo",
+ "Setting the password is not supported by the users backend" : "Ní thacaíonn inneall na n-úsáideoirí leis an bhfocal faire a shocrú",
+ "Invalid language" : "Teanga neamhbhailí",
+ "Invalid locale" : "Logán neamhbhailí",
+ "Invalid first day of week" : "An chéad lá den tseachtain neamhbhailí",
+ "Cannot remove yourself from the admin group" : "Ní féidir tú féin a bhaint den ghrúpa riaracháin",
+ "Cannot remove yourself from this group as you are a sub-admin" : "Ní féidir tú féin a bhaint den ghrúpa seo toisc gur fo-riarthóir tú",
+ "Not viable to remove user from the last group you are sub-admin of" : "Níl sé inmharthana an t-úsáideoir a bhaint den ghrúpa deiridh a bhfuil tú ina fho-riarachán de",
+ "User does not exist" : "Níl an t-úsáideoir ann",
+ "Group does not exist" : "Níl an grúpa ann",
+ "User is not a sub-admin of this group" : "Ní fo-riarthóir den ghrúpa seo é an t-úsáideoir",
+ "Email address not available" : "Níl an seoladh ríomhphoist ar fáil",
+ "Sending email failed" : "Theip ar sheoladh ríomhphoist",
+ "Email confirmation" : "Deimhniú ríomhphoist",
+ "To enable the email address %s please click the button below." : "Chun an seoladh ríomhphoist %s a chumasú cliceáil ar an gcnaipe thíos le do thoil.",
+ "Confirm" : "Deimhnigh",
+ "Email was already removed from account and cannot be confirmed anymore." : "Baineadh an ríomhphost den chuntas cheana agus ní féidir é a dheimhniú a thuilleadh.",
+ "Could not verify mail because the token is expired." : "Níorbh fhéidir ríomhphost a fhíorú toisc go bhfuil an comhartha imithe in éag.",
+ "Could not verify mail because the token is invalid." : "Níorbh fhéidir ríomhphost a fhíorú toisc go bhfuil an comhartha neamhbhailí.",
+ "An unexpected error occurred. Please contact your admin." : "Tharla earráid gan choinne. Déan teagmháil le do riarthóir le do thoil.",
+ "Email confirmation successful" : "D'éirigh le dearbhú ríomhphoist",
+ "Provisioning API" : "Soláthar API",
+ "This application enables a set of APIs that external systems can use to manage accounts, groups and apps." : "Cumasaíonn an feidhmchlár seo sraith APIanna is féidir le córais sheachtracha a úsáid chun cuntais, grúpaí agus aipeanna a bhainistiú.",
+ "This application enables a set of APIs that external systems can use to create, edit, delete and query account\n\t\tattributes, query, set and remove groups, set quota and query total storage used in Nextcloud. Group admin accounts\n\t\tcan also query Nextcloud and perform the same functions as an admin for groups they manage. The API also enables\n\t\tan admin to query for active Nextcloud applications, application info, and to enable or disable an app remotely.\n\t\tOnce the app is enabled, HTTP requests can be used via a Basic Auth header to perform any of the functions\n\t\tlisted above. More information is available in the Provisioning API documentation, including example calls\n\t\tand server responses." : "Cumasaíonn an feidhmchlár seo sraith APIanna is féidir le córais sheachtracha a úsáid chun cuntas a chruthú, a chur in eagar, a scriosadh agus a cheistiú\n\t\t tréithe, ceistigh, socraigh agus bain grúpaí, socraigh cuóta agus ceistigh an stór iomlán a úsáidtear in Nextcloud. Cuntais riaracháin ghrúpa\n\t\t is féidir Nextcloud a cheistiú freisin agus na feidhmeanna céanna a chomhlíonadh agus a fheidhmíonn riarthóir do ghrúpaí a bhainistíonn siad. Cuireann an API ar chumas freisin\n\t\t admin chun iarratas a dhéanamh maidir le feidhmchláir ghníomhacha Nextcloud, faisnéis feidhmchláir, agus chun aip a chumasú nó a dhíchumasú go cianda.\n\t\t Nuair atá an aip cumasaithe, is féidir iarratais HTTP a úsáid trí cheanntásc Basic Auth chun aon cheann de na feidhmeanna a dhéanamh\n\t\t liostaithe thuas. Tá tuilleadh faisnéise ar fáil i gcáipéisíocht an API Soláthar, lena n-áirítear glaonna mar shampla\n\t\t agus freagraí freastalaí."
+},"pluralForm" :"nplurals=5; plural=(n==1 ? 0 : n==2 ? 1 : n<7 ? 2 : n<11 ? 3 : 4);"
+} \ No newline at end of file
diff --git a/apps/provisioning_api/l10n/gl.js b/apps/provisioning_api/l10n/gl.js
index 93b11fd3157..20d47f8b28e 100644
--- a/apps/provisioning_api/l10n/gl.js
+++ b/apps/provisioning_api/l10n/gl.js
@@ -1,18 +1,43 @@
OC.L10N.register(
"provisioning_api",
{
- "Logged in user must be an administrator or have authorization to edit this setting." : "O usuario que accede debe ser un administrador ou ter autorización para editar esta configuración.",
+ "Logged in account must be an administrator or have authorization to edit this setting." : "A conta que accede debe ser de administración, de subadministración ou ter dereitos especiais para acceder a este axuste",
+ "Could not create non-existing user ID" : "Non foi posíbel crear un ID de usuario inexistente",
"User already exists" : "O usuario xa existe",
+ "Group %1$s does not exist" : "O grupo %1$s non existe",
+ "Insufficient privileges for group %1$s" : "O grupo %1$s non ten privilexios abondo",
+ "No group specified (required for sub-admins)" : "Non se especifica ningún grupo (obrigatorio para subadministración)",
+ "Sub-admin group does not exist" : "Non existe o grupo de subadministración",
+ "Cannot create sub-admins for admin group" : "Non é posibel crear postos de subadministración para o grupo de administración",
+ "No permissions to promote sub-admins" : "Non ten permisos para promover a subadministración",
+ "Invalid password value" : "O valor do contrasinal non é correcto",
+ "An email address is required, to send a password link to the user." : "Precisase dun enderezo de correo-e para enviar unha ligazón de contrasinal ao usuario.",
+ "Required email address was not provided" : "Precisase dun enderezo de correo-e mais non foi fornecido",
+ "Invalid quota value: %1$s" : "Valor de cota incorrecto: %1$s",
+ "Invalid quota value. %1$s is exceeding the maximum quota" : "O valor da cota é incorrecto. %1$s excede a cota máxima",
+ "Unlimited quota is forbidden on this instance" : "A cota ilimitada está prohibida nesta instancia",
+ "Setting the password is not supported by the users backend" : "O axuste do contrasinal non está admitido na infraestrutura de usuarios",
+ "Invalid language" : "Idioma non válido",
+ "Invalid locale" : "Configuración rexional incorrecta",
+ "Invalid first day of week" : "O primeiro día da semana non é válido",
+ "Cannot remove yourself from the admin group" : "Non pode retirarse do grupo de administración",
+ "Cannot remove yourself from this group as you are a sub-admin" : "Non pode retirarse deste grupo xa que Vde. é persoal de subadministración",
+ "Not viable to remove user from the last group you are sub-admin of" : "Non é viábel retirar o usuario do último grupo do que é persoal de subadministración",
+ "User does not exist" : "O usuario non existe",
+ "Group does not exist" : "O grupo non existe",
+ "User is not a sub-admin of this group" : "O usuario non pertence á subadministración deste grupo",
+ "Email address not available" : "O enderezo de correo-e non está dispoñíbel",
+ "Sending email failed" : "Produciuse un fallo ao enviar o correo-e",
"Email confirmation" : "Confirmación do correo",
"To enable the email address %s please click the button below." : "Para activar o enderezo de correo %s, prema no botón de embaixo.",
"Confirm" : "Confirmar",
- "Email was already removed from account and cannot be confirmed anymore." : "O correo foi eliminado da conta e xa non se pode confirmar.",
+ "Email was already removed from account and cannot be confirmed anymore." : "O correo foi retirado da conta e xa non é posíbel confirmalo.",
"Could not verify mail because the token is expired." : "Non foi posíbel verificar o correo porque o testemuño caducou.",
"Could not verify mail because the token is invalid." : "Non foi posíbel verificar o correo porque o testemuño non é válido.",
"An unexpected error occurred. Please contact your admin." : "Produciuse un erro non agardado. Póñase en contacto cun administrador.",
"Email confirmation successful" : "Confirmación de correo satisfactoria",
"Provisioning API" : "API de aprovisionamento",
- "This application enables a set of APIs that external systems can use to manage users, groups and apps." : "Esta aplicación activa un conxunto de API que os sistemas externos poden usar para xestionar usuarios, grupos e aplicacións.",
- "This application enables a set of APIs that external systems can use to create, edit, delete and query user\n\t\tattributes, query, set and remove groups, set quota and query total storage used in Nextcloud. Group admin users\n\t\tcan also query Nextcloud and perform the same functions as an admin for groups they manage. The API also enables\n\t\tan admin to query for active Nextcloud applications, application info, and to enable or disable an app remotely.\n\t\tOnce the app is enabled, HTTP requests can be used via a Basic Auth header to perform any of the functions\n\t\tlisted above. More information is available in the Provisioning API documentation, including example calls\n\t\tand server responses." : "Esta aplicación activa un conxunto de API que os sistemas externos poden usar para crear, editar, eliminar e consultar os\n\t\tatributos do usuario, consultar, estabelecer e retirar grupos, estabelecer cota e consultar o almacenamento total\n\t\tutilizado en Nextcloud. Os usuarios administradores de grupos tamén poden consultar Nextcloud e realizar as\n\t\tmesmas funcións que a administración da instancia para os grupos que xestionan. A API tamén permite á administración\n\t\tconsultar aplicacións activas de Nextcloud, información da aplicación e activar ou desactivar unha aplicación remotamente.\n\t\tUnha vez que a aplicación estea activada, as solicitudes HTTP pódense usar a través dunha cabeceira Basic Auth para\n\t\trealizar calquera das funcións listadas anteriormente. Hai dispoñíbel máis información na documentación da API \n\t\tde aprovisionamento, incluíndo exemplos de chamadas e respostas do servidor."
+ "This application enables a set of APIs that external systems can use to manage accounts, groups and apps." : "Esta aplicación activa un conxunto de API que os sistemas externos poden usar para xestionar contas, grupos e aplicacións.",
+ "This application enables a set of APIs that external systems can use to create, edit, delete and query account\n\t\tattributes, query, set and remove groups, set quota and query total storage used in Nextcloud. Group admin accounts\n\t\tcan also query Nextcloud and perform the same functions as an admin for groups they manage. The API also enables\n\t\tan admin to query for active Nextcloud applications, application info, and to enable or disable an app remotely.\n\t\tOnce the app is enabled, HTTP requests can be used via a Basic Auth header to perform any of the functions\n\t\tlisted above. More information is available in the Provisioning API documentation, including example calls\n\t\tand server responses." : "Esta aplicación activa un conxunto de API que os sistemas externos poden usar para crear, editar, eliminar e consultar\n\t\tos atributos da conta, consultar, definir e retirar grupos, definir a cota e consultar o almacenamento total\n\t\tutilizado en Nextcloud. . As contas de administración de grupos tamén poden consultar Nextcloud e realizar as\n\t\tmesmas funcións que a administración da instancia para os grupos que xestionan. A API tamén permite á administración\n\t\tconsultar aplicacións activas de Nextcloud, información da aplicación e activar ou desactivar unha aplicación remotamente.\n\t\tUnha vez que a aplicación estea activada, as solicitudes HTTP pódense usar a través dunha cabeceira de autenticación básica (Basic Auth) para\n\t\trealizar calquera das funcións listadas anteriormente. Hai dispoñíbel máis información na documentación da API \n\t\tde aprovisionamento, incluíndo exemplos de chamadas e respostas do servidor."
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/provisioning_api/l10n/gl.json b/apps/provisioning_api/l10n/gl.json
index 467c668773f..59dbb4af966 100644
--- a/apps/provisioning_api/l10n/gl.json
+++ b/apps/provisioning_api/l10n/gl.json
@@ -1,16 +1,41 @@
{ "translations": {
- "Logged in user must be an administrator or have authorization to edit this setting." : "O usuario que accede debe ser un administrador ou ter autorización para editar esta configuración.",
+ "Logged in account must be an administrator or have authorization to edit this setting." : "A conta que accede debe ser de administración, de subadministración ou ter dereitos especiais para acceder a este axuste",
+ "Could not create non-existing user ID" : "Non foi posíbel crear un ID de usuario inexistente",
"User already exists" : "O usuario xa existe",
+ "Group %1$s does not exist" : "O grupo %1$s non existe",
+ "Insufficient privileges for group %1$s" : "O grupo %1$s non ten privilexios abondo",
+ "No group specified (required for sub-admins)" : "Non se especifica ningún grupo (obrigatorio para subadministración)",
+ "Sub-admin group does not exist" : "Non existe o grupo de subadministración",
+ "Cannot create sub-admins for admin group" : "Non é posibel crear postos de subadministración para o grupo de administración",
+ "No permissions to promote sub-admins" : "Non ten permisos para promover a subadministración",
+ "Invalid password value" : "O valor do contrasinal non é correcto",
+ "An email address is required, to send a password link to the user." : "Precisase dun enderezo de correo-e para enviar unha ligazón de contrasinal ao usuario.",
+ "Required email address was not provided" : "Precisase dun enderezo de correo-e mais non foi fornecido",
+ "Invalid quota value: %1$s" : "Valor de cota incorrecto: %1$s",
+ "Invalid quota value. %1$s is exceeding the maximum quota" : "O valor da cota é incorrecto. %1$s excede a cota máxima",
+ "Unlimited quota is forbidden on this instance" : "A cota ilimitada está prohibida nesta instancia",
+ "Setting the password is not supported by the users backend" : "O axuste do contrasinal non está admitido na infraestrutura de usuarios",
+ "Invalid language" : "Idioma non válido",
+ "Invalid locale" : "Configuración rexional incorrecta",
+ "Invalid first day of week" : "O primeiro día da semana non é válido",
+ "Cannot remove yourself from the admin group" : "Non pode retirarse do grupo de administración",
+ "Cannot remove yourself from this group as you are a sub-admin" : "Non pode retirarse deste grupo xa que Vde. é persoal de subadministración",
+ "Not viable to remove user from the last group you are sub-admin of" : "Non é viábel retirar o usuario do último grupo do que é persoal de subadministración",
+ "User does not exist" : "O usuario non existe",
+ "Group does not exist" : "O grupo non existe",
+ "User is not a sub-admin of this group" : "O usuario non pertence á subadministración deste grupo",
+ "Email address not available" : "O enderezo de correo-e non está dispoñíbel",
+ "Sending email failed" : "Produciuse un fallo ao enviar o correo-e",
"Email confirmation" : "Confirmación do correo",
"To enable the email address %s please click the button below." : "Para activar o enderezo de correo %s, prema no botón de embaixo.",
"Confirm" : "Confirmar",
- "Email was already removed from account and cannot be confirmed anymore." : "O correo foi eliminado da conta e xa non se pode confirmar.",
+ "Email was already removed from account and cannot be confirmed anymore." : "O correo foi retirado da conta e xa non é posíbel confirmalo.",
"Could not verify mail because the token is expired." : "Non foi posíbel verificar o correo porque o testemuño caducou.",
"Could not verify mail because the token is invalid." : "Non foi posíbel verificar o correo porque o testemuño non é válido.",
"An unexpected error occurred. Please contact your admin." : "Produciuse un erro non agardado. Póñase en contacto cun administrador.",
"Email confirmation successful" : "Confirmación de correo satisfactoria",
"Provisioning API" : "API de aprovisionamento",
- "This application enables a set of APIs that external systems can use to manage users, groups and apps." : "Esta aplicación activa un conxunto de API que os sistemas externos poden usar para xestionar usuarios, grupos e aplicacións.",
- "This application enables a set of APIs that external systems can use to create, edit, delete and query user\n\t\tattributes, query, set and remove groups, set quota and query total storage used in Nextcloud. Group admin users\n\t\tcan also query Nextcloud and perform the same functions as an admin for groups they manage. The API also enables\n\t\tan admin to query for active Nextcloud applications, application info, and to enable or disable an app remotely.\n\t\tOnce the app is enabled, HTTP requests can be used via a Basic Auth header to perform any of the functions\n\t\tlisted above. More information is available in the Provisioning API documentation, including example calls\n\t\tand server responses." : "Esta aplicación activa un conxunto de API que os sistemas externos poden usar para crear, editar, eliminar e consultar os\n\t\tatributos do usuario, consultar, estabelecer e retirar grupos, estabelecer cota e consultar o almacenamento total\n\t\tutilizado en Nextcloud. Os usuarios administradores de grupos tamén poden consultar Nextcloud e realizar as\n\t\tmesmas funcións que a administración da instancia para os grupos que xestionan. A API tamén permite á administración\n\t\tconsultar aplicacións activas de Nextcloud, información da aplicación e activar ou desactivar unha aplicación remotamente.\n\t\tUnha vez que a aplicación estea activada, as solicitudes HTTP pódense usar a través dunha cabeceira Basic Auth para\n\t\trealizar calquera das funcións listadas anteriormente. Hai dispoñíbel máis información na documentación da API \n\t\tde aprovisionamento, incluíndo exemplos de chamadas e respostas do servidor."
+ "This application enables a set of APIs that external systems can use to manage accounts, groups and apps." : "Esta aplicación activa un conxunto de API que os sistemas externos poden usar para xestionar contas, grupos e aplicacións.",
+ "This application enables a set of APIs that external systems can use to create, edit, delete and query account\n\t\tattributes, query, set and remove groups, set quota and query total storage used in Nextcloud. Group admin accounts\n\t\tcan also query Nextcloud and perform the same functions as an admin for groups they manage. The API also enables\n\t\tan admin to query for active Nextcloud applications, application info, and to enable or disable an app remotely.\n\t\tOnce the app is enabled, HTTP requests can be used via a Basic Auth header to perform any of the functions\n\t\tlisted above. More information is available in the Provisioning API documentation, including example calls\n\t\tand server responses." : "Esta aplicación activa un conxunto de API que os sistemas externos poden usar para crear, editar, eliminar e consultar\n\t\tos atributos da conta, consultar, definir e retirar grupos, definir a cota e consultar o almacenamento total\n\t\tutilizado en Nextcloud. . As contas de administración de grupos tamén poden consultar Nextcloud e realizar as\n\t\tmesmas funcións que a administración da instancia para os grupos que xestionan. A API tamén permite á administración\n\t\tconsultar aplicacións activas de Nextcloud, información da aplicación e activar ou desactivar unha aplicación remotamente.\n\t\tUnha vez que a aplicación estea activada, as solicitudes HTTP pódense usar a través dunha cabeceira de autenticación básica (Basic Auth) para\n\t\trealizar calquera das funcións listadas anteriormente. Hai dispoñíbel máis información na documentación da API \n\t\tde aprovisionamento, incluíndo exemplos de chamadas e respostas do servidor."
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/provisioning_api/l10n/hr.js b/apps/provisioning_api/l10n/hr.js
deleted file mode 100644
index 5c94beac555..00000000000
--- a/apps/provisioning_api/l10n/hr.js
+++ /dev/null
@@ -1,18 +0,0 @@
-OC.L10N.register(
- "provisioning_api",
- {
- "Logged in user must be an administrator or have authorization to edit this setting." : "Korisnik koji je prijavljen mora biti administrator ili imati ovlaštenje za uređivanje ove postavke.",
- "User already exists" : "Korisnik već postoji",
- "Email confirmation" : "Potvrda e-poštom",
- "To enable the email address %s please click the button below." : "Kliknite na gumb u nastavku kako biste omogućili adresu e-pošte %s.",
- "Confirm" : "Potvrdi",
- "Email was already removed from account and cannot be confirmed anymore." : "Adresa e-pošte uklonjena je iz računa i nije je moguće potvrditi.",
- "Could not verify mail because the token is expired." : "Potvrđivanje adrese e-pošte nije moguće jer je token istekao.",
- "Could not verify mail because the token is invalid." : "Potvrđivanje adrese e-pošte nije moguće jer je token nevažeći.",
- "An unexpected error occurred. Please contact your admin." : "Došlo je do neočekivane pogreške. Obratite se svom administratoru.",
- "Email confirmation successful" : "Adresa e-pošte uspješno je potvrđena",
- "Provisioning API" : "API za uvođenje u rad",
- "This application enables a set of APIs that external systems can use to manage users, groups and apps." : "Ova aplikacija omogućuje uporabu skupa API-ja koje vanjski sustavi mogu iskoristiti za upravljanje korisnicima, grupama i aplikacijama.",
- "This application enables a set of APIs that external systems can use to create, edit, delete and query user\n\t\tattributes, query, set and remove groups, set quota and query total storage used in Nextcloud. Group admin users\n\t\tcan also query Nextcloud and perform the same functions as an admin for groups they manage. The API also enables\n\t\tan admin to query for active Nextcloud applications, application info, and to enable or disable an app remotely.\n\t\tOnce the app is enabled, HTTP requests can be used via a Basic Auth header to perform any of the functions\n\t\tlisted above. More information is available in the Provisioning API documentation, including example calls\n\t\tand server responses." : "Ova aplikacija omogućuje skup API-ja koje vanjski sustavi mogu iskoristiti za stvaranje, uređivanje, brisanje i upućivanje upita o korisničkim\n\t\tatributima, postavljanje i uklanjanje grupa, postavljanje kvota i provjeravanje ukupne količine pohrane koju upotrebljava Nextcloud. Korisnici administratori grupe\n\t\ttakođer mogu upućivati upite Nextcloudu i izvršavati iste funkcije kao i administrator grupe kojima upravljaju. API također omogućuje\n\t\tadministratoru upućivanje upita o aktivnim aplikacijama u Nextcloudu, traženje informacija o aplikacijama i daljinsko omogućavanje ili onemogućavanje aplikacije.\n\t\tKad je aplikacija omogućena, HTTP zahtjevi mogu se slati putem Basic Auth zaglavlja za izvršavanje bilo koje od\n\t\tnavedenih funkcija. Više informacija možete pronaći u dokumentaciji API-ja, uključujući primjere poziva\n\t\ti odgovora poslužitelja."
-},
-"nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;");
diff --git a/apps/provisioning_api/l10n/hr.json b/apps/provisioning_api/l10n/hr.json
deleted file mode 100644
index f2270c9f90d..00000000000
--- a/apps/provisioning_api/l10n/hr.json
+++ /dev/null
@@ -1,16 +0,0 @@
-{ "translations": {
- "Logged in user must be an administrator or have authorization to edit this setting." : "Korisnik koji je prijavljen mora biti administrator ili imati ovlaštenje za uređivanje ove postavke.",
- "User already exists" : "Korisnik već postoji",
- "Email confirmation" : "Potvrda e-poštom",
- "To enable the email address %s please click the button below." : "Kliknite na gumb u nastavku kako biste omogućili adresu e-pošte %s.",
- "Confirm" : "Potvrdi",
- "Email was already removed from account and cannot be confirmed anymore." : "Adresa e-pošte uklonjena je iz računa i nije je moguće potvrditi.",
- "Could not verify mail because the token is expired." : "Potvrđivanje adrese e-pošte nije moguće jer je token istekao.",
- "Could not verify mail because the token is invalid." : "Potvrđivanje adrese e-pošte nije moguće jer je token nevažeći.",
- "An unexpected error occurred. Please contact your admin." : "Došlo je do neočekivane pogreške. Obratite se svom administratoru.",
- "Email confirmation successful" : "Adresa e-pošte uspješno je potvrđena",
- "Provisioning API" : "API za uvođenje u rad",
- "This application enables a set of APIs that external systems can use to manage users, groups and apps." : "Ova aplikacija omogućuje uporabu skupa API-ja koje vanjski sustavi mogu iskoristiti za upravljanje korisnicima, grupama i aplikacijama.",
- "This application enables a set of APIs that external systems can use to create, edit, delete and query user\n\t\tattributes, query, set and remove groups, set quota and query total storage used in Nextcloud. Group admin users\n\t\tcan also query Nextcloud and perform the same functions as an admin for groups they manage. The API also enables\n\t\tan admin to query for active Nextcloud applications, application info, and to enable or disable an app remotely.\n\t\tOnce the app is enabled, HTTP requests can be used via a Basic Auth header to perform any of the functions\n\t\tlisted above. More information is available in the Provisioning API documentation, including example calls\n\t\tand server responses." : "Ova aplikacija omogućuje skup API-ja koje vanjski sustavi mogu iskoristiti za stvaranje, uređivanje, brisanje i upućivanje upita o korisničkim\n\t\tatributima, postavljanje i uklanjanje grupa, postavljanje kvota i provjeravanje ukupne količine pohrane koju upotrebljava Nextcloud. Korisnici administratori grupe\n\t\ttakođer mogu upućivati upite Nextcloudu i izvršavati iste funkcije kao i administrator grupe kojima upravljaju. API također omogućuje\n\t\tadministratoru upućivanje upita o aktivnim aplikacijama u Nextcloudu, traženje informacija o aplikacijama i daljinsko omogućavanje ili onemogućavanje aplikacije.\n\t\tKad je aplikacija omogućena, HTTP zahtjevi mogu se slati putem Basic Auth zaglavlja za izvršavanje bilo koje od\n\t\tnavedenih funkcija. Više informacija možete pronaći u dokumentaciji API-ja, uključujući primjere poziva\n\t\ti odgovora poslužitelja."
-},"pluralForm" :"nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;"
-} \ No newline at end of file
diff --git a/apps/provisioning_api/l10n/hu.js b/apps/provisioning_api/l10n/hu.js
deleted file mode 100644
index df4aef6fd00..00000000000
--- a/apps/provisioning_api/l10n/hu.js
+++ /dev/null
@@ -1,18 +0,0 @@
-OC.L10N.register(
- "provisioning_api",
- {
- "Logged in user must be an administrator or have authorization to edit this setting." : "A bejelentkezett felhasználónak rendszergazdának kell lennie, vagy engedéllyel kell rendelkeznie, hogy szerkessze ezt a beállítást.",
- "User already exists" : "A felhasználó már létezik",
- "Email confirmation" : "E-mail-cím megerősítése",
- "To enable the email address %s please click the button below." : "A(z) %s e-mail-cím engedélyezéséhez kattintson a lenti gombra.",
- "Confirm" : "Megerősítés",
- "Email was already removed from account and cannot be confirmed anymore." : "Az e-mail már el lett távolítva a fiókból, és már nem erősíthető meg.",
- "Could not verify mail because the token is expired." : "Az e-mail-címet nem lehet megerősíteni, mert a token lejárt.",
- "Could not verify mail because the token is invalid." : "Az e-mail-címet nem lehet megerősíteni, mert a token érvénytelen.",
- "An unexpected error occurred. Please contact your admin." : "Váratlan hiba történt. Lépjen kapcsolatba a rendszergazdával.",
- "Email confirmation successful" : "Az e-mail-cím megerősítése sikeres",
- "Provisioning API" : "Felügyeleti API",
- "This application enables a set of APIs that external systems can use to manage users, groups and apps." : "Ez az alkalmazás bekapcsol egy API készletet, melyeket külső rendszerek arra használhatnak, hogy a felhasználókat, csoportokat és alkalmazásokat kezeljenek.",
- "This application enables a set of APIs that external systems can use to create, edit, delete and query user\n\t\tattributes, query, set and remove groups, set quota and query total storage used in Nextcloud. Group admin users\n\t\tcan also query Nextcloud and perform the same functions as an admin for groups they manage. The API also enables\n\t\tan admin to query for active Nextcloud applications, application info, and to enable or disable an app remotely.\n\t\tOnce the app is enabled, HTTP requests can be used via a Basic Auth header to perform any of the functions\n\t\tlisted above. More information is available in the Provisioning API documentation, including example calls\n\t\tand server responses." : "Ez az alkalmazás bekapcsol egy API készletet, melyeket külső rendszerek használhatnak a felhasználók létrehozására,\n\t\tszerkesztésére, törlésére és attribútumok lekérdezésére, csoportok beállítására, eltávolítására és\n\t\tlekérdezésére, kvóta beállítására és a teljes tárhely lekérdezésére a Nextcloudban. A csoport admin felhasználók\n\t\tlekérdezhetik a Nextcloudot, és ugyanazokat a funkciókat hajthatják végre, mint az adminisztrátor az általuk\n\t\tkezelt csoportoknál. Az API szintén megengedi a rendszergazdának az aktív nextcloudos alkalmazások,\n\t\talkalmazásinformációk lekérdezését, valamint az alkalmazások távoli engedélyezését vagy letiltását. Miután\n\t\tengedélyezte az alkalmazást, a HTTP-kéréseket a Basic hitelesítési fejlécen keresztül fel lehet használni\n\t\tbármely, a feljebb felsorolt funkció végrehajtására. További információ a Provisioning API dokumentációjában\n\t\ttalálható, beleértve a példahívásokat és a kiszolgáló válaszait is."
-},
-"nplurals=2; plural=(n != 1);");
diff --git a/apps/provisioning_api/l10n/hu.json b/apps/provisioning_api/l10n/hu.json
deleted file mode 100644
index 4a08b9acae8..00000000000
--- a/apps/provisioning_api/l10n/hu.json
+++ /dev/null
@@ -1,16 +0,0 @@
-{ "translations": {
- "Logged in user must be an administrator or have authorization to edit this setting." : "A bejelentkezett felhasználónak rendszergazdának kell lennie, vagy engedéllyel kell rendelkeznie, hogy szerkessze ezt a beállítást.",
- "User already exists" : "A felhasználó már létezik",
- "Email confirmation" : "E-mail-cím megerősítése",
- "To enable the email address %s please click the button below." : "A(z) %s e-mail-cím engedélyezéséhez kattintson a lenti gombra.",
- "Confirm" : "Megerősítés",
- "Email was already removed from account and cannot be confirmed anymore." : "Az e-mail már el lett távolítva a fiókból, és már nem erősíthető meg.",
- "Could not verify mail because the token is expired." : "Az e-mail-címet nem lehet megerősíteni, mert a token lejárt.",
- "Could not verify mail because the token is invalid." : "Az e-mail-címet nem lehet megerősíteni, mert a token érvénytelen.",
- "An unexpected error occurred. Please contact your admin." : "Váratlan hiba történt. Lépjen kapcsolatba a rendszergazdával.",
- "Email confirmation successful" : "Az e-mail-cím megerősítése sikeres",
- "Provisioning API" : "Felügyeleti API",
- "This application enables a set of APIs that external systems can use to manage users, groups and apps." : "Ez az alkalmazás bekapcsol egy API készletet, melyeket külső rendszerek arra használhatnak, hogy a felhasználókat, csoportokat és alkalmazásokat kezeljenek.",
- "This application enables a set of APIs that external systems can use to create, edit, delete and query user\n\t\tattributes, query, set and remove groups, set quota and query total storage used in Nextcloud. Group admin users\n\t\tcan also query Nextcloud and perform the same functions as an admin for groups they manage. The API also enables\n\t\tan admin to query for active Nextcloud applications, application info, and to enable or disable an app remotely.\n\t\tOnce the app is enabled, HTTP requests can be used via a Basic Auth header to perform any of the functions\n\t\tlisted above. More information is available in the Provisioning API documentation, including example calls\n\t\tand server responses." : "Ez az alkalmazás bekapcsol egy API készletet, melyeket külső rendszerek használhatnak a felhasználók létrehozására,\n\t\tszerkesztésére, törlésére és attribútumok lekérdezésére, csoportok beállítására, eltávolítására és\n\t\tlekérdezésére, kvóta beállítására és a teljes tárhely lekérdezésére a Nextcloudban. A csoport admin felhasználók\n\t\tlekérdezhetik a Nextcloudot, és ugyanazokat a funkciókat hajthatják végre, mint az adminisztrátor az általuk\n\t\tkezelt csoportoknál. Az API szintén megengedi a rendszergazdának az aktív nextcloudos alkalmazások,\n\t\talkalmazásinformációk lekérdezését, valamint az alkalmazások távoli engedélyezését vagy letiltását. Miután\n\t\tengedélyezte az alkalmazást, a HTTP-kéréseket a Basic hitelesítési fejlécen keresztül fel lehet használni\n\t\tbármely, a feljebb felsorolt funkció végrehajtására. További információ a Provisioning API dokumentációjában\n\t\ttalálható, beleértve a példahívásokat és a kiszolgáló válaszait is."
-},"pluralForm" :"nplurals=2; plural=(n != 1);"
-} \ No newline at end of file
diff --git a/apps/provisioning_api/l10n/is.js b/apps/provisioning_api/l10n/is.js
deleted file mode 100644
index 1e84328cd81..00000000000
--- a/apps/provisioning_api/l10n/is.js
+++ /dev/null
@@ -1,15 +0,0 @@
-OC.L10N.register(
- "provisioning_api",
- {
- "Logged in user must be an administrator or have authorization to edit this setting." : "Innskráður notandi verður að vera kerfisstjóri eða hafa fengið sérstaka aðgangsheimild fyrir þessa stillingu.",
- "User already exists" : "Notandi er þegar til",
- "Email confirmation" : "Staðfesting tölvupósts",
- "To enable the email address %s please click the button below." : "Til að virkja tölvupóstfangið %s skaltu ýta á hnappinn hér fyrir neðan.",
- "Confirm" : "Staðfesta",
- "Email was already removed from account and cannot be confirmed anymore." : "Tölvupóstfangið hefur þegar verið fjarlægt úr aðgangnum og er ekki lengur hægt að staðfesta það.",
- "Could not verify mail because the token is expired." : "Gat ekki staðfest tölvupóstfang vegna þess að teiknið er útrunnið.",
- "Could not verify mail because the token is invalid." : "Gat ekki staðfest tölvupóstfang vegna þess að teiknið er ógilt.",
- "An unexpected error occurred. Please contact your admin." : "Óvænt villa kom upp. Hafðu samband við kerfisstjóra.",
- "Email confirmation successful" : "Staðfesting tölvupósts tókst"
-},
-"nplurals=2; plural=(n % 10 != 1 || n % 100 == 11);");
diff --git a/apps/provisioning_api/l10n/is.json b/apps/provisioning_api/l10n/is.json
deleted file mode 100644
index 727ac3a9c09..00000000000
--- a/apps/provisioning_api/l10n/is.json
+++ /dev/null
@@ -1,13 +0,0 @@
-{ "translations": {
- "Logged in user must be an administrator or have authorization to edit this setting." : "Innskráður notandi verður að vera kerfisstjóri eða hafa fengið sérstaka aðgangsheimild fyrir þessa stillingu.",
- "User already exists" : "Notandi er þegar til",
- "Email confirmation" : "Staðfesting tölvupósts",
- "To enable the email address %s please click the button below." : "Til að virkja tölvupóstfangið %s skaltu ýta á hnappinn hér fyrir neðan.",
- "Confirm" : "Staðfesta",
- "Email was already removed from account and cannot be confirmed anymore." : "Tölvupóstfangið hefur þegar verið fjarlægt úr aðgangnum og er ekki lengur hægt að staðfesta það.",
- "Could not verify mail because the token is expired." : "Gat ekki staðfest tölvupóstfang vegna þess að teiknið er útrunnið.",
- "Could not verify mail because the token is invalid." : "Gat ekki staðfest tölvupóstfang vegna þess að teiknið er ógilt.",
- "An unexpected error occurred. Please contact your admin." : "Óvænt villa kom upp. Hafðu samband við kerfisstjóra.",
- "Email confirmation successful" : "Staðfesting tölvupósts tókst"
-},"pluralForm" :"nplurals=2; plural=(n % 10 != 1 || n % 100 == 11);"
-} \ No newline at end of file
diff --git a/apps/provisioning_api/l10n/it.js b/apps/provisioning_api/l10n/it.js
deleted file mode 100644
index d9c7c0352e2..00000000000
--- a/apps/provisioning_api/l10n/it.js
+++ /dev/null
@@ -1,18 +0,0 @@
-OC.L10N.register(
- "provisioning_api",
- {
- "Logged in user must be an administrator or have authorization to edit this setting." : "L'utente connesso deve essere un amministratore o avere il permesso di modificare questa impostazione.",
- "User already exists" : "L'utente esiste già",
- "Email confirmation" : "Conferma email",
- "To enable the email address %s please click the button below." : "Per attivare l'indirizzo email %s fai clic sul pulsante sottostante.",
- "Confirm" : "Conferma",
- "Email was already removed from account and cannot be confirmed anymore." : "L'email era già stata rimossa dall'account e non può più essere confermata.",
- "Could not verify mail because the token is expired." : "Impossibile verificare l'email perché il token è scaduto.",
- "Could not verify mail because the token is invalid." : "Impossibile verificare l'email perché il token non è valido.",
- "An unexpected error occurred. Please contact your admin." : "Si è verificato un errore imprevisto. Contatta l'amministratore.",
- "Email confirmation successful" : "Conferma email riuscita",
- "Provisioning API" : "API di approvvigionamento",
- "This application enables a set of APIs that external systems can use to manage users, groups and apps." : "Questa applicazione abilita un insiemw di API che sistemi esterni possono usare per gestire utenti, gruppi e applicazioni.",
- "This application enables a set of APIs that external systems can use to create, edit, delete and query user\n\t\tattributes, query, set and remove groups, set quota and query total storage used in Nextcloud. Group admin users\n\t\tcan also query Nextcloud and perform the same functions as an admin for groups they manage. The API also enables\n\t\tan admin to query for active Nextcloud applications, application info, and to enable or disable an app remotely.\n\t\tOnce the app is enabled, HTTP requests can be used via a Basic Auth header to perform any of the functions\n\t\tlisted above. More information is available in the Provisioning API documentation, including example calls\n\t\tand server responses." : "Questa applicazione abilita un insieme di API che sistemi esterni possono usare per creare, modificare, eliminare e rilevare attributi\n\t\tutente, interrogare, impostare e rimuovere gruppi, limitare e rilevare lo spazio totale usato in Nextcloud. Gli utenti amministratori di un gruppo\n\t\tpossono anche interrogare Nextcloud e fare le stesse azioni degli amministratori per i gruppi che gestiscono. L'API permette anche\n\t\ta un amministratore di interrogare le applicazioni Nextcloud attive, informazioni sulle applicazioni, e di abilitare e disabilitare un'applicazione da remoto.\n\t\tUna volta che l'applicazione è abilitata, possono essere utilizzate richieste HTTP attraverso un'intestazione Basic Auth per eseguire qualsiasi funzione\n\telencata sopra. Ulteriori informazioni sono disponibili nella documentazione dell'API di approvvigionamento, incluse chiamate di esempio\n\t\te risposte del server."
-},
-"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;");
diff --git a/apps/provisioning_api/l10n/it.json b/apps/provisioning_api/l10n/it.json
deleted file mode 100644
index a1493bda9f7..00000000000
--- a/apps/provisioning_api/l10n/it.json
+++ /dev/null
@@ -1,16 +0,0 @@
-{ "translations": {
- "Logged in user must be an administrator or have authorization to edit this setting." : "L'utente connesso deve essere un amministratore o avere il permesso di modificare questa impostazione.",
- "User already exists" : "L'utente esiste già",
- "Email confirmation" : "Conferma email",
- "To enable the email address %s please click the button below." : "Per attivare l'indirizzo email %s fai clic sul pulsante sottostante.",
- "Confirm" : "Conferma",
- "Email was already removed from account and cannot be confirmed anymore." : "L'email era già stata rimossa dall'account e non può più essere confermata.",
- "Could not verify mail because the token is expired." : "Impossibile verificare l'email perché il token è scaduto.",
- "Could not verify mail because the token is invalid." : "Impossibile verificare l'email perché il token non è valido.",
- "An unexpected error occurred. Please contact your admin." : "Si è verificato un errore imprevisto. Contatta l'amministratore.",
- "Email confirmation successful" : "Conferma email riuscita",
- "Provisioning API" : "API di approvvigionamento",
- "This application enables a set of APIs that external systems can use to manage users, groups and apps." : "Questa applicazione abilita un insiemw di API che sistemi esterni possono usare per gestire utenti, gruppi e applicazioni.",
- "This application enables a set of APIs that external systems can use to create, edit, delete and query user\n\t\tattributes, query, set and remove groups, set quota and query total storage used in Nextcloud. Group admin users\n\t\tcan also query Nextcloud and perform the same functions as an admin for groups they manage. The API also enables\n\t\tan admin to query for active Nextcloud applications, application info, and to enable or disable an app remotely.\n\t\tOnce the app is enabled, HTTP requests can be used via a Basic Auth header to perform any of the functions\n\t\tlisted above. More information is available in the Provisioning API documentation, including example calls\n\t\tand server responses." : "Questa applicazione abilita un insieme di API che sistemi esterni possono usare per creare, modificare, eliminare e rilevare attributi\n\t\tutente, interrogare, impostare e rimuovere gruppi, limitare e rilevare lo spazio totale usato in Nextcloud. Gli utenti amministratori di un gruppo\n\t\tpossono anche interrogare Nextcloud e fare le stesse azioni degli amministratori per i gruppi che gestiscono. L'API permette anche\n\t\ta un amministratore di interrogare le applicazioni Nextcloud attive, informazioni sulle applicazioni, e di abilitare e disabilitare un'applicazione da remoto.\n\t\tUna volta che l'applicazione è abilitata, possono essere utilizzate richieste HTTP attraverso un'intestazione Basic Auth per eseguire qualsiasi funzione\n\telencata sopra. Ulteriori informazioni sono disponibili nella documentazione dell'API di approvvigionamento, incluse chiamate di esempio\n\t\te risposte del server."
-},"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"
-} \ No newline at end of file
diff --git a/apps/provisioning_api/l10n/ja.js b/apps/provisioning_api/l10n/ja.js
index e656d03dfc7..b4775480591 100644
--- a/apps/provisioning_api/l10n/ja.js
+++ b/apps/provisioning_api/l10n/ja.js
@@ -1,8 +1,34 @@
OC.L10N.register(
"provisioning_api",
{
- "Logged in user must be an administrator or have authorization to edit this setting." : "ログインユーザーは、管理者またはこの設定を編集する権限を持っている必要があります。",
+ "Logged in account must be an administrator or have authorization to edit this setting." : "ログインアカウントは管理者であるか、この設定を編集する権限を持っている必要があります。",
+ "Could not create non-existing user ID" : "存在しないユーザIDを作成できませんでした",
"User already exists" : "ユーザは既に存在する",
+ "Group %1$s does not exist" : "グループ %1$s は存在しません",
+ "Insufficient privileges for group %1$s" : "グループ %1$s の権限が不十分です",
+ "No group specified (required for sub-admins)" : "グループが指定されていません(サブ管理者に必要です)",
+ "Sub-admin group does not exist" : "サブ管理者グループは存在しません",
+ "Cannot create sub-admins for admin group" : "管理者グループにサブ管理者を作成することはできません",
+ "No permissions to promote sub-admins" : "権限がないため、サブ管理者を昇格させることはできません",
+ "Invalid password value" : "無効なパスワード値",
+ "An email address is required, to send a password link to the user." : "ユーザーにパスワードリンクを送信するため、メールアドレスが必要です。",
+ "Required email address was not provided" : "必要のEメールアドレスが提供されていません",
+ "User creation failed" : "ユーザーの作成に失敗しました",
+ "Invalid quota value: %1$s" : "無効なクォータ値: %1$s",
+ "Invalid quota value. %1$s is exceeding the maximum quota" : "無効なクォータ値。%1$sは最大クォータを超えています",
+ "Unlimited quota is forbidden on this instance" : "このインスタンスでは無制限のクォータは禁止されています。",
+ "Setting the password is not supported by the users backend" : "パスワードの設定は、ユーザ・バックエンドではサポートされていません",
+ "Invalid language" : "無効な言語",
+ "Invalid locale" : "無効なロケール",
+ "Invalid first day of week" : "無効な週の最初の曜日",
+ "Cannot remove yourself from the admin group" : "管理者グループから自分自身を削除することはできません",
+ "Cannot remove yourself from this group as you are a sub-admin" : "あなたはサブ管理者であるため、このグループから自分を削除することはできません",
+ "Not viable to remove user from the last group you are sub-admin of" : "あなたがサブ管理者である最後のグループからユーザを削除することはできません",
+ "User does not exist" : "ユーザは存在しません",
+ "Group does not exist" : "グループは存在しません",
+ "User is not a sub-admin of this group" : "ユーザはこのグループのサブ管理者ではありません。",
+ "Email address not available" : "Eメールアドレスは利用できません",
+ "Sending email failed" : "Eメールの送信に失敗しました",
"Email confirmation" : "Eメールの確認",
"To enable the email address %s please click the button below." : "メールアドレス %s を有効にするには、下のボタンをクリックしてください。",
"Confirm" : "承認",
@@ -12,7 +38,7 @@ OC.L10N.register(
"An unexpected error occurred. Please contact your admin." : "予期せぬエラーが発生しました。管理者に連絡してください。",
"Email confirmation successful" : "Eメールの確認が成功しました",
"Provisioning API" : "プロビジョニングAPI",
- "This application enables a set of APIs that external systems can use to manage users, groups and apps." : "このアプリケーションは、外部システムがユーザー、グループ、アプリを管理するために使用できる一連のAPIを有効にします。",
- "This application enables a set of APIs that external systems can use to create, edit, delete and query user\n\t\tattributes, query, set and remove groups, set quota and query total storage used in Nextcloud. Group admin users\n\t\tcan also query Nextcloud and perform the same functions as an admin for groups they manage. The API also enables\n\t\tan admin to query for active Nextcloud applications, application info, and to enable or disable an app remotely.\n\t\tOnce the app is enabled, HTTP requests can be used via a Basic Auth header to perform any of the functions\n\t\tlisted above. More information is available in the Provisioning API documentation, including example calls\n\t\tand server responses." : "このアプリケーションにより、外部システムがユーザーの作成、編集、削除、クエリに使用できる一連のAPIが有効になります\n\t\t属性やクエリ、グループの設定と削除、クォータの設定、Nextcloudのストレージの容量チェック。グループ管理者ユーザーも\n\t\tNextcloudにクエリを実行し、管理者と同じ機能を管理するグループに実行することもできます。 APIではまた管理者が\n\t\tアクティブなNextcloudアプリケーション、アプリケーション情報を照会し、アプリをリモートで有効または無効にできます。\n\t\tこのアプリを有効にすると、基本認証ヘッダーを介したHTTPリクエストを使用して、上記の任意の機能を実行できます\n\t\t呼び出しの例など、詳細やサンプルの呼び出し方法、サーバーからの応答については、\n\t\tProvisioningAPIのドキュメントをご覧ください。"
+ "This application enables a set of APIs that external systems can use to manage accounts, groups and apps." : "このアプリケーションは、外部システムがアカウント、グループ、アプリを管理するために使用できる一連のAPIを有効にします。",
+ "This application enables a set of APIs that external systems can use to create, edit, delete and query account\n\t\tattributes, query, set and remove groups, set quota and query total storage used in Nextcloud. Group admin accounts\n\t\tcan also query Nextcloud and perform the same functions as an admin for groups they manage. The API also enables\n\t\tan admin to query for active Nextcloud applications, application info, and to enable or disable an app remotely.\n\t\tOnce the app is enabled, HTTP requests can be used via a Basic Auth header to perform any of the functions\n\t\tlisted above. More information is available in the Provisioning API documentation, including example calls\n\t\tand server responses." : "このアプリケーションは、外部システムがNextcloudでアカウント属性を作成、編集、削除、クエリしたり、\n\t\tグループをクエリしたり、設定したり、削除したり、クォータを設定したり、使用されている総ストレージを\n\t\tクエリしたりするために使用できる一連のAPIを有効にします。グループ管理アカウントは、管理している\n\t\tグループに対して管理者と同じ機能を実行することができるだけでなく、Nextcloudをクエリすることもできます。\n\t\tこのAPIはまた、管理者がアクティブなNextcloudアプリケーションやアプリケーション情報をクエリし、アプリを\n\t\tリモートで有効または無効にすることも可能にします。アプリが有効になると、上記にリストされている機能を\n\t\t実行するために、Basic Authヘッダーを介したHTTPリクエストを使用することができます。詳細な情報や\n\t\tサンプルの呼び出し、サーバーからの応答などは、Provisioning APIのドキュメントで確認できます。"
},
"nplurals=1; plural=0;");
diff --git a/apps/provisioning_api/l10n/ja.json b/apps/provisioning_api/l10n/ja.json
index 2d4617c2c1f..8b057bdbaa1 100644
--- a/apps/provisioning_api/l10n/ja.json
+++ b/apps/provisioning_api/l10n/ja.json
@@ -1,6 +1,32 @@
{ "translations": {
- "Logged in user must be an administrator or have authorization to edit this setting." : "ログインユーザーは、管理者またはこの設定を編集する権限を持っている必要があります。",
+ "Logged in account must be an administrator or have authorization to edit this setting." : "ログインアカウントは管理者であるか、この設定を編集する権限を持っている必要があります。",
+ "Could not create non-existing user ID" : "存在しないユーザIDを作成できませんでした",
"User already exists" : "ユーザは既に存在する",
+ "Group %1$s does not exist" : "グループ %1$s は存在しません",
+ "Insufficient privileges for group %1$s" : "グループ %1$s の権限が不十分です",
+ "No group specified (required for sub-admins)" : "グループが指定されていません(サブ管理者に必要です)",
+ "Sub-admin group does not exist" : "サブ管理者グループは存在しません",
+ "Cannot create sub-admins for admin group" : "管理者グループにサブ管理者を作成することはできません",
+ "No permissions to promote sub-admins" : "権限がないため、サブ管理者を昇格させることはできません",
+ "Invalid password value" : "無効なパスワード値",
+ "An email address is required, to send a password link to the user." : "ユーザーにパスワードリンクを送信するため、メールアドレスが必要です。",
+ "Required email address was not provided" : "必要のEメールアドレスが提供されていません",
+ "User creation failed" : "ユーザーの作成に失敗しました",
+ "Invalid quota value: %1$s" : "無効なクォータ値: %1$s",
+ "Invalid quota value. %1$s is exceeding the maximum quota" : "無効なクォータ値。%1$sは最大クォータを超えています",
+ "Unlimited quota is forbidden on this instance" : "このインスタンスでは無制限のクォータは禁止されています。",
+ "Setting the password is not supported by the users backend" : "パスワードの設定は、ユーザ・バックエンドではサポートされていません",
+ "Invalid language" : "無効な言語",
+ "Invalid locale" : "無効なロケール",
+ "Invalid first day of week" : "無効な週の最初の曜日",
+ "Cannot remove yourself from the admin group" : "管理者グループから自分自身を削除することはできません",
+ "Cannot remove yourself from this group as you are a sub-admin" : "あなたはサブ管理者であるため、このグループから自分を削除することはできません",
+ "Not viable to remove user from the last group you are sub-admin of" : "あなたがサブ管理者である最後のグループからユーザを削除することはできません",
+ "User does not exist" : "ユーザは存在しません",
+ "Group does not exist" : "グループは存在しません",
+ "User is not a sub-admin of this group" : "ユーザはこのグループのサブ管理者ではありません。",
+ "Email address not available" : "Eメールアドレスは利用できません",
+ "Sending email failed" : "Eメールの送信に失敗しました",
"Email confirmation" : "Eメールの確認",
"To enable the email address %s please click the button below." : "メールアドレス %s を有効にするには、下のボタンをクリックしてください。",
"Confirm" : "承認",
@@ -10,7 +36,7 @@
"An unexpected error occurred. Please contact your admin." : "予期せぬエラーが発生しました。管理者に連絡してください。",
"Email confirmation successful" : "Eメールの確認が成功しました",
"Provisioning API" : "プロビジョニングAPI",
- "This application enables a set of APIs that external systems can use to manage users, groups and apps." : "このアプリケーションは、外部システムがユーザー、グループ、アプリを管理するために使用できる一連のAPIを有効にします。",
- "This application enables a set of APIs that external systems can use to create, edit, delete and query user\n\t\tattributes, query, set and remove groups, set quota and query total storage used in Nextcloud. Group admin users\n\t\tcan also query Nextcloud and perform the same functions as an admin for groups they manage. The API also enables\n\t\tan admin to query for active Nextcloud applications, application info, and to enable or disable an app remotely.\n\t\tOnce the app is enabled, HTTP requests can be used via a Basic Auth header to perform any of the functions\n\t\tlisted above. More information is available in the Provisioning API documentation, including example calls\n\t\tand server responses." : "このアプリケーションにより、外部システムがユーザーの作成、編集、削除、クエリに使用できる一連のAPIが有効になります\n\t\t属性やクエリ、グループの設定と削除、クォータの設定、Nextcloudのストレージの容量チェック。グループ管理者ユーザーも\n\t\tNextcloudにクエリを実行し、管理者と同じ機能を管理するグループに実行することもできます。 APIではまた管理者が\n\t\tアクティブなNextcloudアプリケーション、アプリケーション情報を照会し、アプリをリモートで有効または無効にできます。\n\t\tこのアプリを有効にすると、基本認証ヘッダーを介したHTTPリクエストを使用して、上記の任意の機能を実行できます\n\t\t呼び出しの例など、詳細やサンプルの呼び出し方法、サーバーからの応答については、\n\t\tProvisioningAPIのドキュメントをご覧ください。"
+ "This application enables a set of APIs that external systems can use to manage accounts, groups and apps." : "このアプリケーションは、外部システムがアカウント、グループ、アプリを管理するために使用できる一連のAPIを有効にします。",
+ "This application enables a set of APIs that external systems can use to create, edit, delete and query account\n\t\tattributes, query, set and remove groups, set quota and query total storage used in Nextcloud. Group admin accounts\n\t\tcan also query Nextcloud and perform the same functions as an admin for groups they manage. The API also enables\n\t\tan admin to query for active Nextcloud applications, application info, and to enable or disable an app remotely.\n\t\tOnce the app is enabled, HTTP requests can be used via a Basic Auth header to perform any of the functions\n\t\tlisted above. More information is available in the Provisioning API documentation, including example calls\n\t\tand server responses." : "このアプリケーションは、外部システムがNextcloudでアカウント属性を作成、編集、削除、クエリしたり、\n\t\tグループをクエリしたり、設定したり、削除したり、クォータを設定したり、使用されている総ストレージを\n\t\tクエリしたりするために使用できる一連のAPIを有効にします。グループ管理アカウントは、管理している\n\t\tグループに対して管理者と同じ機能を実行することができるだけでなく、Nextcloudをクエリすることもできます。\n\t\tこのAPIはまた、管理者がアクティブなNextcloudアプリケーションやアプリケーション情報をクエリし、アプリを\n\t\tリモートで有効または無効にすることも可能にします。アプリが有効になると、上記にリストされている機能を\n\t\t実行するために、Basic Authヘッダーを介したHTTPリクエストを使用することができます。詳細な情報や\n\t\tサンプルの呼び出し、サーバーからの応答などは、Provisioning APIのドキュメントで確認できます。"
},"pluralForm" :"nplurals=1; plural=0;"
} \ No newline at end of file
diff --git a/apps/provisioning_api/l10n/nb.js b/apps/provisioning_api/l10n/nb.js
index e8d637bbbb6..b20e422af1b 100644
--- a/apps/provisioning_api/l10n/nb.js
+++ b/apps/provisioning_api/l10n/nb.js
@@ -1,8 +1,32 @@
OC.L10N.register(
"provisioning_api",
{
- "Logged in user must be an administrator or have authorization to edit this setting." : "Pålogget bruker må være administrator eller ha autorisasjon til å redigere denne innstillingen.",
+ "Logged in account must be an administrator or have authorization to edit this setting." : "Pålogget konto må være administrator eller ha autorisasjon til å redigere denne innstillingen.",
+ "Could not create non-existing user ID" : "Kunne ikke opprette ikke-eksisterende bruker-ID",
"User already exists" : "Brukeren eksisterer allerede",
+ "Group %1$s does not exist" : "Gruppe %1$s finnes ikke",
+ "Insufficient privileges for group %1$s" : "Utilstrekkelige privilegier for gruppe %1$s",
+ "No group specified (required for sub-admins)" : "Ingen gruppe spesifisert (kreves for underadministratorer)",
+ "Sub-admin group does not exist" : "Underadministratorgruppe finnes ikke",
+ "Cannot create sub-admins for admin group" : "Kan ikke opprette underadministratorer for admingruppe",
+ "No permissions to promote sub-admins" : "Ingen tillatelser til å forfremme underadministratorer",
+ "Invalid password value" : "Ugyldig passordverdi",
+ "Required email address was not provided" : "Nødvendig e-postadresse ble ikke oppgitt",
+ "Invalid quota value: %1$s" : "Ugyldig kvoteverdi: %1$s",
+ "Invalid quota value. %1$s is exceeding the maximum quota" : "Ugyldig kvoteverdi. %1$s overskrider den maksimale kvoten",
+ "Unlimited quota is forbidden on this instance" : "Ubegrenset kvote er forbudt på denne forekomsten",
+ "Setting the password is not supported by the users backend" : "Innstilling av passordet støttes ikke av brukerens backend",
+ "Invalid language" : "Ugyldig språk",
+ "Invalid locale" : "Ugyldig nasjonal innstilling",
+ "Invalid first day of week" : "Ugyldig første dag i uken",
+ "Cannot remove yourself from the admin group" : "Kan ikke fjerne deg selv fra administratorgruppen",
+ "Cannot remove yourself from this group as you are a sub-admin" : "Kan ikke fjerne deg selv fra denne gruppen da du er en underadministrator",
+ "Not viable to remove user from the last group you are sub-admin of" : "Ikke mulig å fjerne brukeren fra den siste gruppen du er underadministrator for",
+ "User does not exist" : "Brukeren finnes ikke",
+ "Group does not exist" : "Gruppen finnes ikke",
+ "User is not a sub-admin of this group" : "Brukeren er ikke en underadministrator for denne gruppen",
+ "Email address not available" : "E-postadresse ikke tilgjengelig",
+ "Sending email failed" : "Sending av e-post feilet",
"Email confirmation" : "E-postbekreftelse",
"To enable the email address %s please click the button below." : "Klikk på knappen nedenfor for å aktivere e-postadressen %s.",
"Confirm" : "Bekreft",
@@ -10,6 +34,9 @@ OC.L10N.register(
"Could not verify mail because the token is expired." : "Kunne ikke bekrefte e-posten fordi nøkkelen er utløpt.",
"Could not verify mail because the token is invalid." : "Kunne ikke bekrefte e-post fordi nøkkelen er ugyldig.",
"An unexpected error occurred. Please contact your admin." : "En uventet feil oppsto. Ta kontakt med administratoren din.",
- "Email confirmation successful" : "E-postbekreftelse vellykket"
+ "Email confirmation successful" : "E-postbekreftelse vellykket",
+ "Provisioning API" : "Provisioning API",
+ "This application enables a set of APIs that external systems can use to manage accounts, groups and apps." : "Denne applikasjonen aktiverer et sett med API-er som eksterne systemer kan bruke til å administrere kontoer, grupper og apper.",
+ "This application enables a set of APIs that external systems can use to create, edit, delete and query account\n\t\tattributes, query, set and remove groups, set quota and query total storage used in Nextcloud. Group admin accounts\n\t\tcan also query Nextcloud and perform the same functions as an admin for groups they manage. The API also enables\n\t\tan admin to query for active Nextcloud applications, application info, and to enable or disable an app remotely.\n\t\tOnce the app is enabled, HTTP requests can be used via a Basic Auth header to perform any of the functions\n\t\tlisted above. More information is available in the Provisioning API documentation, including example calls\n\t\tand server responses." : "Denne applikasjonen aktiverer et sett med APIer som eksterne systemer kan bruke til å opprette, redigere, slette og spørre konto\n\t\tattributter, spørring, angi og fjern grupper, angi kvote og spørring total lagring brukt i Nextcloud. Kontoer for gruppeadministrator\n\t\tkan også spørre Nextcloud og utføre de samme funksjonene som en administrator for grupper de administrerer. API-en muliggjør også\n\t\ten administrator for å spørre etter aktive Nextcloud-applikasjoner, applikasjonsinformasjon og for å aktivere eller deaktivere en app eksternt.\n\t\tNår appen er aktivert, kan HTTP-forespørsler brukes via en Basic Auth-header for å utføre noen av funksjonene\n\t\tlistet ovenfor. Du finner mer informasjon i dokumentasjonen for Provisioning API, inkludert eksempelkall\n\t\tog serversvar."
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/provisioning_api/l10n/nb.json b/apps/provisioning_api/l10n/nb.json
index 10158915c9d..19d92e4ba26 100644
--- a/apps/provisioning_api/l10n/nb.json
+++ b/apps/provisioning_api/l10n/nb.json
@@ -1,6 +1,30 @@
{ "translations": {
- "Logged in user must be an administrator or have authorization to edit this setting." : "Pålogget bruker må være administrator eller ha autorisasjon til å redigere denne innstillingen.",
+ "Logged in account must be an administrator or have authorization to edit this setting." : "Pålogget konto må være administrator eller ha autorisasjon til å redigere denne innstillingen.",
+ "Could not create non-existing user ID" : "Kunne ikke opprette ikke-eksisterende bruker-ID",
"User already exists" : "Brukeren eksisterer allerede",
+ "Group %1$s does not exist" : "Gruppe %1$s finnes ikke",
+ "Insufficient privileges for group %1$s" : "Utilstrekkelige privilegier for gruppe %1$s",
+ "No group specified (required for sub-admins)" : "Ingen gruppe spesifisert (kreves for underadministratorer)",
+ "Sub-admin group does not exist" : "Underadministratorgruppe finnes ikke",
+ "Cannot create sub-admins for admin group" : "Kan ikke opprette underadministratorer for admingruppe",
+ "No permissions to promote sub-admins" : "Ingen tillatelser til å forfremme underadministratorer",
+ "Invalid password value" : "Ugyldig passordverdi",
+ "Required email address was not provided" : "Nødvendig e-postadresse ble ikke oppgitt",
+ "Invalid quota value: %1$s" : "Ugyldig kvoteverdi: %1$s",
+ "Invalid quota value. %1$s is exceeding the maximum quota" : "Ugyldig kvoteverdi. %1$s overskrider den maksimale kvoten",
+ "Unlimited quota is forbidden on this instance" : "Ubegrenset kvote er forbudt på denne forekomsten",
+ "Setting the password is not supported by the users backend" : "Innstilling av passordet støttes ikke av brukerens backend",
+ "Invalid language" : "Ugyldig språk",
+ "Invalid locale" : "Ugyldig nasjonal innstilling",
+ "Invalid first day of week" : "Ugyldig første dag i uken",
+ "Cannot remove yourself from the admin group" : "Kan ikke fjerne deg selv fra administratorgruppen",
+ "Cannot remove yourself from this group as you are a sub-admin" : "Kan ikke fjerne deg selv fra denne gruppen da du er en underadministrator",
+ "Not viable to remove user from the last group you are sub-admin of" : "Ikke mulig å fjerne brukeren fra den siste gruppen du er underadministrator for",
+ "User does not exist" : "Brukeren finnes ikke",
+ "Group does not exist" : "Gruppen finnes ikke",
+ "User is not a sub-admin of this group" : "Brukeren er ikke en underadministrator for denne gruppen",
+ "Email address not available" : "E-postadresse ikke tilgjengelig",
+ "Sending email failed" : "Sending av e-post feilet",
"Email confirmation" : "E-postbekreftelse",
"To enable the email address %s please click the button below." : "Klikk på knappen nedenfor for å aktivere e-postadressen %s.",
"Confirm" : "Bekreft",
@@ -8,6 +32,9 @@
"Could not verify mail because the token is expired." : "Kunne ikke bekrefte e-posten fordi nøkkelen er utløpt.",
"Could not verify mail because the token is invalid." : "Kunne ikke bekrefte e-post fordi nøkkelen er ugyldig.",
"An unexpected error occurred. Please contact your admin." : "En uventet feil oppsto. Ta kontakt med administratoren din.",
- "Email confirmation successful" : "E-postbekreftelse vellykket"
+ "Email confirmation successful" : "E-postbekreftelse vellykket",
+ "Provisioning API" : "Provisioning API",
+ "This application enables a set of APIs that external systems can use to manage accounts, groups and apps." : "Denne applikasjonen aktiverer et sett med API-er som eksterne systemer kan bruke til å administrere kontoer, grupper og apper.",
+ "This application enables a set of APIs that external systems can use to create, edit, delete and query account\n\t\tattributes, query, set and remove groups, set quota and query total storage used in Nextcloud. Group admin accounts\n\t\tcan also query Nextcloud and perform the same functions as an admin for groups they manage. The API also enables\n\t\tan admin to query for active Nextcloud applications, application info, and to enable or disable an app remotely.\n\t\tOnce the app is enabled, HTTP requests can be used via a Basic Auth header to perform any of the functions\n\t\tlisted above. More information is available in the Provisioning API documentation, including example calls\n\t\tand server responses." : "Denne applikasjonen aktiverer et sett med APIer som eksterne systemer kan bruke til å opprette, redigere, slette og spørre konto\n\t\tattributter, spørring, angi og fjern grupper, angi kvote og spørring total lagring brukt i Nextcloud. Kontoer for gruppeadministrator\n\t\tkan også spørre Nextcloud og utføre de samme funksjonene som en administrator for grupper de administrerer. API-en muliggjør også\n\t\ten administrator for å spørre etter aktive Nextcloud-applikasjoner, applikasjonsinformasjon og for å aktivere eller deaktivere en app eksternt.\n\t\tNår appen er aktivert, kan HTTP-forespørsler brukes via en Basic Auth-header for å utføre noen av funksjonene\n\t\tlistet ovenfor. Du finner mer informasjon i dokumentasjonen for Provisioning API, inkludert eksempelkall\n\t\tog serversvar."
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/provisioning_api/l10n/nl.js b/apps/provisioning_api/l10n/nl.js
deleted file mode 100644
index 0a5cb60fc79..00000000000
--- a/apps/provisioning_api/l10n/nl.js
+++ /dev/null
@@ -1,18 +0,0 @@
-OC.L10N.register(
- "provisioning_api",
- {
- "Logged in user must be an administrator or have authorization to edit this setting." : "Ingelogde gebruiker moet een beheerder zijn of geautoriseerd zijn om deze instelling aan te passen",
- "User already exists" : "Gebruiker bestaat al",
- "Email confirmation" : "E-mailbevestiging",
- "To enable the email address %s please click the button below." : "Klik op de onderstaande knop om het e-mail adres %s in te schakelen.",
- "Confirm" : "Bevestigen",
- "Email was already removed from account and cannot be confirmed anymore." : "E-mail was reeds verwijderd van de account en kan niet meer bevestigd worden.",
- "Could not verify mail because the token is expired." : "Kon de mail niet verifiëren omdat de token verlopen is.",
- "Could not verify mail because the token is invalid." : "Kon de mail niet verifiëren omdat de token ongeldig is.",
- "An unexpected error occurred. Please contact your admin." : "Een onverwachte fout trad op. Neem contact op met je beheerder.",
- "Email confirmation successful" : "E-mailbevestiging succesvol",
- "Provisioning API" : "Provisioning API",
- "This application enables a set of APIs that external systems can use to manage users, groups and apps." : "Deze applicatie maakt een reeks API's mogelijk die externe systemen kunnen gebruiken om gebruikers, groepen en apps te beheren.",
- "This application enables a set of APIs that external systems can use to create, edit, delete and query user\n\t\tattributes, query, set and remove groups, set quota and query total storage used in Nextcloud. Group admin users\n\t\tcan also query Nextcloud and perform the same functions as an admin for groups they manage. The API also enables\n\t\tan admin to query for active Nextcloud applications, application info, and to enable or disable an app remotely.\n\t\tOnce the app is enabled, HTTP requests can be used via a Basic Auth header to perform any of the functions\n\t\tlisted above. More information is available in the Provisioning API documentation, including example calls\n\t\tand server responses." : "Deze applicatie maakt een reeks API's mogelijk die externe systemen kunnen gebruiken om gebruikers te creëren, bewerken, verwijderen en bevragen\n\t\tattributen, query's uitvoeren, groepen instellen en verwijderen, quota instellen en de totale opslagruimte opvragen die wordt gebruikt in Nextcloud. Groepsbeheerders\n\t\tkunnen ook Nextcloud opvragen en dezelfde functies uitvoeren als een beheerder voor groepen die ze beheert. De API maakt het ook\n\t\tmogelijk voor een beheerder om te vragen naar actieve Nextcloud-applicaties, applicatie-info en om een app op afstand in- of uit te schakelen.\n\t\tZodra de app is ingeschakeld, kunnen HTTP-verzoeken worden gebruikt via een Basic Auth-header om de functies \n\t\thierboven uit te voeren. Meer informatie is beschikbaar in de Provisioning API-documentatie, inclusief voorbeeldoproepen\n\t\ten serverreacties."
-},
-"nplurals=2; plural=(n != 1);");
diff --git a/apps/provisioning_api/l10n/nl.json b/apps/provisioning_api/l10n/nl.json
deleted file mode 100644
index 6b79cc3fd5c..00000000000
--- a/apps/provisioning_api/l10n/nl.json
+++ /dev/null
@@ -1,16 +0,0 @@
-{ "translations": {
- "Logged in user must be an administrator or have authorization to edit this setting." : "Ingelogde gebruiker moet een beheerder zijn of geautoriseerd zijn om deze instelling aan te passen",
- "User already exists" : "Gebruiker bestaat al",
- "Email confirmation" : "E-mailbevestiging",
- "To enable the email address %s please click the button below." : "Klik op de onderstaande knop om het e-mail adres %s in te schakelen.",
- "Confirm" : "Bevestigen",
- "Email was already removed from account and cannot be confirmed anymore." : "E-mail was reeds verwijderd van de account en kan niet meer bevestigd worden.",
- "Could not verify mail because the token is expired." : "Kon de mail niet verifiëren omdat de token verlopen is.",
- "Could not verify mail because the token is invalid." : "Kon de mail niet verifiëren omdat de token ongeldig is.",
- "An unexpected error occurred. Please contact your admin." : "Een onverwachte fout trad op. Neem contact op met je beheerder.",
- "Email confirmation successful" : "E-mailbevestiging succesvol",
- "Provisioning API" : "Provisioning API",
- "This application enables a set of APIs that external systems can use to manage users, groups and apps." : "Deze applicatie maakt een reeks API's mogelijk die externe systemen kunnen gebruiken om gebruikers, groepen en apps te beheren.",
- "This application enables a set of APIs that external systems can use to create, edit, delete and query user\n\t\tattributes, query, set and remove groups, set quota and query total storage used in Nextcloud. Group admin users\n\t\tcan also query Nextcloud and perform the same functions as an admin for groups they manage. The API also enables\n\t\tan admin to query for active Nextcloud applications, application info, and to enable or disable an app remotely.\n\t\tOnce the app is enabled, HTTP requests can be used via a Basic Auth header to perform any of the functions\n\t\tlisted above. More information is available in the Provisioning API documentation, including example calls\n\t\tand server responses." : "Deze applicatie maakt een reeks API's mogelijk die externe systemen kunnen gebruiken om gebruikers te creëren, bewerken, verwijderen en bevragen\n\t\tattributen, query's uitvoeren, groepen instellen en verwijderen, quota instellen en de totale opslagruimte opvragen die wordt gebruikt in Nextcloud. Groepsbeheerders\n\t\tkunnen ook Nextcloud opvragen en dezelfde functies uitvoeren als een beheerder voor groepen die ze beheert. De API maakt het ook\n\t\tmogelijk voor een beheerder om te vragen naar actieve Nextcloud-applicaties, applicatie-info en om een app op afstand in- of uit te schakelen.\n\t\tZodra de app is ingeschakeld, kunnen HTTP-verzoeken worden gebruikt via een Basic Auth-header om de functies \n\t\thierboven uit te voeren. Meer informatie is beschikbaar in de Provisioning API-documentatie, inclusief voorbeeldoproepen\n\t\ten serverreacties."
-},"pluralForm" :"nplurals=2; plural=(n != 1);"
-} \ No newline at end of file
diff --git a/apps/provisioning_api/l10n/pl.js b/apps/provisioning_api/l10n/pl.js
index 1a3b3c554f8..b477b89f024 100644
--- a/apps/provisioning_api/l10n/pl.js
+++ b/apps/provisioning_api/l10n/pl.js
@@ -1,8 +1,34 @@
OC.L10N.register(
"provisioning_api",
{
- "Logged in user must be an administrator or have authorization to edit this setting." : "Zalogowany użytkownik musi być administratorem lub mieć uprawnienia do edycji tego ustawienia.",
+ "Logged in account must be an administrator or have authorization to edit this setting." : "Zalogowane konto musi być administratorem lub mieć uprawnienia do edycji tego ustawienia.",
+ "Could not create non-existing user ID" : "Nie można utworzyć nieistniejącego identyfikatora użytkownika",
"User already exists" : "Użytkownik już istnieje",
+ "Group %1$s does not exist" : "Grupa %1$s nie istnieje",
+ "Insufficient privileges for group %1$s" : "Niewystarczające uprawnienia do grupy %1$s",
+ "No group specified (required for sub-admins)" : "Nie określono grupy (wymagane dla podadministratorów)",
+ "Sub-admin group does not exist" : "Grupa podadministratorów nie istnieje",
+ "Cannot create sub-admins for admin group" : "Nie można tworzyć podadministratorów dla grupy administratorów",
+ "No permissions to promote sub-admins" : "Brak uprawnień do promowania podadministratorów",
+ "Invalid password value" : "Nieprawidłowa wartość hasła",
+ "An email address is required, to send a password link to the user." : "Wymagany jest adres e-mail, aby wysłać użytkownikowi link do ustawienia hasła.",
+ "Required email address was not provided" : "Nie podano wymaganego adresu e-mail",
+ "User creation failed" : "Nie udało się utworzyć użytkownika",
+ "Invalid quota value: %1$s" : "Nieprawidłowa wartość limitu: %1$s",
+ "Invalid quota value. %1$s is exceeding the maximum quota" : "Nieprawidłowy limit. %1$s przekracza maksymalny dopuszczalny limit",
+ "Unlimited quota is forbidden on this instance" : "Nieograniczony limit jest zabroniony na tej instancji",
+ "Setting the password is not supported by the users backend" : "Ustawianie hasła nie jest obsługiwane przez backend użytkowników",
+ "Invalid language" : "Nieprawidłowy język",
+ "Invalid locale" : "Nieprawidłowa lokalizacja",
+ "Invalid first day of week" : "Nieprawidłowy pierwszy dzień tygodnia",
+ "Cannot remove yourself from the admin group" : "Nie możesz usunąć siebie z grupy administratorów",
+ "Cannot remove yourself from this group as you are a sub-admin" : "Nie możesz usunąć siebie z tej grupy, ponieważ jesteś jej podadministratorem",
+ "Not viable to remove user from the last group you are sub-admin of" : "Nie można usunąć użytkownika z ostatniej grupy, której jest podadministratorem",
+ "User does not exist" : "Użytkownik nie istnieje",
+ "Group does not exist" : "Grupa nie istnieje",
+ "User is not a sub-admin of this group" : "Użytkownik nie jest podadministratorem tej grupy",
+ "Email address not available" : "Adres e-mail niedostępny",
+ "Sending email failed" : "Wysyłanie e-maila nie powiodło się",
"Email confirmation" : "Potwierdzenie e-mailem",
"To enable the email address %s please click the button below." : "Aby włączyć adres e-mail %s, kliknij poniższy przycisk.",
"Confirm" : "Potwierdź",
@@ -12,7 +38,7 @@ OC.L10N.register(
"An unexpected error occurred. Please contact your admin." : "Wystąpił nieoczekiwany błąd. Skontaktuj się z administratorem.",
"Email confirmation successful" : "Potwierdzenie e-maila powiodło się",
"Provisioning API" : "API obsługi administracyjnej",
- "This application enables a set of APIs that external systems can use to manage users, groups and apps." : "Aplikacja udostępnia zestaw interfejsów API, których systemy zewnętrzne mogą używać ich do zarządzania użytkownikami, grupami i aplikacjami.",
- "This application enables a set of APIs that external systems can use to create, edit, delete and query user\n\t\tattributes, query, set and remove groups, set quota and query total storage used in Nextcloud. Group admin users\n\t\tcan also query Nextcloud and perform the same functions as an admin for groups they manage. The API also enables\n\t\tan admin to query for active Nextcloud applications, application info, and to enable or disable an app remotely.\n\t\tOnce the app is enabled, HTTP requests can be used via a Basic Auth header to perform any of the functions\n\t\tlisted above. More information is available in the Provisioning API documentation, including example calls\n\t\tand server responses." : "Aplikacja udostępnia zestaw interfejsów API, których systemy zewnętrzne mogą używać ich do tworzenia, edytowania, usuwania i wysyłania zapytań o atrybuty użytkowników,\n\t\tkonfigurowania i usuwania grup, ustawiania przydziałów i zapytań o całkowitą pamięć używaną w Nextcloud. Użytkownicy będący administratorami grup\n\t\tmogą również wysyłać zapytania do Nextcloud i wykonywać te same funkcje, co administrator w zarządzanych przez siebie grupach. API umożliwia również\n\t\tadministratorowi do wysyłania zapytań o aktywne aplikacje Nextcloud, informacje o aplikacji oraz do zdalnego włączania lub wyłączania aplikacji.\n\t\tPo włączeniu aplikacji można używać żądań HTTP za pośrednictwem nagłówka Basic Auth do wykonywania dowolnej funkcji\n\t\twymienionej powyżej. Więcej informacji można znaleźć w dokumentacji interfejsu API do obsługi administracyjnej, w tym przykładowe wywołania\n\t\ti odpowiedzi serwera."
+ "This application enables a set of APIs that external systems can use to manage accounts, groups and apps." : "Ta aplikacja umożliwia zestaw interfejsów API, które zewnętrzne systemy mogą wykorzystać do zarządzania kontami, grupami i aplikacjami.",
+ "This application enables a set of APIs that external systems can use to create, edit, delete and query account\n\t\tattributes, query, set and remove groups, set quota and query total storage used in Nextcloud. Group admin accounts\n\t\tcan also query Nextcloud and perform the same functions as an admin for groups they manage. The API also enables\n\t\tan admin to query for active Nextcloud applications, application info, and to enable or disable an app remotely.\n\t\tOnce the app is enabled, HTTP requests can be used via a Basic Auth header to perform any of the functions\n\t\tlisted above. More information is available in the Provisioning API documentation, including example calls\n\t\tand server responses." : "Ta aplikacja udostępnia zestaw interfejsów API, które zewnętrzne systemy mogą wykorzystać do tworzenia, edytowania, usuwania i wyszukiwania kont użytkowników,\n\t\tatrybutów, zapytań, ustawiania i usuwania grup, limitów oraz zapytań o całkowite wykorzystanie przestrzeni w Nextcloud. Konta administratorów grup\n\t\tmogą również wykonywać zapytania do Nextcloud i działać jak administrator dla grup, którymi zarządzają. API umożliwia też administratorowi pobieranie aktywnych aplikacji, ich identyfikatorów, oraz włączanie lub wyłączanie aplikacji zdalnie.\n\t\tPo włączeniu aplikacji, zapytania HTTP mogą być wykonywane z nagłówkiem uwierzytelniającym Basic Auth, aby korzystać z funkcji\n\t\twymienionych powyżej. Więcej informacji znajduje się w dokumentacji API Provisioning, w tym przykładowe wywołania\n\t\ti odpowiedzi serwera."
},
"nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);");
diff --git a/apps/provisioning_api/l10n/pl.json b/apps/provisioning_api/l10n/pl.json
index e35ae0c4279..90e8767ebdd 100644
--- a/apps/provisioning_api/l10n/pl.json
+++ b/apps/provisioning_api/l10n/pl.json
@@ -1,6 +1,32 @@
{ "translations": {
- "Logged in user must be an administrator or have authorization to edit this setting." : "Zalogowany użytkownik musi być administratorem lub mieć uprawnienia do edycji tego ustawienia.",
+ "Logged in account must be an administrator or have authorization to edit this setting." : "Zalogowane konto musi być administratorem lub mieć uprawnienia do edycji tego ustawienia.",
+ "Could not create non-existing user ID" : "Nie można utworzyć nieistniejącego identyfikatora użytkownika",
"User already exists" : "Użytkownik już istnieje",
+ "Group %1$s does not exist" : "Grupa %1$s nie istnieje",
+ "Insufficient privileges for group %1$s" : "Niewystarczające uprawnienia do grupy %1$s",
+ "No group specified (required for sub-admins)" : "Nie określono grupy (wymagane dla podadministratorów)",
+ "Sub-admin group does not exist" : "Grupa podadministratorów nie istnieje",
+ "Cannot create sub-admins for admin group" : "Nie można tworzyć podadministratorów dla grupy administratorów",
+ "No permissions to promote sub-admins" : "Brak uprawnień do promowania podadministratorów",
+ "Invalid password value" : "Nieprawidłowa wartość hasła",
+ "An email address is required, to send a password link to the user." : "Wymagany jest adres e-mail, aby wysłać użytkownikowi link do ustawienia hasła.",
+ "Required email address was not provided" : "Nie podano wymaganego adresu e-mail",
+ "User creation failed" : "Nie udało się utworzyć użytkownika",
+ "Invalid quota value: %1$s" : "Nieprawidłowa wartość limitu: %1$s",
+ "Invalid quota value. %1$s is exceeding the maximum quota" : "Nieprawidłowy limit. %1$s przekracza maksymalny dopuszczalny limit",
+ "Unlimited quota is forbidden on this instance" : "Nieograniczony limit jest zabroniony na tej instancji",
+ "Setting the password is not supported by the users backend" : "Ustawianie hasła nie jest obsługiwane przez backend użytkowników",
+ "Invalid language" : "Nieprawidłowy język",
+ "Invalid locale" : "Nieprawidłowa lokalizacja",
+ "Invalid first day of week" : "Nieprawidłowy pierwszy dzień tygodnia",
+ "Cannot remove yourself from the admin group" : "Nie możesz usunąć siebie z grupy administratorów",
+ "Cannot remove yourself from this group as you are a sub-admin" : "Nie możesz usunąć siebie z tej grupy, ponieważ jesteś jej podadministratorem",
+ "Not viable to remove user from the last group you are sub-admin of" : "Nie można usunąć użytkownika z ostatniej grupy, której jest podadministratorem",
+ "User does not exist" : "Użytkownik nie istnieje",
+ "Group does not exist" : "Grupa nie istnieje",
+ "User is not a sub-admin of this group" : "Użytkownik nie jest podadministratorem tej grupy",
+ "Email address not available" : "Adres e-mail niedostępny",
+ "Sending email failed" : "Wysyłanie e-maila nie powiodło się",
"Email confirmation" : "Potwierdzenie e-mailem",
"To enable the email address %s please click the button below." : "Aby włączyć adres e-mail %s, kliknij poniższy przycisk.",
"Confirm" : "Potwierdź",
@@ -10,7 +36,7 @@
"An unexpected error occurred. Please contact your admin." : "Wystąpił nieoczekiwany błąd. Skontaktuj się z administratorem.",
"Email confirmation successful" : "Potwierdzenie e-maila powiodło się",
"Provisioning API" : "API obsługi administracyjnej",
- "This application enables a set of APIs that external systems can use to manage users, groups and apps." : "Aplikacja udostępnia zestaw interfejsów API, których systemy zewnętrzne mogą używać ich do zarządzania użytkownikami, grupami i aplikacjami.",
- "This application enables a set of APIs that external systems can use to create, edit, delete and query user\n\t\tattributes, query, set and remove groups, set quota and query total storage used in Nextcloud. Group admin users\n\t\tcan also query Nextcloud and perform the same functions as an admin for groups they manage. The API also enables\n\t\tan admin to query for active Nextcloud applications, application info, and to enable or disable an app remotely.\n\t\tOnce the app is enabled, HTTP requests can be used via a Basic Auth header to perform any of the functions\n\t\tlisted above. More information is available in the Provisioning API documentation, including example calls\n\t\tand server responses." : "Aplikacja udostępnia zestaw interfejsów API, których systemy zewnętrzne mogą używać ich do tworzenia, edytowania, usuwania i wysyłania zapytań o atrybuty użytkowników,\n\t\tkonfigurowania i usuwania grup, ustawiania przydziałów i zapytań o całkowitą pamięć używaną w Nextcloud. Użytkownicy będący administratorami grup\n\t\tmogą również wysyłać zapytania do Nextcloud i wykonywać te same funkcje, co administrator w zarządzanych przez siebie grupach. API umożliwia również\n\t\tadministratorowi do wysyłania zapytań o aktywne aplikacje Nextcloud, informacje o aplikacji oraz do zdalnego włączania lub wyłączania aplikacji.\n\t\tPo włączeniu aplikacji można używać żądań HTTP za pośrednictwem nagłówka Basic Auth do wykonywania dowolnej funkcji\n\t\twymienionej powyżej. Więcej informacji można znaleźć w dokumentacji interfejsu API do obsługi administracyjnej, w tym przykładowe wywołania\n\t\ti odpowiedzi serwera."
+ "This application enables a set of APIs that external systems can use to manage accounts, groups and apps." : "Ta aplikacja umożliwia zestaw interfejsów API, które zewnętrzne systemy mogą wykorzystać do zarządzania kontami, grupami i aplikacjami.",
+ "This application enables a set of APIs that external systems can use to create, edit, delete and query account\n\t\tattributes, query, set and remove groups, set quota and query total storage used in Nextcloud. Group admin accounts\n\t\tcan also query Nextcloud and perform the same functions as an admin for groups they manage. The API also enables\n\t\tan admin to query for active Nextcloud applications, application info, and to enable or disable an app remotely.\n\t\tOnce the app is enabled, HTTP requests can be used via a Basic Auth header to perform any of the functions\n\t\tlisted above. More information is available in the Provisioning API documentation, including example calls\n\t\tand server responses." : "Ta aplikacja udostępnia zestaw interfejsów API, które zewnętrzne systemy mogą wykorzystać do tworzenia, edytowania, usuwania i wyszukiwania kont użytkowników,\n\t\tatrybutów, zapytań, ustawiania i usuwania grup, limitów oraz zapytań o całkowite wykorzystanie przestrzeni w Nextcloud. Konta administratorów grup\n\t\tmogą również wykonywać zapytania do Nextcloud i działać jak administrator dla grup, którymi zarządzają. API umożliwia też administratorowi pobieranie aktywnych aplikacji, ich identyfikatorów, oraz włączanie lub wyłączanie aplikacji zdalnie.\n\t\tPo włączeniu aplikacji, zapytania HTTP mogą być wykonywane z nagłówkiem uwierzytelniającym Basic Auth, aby korzystać z funkcji\n\t\twymienionych powyżej. Więcej informacji znajduje się w dokumentacji API Provisioning, w tym przykładowe wywołania\n\t\ti odpowiedzi serwera."
},"pluralForm" :"nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);"
} \ No newline at end of file
diff --git a/apps/provisioning_api/l10n/pt_BR.js b/apps/provisioning_api/l10n/pt_BR.js
index aac97a5c6bf..4fbd4024484 100644
--- a/apps/provisioning_api/l10n/pt_BR.js
+++ b/apps/provisioning_api/l10n/pt_BR.js
@@ -1,10 +1,36 @@
OC.L10N.register(
"provisioning_api",
{
- "Logged in user must be an administrator or have authorization to edit this setting." : "O usuário conectado deve ser um administrador ou ter autorização para editar esta configuração. ",
+ "Logged in account must be an administrator or have authorization to edit this setting." : "A conta logada deve ser um administrador ou ter autorização para editar esta configuração.",
+ "Could not create non-existing user ID" : "Não foi possível criar um ID de usuário inexistente",
"User already exists" : "Usuário já existe",
- "Email confirmation" : "Confirmação de e-mail",
- "To enable the email address %s please click the button below." : "Para habilitar o endereço de e-mail %s por favor click no botão abaixo.",
+ "Group %1$s does not exist" : "O grupo %1$s não existe",
+ "Insufficient privileges for group %1$s" : "Privilégios insuficientes para o grupo %1$s",
+ "No group specified (required for sub-admins)" : "Nenhum grupo especificado (obrigatório para subadministradores)",
+ "Sub-admin group does not exist" : "O grupo de subadministradores não existe",
+ "Cannot create sub-admins for admin group" : "Não é possível criar subadministradores para o grupo de administradores",
+ "No permissions to promote sub-admins" : "Sem permissões para promover subadministradores",
+ "Invalid password value" : "Valor de senha inválido",
+ "An email address is required, to send a password link to the user." : "É necessário um endereço de e-mail, para enviar um link de senha para o usuário.",
+ "Required email address was not provided" : "O endereço de e-mail obrigatório não foi fornecido",
+ "User creation failed" : "Falha na criação do usuário",
+ "Invalid quota value: %1$s" : "Valor de cota inválido: %1$s",
+ "Invalid quota value. %1$s is exceeding the maximum quota" : "Valor de cota inválido. %1$s está excedendo a cota máxima",
+ "Unlimited quota is forbidden on this instance" : "Cota ilimitada é proibida nesta instância",
+ "Setting the password is not supported by the users backend" : "A configuração da senha não é suportada pelo back-end dos usuários",
+ "Invalid language" : "Idioma inválido",
+ "Invalid locale" : "Configuração regional inválida",
+ "Invalid first day of week" : "Primeiro dia da semana inválido",
+ "Cannot remove yourself from the admin group" : "Não é possível remover a si mesmo do grupo de administradores",
+ "Cannot remove yourself from this group as you are a sub-admin" : "Não é possível remover a si mesmo desse grupo, pois você é um subadministrador",
+ "Not viable to remove user from the last group you are sub-admin of" : "Não é viável remover o usuário do último grupo do qual você é subadministrador",
+ "User does not exist" : "Usuário não existe",
+ "Group does not exist" : "Grupo não existe",
+ "User is not a sub-admin of this group" : "O usuário não é um subadministrador deste grupo",
+ "Email address not available" : "Endereço de e-mail não disponível",
+ "Sending email failed" : "Falha ao enviar e-mail",
+ "Email confirmation" : "Confirmação do endereço de e-mail",
+ "To enable the email address %s please click the button below." : "Para ativar o endereço de e-mail %s, por favor, clique no botão abaixo.",
"Confirm" : "Confirmar",
"Email was already removed from account and cannot be confirmed anymore." : "O e-mail já foi removido da conta e não pode mais ser confirmado.",
"Could not verify mail because the token is expired." : "Não foi possível verificar o e-mail porque o token expirou.",
@@ -12,7 +38,7 @@ OC.L10N.register(
"An unexpected error occurred. Please contact your admin." : "Um erro inesperado ocorreu. Entre em contato com o seu administrador.",
"Email confirmation successful" : "E-mail confirmado com sucesso",
"Provisioning API" : "API de provisionamento",
- "This application enables a set of APIs that external systems can use to manage users, groups and apps." : "Este aplicativo permite que um conjunto de APIs de sistemas externos possam ser usados para gerenciar usuários, grupos e aplicativos.",
- "This application enables a set of APIs that external systems can use to create, edit, delete and query user\n\t\tattributes, query, set and remove groups, set quota and query total storage used in Nextcloud. Group admin users\n\t\tcan also query Nextcloud and perform the same functions as an admin for groups they manage. The API also enables\n\t\tan admin to query for active Nextcloud applications, application info, and to enable or disable an app remotely.\n\t\tOnce the app is enabled, HTTP requests can be used via a Basic Auth header to perform any of the functions\n\t\tlisted above. More information is available in the Provisioning API documentation, including example calls\n\t\tand server responses." : "Este aplicativo permite um conjunto de APIs que os sistemas externos podem usar para criar, editar, excluir e consultar o usuário\n\t\tatributos, consulta, definir e remover grupos, definir cota e consultar o armazenamento total usado em Nextcloud. Usuários administradores de grupo\n\t\ttambém pode consultar o Nextcloud e executar as mesmas funções que um administrador para grupos que gerencia. A API também permite\n\t\tum administrador para consultar aplicativos Nextcloud ativos, informações de aplicativos e para habilitar ou desabilitar um aplicativo remotamente.\n\t\tDepois que o aplicativo é habilitado, as solicitações HTTP podem ser usadas por meio de um cabeçalho de autenticação básica para executar qualquer uma das funções\n\t\tlistado acima. Mais informações estão disponíveis na documentação da API de provisionamento, incluindo chamadas de exemplo\n\t\te respostas do servidor."
+ "This application enables a set of APIs that external systems can use to manage accounts, groups and apps." : "Este aplicativo habilita um conjunto de APIs que sistemas externos podem usar para gerenciar contas, grupos e aplicativos.",
+ "This application enables a set of APIs that external systems can use to create, edit, delete and query account\n\t\tattributes, query, set and remove groups, set quota and query total storage used in Nextcloud. Group admin accounts\n\t\tcan also query Nextcloud and perform the same functions as an admin for groups they manage. The API also enables\n\t\tan admin to query for active Nextcloud applications, application info, and to enable or disable an app remotely.\n\t\tOnce the app is enabled, HTTP requests can be used via a Basic Auth header to perform any of the functions\n\t\tlisted above. More information is available in the Provisioning API documentation, including example calls\n\t\tand server responses." : "Este aplicativo habilita um conjunto de APIs que sistemas externos podem usar para criar, editar, excluir e consultar atributos\n\t\tde conta, consultar, definir e remover grupos, definir cotas e consultar o armazenamento total usado no Nextcloud. As contas de administrador de grupo\n\t\ttambém podem consultar o Nextcloud e executar as mesmas funções de um administrador para os grupos que gerenciam. A API também permite\n\t\tque um administrador consulte os aplicativos ativos do Nextcloud, as informações do aplicativo e ative ou desative um aplicativo remotamente.\n\t\tDepois que o aplicativo é ativado, as solicitações HTTP podem ser usadas por meio de um cabeçalho Basic Auth para executar qualquer uma das funções\n\t\tlistadas acima. Mais informações estão disponíveis na documentação da API de Provisionamento, incluindo exemplos de solicitações\n\t\te respostas do servidor."
},
"nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;");
diff --git a/apps/provisioning_api/l10n/pt_BR.json b/apps/provisioning_api/l10n/pt_BR.json
index e8f5cc00c4a..bb951174d30 100644
--- a/apps/provisioning_api/l10n/pt_BR.json
+++ b/apps/provisioning_api/l10n/pt_BR.json
@@ -1,8 +1,34 @@
{ "translations": {
- "Logged in user must be an administrator or have authorization to edit this setting." : "O usuário conectado deve ser um administrador ou ter autorização para editar esta configuração. ",
+ "Logged in account must be an administrator or have authorization to edit this setting." : "A conta logada deve ser um administrador ou ter autorização para editar esta configuração.",
+ "Could not create non-existing user ID" : "Não foi possível criar um ID de usuário inexistente",
"User already exists" : "Usuário já existe",
- "Email confirmation" : "Confirmação de e-mail",
- "To enable the email address %s please click the button below." : "Para habilitar o endereço de e-mail %s por favor click no botão abaixo.",
+ "Group %1$s does not exist" : "O grupo %1$s não existe",
+ "Insufficient privileges for group %1$s" : "Privilégios insuficientes para o grupo %1$s",
+ "No group specified (required for sub-admins)" : "Nenhum grupo especificado (obrigatório para subadministradores)",
+ "Sub-admin group does not exist" : "O grupo de subadministradores não existe",
+ "Cannot create sub-admins for admin group" : "Não é possível criar subadministradores para o grupo de administradores",
+ "No permissions to promote sub-admins" : "Sem permissões para promover subadministradores",
+ "Invalid password value" : "Valor de senha inválido",
+ "An email address is required, to send a password link to the user." : "É necessário um endereço de e-mail, para enviar um link de senha para o usuário.",
+ "Required email address was not provided" : "O endereço de e-mail obrigatório não foi fornecido",
+ "User creation failed" : "Falha na criação do usuário",
+ "Invalid quota value: %1$s" : "Valor de cota inválido: %1$s",
+ "Invalid quota value. %1$s is exceeding the maximum quota" : "Valor de cota inválido. %1$s está excedendo a cota máxima",
+ "Unlimited quota is forbidden on this instance" : "Cota ilimitada é proibida nesta instância",
+ "Setting the password is not supported by the users backend" : "A configuração da senha não é suportada pelo back-end dos usuários",
+ "Invalid language" : "Idioma inválido",
+ "Invalid locale" : "Configuração regional inválida",
+ "Invalid first day of week" : "Primeiro dia da semana inválido",
+ "Cannot remove yourself from the admin group" : "Não é possível remover a si mesmo do grupo de administradores",
+ "Cannot remove yourself from this group as you are a sub-admin" : "Não é possível remover a si mesmo desse grupo, pois você é um subadministrador",
+ "Not viable to remove user from the last group you are sub-admin of" : "Não é viável remover o usuário do último grupo do qual você é subadministrador",
+ "User does not exist" : "Usuário não existe",
+ "Group does not exist" : "Grupo não existe",
+ "User is not a sub-admin of this group" : "O usuário não é um subadministrador deste grupo",
+ "Email address not available" : "Endereço de e-mail não disponível",
+ "Sending email failed" : "Falha ao enviar e-mail",
+ "Email confirmation" : "Confirmação do endereço de e-mail",
+ "To enable the email address %s please click the button below." : "Para ativar o endereço de e-mail %s, por favor, clique no botão abaixo.",
"Confirm" : "Confirmar",
"Email was already removed from account and cannot be confirmed anymore." : "O e-mail já foi removido da conta e não pode mais ser confirmado.",
"Could not verify mail because the token is expired." : "Não foi possível verificar o e-mail porque o token expirou.",
@@ -10,7 +36,7 @@
"An unexpected error occurred. Please contact your admin." : "Um erro inesperado ocorreu. Entre em contato com o seu administrador.",
"Email confirmation successful" : "E-mail confirmado com sucesso",
"Provisioning API" : "API de provisionamento",
- "This application enables a set of APIs that external systems can use to manage users, groups and apps." : "Este aplicativo permite que um conjunto de APIs de sistemas externos possam ser usados para gerenciar usuários, grupos e aplicativos.",
- "This application enables a set of APIs that external systems can use to create, edit, delete and query user\n\t\tattributes, query, set and remove groups, set quota and query total storage used in Nextcloud. Group admin users\n\t\tcan also query Nextcloud and perform the same functions as an admin for groups they manage. The API also enables\n\t\tan admin to query for active Nextcloud applications, application info, and to enable or disable an app remotely.\n\t\tOnce the app is enabled, HTTP requests can be used via a Basic Auth header to perform any of the functions\n\t\tlisted above. More information is available in the Provisioning API documentation, including example calls\n\t\tand server responses." : "Este aplicativo permite um conjunto de APIs que os sistemas externos podem usar para criar, editar, excluir e consultar o usuário\n\t\tatributos, consulta, definir e remover grupos, definir cota e consultar o armazenamento total usado em Nextcloud. Usuários administradores de grupo\n\t\ttambém pode consultar o Nextcloud e executar as mesmas funções que um administrador para grupos que gerencia. A API também permite\n\t\tum administrador para consultar aplicativos Nextcloud ativos, informações de aplicativos e para habilitar ou desabilitar um aplicativo remotamente.\n\t\tDepois que o aplicativo é habilitado, as solicitações HTTP podem ser usadas por meio de um cabeçalho de autenticação básica para executar qualquer uma das funções\n\t\tlistado acima. Mais informações estão disponíveis na documentação da API de provisionamento, incluindo chamadas de exemplo\n\t\te respostas do servidor."
+ "This application enables a set of APIs that external systems can use to manage accounts, groups and apps." : "Este aplicativo habilita um conjunto de APIs que sistemas externos podem usar para gerenciar contas, grupos e aplicativos.",
+ "This application enables a set of APIs that external systems can use to create, edit, delete and query account\n\t\tattributes, query, set and remove groups, set quota and query total storage used in Nextcloud. Group admin accounts\n\t\tcan also query Nextcloud and perform the same functions as an admin for groups they manage. The API also enables\n\t\tan admin to query for active Nextcloud applications, application info, and to enable or disable an app remotely.\n\t\tOnce the app is enabled, HTTP requests can be used via a Basic Auth header to perform any of the functions\n\t\tlisted above. More information is available in the Provisioning API documentation, including example calls\n\t\tand server responses." : "Este aplicativo habilita um conjunto de APIs que sistemas externos podem usar para criar, editar, excluir e consultar atributos\n\t\tde conta, consultar, definir e remover grupos, definir cotas e consultar o armazenamento total usado no Nextcloud. As contas de administrador de grupo\n\t\ttambém podem consultar o Nextcloud e executar as mesmas funções de um administrador para os grupos que gerenciam. A API também permite\n\t\tque um administrador consulte os aplicativos ativos do Nextcloud, as informações do aplicativo e ative ou desative um aplicativo remotamente.\n\t\tDepois que o aplicativo é ativado, as solicitações HTTP podem ser usadas por meio de um cabeçalho Basic Auth para executar qualquer uma das funções\n\t\tlistadas acima. Mais informações estão disponíveis na documentação da API de Provisionamento, incluindo exemplos de solicitações\n\t\te respostas do servidor."
},"pluralForm" :"nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"
} \ No newline at end of file
diff --git a/apps/provisioning_api/l10n/pt_PT.js b/apps/provisioning_api/l10n/pt_PT.js
deleted file mode 100644
index 88f90905de4..00000000000
--- a/apps/provisioning_api/l10n/pt_PT.js
+++ /dev/null
@@ -1,17 +0,0 @@
-OC.L10N.register(
- "provisioning_api",
- {
- "Logged in user must be an administrator or have authorization to edit this setting." : "O usuário conectado deve ser um administrador ou ter autorização para editar esta configuração. ",
- "Email confirmation" : "Verificação de correio eletrónico.",
- "To enable the email address %s please click the button below." : "Para habilitar o endereço de correio eletrónico %s por favor pressione o botão abaixo.",
- "Confirm" : "Confirmar",
- "Email was already removed from account and cannot be confirmed anymore." : "O endereço já foi removido da conta e não pode mais ser confirmado.",
- "Could not verify mail because the token is expired." : "Não foi possível verificar o endereço porque o marcador expirou.",
- "Could not verify mail because the token is invalid." : "Não foi possível verificar o endereço porque o marcador é inválido.",
- "An unexpected error occurred. Please contact your admin." : "Ocorreu um erro inesperado. Contacte o seu administrador de sistemas.",
- "Email confirmation successful" : "Endereço confirmado com sucesso",
- "Provisioning API" : "API de aprovisionamento",
- "This application enables a set of APIs that external systems can use to manage users, groups and apps." : "Esta aplicação ativa um conjunto de API que sistemas externos podem usar para gerir utilizadores, grupos e aplicações.",
- "This application enables a set of APIs that external systems can use to create, edit, delete and query user\n\t\tattributes, query, set and remove groups, set quota and query total storage used in Nextcloud. Group admin users\n\t\tcan also query Nextcloud and perform the same functions as an admin for groups they manage. The API also enables\n\t\tan admin to query for active Nextcloud applications, application info, and to enable or disable an app remotely.\n\t\tOnce the app is enabled, HTTP requests can be used via a Basic Auth header to perform any of the functions\n\t\tlisted above. More information is available in the Provisioning API documentation, including example calls\n\t\tand server responses." : "Esta aplicação ativa um conjunto de API que sistemas externos podem usar para gerir criar, editar, apagar ou pesquisar atributos de utilizadores,\n\t\tpesquisar, definir e remover grupos, definir cotas e consultar o armazenamento total usado em Nextcloud. Utilizadores administradores de grupos\n\t\ttambém podem pesquisar no Nextcloud e executar as mesmas funções que um administrador para os grupos que gerem. A API também permite\n\t\tque um administrador possa consultar aplicações ativas no Nextcloud, informações das mesmas e para ativar ou desativar uma aplicação remotamente.\n\t\tDepois de ativar uma aplicação, podem-se usar pedidos HTTP com um cabeçalho Basic Auth para executar qualquer uma das funções\n\t\tacima indicadas. Mais informações estão disponíveis na documentação da API de aprovisionamento, incluindo pedidos de exemplo\n\t\te respostas do servidor."
-},
-"nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;");
diff --git a/apps/provisioning_api/l10n/pt_PT.json b/apps/provisioning_api/l10n/pt_PT.json
deleted file mode 100644
index bbb9fb9754b..00000000000
--- a/apps/provisioning_api/l10n/pt_PT.json
+++ /dev/null
@@ -1,15 +0,0 @@
-{ "translations": {
- "Logged in user must be an administrator or have authorization to edit this setting." : "O usuário conectado deve ser um administrador ou ter autorização para editar esta configuração. ",
- "Email confirmation" : "Verificação de correio eletrónico.",
- "To enable the email address %s please click the button below." : "Para habilitar o endereço de correio eletrónico %s por favor pressione o botão abaixo.",
- "Confirm" : "Confirmar",
- "Email was already removed from account and cannot be confirmed anymore." : "O endereço já foi removido da conta e não pode mais ser confirmado.",
- "Could not verify mail because the token is expired." : "Não foi possível verificar o endereço porque o marcador expirou.",
- "Could not verify mail because the token is invalid." : "Não foi possível verificar o endereço porque o marcador é inválido.",
- "An unexpected error occurred. Please contact your admin." : "Ocorreu um erro inesperado. Contacte o seu administrador de sistemas.",
- "Email confirmation successful" : "Endereço confirmado com sucesso",
- "Provisioning API" : "API de aprovisionamento",
- "This application enables a set of APIs that external systems can use to manage users, groups and apps." : "Esta aplicação ativa um conjunto de API que sistemas externos podem usar para gerir utilizadores, grupos e aplicações.",
- "This application enables a set of APIs that external systems can use to create, edit, delete and query user\n\t\tattributes, query, set and remove groups, set quota and query total storage used in Nextcloud. Group admin users\n\t\tcan also query Nextcloud and perform the same functions as an admin for groups they manage. The API also enables\n\t\tan admin to query for active Nextcloud applications, application info, and to enable or disable an app remotely.\n\t\tOnce the app is enabled, HTTP requests can be used via a Basic Auth header to perform any of the functions\n\t\tlisted above. More information is available in the Provisioning API documentation, including example calls\n\t\tand server responses." : "Esta aplicação ativa um conjunto de API que sistemas externos podem usar para gerir criar, editar, apagar ou pesquisar atributos de utilizadores,\n\t\tpesquisar, definir e remover grupos, definir cotas e consultar o armazenamento total usado em Nextcloud. Utilizadores administradores de grupos\n\t\ttambém podem pesquisar no Nextcloud e executar as mesmas funções que um administrador para os grupos que gerem. A API também permite\n\t\tque um administrador possa consultar aplicações ativas no Nextcloud, informações das mesmas e para ativar ou desativar uma aplicação remotamente.\n\t\tDepois de ativar uma aplicação, podem-se usar pedidos HTTP com um cabeçalho Basic Auth para executar qualquer uma das funções\n\t\tacima indicadas. Mais informações estão disponíveis na documentação da API de aprovisionamento, incluindo pedidos de exemplo\n\t\te respostas do servidor."
-},"pluralForm" :"nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"
-} \ No newline at end of file
diff --git a/apps/provisioning_api/l10n/ro.js b/apps/provisioning_api/l10n/ro.js
deleted file mode 100644
index ee35fa15cd8..00000000000
--- a/apps/provisioning_api/l10n/ro.js
+++ /dev/null
@@ -1,18 +0,0 @@
-OC.L10N.register(
- "provisioning_api",
- {
- "Logged in user must be an administrator or have authorization to edit this setting." : "Utilizatorul trebuie să fie un administrator sau să fie autorizat să editeze această setare.",
- "User already exists" : "Utilizatorul există deja",
- "Email confirmation" : "Confirmare email",
- "To enable the email address %s please click the button below." : "Pentru a activa adresa de mail %s apăsați butonul de mai jos.",
- "Confirm" : "Confirmă",
- "Email was already removed from account and cannot be confirmed anymore." : "Emailul a fost eliminat din cont și nu mai poate fi reconfirmat.",
- "Could not verify mail because the token is expired." : "Nu se poate verifica emailul deoarece tokenul a exirat.",
- "Could not verify mail because the token is invalid." : "Nu se poate verifica emailul deoarece tokenul este invalid.",
- "An unexpected error occurred. Please contact your admin." : "A apărut o eroare neașteptată. Contactați administratorul.",
- "Email confirmation successful" : "Confirmare email cu succes",
- "Provisioning API" : "API de provizionare",
- "This application enables a set of APIs that external systems can use to manage users, groups and apps." : "Această aplicație pornește un set de API-uri ce pot fi folosite de systemele externe pentru a gestiona utilizatori, grupuri și aplicații. ",
- "This application enables a set of APIs that external systems can use to create, edit, delete and query user\n\t\tattributes, query, set and remove groups, set quota and query total storage used in Nextcloud. Group admin users\n\t\tcan also query Nextcloud and perform the same functions as an admin for groups they manage. The API also enables\n\t\tan admin to query for active Nextcloud applications, application info, and to enable or disable an app remotely.\n\t\tOnce the app is enabled, HTTP requests can be used via a Basic Auth header to perform any of the functions\n\t\tlisted above. More information is available in the Provisioning API documentation, including example calls\n\t\tand server responses." : "Această aplicație permite unui set de API-uri ce pot fi folosite de sustemele externe pentru a creea, edita, șterge și a interoga utilizatori\n\t\tatribute, interogare, setare și eliminare grupuri, setare cote și interogare stocare totală utilizată în Nextcloud. Utilizatorii grupului admin\n\t\tpot de asemenea iteroga Nextcloud și îndeplini aceleași funcții ca și grupul de admini pe care îi și gestionează. API-ul permite \n\t\tunui administrator să caute aplicații active Nextcloud, informații despre aplicații și informații legate de activarea sau dezactivarea unei aplicații de la distanță.\n\t\tOdată ce aplicația este activată, solicitările HTTP pot fi utilizate printr-un antet Basic Auth pentru a efectua oricare dintre funcțiile\n\t\tmenționate mai sus. Mai multe informații sunt prezente în documentatie de provizionare de API, inclusiv exemple de interogări\n\t\tși răspunsul primit de la server."
-},
-"nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?2:1));");
diff --git a/apps/provisioning_api/l10n/ro.json b/apps/provisioning_api/l10n/ro.json
deleted file mode 100644
index eafdab0876b..00000000000
--- a/apps/provisioning_api/l10n/ro.json
+++ /dev/null
@@ -1,16 +0,0 @@
-{ "translations": {
- "Logged in user must be an administrator or have authorization to edit this setting." : "Utilizatorul trebuie să fie un administrator sau să fie autorizat să editeze această setare.",
- "User already exists" : "Utilizatorul există deja",
- "Email confirmation" : "Confirmare email",
- "To enable the email address %s please click the button below." : "Pentru a activa adresa de mail %s apăsați butonul de mai jos.",
- "Confirm" : "Confirmă",
- "Email was already removed from account and cannot be confirmed anymore." : "Emailul a fost eliminat din cont și nu mai poate fi reconfirmat.",
- "Could not verify mail because the token is expired." : "Nu se poate verifica emailul deoarece tokenul a exirat.",
- "Could not verify mail because the token is invalid." : "Nu se poate verifica emailul deoarece tokenul este invalid.",
- "An unexpected error occurred. Please contact your admin." : "A apărut o eroare neașteptată. Contactați administratorul.",
- "Email confirmation successful" : "Confirmare email cu succes",
- "Provisioning API" : "API de provizionare",
- "This application enables a set of APIs that external systems can use to manage users, groups and apps." : "Această aplicație pornește un set de API-uri ce pot fi folosite de systemele externe pentru a gestiona utilizatori, grupuri și aplicații. ",
- "This application enables a set of APIs that external systems can use to create, edit, delete and query user\n\t\tattributes, query, set and remove groups, set quota and query total storage used in Nextcloud. Group admin users\n\t\tcan also query Nextcloud and perform the same functions as an admin for groups they manage. The API also enables\n\t\tan admin to query for active Nextcloud applications, application info, and to enable or disable an app remotely.\n\t\tOnce the app is enabled, HTTP requests can be used via a Basic Auth header to perform any of the functions\n\t\tlisted above. More information is available in the Provisioning API documentation, including example calls\n\t\tand server responses." : "Această aplicație permite unui set de API-uri ce pot fi folosite de sustemele externe pentru a creea, edita, șterge și a interoga utilizatori\n\t\tatribute, interogare, setare și eliminare grupuri, setare cote și interogare stocare totală utilizată în Nextcloud. Utilizatorii grupului admin\n\t\tpot de asemenea iteroga Nextcloud și îndeplini aceleași funcții ca și grupul de admini pe care îi și gestionează. API-ul permite \n\t\tunui administrator să caute aplicații active Nextcloud, informații despre aplicații și informații legate de activarea sau dezactivarea unei aplicații de la distanță.\n\t\tOdată ce aplicația este activată, solicitările HTTP pot fi utilizate printr-un antet Basic Auth pentru a efectua oricare dintre funcțiile\n\t\tmenționate mai sus. Mai multe informații sunt prezente în documentatie de provizionare de API, inclusiv exemple de interogări\n\t\tși răspunsul primit de la server."
-},"pluralForm" :"nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?2:1));"
-} \ No newline at end of file
diff --git a/apps/provisioning_api/l10n/ru.js b/apps/provisioning_api/l10n/ru.js
index 604a71392e7..1ba160a590b 100644
--- a/apps/provisioning_api/l10n/ru.js
+++ b/apps/provisioning_api/l10n/ru.js
@@ -1,8 +1,34 @@
OC.L10N.register(
"provisioning_api",
{
- "Logged in user must be an administrator or have authorization to edit this setting." : "Вошедший пользователь должен быть администратором или иметь полномочия для редактирования этого параметра.",
+ "Logged in account must be an administrator or have authorization to edit this setting." : "Для изменения этого параметра необходимо быть администратором или иметь соответствующие права.",
+ "Could not create non-existing user ID" : "Невозможно создать несуществующий идентификатор пользователя",
"User already exists" : "Пользователь уже существует",
+ "Group %1$s does not exist" : "Группа %1$s не существует",
+ "Insufficient privileges for group %1$s" : "Недостаточно прав для группы %1$s",
+ "No group specified (required for sub-admins)" : "Группа не указана (обязательно для субадминистраторов)",
+ "Sub-admin group does not exist" : "Группа субадминистратора не существует",
+ "Cannot create sub-admins for admin group" : "Нельзя назначить субадминистраторов для группы администраторов",
+ "No permissions to promote sub-admins" : "Недостаточно прав для назначения субадминистраторов",
+ "Invalid password value" : "Некорректное значение пароля",
+ "An email address is required, to send a password link to the user." : "Требуется адрес электронной почты для отправки ссылки на установку пароля пользователю.",
+ "Required email address was not provided" : "Не указан обязательный адрес электронной почты",
+ "User creation failed" : "Не удалось создать пользователя",
+ "Invalid quota value: %1$s" : "Недопустимое значение квоты: %1$s",
+ "Invalid quota value. %1$s is exceeding the maximum quota" : "Недопустимое значение квоты.%1$s превышает максимальное значение",
+ "Unlimited quota is forbidden on this instance" : "Безлимитная квота запрещена в этом инстансе",
+ "Setting the password is not supported by the users backend" : "Установка пароля не поддерживается используемой системой управления пользователями",
+ "Invalid language" : "Недопустимый язык",
+ "Invalid locale" : "Недопустимая локаль",
+ "Invalid first day of week" : "Недопустимый первый день недели",
+ "Cannot remove yourself from the admin group" : "Нельзя удалить себя из группы администраторов",
+ "Cannot remove yourself from this group as you are a sub-admin" : "Нельзя удалить себя из этой группы, так как вы являетесь субадминистратором",
+ "Not viable to remove user from the last group you are sub-admin of" : "Нельзя удалить пользователя из последней группы, в которой вы являетесь субадминистратором",
+ "User does not exist" : "Пользователь не существует",
+ "Group does not exist" : "Группа не существует",
+ "User is not a sub-admin of this group" : "Пользователь не является субадминистратором этой группы",
+ "Email address not available" : "Адрес электронной почты недоступен",
+ "Sending email failed" : "Не удалось отправить письмо",
"Email confirmation" : "Подтверждение электронной почты",
"To enable the email address %s please click the button below." : "Чтобы включить адрес электронной почты %s, пожалуйста, нажмите на кнопку ниже.",
"Confirm" : "Подтвердить",
@@ -12,7 +38,7 @@ OC.L10N.register(
"An unexpected error occurred. Please contact your admin." : "Произошла неизвестная ошибка. Пожалуйста, свяжитесь с администратором.",
"Email confirmation successful" : "Электронная почта подтверждена",
"Provisioning API" : "Provisioning API",
- "This application enables a set of APIs that external systems can use to manage users, groups and apps." : "Это приложение предоставляет API, которое может использоваться внешними системами для управления пользователями, группами и приложениями.",
- "This application enables a set of APIs that external systems can use to create, edit, delete and query user\n\t\tattributes, query, set and remove groups, set quota and query total storage used in Nextcloud. Group admin users\n\t\tcan also query Nextcloud and perform the same functions as an admin for groups they manage. The API also enables\n\t\tan admin to query for active Nextcloud applications, application info, and to enable or disable an app remotely.\n\t\tOnce the app is enabled, HTTP requests can be used via a Basic Auth header to perform any of the functions\n\t\tlisted above. More information is available in the Provisioning API documentation, including example calls\n\t\tand server responses." : "Это приложение включает набор API-интерфейсов, которые внешние системы могут использовать для создания, редактирования, удаления и запроса пользователя\n\t\tатрибуты, запрос, установка и удаление групп, установка квоты и запрос общего хранилища, используемого в Nextcloud. Пользователи-администраторы группы\n\t\tтакже может запрашивать Nextcloud и выполнять те же функции, что и администратор, для групп, которыми они управляют. API также позволяет\n\t\tадминистратору запрос активных приложений Nextcloud, информации о приложении, а также для удаленного включения или отключения приложения.\n\t\tПосле включения приложения HTTP-запросы можно использовать через заголовок Basic Auth для выполнения любых функций.\n\t\tДополнительная информация доступна в документации по Provisioning API, включая примеры вызовов.\n\t\tи ответы сервера."
+ "This application enables a set of APIs that external systems can use to manage accounts, groups and apps." : "Это приложение предоставляет набор API, которые внешние системы могут использовать для управления учётными записями, группами и приложениями.",
+ "This application enables a set of APIs that external systems can use to create, edit, delete and query account\n\t\tattributes, query, set and remove groups, set quota and query total storage used in Nextcloud. Group admin accounts\n\t\tcan also query Nextcloud and perform the same functions as an admin for groups they manage. The API also enables\n\t\tan admin to query for active Nextcloud applications, application info, and to enable or disable an app remotely.\n\t\tOnce the app is enabled, HTTP requests can be used via a Basic Auth header to perform any of the functions\n\t\tlisted above. More information is available in the Provisioning API documentation, including example calls\n\t\tand server responses." : "Это приложение включает набор API, которые внешние системы могут использовать для создания, редактирования, удаления и запроса атрибутов учетной записи, запроса, установки и удаления групп, установки квоты и запроса общего хранилища, используемого в Nextcloud. Учетные записи администратора группы\nтакже могут запрашивать Nextcloud и выполнять те же функции, что и администратор для групп, которыми они управляют. API также позволяет\nадминистратору запрашивать активные приложения Nextcloud, информацию о приложении и включать или отключать приложение удаленно.\nПосле включения приложения HTTP-запросы можно использовать через заголовок Basic Auth для выполнения любой из функций,\nперечисленных выше. Дополнительная информация доступна в документации API Provisioning, включая примеры вызовов\nи ответы сервера."
},
"nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);");
diff --git a/apps/provisioning_api/l10n/ru.json b/apps/provisioning_api/l10n/ru.json
index d2e5e4f12cc..35f64d94497 100644
--- a/apps/provisioning_api/l10n/ru.json
+++ b/apps/provisioning_api/l10n/ru.json
@@ -1,6 +1,32 @@
{ "translations": {
- "Logged in user must be an administrator or have authorization to edit this setting." : "Вошедший пользователь должен быть администратором или иметь полномочия для редактирования этого параметра.",
+ "Logged in account must be an administrator or have authorization to edit this setting." : "Для изменения этого параметра необходимо быть администратором или иметь соответствующие права.",
+ "Could not create non-existing user ID" : "Невозможно создать несуществующий идентификатор пользователя",
"User already exists" : "Пользователь уже существует",
+ "Group %1$s does not exist" : "Группа %1$s не существует",
+ "Insufficient privileges for group %1$s" : "Недостаточно прав для группы %1$s",
+ "No group specified (required for sub-admins)" : "Группа не указана (обязательно для субадминистраторов)",
+ "Sub-admin group does not exist" : "Группа субадминистратора не существует",
+ "Cannot create sub-admins for admin group" : "Нельзя назначить субадминистраторов для группы администраторов",
+ "No permissions to promote sub-admins" : "Недостаточно прав для назначения субадминистраторов",
+ "Invalid password value" : "Некорректное значение пароля",
+ "An email address is required, to send a password link to the user." : "Требуется адрес электронной почты для отправки ссылки на установку пароля пользователю.",
+ "Required email address was not provided" : "Не указан обязательный адрес электронной почты",
+ "User creation failed" : "Не удалось создать пользователя",
+ "Invalid quota value: %1$s" : "Недопустимое значение квоты: %1$s",
+ "Invalid quota value. %1$s is exceeding the maximum quota" : "Недопустимое значение квоты.%1$s превышает максимальное значение",
+ "Unlimited quota is forbidden on this instance" : "Безлимитная квота запрещена в этом инстансе",
+ "Setting the password is not supported by the users backend" : "Установка пароля не поддерживается используемой системой управления пользователями",
+ "Invalid language" : "Недопустимый язык",
+ "Invalid locale" : "Недопустимая локаль",
+ "Invalid first day of week" : "Недопустимый первый день недели",
+ "Cannot remove yourself from the admin group" : "Нельзя удалить себя из группы администраторов",
+ "Cannot remove yourself from this group as you are a sub-admin" : "Нельзя удалить себя из этой группы, так как вы являетесь субадминистратором",
+ "Not viable to remove user from the last group you are sub-admin of" : "Нельзя удалить пользователя из последней группы, в которой вы являетесь субадминистратором",
+ "User does not exist" : "Пользователь не существует",
+ "Group does not exist" : "Группа не существует",
+ "User is not a sub-admin of this group" : "Пользователь не является субадминистратором этой группы",
+ "Email address not available" : "Адрес электронной почты недоступен",
+ "Sending email failed" : "Не удалось отправить письмо",
"Email confirmation" : "Подтверждение электронной почты",
"To enable the email address %s please click the button below." : "Чтобы включить адрес электронной почты %s, пожалуйста, нажмите на кнопку ниже.",
"Confirm" : "Подтвердить",
@@ -10,7 +36,7 @@
"An unexpected error occurred. Please contact your admin." : "Произошла неизвестная ошибка. Пожалуйста, свяжитесь с администратором.",
"Email confirmation successful" : "Электронная почта подтверждена",
"Provisioning API" : "Provisioning API",
- "This application enables a set of APIs that external systems can use to manage users, groups and apps." : "Это приложение предоставляет API, которое может использоваться внешними системами для управления пользователями, группами и приложениями.",
- "This application enables a set of APIs that external systems can use to create, edit, delete and query user\n\t\tattributes, query, set and remove groups, set quota and query total storage used in Nextcloud. Group admin users\n\t\tcan also query Nextcloud and perform the same functions as an admin for groups they manage. The API also enables\n\t\tan admin to query for active Nextcloud applications, application info, and to enable or disable an app remotely.\n\t\tOnce the app is enabled, HTTP requests can be used via a Basic Auth header to perform any of the functions\n\t\tlisted above. More information is available in the Provisioning API documentation, including example calls\n\t\tand server responses." : "Это приложение включает набор API-интерфейсов, которые внешние системы могут использовать для создания, редактирования, удаления и запроса пользователя\n\t\tатрибуты, запрос, установка и удаление групп, установка квоты и запрос общего хранилища, используемого в Nextcloud. Пользователи-администраторы группы\n\t\tтакже может запрашивать Nextcloud и выполнять те же функции, что и администратор, для групп, которыми они управляют. API также позволяет\n\t\tадминистратору запрос активных приложений Nextcloud, информации о приложении, а также для удаленного включения или отключения приложения.\n\t\tПосле включения приложения HTTP-запросы можно использовать через заголовок Basic Auth для выполнения любых функций.\n\t\tДополнительная информация доступна в документации по Provisioning API, включая примеры вызовов.\n\t\tи ответы сервера."
+ "This application enables a set of APIs that external systems can use to manage accounts, groups and apps." : "Это приложение предоставляет набор API, которые внешние системы могут использовать для управления учётными записями, группами и приложениями.",
+ "This application enables a set of APIs that external systems can use to create, edit, delete and query account\n\t\tattributes, query, set and remove groups, set quota and query total storage used in Nextcloud. Group admin accounts\n\t\tcan also query Nextcloud and perform the same functions as an admin for groups they manage. The API also enables\n\t\tan admin to query for active Nextcloud applications, application info, and to enable or disable an app remotely.\n\t\tOnce the app is enabled, HTTP requests can be used via a Basic Auth header to perform any of the functions\n\t\tlisted above. More information is available in the Provisioning API documentation, including example calls\n\t\tand server responses." : "Это приложение включает набор API, которые внешние системы могут использовать для создания, редактирования, удаления и запроса атрибутов учетной записи, запроса, установки и удаления групп, установки квоты и запроса общего хранилища, используемого в Nextcloud. Учетные записи администратора группы\nтакже могут запрашивать Nextcloud и выполнять те же функции, что и администратор для групп, которыми они управляют. API также позволяет\nадминистратору запрашивать активные приложения Nextcloud, информацию о приложении и включать или отключать приложение удаленно.\nПосле включения приложения HTTP-запросы можно использовать через заголовок Basic Auth для выполнения любой из функций,\nперечисленных выше. Дополнительная информация доступна в документации API Provisioning, включая примеры вызовов\nи ответы сервера."
},"pluralForm" :"nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);"
} \ No newline at end of file
diff --git a/apps/provisioning_api/l10n/sc.js b/apps/provisioning_api/l10n/sc.js
deleted file mode 100644
index e5331408419..00000000000
--- a/apps/provisioning_api/l10n/sc.js
+++ /dev/null
@@ -1,8 +0,0 @@
-OC.L10N.register(
- "provisioning_api",
- {
- "Provisioning API" : "Frunidura API",
- "This application enables a set of APIs that external systems can use to manage users, groups and apps." : "Custa aplicatzione ativat unas cantas API chi is sistemas esternos podint impreare pro organizare utentes, grupos e aplicatziones.",
- "This application enables a set of APIs that external systems can use to create, edit, delete and query user\n\t\tattributes, query, set and remove groups, set quota and query total storage used in Nextcloud. Group admin users\n\t\tcan also query Nextcloud and perform the same functions as an admin for groups they manage. The API also enables\n\t\tan admin to query for active Nextcloud applications, application info, and to enable or disable an app remotely.\n\t\tOnce the app is enabled, HTTP requests can be used via a Basic Auth header to perform any of the functions\n\t\tlisted above. More information is available in the Provisioning API documentation, including example calls\n\t\tand server responses." : "Custa aplicatzione ativat unas cantas API chi is sistemas esternos podent impreare pro creare, modificare, cantzellare e chircare\n\t\tatributos de s'utèntzia, chircare, impostare e eliminare grupos, impostare su lìmite e chircare totu su chi est allogadu in Nextcloud. Is chi amministrant unu grupu\n\t\tpodint puru pregontare a Nextcloud e acumprire is pròpias funtziones de un'amministradore pro su grupu chi amministrant. S'API ativat\n\t\tpermitit puru a un'amministradore de pedire aplicatziones Nextcloud ativas, informatziones de is aplicatziones e de ativare o disativare dae tesu. \n\t\t Cando s'ativat s'aplicatzione, is preguntas HTTP si podent impreare cun una intestatzione de autenticatzione bàsica pro acumprire cale si siat funtzione in s'elencu. \n\t\t Àteras informatziones a disponimentu in sa documentatzione de Frunidura API, inclùdidos esèmpios de mutidas\n\t\t e rispostas de su serbidore."
-},
-"nplurals=2; plural=(n != 1);");
diff --git a/apps/provisioning_api/l10n/sc.json b/apps/provisioning_api/l10n/sc.json
deleted file mode 100644
index 9c411e484e7..00000000000
--- a/apps/provisioning_api/l10n/sc.json
+++ /dev/null
@@ -1,6 +0,0 @@
-{ "translations": {
- "Provisioning API" : "Frunidura API",
- "This application enables a set of APIs that external systems can use to manage users, groups and apps." : "Custa aplicatzione ativat unas cantas API chi is sistemas esternos podint impreare pro organizare utentes, grupos e aplicatziones.",
- "This application enables a set of APIs that external systems can use to create, edit, delete and query user\n\t\tattributes, query, set and remove groups, set quota and query total storage used in Nextcloud. Group admin users\n\t\tcan also query Nextcloud and perform the same functions as an admin for groups they manage. The API also enables\n\t\tan admin to query for active Nextcloud applications, application info, and to enable or disable an app remotely.\n\t\tOnce the app is enabled, HTTP requests can be used via a Basic Auth header to perform any of the functions\n\t\tlisted above. More information is available in the Provisioning API documentation, including example calls\n\t\tand server responses." : "Custa aplicatzione ativat unas cantas API chi is sistemas esternos podent impreare pro creare, modificare, cantzellare e chircare\n\t\tatributos de s'utèntzia, chircare, impostare e eliminare grupos, impostare su lìmite e chircare totu su chi est allogadu in Nextcloud. Is chi amministrant unu grupu\n\t\tpodint puru pregontare a Nextcloud e acumprire is pròpias funtziones de un'amministradore pro su grupu chi amministrant. S'API ativat\n\t\tpermitit puru a un'amministradore de pedire aplicatziones Nextcloud ativas, informatziones de is aplicatziones e de ativare o disativare dae tesu. \n\t\t Cando s'ativat s'aplicatzione, is preguntas HTTP si podent impreare cun una intestatzione de autenticatzione bàsica pro acumprire cale si siat funtzione in s'elencu. \n\t\t Àteras informatziones a disponimentu in sa documentatzione de Frunidura API, inclùdidos esèmpios de mutidas\n\t\t e rispostas de su serbidore."
-},"pluralForm" :"nplurals=2; plural=(n != 1);"
-} \ No newline at end of file
diff --git a/apps/provisioning_api/l10n/sk.js b/apps/provisioning_api/l10n/sk.js
index c723d2beffe..a6c5fda49cd 100644
--- a/apps/provisioning_api/l10n/sk.js
+++ b/apps/provisioning_api/l10n/sk.js
@@ -1,8 +1,33 @@
OC.L10N.register(
"provisioning_api",
{
- "Logged in user must be an administrator or have authorization to edit this setting." : "Prihlásený používateľ musí byť správcom, alebo musí mať špeciálne právo na prístup k tomuto nastaveniu.",
+ "Logged in account must be an administrator or have authorization to edit this setting." : "Prihlásený používateľ musí byť správcom, alebo musí mať špeciálne právo na uprávu k tohoto nastavenia.",
+ "Could not create non-existing user ID" : "Nie je možné vytvoriť neexistujúce ID užívateľa",
"User already exists" : "Používateľ už existuje",
+ "Group %1$s does not exist" : "Skupina %1$s neexistuje",
+ "Insufficient privileges for group %1$s" : "Nedostatočné práva pre skupinu %1$s",
+ "No group specified (required for sub-admins)" : "Nebola zadaná žiadna skupina (potrebné pre sub-administrátorov)",
+ "Sub-admin group does not exist" : "Pod-administrátorská skupina neexistuje",
+ "Cannot create sub-admins for admin group" : "Nemôžem vytvoriť pod-administrátorskú skupinu pre administrátorskú skupinu",
+ "No permissions to promote sub-admins" : "Na povýšenie pod-administrátorov nie sú práva",
+ "Invalid password value" : "Neplatná hodnota hesla",
+ "An email address is required, to send a password link to the user." : "E-mail adresa je vyžadovaná pre poslanie odkazu uživateľovi pre reset hesla.",
+ "Required email address was not provided" : "Nebola zadaná požadovaná e-mailová adresa",
+ "Invalid quota value: %1$s" : "Neplatná hodnota kvóty: %1$s",
+ "Invalid quota value. %1$s is exceeding the maximum quota" : "Neplatná hodnota pre kvótu %1$s je väčšia ako maximálna kvóta",
+ "Unlimited quota is forbidden on this instance" : "Kvóta bez limitu nie je na tejto inštancii povolená",
+ "Setting the password is not supported by the users backend" : "Nastavenie hesla nie je pre podporované uživateľským backenom",
+ "Invalid language" : "Neplatný jazyk",
+ "Invalid locale" : "Neplatné miestne nastavenie",
+ "Invalid first day of week" : "Neplatný prvý deň týždňa",
+ "Cannot remove yourself from the admin group" : "Nemôžete odstrániť samého seba zo skupiny administrátorov",
+ "Cannot remove yourself from this group as you are a sub-admin" : "Nemôžete odstrániť samého seba z tejto skupiny, pretože ste sub-administrátor",
+ "Not viable to remove user from the last group you are sub-admin of" : "Nie je možné odstrániť používateľa z poslednej skupiny, ktorej je pod-správcom",
+ "User does not exist" : "Užívateľ neexistuje",
+ "Group does not exist" : "Skupina neexistuje",
+ "User is not a sub-admin of this group" : "Užívateľ nie je sub-administrátor tejto skupiny",
+ "Email address not available" : "E-mailová adresa nie je dostupná",
+ "Sending email failed" : "Odosielanie e-mailu zlyhalo",
"Email confirmation" : "Overenie e-mailu",
"To enable the email address %s please click the button below." : "Pre povolenie e-mailovej adresy %s prosím kliknite na tlačítko nižšie.",
"Confirm" : "Potvrdiť",
@@ -12,7 +37,7 @@ OC.L10N.register(
"An unexpected error occurred. Please contact your admin." : "Vyskytla sa chyba. Prosím, kontaktujte svojho správcu.",
"Email confirmation successful" : "Overenie e-mailu bolo úspešné",
"Provisioning API" : "Provisioning API",
- "This application enables a set of APIs that external systems can use to manage users, groups and apps." : "Táto aplikácia umožňuje nastavovať API, ktoré môžu používať externé systémy na správu používateľov, skupín a aplikácií.",
- "This application enables a set of APIs that external systems can use to create, edit, delete and query user\n\t\tattributes, query, set and remove groups, set quota and query total storage used in Nextcloud. Group admin users\n\t\tcan also query Nextcloud and perform the same functions as an admin for groups they manage. The API also enables\n\t\tan admin to query for active Nextcloud applications, application info, and to enable or disable an app remotely.\n\t\tOnce the app is enabled, HTTP requests can be used via a Basic Auth header to perform any of the functions\n\t\tlisted above. More information is available in the Provisioning API documentation, including example calls\n\t\tand server responses." : "Táto aplikácia umožňuje nastavovať API, ktoré môžu používať externé systémy na vytváranie, úpravy, mazanie a pýtanie sa na atribúty používateľov,\n\t\t,otázky na, nastavenie a odstránenie skupín, nastavenie kvóty, zistenie celkového využitia úložiska v NextCloude. Správcovia skupín\n\t\tmôžu využívať rovnaké funkcie ako správcovia pre skupiny, ktoré riadia. API tiež správcovi umožňuje\n\t\tdopytovať aktívne aplikácie NextCloudu, získať informácie o aplikáciách a zapnúť alebo vypnúť aplikácie na diaľku.\n\t\tAk je aplikácia zapnutá, HTTP požiadavky je možné použiť prostredníctvom Basic Auth záhlavia pre vykonanie akejkoľvek\t\tz vyššie spomenutých funkcií. Viac informácií je k dispozícii v dokumentácii k Provisioning API, spolu s príkladmi volaní\t\ta odpoveďami servra."
+ "This application enables a set of APIs that external systems can use to manage accounts, groups and apps." : "Táto aplikácia poskytuje sadu rozhraní API, ktoré môžu externé systémy používať na správu účtov, skupín a aplikácií.",
+ "This application enables a set of APIs that external systems can use to create, edit, delete and query account\n\t\tattributes, query, set and remove groups, set quota and query total storage used in Nextcloud. Group admin accounts\n\t\tcan also query Nextcloud and perform the same functions as an admin for groups they manage. The API also enables\n\t\tan admin to query for active Nextcloud applications, application info, and to enable or disable an app remotely.\n\t\tOnce the app is enabled, HTTP requests can be used via a Basic Auth header to perform any of the functions\n\t\tlisted above. More information is available in the Provisioning API documentation, including example calls\n\t\tand server responses." : "Táto aplikácia poskytuje množinu rozhraní API, ktoré môžu externé systémy použiť pre vytváranie, úpravu, odstraňovanie a získavanie informácii o účte\natribúty, dotazovanie, nastavenie a odstránenie skupín, nastavenie kvóty a dotaz na celkové úložisko používané v Nextcloud. Skupinové správcovské účty\nmôžu tiež dopytovať Nextcloud a vykonávať rovnaké funkcie ako správca pre skupiny, ktoré spravujú. Rozhranie API tiež poskytuje\nsprávcu, ktorý bude vyhľadávať aktívne aplikácie Nextcloud, informácie o aplikácii a povolí alebo zakázuje aplikácie na diaľku.\nKeď je aplikácia povolená, požiadavky HTTP možno použiť prostredníctvom hlavičky Basic Auth na vykonanie ktorejkoľvek z funkcií\nuvedených vyššie. Viac informácií je k dispozícii v dokumentácii Provisioning API vrátane príkladov volaní\na odpovedí servera."
},
"nplurals=4; plural=(n % 1 == 0 && n == 1 ? 0 : n % 1 == 0 && n >= 2 && n <= 4 ? 1 : n % 1 != 0 ? 2: 3);");
diff --git a/apps/provisioning_api/l10n/sk.json b/apps/provisioning_api/l10n/sk.json
index 906c7d40985..81d6561a079 100644
--- a/apps/provisioning_api/l10n/sk.json
+++ b/apps/provisioning_api/l10n/sk.json
@@ -1,6 +1,31 @@
{ "translations": {
- "Logged in user must be an administrator or have authorization to edit this setting." : "Prihlásený používateľ musí byť správcom, alebo musí mať špeciálne právo na prístup k tomuto nastaveniu.",
+ "Logged in account must be an administrator or have authorization to edit this setting." : "Prihlásený používateľ musí byť správcom, alebo musí mať špeciálne právo na uprávu k tohoto nastavenia.",
+ "Could not create non-existing user ID" : "Nie je možné vytvoriť neexistujúce ID užívateľa",
"User already exists" : "Používateľ už existuje",
+ "Group %1$s does not exist" : "Skupina %1$s neexistuje",
+ "Insufficient privileges for group %1$s" : "Nedostatočné práva pre skupinu %1$s",
+ "No group specified (required for sub-admins)" : "Nebola zadaná žiadna skupina (potrebné pre sub-administrátorov)",
+ "Sub-admin group does not exist" : "Pod-administrátorská skupina neexistuje",
+ "Cannot create sub-admins for admin group" : "Nemôžem vytvoriť pod-administrátorskú skupinu pre administrátorskú skupinu",
+ "No permissions to promote sub-admins" : "Na povýšenie pod-administrátorov nie sú práva",
+ "Invalid password value" : "Neplatná hodnota hesla",
+ "An email address is required, to send a password link to the user." : "E-mail adresa je vyžadovaná pre poslanie odkazu uživateľovi pre reset hesla.",
+ "Required email address was not provided" : "Nebola zadaná požadovaná e-mailová adresa",
+ "Invalid quota value: %1$s" : "Neplatná hodnota kvóty: %1$s",
+ "Invalid quota value. %1$s is exceeding the maximum quota" : "Neplatná hodnota pre kvótu %1$s je väčšia ako maximálna kvóta",
+ "Unlimited quota is forbidden on this instance" : "Kvóta bez limitu nie je na tejto inštancii povolená",
+ "Setting the password is not supported by the users backend" : "Nastavenie hesla nie je pre podporované uživateľským backenom",
+ "Invalid language" : "Neplatný jazyk",
+ "Invalid locale" : "Neplatné miestne nastavenie",
+ "Invalid first day of week" : "Neplatný prvý deň týždňa",
+ "Cannot remove yourself from the admin group" : "Nemôžete odstrániť samého seba zo skupiny administrátorov",
+ "Cannot remove yourself from this group as you are a sub-admin" : "Nemôžete odstrániť samého seba z tejto skupiny, pretože ste sub-administrátor",
+ "Not viable to remove user from the last group you are sub-admin of" : "Nie je možné odstrániť používateľa z poslednej skupiny, ktorej je pod-správcom",
+ "User does not exist" : "Užívateľ neexistuje",
+ "Group does not exist" : "Skupina neexistuje",
+ "User is not a sub-admin of this group" : "Užívateľ nie je sub-administrátor tejto skupiny",
+ "Email address not available" : "E-mailová adresa nie je dostupná",
+ "Sending email failed" : "Odosielanie e-mailu zlyhalo",
"Email confirmation" : "Overenie e-mailu",
"To enable the email address %s please click the button below." : "Pre povolenie e-mailovej adresy %s prosím kliknite na tlačítko nižšie.",
"Confirm" : "Potvrdiť",
@@ -10,7 +35,7 @@
"An unexpected error occurred. Please contact your admin." : "Vyskytla sa chyba. Prosím, kontaktujte svojho správcu.",
"Email confirmation successful" : "Overenie e-mailu bolo úspešné",
"Provisioning API" : "Provisioning API",
- "This application enables a set of APIs that external systems can use to manage users, groups and apps." : "Táto aplikácia umožňuje nastavovať API, ktoré môžu používať externé systémy na správu používateľov, skupín a aplikácií.",
- "This application enables a set of APIs that external systems can use to create, edit, delete and query user\n\t\tattributes, query, set and remove groups, set quota and query total storage used in Nextcloud. Group admin users\n\t\tcan also query Nextcloud and perform the same functions as an admin for groups they manage. The API also enables\n\t\tan admin to query for active Nextcloud applications, application info, and to enable or disable an app remotely.\n\t\tOnce the app is enabled, HTTP requests can be used via a Basic Auth header to perform any of the functions\n\t\tlisted above. More information is available in the Provisioning API documentation, including example calls\n\t\tand server responses." : "Táto aplikácia umožňuje nastavovať API, ktoré môžu používať externé systémy na vytváranie, úpravy, mazanie a pýtanie sa na atribúty používateľov,\n\t\t,otázky na, nastavenie a odstránenie skupín, nastavenie kvóty, zistenie celkového využitia úložiska v NextCloude. Správcovia skupín\n\t\tmôžu využívať rovnaké funkcie ako správcovia pre skupiny, ktoré riadia. API tiež správcovi umožňuje\n\t\tdopytovať aktívne aplikácie NextCloudu, získať informácie o aplikáciách a zapnúť alebo vypnúť aplikácie na diaľku.\n\t\tAk je aplikácia zapnutá, HTTP požiadavky je možné použiť prostredníctvom Basic Auth záhlavia pre vykonanie akejkoľvek\t\tz vyššie spomenutých funkcií. Viac informácií je k dispozícii v dokumentácii k Provisioning API, spolu s príkladmi volaní\t\ta odpoveďami servra."
+ "This application enables a set of APIs that external systems can use to manage accounts, groups and apps." : "Táto aplikácia poskytuje sadu rozhraní API, ktoré môžu externé systémy používať na správu účtov, skupín a aplikácií.",
+ "This application enables a set of APIs that external systems can use to create, edit, delete and query account\n\t\tattributes, query, set and remove groups, set quota and query total storage used in Nextcloud. Group admin accounts\n\t\tcan also query Nextcloud and perform the same functions as an admin for groups they manage. The API also enables\n\t\tan admin to query for active Nextcloud applications, application info, and to enable or disable an app remotely.\n\t\tOnce the app is enabled, HTTP requests can be used via a Basic Auth header to perform any of the functions\n\t\tlisted above. More information is available in the Provisioning API documentation, including example calls\n\t\tand server responses." : "Táto aplikácia poskytuje množinu rozhraní API, ktoré môžu externé systémy použiť pre vytváranie, úpravu, odstraňovanie a získavanie informácii o účte\natribúty, dotazovanie, nastavenie a odstránenie skupín, nastavenie kvóty a dotaz na celkové úložisko používané v Nextcloud. Skupinové správcovské účty\nmôžu tiež dopytovať Nextcloud a vykonávať rovnaké funkcie ako správca pre skupiny, ktoré spravujú. Rozhranie API tiež poskytuje\nsprávcu, ktorý bude vyhľadávať aktívne aplikácie Nextcloud, informácie o aplikácii a povolí alebo zakázuje aplikácie na diaľku.\nKeď je aplikácia povolená, požiadavky HTTP možno použiť prostredníctvom hlavičky Basic Auth na vykonanie ktorejkoľvek z funkcií\nuvedených vyššie. Viac informácií je k dispozícii v dokumentácii Provisioning API vrátane príkladov volaní\na odpovedí servera."
},"pluralForm" :"nplurals=4; plural=(n % 1 == 0 && n == 1 ? 0 : n % 1 == 0 && n >= 2 && n <= 4 ? 1 : n % 1 != 0 ? 2: 3);"
} \ No newline at end of file
diff --git a/apps/provisioning_api/l10n/sl.js b/apps/provisioning_api/l10n/sl.js
deleted file mode 100644
index 96bf5c7e3b2..00000000000
--- a/apps/provisioning_api/l10n/sl.js
+++ /dev/null
@@ -1,12 +0,0 @@
-OC.L10N.register(
- "provisioning_api",
- {
- "User already exists" : "Uporabnik že obstaja",
- "Email confirmation" : "Potrditev elektronskega naslova",
- "Confirm" : "Potrdi",
- "Email confirmation successful" : "Potrditev elektronskega naslov je uspela.",
- "Provisioning API" : "Vmesnik API za povezovanje",
- "This application enables a set of APIs that external systems can use to manage users, groups and apps." : "Program omogoča nastavitev vmesnikov API, ki jih zunanji sistemi lahko uporabijo za upravljanje uporabnikov, skupin in programov.",
- "This application enables a set of APIs that external systems can use to create, edit, delete and query user\n\t\tattributes, query, set and remove groups, set quota and query total storage used in Nextcloud. Group admin users\n\t\tcan also query Nextcloud and perform the same functions as an admin for groups they manage. The API also enables\n\t\tan admin to query for active Nextcloud applications, application info, and to enable or disable an app remotely.\n\t\tOnce the app is enabled, HTTP requests can be used via a Basic Auth header to perform any of the functions\n\t\tlisted above. More information is available in the Provisioning API documentation, including example calls\n\t\tand server responses." : "Program omogoča uporabo različnih vmesnikov, ki jih lahko zunanji sistemi uporabijo za ustvarjanje, urejanje, upravljanje in preverjanje\n\t\tatributov uporabnikov, poizvedb, upravljanje skupin, količinskih omejitev in nadzor na skupno uporabljenim prostorom v okolju. Skrbniki skupin\n\t\tlahko prav tako izvajajo dejavnosti za upravljanje skupin znotraj okolja. Vmesnik API omogoča\n\t\tskrbnikom pregled nad dejavnimi programi, podrobnostmi in upravljanje tudi na daljavo.\n\t\tKo je program enkrat zagnan, je mogoče pošiljati zahteve za izvajanje osnovnega postopka overjanja.\n\t\tVeč podrobnosti je na voljo v dokumentaciji za uporabo vmesnika, vključno s\n\t\tprimeri sklicev in odzivov strežnika."
-},
-"nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);");
diff --git a/apps/provisioning_api/l10n/sl.json b/apps/provisioning_api/l10n/sl.json
deleted file mode 100644
index 44572066c09..00000000000
--- a/apps/provisioning_api/l10n/sl.json
+++ /dev/null
@@ -1,10 +0,0 @@
-{ "translations": {
- "User already exists" : "Uporabnik že obstaja",
- "Email confirmation" : "Potrditev elektronskega naslova",
- "Confirm" : "Potrdi",
- "Email confirmation successful" : "Potrditev elektronskega naslov je uspela.",
- "Provisioning API" : "Vmesnik API za povezovanje",
- "This application enables a set of APIs that external systems can use to manage users, groups and apps." : "Program omogoča nastavitev vmesnikov API, ki jih zunanji sistemi lahko uporabijo za upravljanje uporabnikov, skupin in programov.",
- "This application enables a set of APIs that external systems can use to create, edit, delete and query user\n\t\tattributes, query, set and remove groups, set quota and query total storage used in Nextcloud. Group admin users\n\t\tcan also query Nextcloud and perform the same functions as an admin for groups they manage. The API also enables\n\t\tan admin to query for active Nextcloud applications, application info, and to enable or disable an app remotely.\n\t\tOnce the app is enabled, HTTP requests can be used via a Basic Auth header to perform any of the functions\n\t\tlisted above. More information is available in the Provisioning API documentation, including example calls\n\t\tand server responses." : "Program omogoča uporabo različnih vmesnikov, ki jih lahko zunanji sistemi uporabijo za ustvarjanje, urejanje, upravljanje in preverjanje\n\t\tatributov uporabnikov, poizvedb, upravljanje skupin, količinskih omejitev in nadzor na skupno uporabljenim prostorom v okolju. Skrbniki skupin\n\t\tlahko prav tako izvajajo dejavnosti za upravljanje skupin znotraj okolja. Vmesnik API omogoča\n\t\tskrbnikom pregled nad dejavnimi programi, podrobnostmi in upravljanje tudi na daljavo.\n\t\tKo je program enkrat zagnan, je mogoče pošiljati zahteve za izvajanje osnovnega postopka overjanja.\n\t\tVeč podrobnosti je na voljo v dokumentaciji za uporabo vmesnika, vključno s\n\t\tprimeri sklicev in odzivov strežnika."
-},"pluralForm" :"nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);"
-} \ No newline at end of file
diff --git a/apps/provisioning_api/l10n/sr.js b/apps/provisioning_api/l10n/sr.js
index 805c41c12a5..18101d231d4 100644
--- a/apps/provisioning_api/l10n/sr.js
+++ b/apps/provisioning_api/l10n/sr.js
@@ -1,8 +1,33 @@
OC.L10N.register(
"provisioning_api",
{
- "Logged in user must be an administrator or have authorization to edit this setting." : "Пријављени корисник мора бити администратор или мора да има дозволу да измени ово подешавање.",
+ "Logged in account must be an administrator or have authorization to edit this setting." : "Пријављени налог мора да буде администратор, или мора да поседује одобрење да уреди ово подешавање.",
+ "Could not create non-existing user ID" : "Не може да се креира ИД за корисника који не постоји",
"User already exists" : "Корисник већ постоји",
+ "Group %1$s does not exist" : "Група %1$s не постоји",
+ "Insufficient privileges for group %1$s" : "Нема довољно привилегија за групу %1$s",
+ "No group specified (required for sub-admins)" : "Није наведена ниједна група (потребно је за под-админе)",
+ "Sub-admin group does not exist" : "Не постоји група под-админа",
+ "Cannot create sub-admins for admin group" : "Не може да се креира група под-админа",
+ "No permissions to promote sub-admins" : "Нема дозвола да се унапреде под-админи",
+ "Invalid password value" : "Неисправна вредност лозинке",
+ "An email address is required, to send a password link to the user." : "За слање линка лозинке кориснику, неопходна је и-мејл адреса.",
+ "Required email address was not provided" : "Није наведена потребна и-мејл адреса",
+ "Invalid quota value: %1$s" : "Неисправна вредност квоте: %1$s",
+ "Invalid quota value. %1$s is exceeding the maximum quota" : "Неисправна вредност квоте. %1$s превазилази максималну квоту",
+ "Unlimited quota is forbidden on this instance" : "На овој инстанци је забрањена неограничена квота",
+ "Setting the password is not supported by the users backend" : "Позадински механизам за кориснике не подржава постављање лозинке",
+ "Invalid language" : "Неисправни језик",
+ "Invalid locale" : "Неисправни локалитет",
+ "Invalid first day of week" : "Неисправан први дан недеље",
+ "Cannot remove yourself from the admin group" : "Не можете да уклоните себе из админ групе",
+ "Cannot remove yourself from this group as you are a sub-admin" : "Не можете да уклоните себе из ове групе јер сте под-админ",
+ "Not viable to remove user from the last group you are sub-admin of" : "Није одрживо да се уклони корисник иза последње групе којој сте под-админ",
+ "User does not exist" : "Корисник не постоји",
+ "Group does not exist" : "Група не постоји",
+ "User is not a sub-admin of this group" : "Корисник није под-админ ове групе",
+ "Email address not available" : "Није доступна и-мејл адреса",
+ "Sending email failed" : "Није успело слање и-мејла",
"Email confirmation" : "Потврда и-мејла",
"To enable the email address %s please click the button below." : "Ако желите да укључите и-мејл адресу %s молимо вас да кликнете на дугме испод.",
"Confirm" : "Потврди",
@@ -12,7 +37,7 @@ OC.L10N.register(
"An unexpected error occurred. Please contact your admin." : "Дошло је до неочекиване грешке. Молимо вас да контактирате свог админа.",
"Email confirmation successful" : "Потврда и-мејла је успела",
"Provisioning API" : "API добављања ",
- "This application enables a set of APIs that external systems can use to manage users, groups and apps." : "Ова апликација укључује скуп API-ја које спољни системи могу да користе за управљање корисницима, групама и апликацијама.",
- "This application enables a set of APIs that external systems can use to create, edit, delete and query user\n\t\tattributes, query, set and remove groups, set quota and query total storage used in Nextcloud. Group admin users\n\t\tcan also query Nextcloud and perform the same functions as an admin for groups they manage. The API also enables\n\t\tan admin to query for active Nextcloud applications, application info, and to enable or disable an app remotely.\n\t\tOnce the app is enabled, HTTP requests can be used via a Basic Auth header to perform any of the functions\n\t\tlisted above. More information is available in the Provisioning API documentation, including example calls\n\t\tand server responses." : "Ова апликација укључује скуп API-апија које спољни ситеми могу да користе за креирање, уређивање, брисање корисника, постављају упите о\n\t\tатрибутима корисника, креирају или уклањају групе, постављају упите о групама, постављају квоте и упите о укупном складишту које се користи у Некстклауду. Корисници админ групе\n\t\tтакође могу да врше упит Некстклауду и обаве исте функције као админ за групе којима управљају. API такође омогућава\n\t\tадмину да врши упит о активним Некстклауд апликаицијама, информацијама о апликацији и да даљински укључе или искључе апликацију.\n\t\tЈедном када се апликација укључи, било која функција наведена изнад може да се изврши прихватањем HTTP захтева кроз Basic Auth заглавље.\n\t\tВише информација се налази у докментацији за API добављања, као и примери позива\n\t\tи одговора сервера."
+ "This application enables a set of APIs that external systems can use to manage accounts, groups and apps." : "Ова апликација укључује скуп API-ја које спољни системи могу да користе за управљање налозима, групама и апликацијама.",
+ "This application enables a set of APIs that external systems can use to create, edit, delete and query account\n\t\tattributes, query, set and remove groups, set quota and query total storage used in Nextcloud. Group admin accounts\n\t\tcan also query Nextcloud and perform the same functions as an admin for groups they manage. The API also enables\n\t\tan admin to query for active Nextcloud applications, application info, and to enable or disable an app remotely.\n\t\tOnce the app is enabled, HTTP requests can be used via a Basic Auth header to perform any of the functions\n\t\tlisted above. More information is available in the Provisioning API documentation, including example calls\n\t\tand server responses." : "Ова апликација укључује скуп API-апија које спољни ситеми могу да користе за креирање, уређивање, брисање корисника, постављају упите о\n\t\tатрибутима налога, креирају или уклањају групе, постављају упите о групама, постављају квоте и упите о укупном складишту које се користи у Nextcloud. Налози админ групе\n\t\tтакође могу да врше упит Nextcloud и обаве исте функције као админ за групе којима управљају. API такође омогућава\n\t\tадмину да врши упит о активним Nextcloud апликацијама, информацијама о апликацији и да даљински укључе или искључе апликацију.\n\t\tЈедном када се апликација укључи, било која функција наведена изнад може да се изврши прихватањем HTTP захтева кроз Basic Auth заглавље.\n\t\tВише информација се налази у докментацији за API добављања, као и примери позива\n\t\tи одговора сервера."
},
"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);");
diff --git a/apps/provisioning_api/l10n/sr.json b/apps/provisioning_api/l10n/sr.json
index bbcdeab576d..aa311566bfc 100644
--- a/apps/provisioning_api/l10n/sr.json
+++ b/apps/provisioning_api/l10n/sr.json
@@ -1,6 +1,31 @@
{ "translations": {
- "Logged in user must be an administrator or have authorization to edit this setting." : "Пријављени корисник мора бити администратор или мора да има дозволу да измени ово подешавање.",
+ "Logged in account must be an administrator or have authorization to edit this setting." : "Пријављени налог мора да буде администратор, или мора да поседује одобрење да уреди ово подешавање.",
+ "Could not create non-existing user ID" : "Не може да се креира ИД за корисника који не постоји",
"User already exists" : "Корисник већ постоји",
+ "Group %1$s does not exist" : "Група %1$s не постоји",
+ "Insufficient privileges for group %1$s" : "Нема довољно привилегија за групу %1$s",
+ "No group specified (required for sub-admins)" : "Није наведена ниједна група (потребно је за под-админе)",
+ "Sub-admin group does not exist" : "Не постоји група под-админа",
+ "Cannot create sub-admins for admin group" : "Не може да се креира група под-админа",
+ "No permissions to promote sub-admins" : "Нема дозвола да се унапреде под-админи",
+ "Invalid password value" : "Неисправна вредност лозинке",
+ "An email address is required, to send a password link to the user." : "За слање линка лозинке кориснику, неопходна је и-мејл адреса.",
+ "Required email address was not provided" : "Није наведена потребна и-мејл адреса",
+ "Invalid quota value: %1$s" : "Неисправна вредност квоте: %1$s",
+ "Invalid quota value. %1$s is exceeding the maximum quota" : "Неисправна вредност квоте. %1$s превазилази максималну квоту",
+ "Unlimited quota is forbidden on this instance" : "На овој инстанци је забрањена неограничена квота",
+ "Setting the password is not supported by the users backend" : "Позадински механизам за кориснике не подржава постављање лозинке",
+ "Invalid language" : "Неисправни језик",
+ "Invalid locale" : "Неисправни локалитет",
+ "Invalid first day of week" : "Неисправан први дан недеље",
+ "Cannot remove yourself from the admin group" : "Не можете да уклоните себе из админ групе",
+ "Cannot remove yourself from this group as you are a sub-admin" : "Не можете да уклоните себе из ове групе јер сте под-админ",
+ "Not viable to remove user from the last group you are sub-admin of" : "Није одрживо да се уклони корисник иза последње групе којој сте под-админ",
+ "User does not exist" : "Корисник не постоји",
+ "Group does not exist" : "Група не постоји",
+ "User is not a sub-admin of this group" : "Корисник није под-админ ове групе",
+ "Email address not available" : "Није доступна и-мејл адреса",
+ "Sending email failed" : "Није успело слање и-мејла",
"Email confirmation" : "Потврда и-мејла",
"To enable the email address %s please click the button below." : "Ако желите да укључите и-мејл адресу %s молимо вас да кликнете на дугме испод.",
"Confirm" : "Потврди",
@@ -10,7 +35,7 @@
"An unexpected error occurred. Please contact your admin." : "Дошло је до неочекиване грешке. Молимо вас да контактирате свог админа.",
"Email confirmation successful" : "Потврда и-мејла је успела",
"Provisioning API" : "API добављања ",
- "This application enables a set of APIs that external systems can use to manage users, groups and apps." : "Ова апликација укључује скуп API-ја које спољни системи могу да користе за управљање корисницима, групама и апликацијама.",
- "This application enables a set of APIs that external systems can use to create, edit, delete and query user\n\t\tattributes, query, set and remove groups, set quota and query total storage used in Nextcloud. Group admin users\n\t\tcan also query Nextcloud and perform the same functions as an admin for groups they manage. The API also enables\n\t\tan admin to query for active Nextcloud applications, application info, and to enable or disable an app remotely.\n\t\tOnce the app is enabled, HTTP requests can be used via a Basic Auth header to perform any of the functions\n\t\tlisted above. More information is available in the Provisioning API documentation, including example calls\n\t\tand server responses." : "Ова апликација укључује скуп API-апија које спољни ситеми могу да користе за креирање, уређивање, брисање корисника, постављају упите о\n\t\tатрибутима корисника, креирају или уклањају групе, постављају упите о групама, постављају квоте и упите о укупном складишту које се користи у Некстклауду. Корисници админ групе\n\t\tтакође могу да врше упит Некстклауду и обаве исте функције као админ за групе којима управљају. API такође омогућава\n\t\tадмину да врши упит о активним Некстклауд апликаицијама, информацијама о апликацији и да даљински укључе или искључе апликацију.\n\t\tЈедном када се апликација укључи, било која функција наведена изнад може да се изврши прихватањем HTTP захтева кроз Basic Auth заглавље.\n\t\tВише информација се налази у докментацији за API добављања, као и примери позива\n\t\tи одговора сервера."
+ "This application enables a set of APIs that external systems can use to manage accounts, groups and apps." : "Ова апликација укључује скуп API-ја које спољни системи могу да користе за управљање налозима, групама и апликацијама.",
+ "This application enables a set of APIs that external systems can use to create, edit, delete and query account\n\t\tattributes, query, set and remove groups, set quota and query total storage used in Nextcloud. Group admin accounts\n\t\tcan also query Nextcloud and perform the same functions as an admin for groups they manage. The API also enables\n\t\tan admin to query for active Nextcloud applications, application info, and to enable or disable an app remotely.\n\t\tOnce the app is enabled, HTTP requests can be used via a Basic Auth header to perform any of the functions\n\t\tlisted above. More information is available in the Provisioning API documentation, including example calls\n\t\tand server responses." : "Ова апликација укључује скуп API-апија које спољни ситеми могу да користе за креирање, уређивање, брисање корисника, постављају упите о\n\t\tатрибутима налога, креирају или уклањају групе, постављају упите о групама, постављају квоте и упите о укупном складишту које се користи у Nextcloud. Налози админ групе\n\t\tтакође могу да врше упит Nextcloud и обаве исте функције као админ за групе којима управљају. API такође омогућава\n\t\tадмину да врши упит о активним Nextcloud апликацијама, информацијама о апликацији и да даљински укључе или искључе апликацију.\n\t\tЈедном када се апликација укључи, било која функција наведена изнад може да се изврши прихватањем HTTP захтева кроз Basic Auth заглавље.\n\t\tВише информација се налази у докментацији за API добављања, као и примери позива\n\t\tи одговора сервера."
},"pluralForm" :"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);"
} \ No newline at end of file
diff --git a/apps/provisioning_api/l10n/sv.js b/apps/provisioning_api/l10n/sv.js
index 776f32a03ea..021f3bb02c0 100644
--- a/apps/provisioning_api/l10n/sv.js
+++ b/apps/provisioning_api/l10n/sv.js
@@ -1,8 +1,20 @@
OC.L10N.register(
"provisioning_api",
{
- "Logged in user must be an administrator or have authorization to edit this setting." : "Inloggad användare måste vara en administratör eller ha auktorisering för att ändra denna inställning.",
+ "Logged in account must be an administrator or have authorization to edit this setting." : "Inloggat konto måste vara en administratör eller ha behörighet att ändra denna inställning.",
+ "Could not create non-existing user ID" : "Kunde inte skapa ej existerande användar-ID",
"User already exists" : "Användaren finns redan",
+ "Group %1$s does not exist" : "Grupp %1$s existerar inte",
+ "Insufficient privileges for group %1$s" : "Otillräckliga privilegier för grupp %1$s",
+ "No group specified (required for sub-admins)" : "Ingen grupp specificerad (krävs för underadministratörer)",
+ "Invalid password value" : "Ogiltigt lösenords-värde",
+ "Unlimited quota is forbidden on this instance" : "Obegränsad kvot är inte tillåtet på denna instans",
+ "Invalid language" : "Ogiltigt språk",
+ "Invalid locale" : "Ogiltigt språkområde",
+ "User does not exist" : "Användare existerar inte",
+ "Group does not exist" : "Grupp existerar inte",
+ "Email address not available" : "E-postadress är inte tillgänglig",
+ "Sending email failed" : "Utskick av e-postmeddelande misslyckades",
"Email confirmation" : "E-postverifikation",
"To enable the email address %s please click the button below." : "För att aktivera e-postadressen %s vänligen klicka på knappen nedanför.",
"Confirm" : "Bekräfta",
@@ -11,8 +23,6 @@ OC.L10N.register(
"Could not verify mail because the token is invalid." : "Kunde inte verifiera e-postadressen eftersom verifikationskoden är inkorrekt.",
"An unexpected error occurred. Please contact your admin." : "Ett oväntat fel har uppkommit. Vänligen kontakta din administratör.",
"Email confirmation successful" : "E-postbekräftelsen lyckades",
- "Provisioning API" : "Distribuerings API",
- "This application enables a set of APIs that external systems can use to manage users, groups and apps." : "Den här appen aktiverar API:s som externa system kan använda för att hantera användare, grupper och andra appar.",
- "This application enables a set of APIs that external systems can use to create, edit, delete and query user\n\t\tattributes, query, set and remove groups, set quota and query total storage used in Nextcloud. Group admin users\n\t\tcan also query Nextcloud and perform the same functions as an admin for groups they manage. The API also enables\n\t\tan admin to query for active Nextcloud applications, application info, and to enable or disable an app remotely.\n\t\tOnce the app is enabled, HTTP requests can be used via a Basic Auth header to perform any of the functions\n\t\tlisted above. More information is available in the Provisioning API documentation, including example calls\n\t\tand server responses." : "Den här appen aktiverar ett antal API -ändpunkter som externa system kan använda för att skapa, ändra, ta bort och söka användarattribut\n\t\tsöka, konfigurera och ta bort grupper, konfigurera användarkvoter och se den använda lagringen i Nextcloud. Gruppadministratörer kan också utföra samma funktioner som en server-administratör för den grupp de administrerar. API:n tillåter även administratörer att söka efter aktiva appar, appinfo samt aktivera/inaktivera dem på avstånd.\n\t\tNär appen är aktiverad kan HTTP-anrop användas genom en Basic Aunth header för att genomföra samtliga av de ovanstående funktionerna. Mer information finns tillgänglig i dokumentationen, där även exempel på anrop och serversvar återfinns."
+ "Provisioning API" : "Distribuerings API"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/provisioning_api/l10n/sv.json b/apps/provisioning_api/l10n/sv.json
index aadfe9b2802..2485c5d8966 100644
--- a/apps/provisioning_api/l10n/sv.json
+++ b/apps/provisioning_api/l10n/sv.json
@@ -1,6 +1,18 @@
{ "translations": {
- "Logged in user must be an administrator or have authorization to edit this setting." : "Inloggad användare måste vara en administratör eller ha auktorisering för att ändra denna inställning.",
+ "Logged in account must be an administrator or have authorization to edit this setting." : "Inloggat konto måste vara en administratör eller ha behörighet att ändra denna inställning.",
+ "Could not create non-existing user ID" : "Kunde inte skapa ej existerande användar-ID",
"User already exists" : "Användaren finns redan",
+ "Group %1$s does not exist" : "Grupp %1$s existerar inte",
+ "Insufficient privileges for group %1$s" : "Otillräckliga privilegier för grupp %1$s",
+ "No group specified (required for sub-admins)" : "Ingen grupp specificerad (krävs för underadministratörer)",
+ "Invalid password value" : "Ogiltigt lösenords-värde",
+ "Unlimited quota is forbidden on this instance" : "Obegränsad kvot är inte tillåtet på denna instans",
+ "Invalid language" : "Ogiltigt språk",
+ "Invalid locale" : "Ogiltigt språkområde",
+ "User does not exist" : "Användare existerar inte",
+ "Group does not exist" : "Grupp existerar inte",
+ "Email address not available" : "E-postadress är inte tillgänglig",
+ "Sending email failed" : "Utskick av e-postmeddelande misslyckades",
"Email confirmation" : "E-postverifikation",
"To enable the email address %s please click the button below." : "För att aktivera e-postadressen %s vänligen klicka på knappen nedanför.",
"Confirm" : "Bekräfta",
@@ -9,8 +21,6 @@
"Could not verify mail because the token is invalid." : "Kunde inte verifiera e-postadressen eftersom verifikationskoden är inkorrekt.",
"An unexpected error occurred. Please contact your admin." : "Ett oväntat fel har uppkommit. Vänligen kontakta din administratör.",
"Email confirmation successful" : "E-postbekräftelsen lyckades",
- "Provisioning API" : "Distribuerings API",
- "This application enables a set of APIs that external systems can use to manage users, groups and apps." : "Den här appen aktiverar API:s som externa system kan använda för att hantera användare, grupper och andra appar.",
- "This application enables a set of APIs that external systems can use to create, edit, delete and query user\n\t\tattributes, query, set and remove groups, set quota and query total storage used in Nextcloud. Group admin users\n\t\tcan also query Nextcloud and perform the same functions as an admin for groups they manage. The API also enables\n\t\tan admin to query for active Nextcloud applications, application info, and to enable or disable an app remotely.\n\t\tOnce the app is enabled, HTTP requests can be used via a Basic Auth header to perform any of the functions\n\t\tlisted above. More information is available in the Provisioning API documentation, including example calls\n\t\tand server responses." : "Den här appen aktiverar ett antal API -ändpunkter som externa system kan använda för att skapa, ändra, ta bort och söka användarattribut\n\t\tsöka, konfigurera och ta bort grupper, konfigurera användarkvoter och se den använda lagringen i Nextcloud. Gruppadministratörer kan också utföra samma funktioner som en server-administratör för den grupp de administrerar. API:n tillåter även administratörer att söka efter aktiva appar, appinfo samt aktivera/inaktivera dem på avstånd.\n\t\tNär appen är aktiverad kan HTTP-anrop användas genom en Basic Aunth header för att genomföra samtliga av de ovanstående funktionerna. Mer information finns tillgänglig i dokumentationen, där även exempel på anrop och serversvar återfinns."
+ "Provisioning API" : "Distribuerings API"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/provisioning_api/l10n/sw.js b/apps/provisioning_api/l10n/sw.js
new file mode 100644
index 00000000000..5e6836a351c
--- /dev/null
+++ b/apps/provisioning_api/l10n/sw.js
@@ -0,0 +1,44 @@
+OC.L10N.register(
+ "provisioning_api",
+ {
+ "Logged in account must be an administrator or have authorization to edit this setting." : "Akaunti iliyoingia lazima iwe msimamizi au iwe na idhini ya kuhariri mpangilio huu.",
+ "Could not create non-existing user ID" : "Haikuweza kuunda kitambulisho cha mtumiaji ambacho hakipo",
+ "User already exists" : "Mtumiaji tayari yupo",
+ "Group %1$s does not exist" : "Kikundi %1$s hakipo",
+ "Insufficient privileges for group %1$s" : "Mapendeleo yasiyotosha kwa kikundi %1$s",
+ "No group specified (required for sub-admins)" : "Hakuna kikundi kilichobainishwa (kinahitajika kwa wasimamizi wadogo)",
+ "Sub-admin group does not exist" : "Kikundi cha msimamizi mdogo hakipo",
+ "Cannot create sub-admins for admin group" : "Haiwezi kuunda wasimamizi wadogo wa kikundi cha wasimamizi",
+ "No permissions to promote sub-admins" : "Hakuna ruhusa za kukuza wasimamizi wadogo",
+ "Invalid password value" : "Thamani ya nenosiri si sahihi",
+ "An email address is required, to send a password link to the user." : "Barua pepe inahitajika, kutuma kiungo cha nenosiri kwa mtumiaji.",
+ "Required email address was not provided" : "Barua pepe inayohitajika haikutolewa",
+ "User creation failed" : "Imeshindwa kuunda mtumiaji",
+ "Invalid quota value: %1$s" : "Thamani ya mgao batili: %1$s",
+ "Invalid quota value. %1$s is exceeding the maximum quota" : "Thamani batili ya mgao. %1$s inazidi kiwango cha juu cha mgawo",
+ "Unlimited quota is forbidden on this instance" : "Kiasi kisicho na kikomo ni marufuku katika kesi hii",
+ "Setting the password is not supported by the users backend" : "Kuweka nenosiri hakuhimiliwi na mazingira ya nyuma ya watumiaji",
+ "Invalid language" : "Lugha batili",
+ "Invalid locale" : "Lugha isiyo sahihi",
+ "Invalid first day of week" : "Siku ya kwanza ya wiki si sahihi",
+ "Cannot remove yourself from the admin group" : "Huwezi kujiondoa kutoka kwa kikundi cha wasimamizi",
+ "Cannot remove yourself from this group as you are a sub-admin" : "Huwezi kujiondoa kwenye kikundi hiki kwa kuwa wewe ni msimamizi mdogo",
+ "Not viable to remove user from the last group you are sub-admin of" : "Haiwezekani kuondoa mtumiaji kutoka kwa kikundi cha mwisho ambacho wewe ni msimamizi mdogo",
+ "User does not exist" : "Mtumiaji hayupo",
+ "Group does not exist" : "Kikundi hakipo",
+ "User is not a sub-admin of this group" : "Mtumiaji si msimamizi mdogo wa kikundi hiki",
+ "Email address not available" : "Anwani ya barua pepe haipatikani",
+ "Sending email failed" : "Imeshindwa kutuma barua pepe",
+ "Email confirmation" : "Uthibitishaji wa barua pepe",
+ "To enable the email address %s please click the button below." : "Ili kuwezesha anwani ya barua pepe %s tafadhali bofya kitufe kilicho hapa chini.",
+ "Confirm" : "Thibitisha",
+ "Email was already removed from account and cannot be confirmed anymore." : "Barua pepe ilikuwa tayari imeondolewa kwenye akaunti na haiwezi kuthibitishwa tena.",
+ "Could not verify mail because the token is expired." : "Haikuweza kuthibitisha barua kwa sababu tokeni imeisha muda wake.",
+ "Could not verify mail because the token is invalid." : "Haikuweza kuthibitisha barua kwa sababu tokeni si sahihi.",
+ "An unexpected error occurred. Please contact your admin." : "Hitilafu isiyotarajiwa imetokea. Tafadhali wasiliana na msimamizi wako.",
+ "Email confirmation successful" : "Uthibitisho wa barua pepe umefanikiwa",
+ "Provisioning API" : "API ya utoaji",
+ "This application enables a set of APIs that external systems can use to manage accounts, groups and apps." : "Programu hii huwezesha seti ya API ambazo mifumo ya nje inaweza kutumia kudhibiti akaunti, vikundi na programu.",
+ "This application enables a set of APIs that external systems can use to create, edit, delete and query account\n\t\tattributes, query, set and remove groups, set quota and query total storage used in Nextcloud. Group admin accounts\n\t\tcan also query Nextcloud and perform the same functions as an admin for groups they manage. The API also enables\n\t\tan admin to query for active Nextcloud applications, application info, and to enable or disable an app remotely.\n\t\tOnce the app is enabled, HTTP requests can be used via a Basic Auth header to perform any of the functions\n\t\tlisted above. More information is available in the Provisioning API documentation, including example calls\n\t\tand server responses." : "Programu hii huwezesha seti ya API ambazo mifumo ya nje inaweza kutumia kuunda, kuhariri, kufuta na kuuliza akaunti\n\t\tsifa, uliza, weka na uondoe vikundi, weka kiasi na uulize jumla ya hifadhi inayotumika kwenye Nextcloud. Akaunti za msimamizi wa kikundi\n\t\tanaweza pia kuuliza Nextcloud na kutekeleza utendakazi sawa na msimamizi wa vikundi anavyosimamia. API pia inawezesha\n\t\tmsimamizi ili kuuliza maswali kuhusu programu zinazotumika za Nextcloud, maelezo ya programu, na kuwasha au kuzima programu kwa mbali.\n\t\tBaada ya programu kuwashwa, maombi ya HTTP yanaweza kutumika kupitia kichwa cha Uandishi wa Msingi kutekeleza utendakazi wowote.\n\t\tiliyoorodheshwa hapo juu. Maelezo zaidi yanapatikana katika hati za API ya Utoaji, ikijumuisha simu za mfano\n\t\tna majibu ya seva."
+},
+"nplurals=2; plural=(n != 1);");
diff --git a/apps/provisioning_api/l10n/sw.json b/apps/provisioning_api/l10n/sw.json
new file mode 100644
index 00000000000..0b1c4555d81
--- /dev/null
+++ b/apps/provisioning_api/l10n/sw.json
@@ -0,0 +1,42 @@
+{ "translations": {
+ "Logged in account must be an administrator or have authorization to edit this setting." : "Akaunti iliyoingia lazima iwe msimamizi au iwe na idhini ya kuhariri mpangilio huu.",
+ "Could not create non-existing user ID" : "Haikuweza kuunda kitambulisho cha mtumiaji ambacho hakipo",
+ "User already exists" : "Mtumiaji tayari yupo",
+ "Group %1$s does not exist" : "Kikundi %1$s hakipo",
+ "Insufficient privileges for group %1$s" : "Mapendeleo yasiyotosha kwa kikundi %1$s",
+ "No group specified (required for sub-admins)" : "Hakuna kikundi kilichobainishwa (kinahitajika kwa wasimamizi wadogo)",
+ "Sub-admin group does not exist" : "Kikundi cha msimamizi mdogo hakipo",
+ "Cannot create sub-admins for admin group" : "Haiwezi kuunda wasimamizi wadogo wa kikundi cha wasimamizi",
+ "No permissions to promote sub-admins" : "Hakuna ruhusa za kukuza wasimamizi wadogo",
+ "Invalid password value" : "Thamani ya nenosiri si sahihi",
+ "An email address is required, to send a password link to the user." : "Barua pepe inahitajika, kutuma kiungo cha nenosiri kwa mtumiaji.",
+ "Required email address was not provided" : "Barua pepe inayohitajika haikutolewa",
+ "User creation failed" : "Imeshindwa kuunda mtumiaji",
+ "Invalid quota value: %1$s" : "Thamani ya mgao batili: %1$s",
+ "Invalid quota value. %1$s is exceeding the maximum quota" : "Thamani batili ya mgao. %1$s inazidi kiwango cha juu cha mgawo",
+ "Unlimited quota is forbidden on this instance" : "Kiasi kisicho na kikomo ni marufuku katika kesi hii",
+ "Setting the password is not supported by the users backend" : "Kuweka nenosiri hakuhimiliwi na mazingira ya nyuma ya watumiaji",
+ "Invalid language" : "Lugha batili",
+ "Invalid locale" : "Lugha isiyo sahihi",
+ "Invalid first day of week" : "Siku ya kwanza ya wiki si sahihi",
+ "Cannot remove yourself from the admin group" : "Huwezi kujiondoa kutoka kwa kikundi cha wasimamizi",
+ "Cannot remove yourself from this group as you are a sub-admin" : "Huwezi kujiondoa kwenye kikundi hiki kwa kuwa wewe ni msimamizi mdogo",
+ "Not viable to remove user from the last group you are sub-admin of" : "Haiwezekani kuondoa mtumiaji kutoka kwa kikundi cha mwisho ambacho wewe ni msimamizi mdogo",
+ "User does not exist" : "Mtumiaji hayupo",
+ "Group does not exist" : "Kikundi hakipo",
+ "User is not a sub-admin of this group" : "Mtumiaji si msimamizi mdogo wa kikundi hiki",
+ "Email address not available" : "Anwani ya barua pepe haipatikani",
+ "Sending email failed" : "Imeshindwa kutuma barua pepe",
+ "Email confirmation" : "Uthibitishaji wa barua pepe",
+ "To enable the email address %s please click the button below." : "Ili kuwezesha anwani ya barua pepe %s tafadhali bofya kitufe kilicho hapa chini.",
+ "Confirm" : "Thibitisha",
+ "Email was already removed from account and cannot be confirmed anymore." : "Barua pepe ilikuwa tayari imeondolewa kwenye akaunti na haiwezi kuthibitishwa tena.",
+ "Could not verify mail because the token is expired." : "Haikuweza kuthibitisha barua kwa sababu tokeni imeisha muda wake.",
+ "Could not verify mail because the token is invalid." : "Haikuweza kuthibitisha barua kwa sababu tokeni si sahihi.",
+ "An unexpected error occurred. Please contact your admin." : "Hitilafu isiyotarajiwa imetokea. Tafadhali wasiliana na msimamizi wako.",
+ "Email confirmation successful" : "Uthibitisho wa barua pepe umefanikiwa",
+ "Provisioning API" : "API ya utoaji",
+ "This application enables a set of APIs that external systems can use to manage accounts, groups and apps." : "Programu hii huwezesha seti ya API ambazo mifumo ya nje inaweza kutumia kudhibiti akaunti, vikundi na programu.",
+ "This application enables a set of APIs that external systems can use to create, edit, delete and query account\n\t\tattributes, query, set and remove groups, set quota and query total storage used in Nextcloud. Group admin accounts\n\t\tcan also query Nextcloud and perform the same functions as an admin for groups they manage. The API also enables\n\t\tan admin to query for active Nextcloud applications, application info, and to enable or disable an app remotely.\n\t\tOnce the app is enabled, HTTP requests can be used via a Basic Auth header to perform any of the functions\n\t\tlisted above. More information is available in the Provisioning API documentation, including example calls\n\t\tand server responses." : "Programu hii huwezesha seti ya API ambazo mifumo ya nje inaweza kutumia kuunda, kuhariri, kufuta na kuuliza akaunti\n\t\tsifa, uliza, weka na uondoe vikundi, weka kiasi na uulize jumla ya hifadhi inayotumika kwenye Nextcloud. Akaunti za msimamizi wa kikundi\n\t\tanaweza pia kuuliza Nextcloud na kutekeleza utendakazi sawa na msimamizi wa vikundi anavyosimamia. API pia inawezesha\n\t\tmsimamizi ili kuuliza maswali kuhusu programu zinazotumika za Nextcloud, maelezo ya programu, na kuwasha au kuzima programu kwa mbali.\n\t\tBaada ya programu kuwashwa, maombi ya HTTP yanaweza kutumika kupitia kichwa cha Uandishi wa Msingi kutekeleza utendakazi wowote.\n\t\tiliyoorodheshwa hapo juu. Maelezo zaidi yanapatikana katika hati za API ya Utoaji, ikijumuisha simu za mfano\n\t\tna majibu ya seva."
+},"pluralForm" :"nplurals=2; plural=(n != 1);"
+} \ No newline at end of file
diff --git a/apps/provisioning_api/l10n/tr.js b/apps/provisioning_api/l10n/tr.js
index 1dcef141d48..db6d11429bb 100644
--- a/apps/provisioning_api/l10n/tr.js
+++ b/apps/provisioning_api/l10n/tr.js
@@ -1,8 +1,33 @@
OC.L10N.register(
"provisioning_api",
{
- "Logged in user must be an administrator or have authorization to edit this setting." : "Oturum açmış kullanıcı bir yönetici olmalı ya da bu ayarı düzenleme izni olmalıdır.",
+ "Logged in account must be an administrator or have authorization to edit this setting." : "Oturum açmış hesap bir yönetici olmalı ya da bu ayarı düzenleme izni olmalıdır.",
+ "Could not create non-existing user ID" : "Var olmayan kullanıcı kimliği oluşturulamadı",
"User already exists" : "Kullanıcı zaten var",
+ "Group %1$s does not exist" : "%1$s grubu bulunamadı",
+ "Insufficient privileges for group %1$s" : "%1$s grubu için izinler yetersiz",
+ "No group specified (required for sub-admins)" : "Herhangi bir grup belirtilmemiş (alt yöneticiler için gereklidir)",
+ "Sub-admin group does not exist" : "Alt yönetici grubu bulunamadı",
+ "Cannot create sub-admins for admin group" : "Yönetici grubu için alt yöneticiler oluşturulamadı",
+ "No permissions to promote sub-admins" : "Alt yöneticileri yükseltme izni yok",
+ "Invalid password value" : "Parola değeri geçersiz",
+ "An email address is required, to send a password link to the user." : "Kullanıcıya bir parola bağlantısı gönderebilmek için bir e-posta adresi gereklidir.",
+ "Required email address was not provided" : "Gerekli e-posta adresi belirtilmemiş",
+ "Invalid quota value: %1$s" : "Kota değeri geçersiz: %1$s",
+ "Invalid quota value. %1$s is exceeding the maximum quota" : "Kota değeri geçersiz. %1$s en fazla kota değerini aşıyor",
+ "Unlimited quota is forbidden on this instance" : "Bu kopyada sınırsız kota kullanılamaz",
+ "Setting the password is not supported by the users backend" : "Kullanıcı arka yüzünden parola ayarlanamaz",
+ "Invalid language" : "Dil geçersiz",
+ "Invalid locale" : "Yerel ayar geçersiz",
+ "Invalid first day of week" : "Haftanın ilk günü geçersiz",
+ "Cannot remove yourself from the admin group" : "Kendinizi yönetici grubundan çıkaramazsınız",
+ "Cannot remove yourself from this group as you are a sub-admin" : "Bir alt yönetici olduğunuzdan kendinizi bu gruptan çıkaramazsınız",
+ "Not viable to remove user from the last group you are sub-admin of" : "Alt yöneticisi olduğunuz son gruptan kullanıcıyı kaldıramazsınız",
+ "User does not exist" : "Kullanıcı bulunamadı",
+ "Group does not exist" : "Grup bulunamadı",
+ "User is not a sub-admin of this group" : "Kullanıcı bu grubun bir alt yöneticisi değil",
+ "Email address not available" : "E-posta adresi kullanılamaz",
+ "Sending email failed" : "E-posta gönderilemedi",
"Email confirmation" : "E-posta doğrulaması",
"To enable the email address %s please click the button below." : "%s e-posta adresini doğrulamak için aşağıdaki düğmeye tıklayın.",
"Confirm" : "Onayla",
@@ -12,7 +37,7 @@ OC.L10N.register(
"An unexpected error occurred. Please contact your admin." : "Beklenmeyen bir sorun çıktı. Lütfen BT yöneticiniz ile görüşün.",
"Email confirmation successful" : "E-posta onaylandı",
"Provisioning API" : "Karşılama API",
- "This application enables a set of APIs that external systems can use to manage users, groups and apps." : "Bu uygulama, dış sistemlerin kullanıcıları, grupları ve uygulamaları yönetmek için kullanabileceği bir dizi API uygulaması sağlar.",
- "This application enables a set of APIs that external systems can use to create, edit, delete and query user\n\t\tattributes, query, set and remove groups, set quota and query total storage used in Nextcloud. Group admin users\n\t\tcan also query Nextcloud and perform the same functions as an admin for groups they manage. The API also enables\n\t\tan admin to query for active Nextcloud applications, application info, and to enable or disable an app remotely.\n\t\tOnce the app is enabled, HTTP requests can be used via a Basic Auth header to perform any of the functions\n\t\tlisted above. More information is available in the Provisioning API documentation, including example calls\n\t\tand server responses." : "Bu uygulama, dış sistemlerin kullanıcı özelliklerini eklemesi, düzenlemesi ve sorgulaması, grupları ayarlaması\n\t\tve silmesi ile Nextcloud tarafından kullanılan toplam depolama alanını sorgulaması için kullanabileceği\n\t\t bir dizi API uygulaması sağlar. Grup yöneticisi olan kullanıcılar da Nextcloud sorguları yürüterek yönettikleri\n\t\tgruplar üzerinde aynı işlemleri yöneticiler gibi yapabilirler. API uygulaması ayrıca etkin Nextcloud uygulamalarını\n\t\t ve uygulama bilgilerini sorgulayabilir ve uygulamaları uzaktan etkinleştirip, devre dışı bırakabilir. Uygulama\n\t\tetkinleştirildikten sonra yukarıdaki işlemleri yapmak için Temel Kimlik doğrulaması üst bilgisi ile HTTP istekleri\n\t\tkullanılabilir. Ayrıntılı bilgi almak ve örnek çağrılar ile sunucu yanıtlarını görmek için API hazırlama belgesine bakabilirsiniz."
+ "This application enables a set of APIs that external systems can use to manage accounts, groups and apps." : "Bu uygulama, dış sistemlerin hesapları, grupları ve uygulamaları yönetmek için kullanabileceği bir dizi API uygulaması sağlar.",
+ "This application enables a set of APIs that external systems can use to create, edit, delete and query account\n\t\tattributes, query, set and remove groups, set quota and query total storage used in Nextcloud. Group admin accounts\n\t\tcan also query Nextcloud and perform the same functions as an admin for groups they manage. The API also enables\n\t\tan admin to query for active Nextcloud applications, application info, and to enable or disable an app remotely.\n\t\tOnce the app is enabled, HTTP requests can be used via a Basic Auth header to perform any of the functions\n\t\tlisted above. More information is available in the Provisioning API documentation, including example calls\n\t\tand server responses." : "Bu uygulama, dış sistemlerin hesap özelliklerini eklemesi, düzenlemesi ve sorgulaması, grupları ayarlaması\n\t\tve silmesi ile Nextcloud tarafından kullanılan toplam depolama alanını sorgulaması için kullanabileceği\n\t\t bir dizi API uygulaması sağlar. Grup yöneticisi olan hesaplar da Nextcloud sorguları yürüterek yönettikleri\n\t\tgruplar üzerinde aynı işlemleri yöneticiler gibi yapabilirler. API uygulaması ayrıca kullanıma alınmış Nextcloud uygulamalarını\n\t\t ve uygulama bilgilerini sorgulayabilir ve uygulamaları uzaktan kullanıma alıp, kullanımdan kaldırabilir. Uygulama\n\t\tkullanıma alındıktan sonra yukarıdaki işlemleri yapmak için Temel kimlik doğrulaması üst bilgisi ile HTTP istekleri\n\t\tyapılabilir. Ayrıntılı bilgi almak ve örnek çağrılar ile sunucu yanıtlarını görmek için API hazırlama belgesine bakabilirsiniz."
},
"nplurals=2; plural=(n > 1);");
diff --git a/apps/provisioning_api/l10n/tr.json b/apps/provisioning_api/l10n/tr.json
index 94cec6af93e..3e4a591bb5f 100644
--- a/apps/provisioning_api/l10n/tr.json
+++ b/apps/provisioning_api/l10n/tr.json
@@ -1,6 +1,31 @@
{ "translations": {
- "Logged in user must be an administrator or have authorization to edit this setting." : "Oturum açmış kullanıcı bir yönetici olmalı ya da bu ayarı düzenleme izni olmalıdır.",
+ "Logged in account must be an administrator or have authorization to edit this setting." : "Oturum açmış hesap bir yönetici olmalı ya da bu ayarı düzenleme izni olmalıdır.",
+ "Could not create non-existing user ID" : "Var olmayan kullanıcı kimliği oluşturulamadı",
"User already exists" : "Kullanıcı zaten var",
+ "Group %1$s does not exist" : "%1$s grubu bulunamadı",
+ "Insufficient privileges for group %1$s" : "%1$s grubu için izinler yetersiz",
+ "No group specified (required for sub-admins)" : "Herhangi bir grup belirtilmemiş (alt yöneticiler için gereklidir)",
+ "Sub-admin group does not exist" : "Alt yönetici grubu bulunamadı",
+ "Cannot create sub-admins for admin group" : "Yönetici grubu için alt yöneticiler oluşturulamadı",
+ "No permissions to promote sub-admins" : "Alt yöneticileri yükseltme izni yok",
+ "Invalid password value" : "Parola değeri geçersiz",
+ "An email address is required, to send a password link to the user." : "Kullanıcıya bir parola bağlantısı gönderebilmek için bir e-posta adresi gereklidir.",
+ "Required email address was not provided" : "Gerekli e-posta adresi belirtilmemiş",
+ "Invalid quota value: %1$s" : "Kota değeri geçersiz: %1$s",
+ "Invalid quota value. %1$s is exceeding the maximum quota" : "Kota değeri geçersiz. %1$s en fazla kota değerini aşıyor",
+ "Unlimited quota is forbidden on this instance" : "Bu kopyada sınırsız kota kullanılamaz",
+ "Setting the password is not supported by the users backend" : "Kullanıcı arka yüzünden parola ayarlanamaz",
+ "Invalid language" : "Dil geçersiz",
+ "Invalid locale" : "Yerel ayar geçersiz",
+ "Invalid first day of week" : "Haftanın ilk günü geçersiz",
+ "Cannot remove yourself from the admin group" : "Kendinizi yönetici grubundan çıkaramazsınız",
+ "Cannot remove yourself from this group as you are a sub-admin" : "Bir alt yönetici olduğunuzdan kendinizi bu gruptan çıkaramazsınız",
+ "Not viable to remove user from the last group you are sub-admin of" : "Alt yöneticisi olduğunuz son gruptan kullanıcıyı kaldıramazsınız",
+ "User does not exist" : "Kullanıcı bulunamadı",
+ "Group does not exist" : "Grup bulunamadı",
+ "User is not a sub-admin of this group" : "Kullanıcı bu grubun bir alt yöneticisi değil",
+ "Email address not available" : "E-posta adresi kullanılamaz",
+ "Sending email failed" : "E-posta gönderilemedi",
"Email confirmation" : "E-posta doğrulaması",
"To enable the email address %s please click the button below." : "%s e-posta adresini doğrulamak için aşağıdaki düğmeye tıklayın.",
"Confirm" : "Onayla",
@@ -10,7 +35,7 @@
"An unexpected error occurred. Please contact your admin." : "Beklenmeyen bir sorun çıktı. Lütfen BT yöneticiniz ile görüşün.",
"Email confirmation successful" : "E-posta onaylandı",
"Provisioning API" : "Karşılama API",
- "This application enables a set of APIs that external systems can use to manage users, groups and apps." : "Bu uygulama, dış sistemlerin kullanıcıları, grupları ve uygulamaları yönetmek için kullanabileceği bir dizi API uygulaması sağlar.",
- "This application enables a set of APIs that external systems can use to create, edit, delete and query user\n\t\tattributes, query, set and remove groups, set quota and query total storage used in Nextcloud. Group admin users\n\t\tcan also query Nextcloud and perform the same functions as an admin for groups they manage. The API also enables\n\t\tan admin to query for active Nextcloud applications, application info, and to enable or disable an app remotely.\n\t\tOnce the app is enabled, HTTP requests can be used via a Basic Auth header to perform any of the functions\n\t\tlisted above. More information is available in the Provisioning API documentation, including example calls\n\t\tand server responses." : "Bu uygulama, dış sistemlerin kullanıcı özelliklerini eklemesi, düzenlemesi ve sorgulaması, grupları ayarlaması\n\t\tve silmesi ile Nextcloud tarafından kullanılan toplam depolama alanını sorgulaması için kullanabileceği\n\t\t bir dizi API uygulaması sağlar. Grup yöneticisi olan kullanıcılar da Nextcloud sorguları yürüterek yönettikleri\n\t\tgruplar üzerinde aynı işlemleri yöneticiler gibi yapabilirler. API uygulaması ayrıca etkin Nextcloud uygulamalarını\n\t\t ve uygulama bilgilerini sorgulayabilir ve uygulamaları uzaktan etkinleştirip, devre dışı bırakabilir. Uygulama\n\t\tetkinleştirildikten sonra yukarıdaki işlemleri yapmak için Temel Kimlik doğrulaması üst bilgisi ile HTTP istekleri\n\t\tkullanılabilir. Ayrıntılı bilgi almak ve örnek çağrılar ile sunucu yanıtlarını görmek için API hazırlama belgesine bakabilirsiniz."
+ "This application enables a set of APIs that external systems can use to manage accounts, groups and apps." : "Bu uygulama, dış sistemlerin hesapları, grupları ve uygulamaları yönetmek için kullanabileceği bir dizi API uygulaması sağlar.",
+ "This application enables a set of APIs that external systems can use to create, edit, delete and query account\n\t\tattributes, query, set and remove groups, set quota and query total storage used in Nextcloud. Group admin accounts\n\t\tcan also query Nextcloud and perform the same functions as an admin for groups they manage. The API also enables\n\t\tan admin to query for active Nextcloud applications, application info, and to enable or disable an app remotely.\n\t\tOnce the app is enabled, HTTP requests can be used via a Basic Auth header to perform any of the functions\n\t\tlisted above. More information is available in the Provisioning API documentation, including example calls\n\t\tand server responses." : "Bu uygulama, dış sistemlerin hesap özelliklerini eklemesi, düzenlemesi ve sorgulaması, grupları ayarlaması\n\t\tve silmesi ile Nextcloud tarafından kullanılan toplam depolama alanını sorgulaması için kullanabileceği\n\t\t bir dizi API uygulaması sağlar. Grup yöneticisi olan hesaplar da Nextcloud sorguları yürüterek yönettikleri\n\t\tgruplar üzerinde aynı işlemleri yöneticiler gibi yapabilirler. API uygulaması ayrıca kullanıma alınmış Nextcloud uygulamalarını\n\t\t ve uygulama bilgilerini sorgulayabilir ve uygulamaları uzaktan kullanıma alıp, kullanımdan kaldırabilir. Uygulama\n\t\tkullanıma alındıktan sonra yukarıdaki işlemleri yapmak için Temel kimlik doğrulaması üst bilgisi ile HTTP istekleri\n\t\tyapılabilir. Ayrıntılı bilgi almak ve örnek çağrılar ile sunucu yanıtlarını görmek için API hazırlama belgesine bakabilirsiniz."
},"pluralForm" :"nplurals=2; plural=(n > 1);"
} \ No newline at end of file
diff --git a/apps/provisioning_api/l10n/ug.js b/apps/provisioning_api/l10n/ug.js
new file mode 100644
index 00000000000..d6481eda90c
--- /dev/null
+++ b/apps/provisioning_api/l10n/ug.js
@@ -0,0 +1,43 @@
+OC.L10N.register(
+ "provisioning_api",
+ {
+ "Logged in account must be an administrator or have authorization to edit this setting." : "ھېساباتقا كىرگەن چوقۇم باشقۇرغۇچى بولۇشى ياكى بۇ تەڭشەكنى تەھرىرلەش ھوقۇقى بولۇشى كېرەك.",
+ "Could not create non-existing user ID" : "مەۋجۇت ئىشلەتكۈچى كىملىكىنى قۇرالمىدى",
+ "User already exists" : "ئىشلەتكۈچى ئاللىبۇرۇن مەۋجۇت",
+ "Group %1$s does not exist" : "گۇرۇپپا%1 $ s مەۋجۇت ئەمەس",
+ "Insufficient privileges for group %1$s" : "گۇرۇپپا%1 $ s ئۈچۈن ئىمتىياز يېتەرلىك ئەمەس",
+ "No group specified (required for sub-admins)" : "ھېچقانداق گۇرۇپپا بەلگىلەنمىگەن (تارماق باشقۇرغۇچىلار ئۈچۈن تەلەپ قىلىنىدۇ)",
+ "Sub-admin group does not exist" : "تارماق باشقۇرغۇچى گۇرۇپپىسى مەۋجۇت ئەمەس",
+ "Cannot create sub-admins for admin group" : "باشقۇرۇش گۇرۇپپىسى ئۈچۈن تارماق باشقۇرغۇچى قۇرالمايدۇ",
+ "No permissions to promote sub-admins" : "تارماق باشقۇرغۇچىلارنى تەشۋىق قىلىشقا ئىجازەت يوق",
+ "Invalid password value" : "پارول قىممىتى ئىناۋەتسىز",
+ "An email address is required, to send a password link to the user." : "ئىشلەتكۈچىگە پارول ئۇلىنىشى ئۈچۈن ئېلېكترونلۇق خەت ئادرېسى تەلەپ قىلىنىدۇ.",
+ "Required email address was not provided" : "تەلەپ قىلىنغان ئېلېكترونلۇق خەت ئادرېسى تەمىنلەنمىگەن",
+ "Invalid quota value: %1$s" : "ئىناۋەتلىك نورما قىممىتى:%1 $ s",
+ "Invalid quota value. %1$s is exceeding the maximum quota" : "نورما قىممىتى ئىناۋەتسىز. %1 $ s ئەڭ يۇقىرى نورمىدىن ئېشىپ كەتتى",
+ "Unlimited quota is forbidden on this instance" : "بۇ ئەھۋالدا چەكلىمىسىز نورما چەكلەنگەن",
+ "Setting the password is not supported by the users backend" : "پارول بەلگىلەشنى ئىشلەتكۈچى ئارقا سۇپىسى قوللىمايدۇ",
+ "Invalid language" : "ئىناۋەتسىز تىل",
+ "Invalid locale" : "ئىناۋەتسىز",
+ "Invalid first day of week" : "ھەپتىنىڭ بىرىنچى كۈنى ئىناۋەتسىز",
+ "Cannot remove yourself from the admin group" : "ئۆزىڭىزنى باشقۇرۇش گۇرۇپپىسىدىن ئۆچۈرەلمەيسىز",
+ "Cannot remove yourself from this group as you are a sub-admin" : "تارماق باشقۇرغۇچى بولغانلىقىڭىز ئۈچۈن ئۆزىڭىزنى بۇ گۇرۇپپىدىن ئۆچۈرەلمەيسىز",
+ "Not viable to remove user from the last group you are sub-admin of" : "سىز ئاخىرقى باشقۇرغۇچى بولغان ئاخىرقى گۇرۇپپىدىن ئىشلەتكۈچىنى چىقىرىۋېتىش مۇمكىن ئەمەس",
+ "User does not exist" : "ئىشلەتكۈچى مەۋجۇت ئەمەس",
+ "Group does not exist" : "گۇرۇپپا مەۋجۇت ئەمەس",
+ "User is not a sub-admin of this group" : "ئىشلەتكۈچى بۇ گۇرۇپپىنىڭ تارماق باشقۇرغۇچىسى ئەمەس",
+ "Email address not available" : "ئېلېكترونلۇق خەت ئادرېسى يوق",
+ "Sending email failed" : "ئېلېكترونلۇق خەت ئەۋەتىش مەغلۇپ بولدى",
+ "Email confirmation" : "ئېلېكترونلۇق خەت جەزملەشتۈرۈش",
+ "To enable the email address %s please click the button below." : "ئېلېكترونلۇق خەت ئادرېسىنى% s قوزغىتىش ئۈچۈن تۆۋەندىكى كۇنۇپكىنى بېسىڭ.",
+ "Confirm" : "جەزملەشتۈرۈڭ",
+ "Email was already removed from account and cannot be confirmed anymore." : "ئېلېكترونلۇق خەت ئاللىبۇرۇن ھېساباتتىن ئۆچۈرۈۋېتىلدى ، ئەمدى جەزملەشتۈرگىلى بولمايدۇ.",
+ "Could not verify mail because the token is expired." : "خەتنىڭ ۋاقتى توشقانلىقتىن خەتنى دەلىللىيەلمىدى.",
+ "Could not verify mail because the token is invalid." : "خەتكۈچ ئىناۋەتسىز بولغاچقا خەتنى دەلىللىيەلمىدى.",
+ "An unexpected error occurred. Please contact your admin." : "ئويلىمىغان خاتالىق يۈز بەردى. باشقۇرغۇچىڭىز بىلەن ئالاقىلىشىڭ.",
+ "Email confirmation successful" : "ئېلېكترونلۇق خەت جەزملەشتۈرۈلدى",
+ "Provisioning API" : "API بىلەن تەمىنلەش",
+ "This application enables a set of APIs that external systems can use to manage accounts, groups and apps." : "بۇ پروگرامما سىرتقى سىستېمىلار ھېسابات ، گۇرۇپپا ۋە ئەپلەرنى باشقۇرۇشتا ئىشلىتىدىغان بىر يۈرۈش API لارنى قوزغىتىدۇ.",
+ "This application enables a set of APIs that external systems can use to create, edit, delete and query account\n\t\tattributes, query, set and remove groups, set quota and query total storage used in Nextcloud. Group admin accounts\n\t\tcan also query Nextcloud and perform the same functions as an admin for groups they manage. The API also enables\n\t\tan admin to query for active Nextcloud applications, application info, and to enable or disable an app remotely.\n\t\tOnce the app is enabled, HTTP requests can be used via a Basic Auth header to perform any of the functions\n\t\tlisted above. More information is available in the Provisioning API documentation, including example calls\n\t\tand server responses." : "بۇ پروگرامما سىرتقى سىستېمىلار ھېسابات قۇرۇش ، تەھرىرلەش ، ئۆچۈرۈش ۋە سۈرۈشتۈرۈش ئۈچۈن ئىشلىتىدىغان بىر يۈرۈش API لارنى قوزغىتىدۇ\n\t\tخاسلىق ، سۈرۈشتۈرۈش ، گۇرۇپپىلارنى تەڭشەش ۋە ئۆچۈرۈش ، Nextcloud دا ئىشلىتىلىدىغان نورما ۋە سوئال ئومۇمىي ساقلاش. گۇرۇپپا باشقۇرۇش ھېساباتى\n\t\tNextcloud دىن سوئال سوراپ ، ئۇلار باشقۇرىدىغان گۇرۇپپىلارنىڭ باشقۇرغۇچىسى بىلەن ئوخشاش ئىقتىدارلارنى ئىشلىتەلەيدۇ. API يەنە قوزغىتىدۇ\n\t\tئاكتىپ Nextcloud قوللىنىشچان پروگراممىلىرى ، قوللىنىشچان ئۇچۇرلار ۋە ئەپنى يىراقتىن قوزغىتىش ياكى چەكلەش ئۈچۈن باشقۇرغۇچى.\n\t\tبۇ دېتال قوزغىتىلغاندىن كېيىن ، HTTP تەلەپلىرىنى Basic Auth ماۋزۇسى ئارقىلىق ھەر قانداق ئىقتىدارنى ئورۇندىغىلى بولىدۇ\n\t\tيۇقىرىدا كۆرسىتىلگەن. تەمىنلىگۈچى API ھۆججىتىدە تېخىمۇ كۆپ ئۇچۇرلار بار ، مەسىلەن تېلېفون چاقىرىش\n\t\tۋە مۇلازىمېتىرنىڭ ئىنكاسى."
+},
+"nplurals=2; plural=(n != 1);");
diff --git a/apps/provisioning_api/l10n/ug.json b/apps/provisioning_api/l10n/ug.json
new file mode 100644
index 00000000000..7ce959ce9c9
--- /dev/null
+++ b/apps/provisioning_api/l10n/ug.json
@@ -0,0 +1,41 @@
+{ "translations": {
+ "Logged in account must be an administrator or have authorization to edit this setting." : "ھېساباتقا كىرگەن چوقۇم باشقۇرغۇچى بولۇشى ياكى بۇ تەڭشەكنى تەھرىرلەش ھوقۇقى بولۇشى كېرەك.",
+ "Could not create non-existing user ID" : "مەۋجۇت ئىشلەتكۈچى كىملىكىنى قۇرالمىدى",
+ "User already exists" : "ئىشلەتكۈچى ئاللىبۇرۇن مەۋجۇت",
+ "Group %1$s does not exist" : "گۇرۇپپا%1 $ s مەۋجۇت ئەمەس",
+ "Insufficient privileges for group %1$s" : "گۇرۇپپا%1 $ s ئۈچۈن ئىمتىياز يېتەرلىك ئەمەس",
+ "No group specified (required for sub-admins)" : "ھېچقانداق گۇرۇپپا بەلگىلەنمىگەن (تارماق باشقۇرغۇچىلار ئۈچۈن تەلەپ قىلىنىدۇ)",
+ "Sub-admin group does not exist" : "تارماق باشقۇرغۇچى گۇرۇپپىسى مەۋجۇت ئەمەس",
+ "Cannot create sub-admins for admin group" : "باشقۇرۇش گۇرۇپپىسى ئۈچۈن تارماق باشقۇرغۇچى قۇرالمايدۇ",
+ "No permissions to promote sub-admins" : "تارماق باشقۇرغۇچىلارنى تەشۋىق قىلىشقا ئىجازەت يوق",
+ "Invalid password value" : "پارول قىممىتى ئىناۋەتسىز",
+ "An email address is required, to send a password link to the user." : "ئىشلەتكۈچىگە پارول ئۇلىنىشى ئۈچۈن ئېلېكترونلۇق خەت ئادرېسى تەلەپ قىلىنىدۇ.",
+ "Required email address was not provided" : "تەلەپ قىلىنغان ئېلېكترونلۇق خەت ئادرېسى تەمىنلەنمىگەن",
+ "Invalid quota value: %1$s" : "ئىناۋەتلىك نورما قىممىتى:%1 $ s",
+ "Invalid quota value. %1$s is exceeding the maximum quota" : "نورما قىممىتى ئىناۋەتسىز. %1 $ s ئەڭ يۇقىرى نورمىدىن ئېشىپ كەتتى",
+ "Unlimited quota is forbidden on this instance" : "بۇ ئەھۋالدا چەكلىمىسىز نورما چەكلەنگەن",
+ "Setting the password is not supported by the users backend" : "پارول بەلگىلەشنى ئىشلەتكۈچى ئارقا سۇپىسى قوللىمايدۇ",
+ "Invalid language" : "ئىناۋەتسىز تىل",
+ "Invalid locale" : "ئىناۋەتسىز",
+ "Invalid first day of week" : "ھەپتىنىڭ بىرىنچى كۈنى ئىناۋەتسىز",
+ "Cannot remove yourself from the admin group" : "ئۆزىڭىزنى باشقۇرۇش گۇرۇپپىسىدىن ئۆچۈرەلمەيسىز",
+ "Cannot remove yourself from this group as you are a sub-admin" : "تارماق باشقۇرغۇچى بولغانلىقىڭىز ئۈچۈن ئۆزىڭىزنى بۇ گۇرۇپپىدىن ئۆچۈرەلمەيسىز",
+ "Not viable to remove user from the last group you are sub-admin of" : "سىز ئاخىرقى باشقۇرغۇچى بولغان ئاخىرقى گۇرۇپپىدىن ئىشلەتكۈچىنى چىقىرىۋېتىش مۇمكىن ئەمەس",
+ "User does not exist" : "ئىشلەتكۈچى مەۋجۇت ئەمەس",
+ "Group does not exist" : "گۇرۇپپا مەۋجۇت ئەمەس",
+ "User is not a sub-admin of this group" : "ئىشلەتكۈچى بۇ گۇرۇپپىنىڭ تارماق باشقۇرغۇچىسى ئەمەس",
+ "Email address not available" : "ئېلېكترونلۇق خەت ئادرېسى يوق",
+ "Sending email failed" : "ئېلېكترونلۇق خەت ئەۋەتىش مەغلۇپ بولدى",
+ "Email confirmation" : "ئېلېكترونلۇق خەت جەزملەشتۈرۈش",
+ "To enable the email address %s please click the button below." : "ئېلېكترونلۇق خەت ئادرېسىنى% s قوزغىتىش ئۈچۈن تۆۋەندىكى كۇنۇپكىنى بېسىڭ.",
+ "Confirm" : "جەزملەشتۈرۈڭ",
+ "Email was already removed from account and cannot be confirmed anymore." : "ئېلېكترونلۇق خەت ئاللىبۇرۇن ھېساباتتىن ئۆچۈرۈۋېتىلدى ، ئەمدى جەزملەشتۈرگىلى بولمايدۇ.",
+ "Could not verify mail because the token is expired." : "خەتنىڭ ۋاقتى توشقانلىقتىن خەتنى دەلىللىيەلمىدى.",
+ "Could not verify mail because the token is invalid." : "خەتكۈچ ئىناۋەتسىز بولغاچقا خەتنى دەلىللىيەلمىدى.",
+ "An unexpected error occurred. Please contact your admin." : "ئويلىمىغان خاتالىق يۈز بەردى. باشقۇرغۇچىڭىز بىلەن ئالاقىلىشىڭ.",
+ "Email confirmation successful" : "ئېلېكترونلۇق خەت جەزملەشتۈرۈلدى",
+ "Provisioning API" : "API بىلەن تەمىنلەش",
+ "This application enables a set of APIs that external systems can use to manage accounts, groups and apps." : "بۇ پروگرامما سىرتقى سىستېمىلار ھېسابات ، گۇرۇپپا ۋە ئەپلەرنى باشقۇرۇشتا ئىشلىتىدىغان بىر يۈرۈش API لارنى قوزغىتىدۇ.",
+ "This application enables a set of APIs that external systems can use to create, edit, delete and query account\n\t\tattributes, query, set and remove groups, set quota and query total storage used in Nextcloud. Group admin accounts\n\t\tcan also query Nextcloud and perform the same functions as an admin for groups they manage. The API also enables\n\t\tan admin to query for active Nextcloud applications, application info, and to enable or disable an app remotely.\n\t\tOnce the app is enabled, HTTP requests can be used via a Basic Auth header to perform any of the functions\n\t\tlisted above. More information is available in the Provisioning API documentation, including example calls\n\t\tand server responses." : "بۇ پروگرامما سىرتقى سىستېمىلار ھېسابات قۇرۇش ، تەھرىرلەش ، ئۆچۈرۈش ۋە سۈرۈشتۈرۈش ئۈچۈن ئىشلىتىدىغان بىر يۈرۈش API لارنى قوزغىتىدۇ\n\t\tخاسلىق ، سۈرۈشتۈرۈش ، گۇرۇپپىلارنى تەڭشەش ۋە ئۆچۈرۈش ، Nextcloud دا ئىشلىتىلىدىغان نورما ۋە سوئال ئومۇمىي ساقلاش. گۇرۇپپا باشقۇرۇش ھېساباتى\n\t\tNextcloud دىن سوئال سوراپ ، ئۇلار باشقۇرىدىغان گۇرۇپپىلارنىڭ باشقۇرغۇچىسى بىلەن ئوخشاش ئىقتىدارلارنى ئىشلىتەلەيدۇ. API يەنە قوزغىتىدۇ\n\t\tئاكتىپ Nextcloud قوللىنىشچان پروگراممىلىرى ، قوللىنىشچان ئۇچۇرلار ۋە ئەپنى يىراقتىن قوزغىتىش ياكى چەكلەش ئۈچۈن باشقۇرغۇچى.\n\t\tبۇ دېتال قوزغىتىلغاندىن كېيىن ، HTTP تەلەپلىرىنى Basic Auth ماۋزۇسى ئارقىلىق ھەر قانداق ئىقتىدارنى ئورۇندىغىلى بولىدۇ\n\t\tيۇقىرىدا كۆرسىتىلگەن. تەمىنلىگۈچى API ھۆججىتىدە تېخىمۇ كۆپ ئۇچۇرلار بار ، مەسىلەن تېلېفون چاقىرىش\n\t\tۋە مۇلازىمېتىرنىڭ ئىنكاسى."
+},"pluralForm" :"nplurals=2; plural=(n != 1);"
+} \ No newline at end of file
diff --git a/apps/provisioning_api/l10n/uk.js b/apps/provisioning_api/l10n/uk.js
index e2f432a9a0e..11c218eea89 100644
--- a/apps/provisioning_api/l10n/uk.js
+++ b/apps/provisioning_api/l10n/uk.js
@@ -1,18 +1,44 @@
OC.L10N.register(
"provisioning_api",
{
- "Logged in user must be an administrator or have authorization to edit this setting." : "Увійшовши в систему користувач повинен бути адміністратором або мати повноваження для редагування цього параметра.",
+ "Logged in account must be an administrator or have authorization to edit this setting." : "Обліковий запису, з яким ви увійшли, має бути адміністративним або дозволи редагування цих налаштувань.",
+ "Could not create non-existing user ID" : "Неможливо створити неіснуючого користувача ID",
"User already exists" : "Користувач вже існує",
+ "Group %1$s does not exist" : "Група %1$s не існує",
+ "Insufficient privileges for group %1$s" : "Недостатні дозволи для групи %1$s",
+ "No group specified (required for sub-admins)" : "Жодної групи не зазначено (потрібно для другорядних адміністраторів)",
+ "Sub-admin group does not exist" : "Група другорядних адміністраторів не існує",
+ "Cannot create sub-admins for admin group" : "Неможливо створити другорядних адміністраторів для групи адміністраторів",
+ "No permissions to promote sub-admins" : "Відсутні дозволи для збільшення повноважень другорядних адміністраторів",
+ "Invalid password value" : "Недійсне значення паролю",
+ "An email address is required, to send a password link to the user." : "Для надсилання посилання на пароль користувачеві необхідна адреса електронної пошти.",
+ "Required email address was not provided" : "Не зазначено обов'язкової ел. адреси",
+ "User creation failed" : "Не вдалося створити користувача",
+ "Invalid quota value: %1$s" : "Недійсне значення квоти: %1$s",
+ "Invalid quota value. %1$s is exceeding the maximum quota" : "Недійсне значення квоти: %1$s перебільшує максимальну квоту",
+ "Unlimited quota is forbidden on this instance" : "Необмежену квоту заборонено на цьому примірнику",
+ "Setting the password is not supported by the users backend" : "Встановлення паролю не підтримується бекендом користувача",
+ "Invalid language" : "Недійсний вибір мови",
+ "Invalid locale" : "Недійсний вибір локалі",
+ "Invalid first day of week" : "Недійсний перший день тижня",
+ "Cannot remove yourself from the admin group" : "Неможливо вилучити себе із групи адміністраторів",
+ "Cannot remove yourself from this group as you are a sub-admin" : "Неможливо вилучити себе із цієї групи, оскільки ви є другорядним адміністратором",
+ "Not viable to remove user from the last group you are sub-admin of" : "Неможливо вилучити користувача з останньої групи, в якій ви є другорядним адміністратором",
+ "User does not exist" : "Користувач не існує",
+ "Group does not exist" : "Група не існує",
+ "User is not a sub-admin of this group" : "Користувач не є другорядним адміністратором цієї групи",
+ "Email address not available" : "Ел. адреса недоступна",
+ "Sending email failed" : "Не вдалося надіслати ел. лист",
"Email confirmation" : "Підтвердження електронною поштою",
"To enable the email address %s please click the button below." : "Щоб увімкнути адресу електронної пошти %s, натисніть кнопку нижче.",
"Confirm" : "Підтвердити",
"Email was already removed from account and cannot be confirmed anymore." : "Електронну адресу вже видалено з облікового запису, і її більше неможливо підтвердити.",
- "Could not verify mail because the token is expired." : "Не вдалося перевірити пошту, оскільки термін дії маркера минув.",
- "Could not verify mail because the token is invalid." : "Не вдалося перевірити пошту, оскільки маркер недійсний.",
+ "Could not verify mail because the token is expired." : "Не вдалося перевірити пошту, оскільки термін дії токена минув.",
+ "Could not verify mail because the token is invalid." : "Не вдалося перевірити пошту, оскільки токен не дійсний.",
"An unexpected error occurred. Please contact your admin." : "Сталася неочікувана помилка. Будь ласка, зверніться до свого адміністратора.",
"Email confirmation successful" : "Підтвердження електронною поштою успішно",
"Provisioning API" : "API надання",
- "This application enables a set of APIs that external systems can use to manage users, groups and apps." : "Цей застосунок включає набір API, які зовнішні системи можуть використовувати для керування користувачами, групами та застосунками.",
- "This application enables a set of APIs that external systems can use to create, edit, delete and query user\n\t\tattributes, query, set and remove groups, set quota and query total storage used in Nextcloud. Group admin users\n\t\tcan also query Nextcloud and perform the same functions as an admin for groups they manage. The API also enables\n\t\tan admin to query for active Nextcloud applications, application info, and to enable or disable an app remotely.\n\t\tOnce the app is enabled, HTTP requests can be used via a Basic Auth header to perform any of the functions\n\t\tlisted above. More information is available in the Provisioning API documentation, including example calls\n\t\tand server responses." : "Цей застосунок підтримує набір API, які зовнішні системи можуть використовувати для створення, редагування, видалення та запитів користувача атрибути, запит, встановлення та видалення груп, встановлення квоти та запит загального обсягу пам’яті, що використовується в Nextcloud. Адміністратори групи користувачів також можуть надсилати запити Nextcloud і виконувати ті самі функції, що й адміністратори, для груп, якими вони керують. API також дозволяє адміністраторам надсилати запити до активних застосунків Nextcloud, отримувати інформацію про застосунок та віддалено вмикати чи вимикати застосунок. Після увімкнення застосунку HTTP-запити можна використовувати через заголовок Basic Auth для виконання будь-яких функцій, які перераховано вище. Додаткову інформацію можна знайти в документації Provisioning API включно з прикладами викликів та відповідей сервера."
+ "This application enables a set of APIs that external systems can use to manage accounts, groups and apps." : "Цей застосунок надає доступ до набору API, які можуть використовувати стоонні системи для керування обліковими записами, групами та застосунками.",
+ "This application enables a set of APIs that external systems can use to create, edit, delete and query account\n\t\tattributes, query, set and remove groups, set quota and query total storage used in Nextcloud. Group admin accounts\n\t\tcan also query Nextcloud and perform the same functions as an admin for groups they manage. The API also enables\n\t\tan admin to query for active Nextcloud applications, application info, and to enable or disable an app remotely.\n\t\tOnce the app is enabled, HTTP requests can be used via a Basic Auth header to perform any of the functions\n\t\tlisted above. More information is available in the Provisioning API documentation, including example calls\n\t\tand server responses." : "Цей застосунок підтримує набір API, які зовнішні системи можуть використовувати для створення, редагування, видалення та запитів користувача атрибути, запит, встановлення та видалення груп, встановлення квоти та запит загального обсягу пам’яті, що використовується в Nextcloud. Адміністратори групи користувачів також можуть надсилати запити Nextcloud і виконувати ті самі функції, що й адміністратори, для груп, якими вони керують. API також дозволяє адміністраторам надсилати запити до активних застосунків Nextcloud, отримувати інформацію про застосунок та віддалено вмикати чи вимикати застосунок. Після увімкнення застосунку HTTP-запити можна використовувати через заголовок Basic Auth для виконання будь-яких функцій, які перераховано вище. Додаткову інформацію можна знайти в документації Provisioning API включно з прикладами викликів та відповідей сервера."
},
"nplurals=4; plural=(n % 1 == 0 && n % 10 == 1 && n % 100 != 11 ? 0 : n % 1 == 0 && n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14) ? 1 : n % 1 == 0 && (n % 10 ==0 || (n % 10 >=5 && n % 10 <=9) || (n % 100 >=11 && n % 100 <=14 )) ? 2: 3);");
diff --git a/apps/provisioning_api/l10n/uk.json b/apps/provisioning_api/l10n/uk.json
index 95bbd5f5747..09884faa2e7 100644
--- a/apps/provisioning_api/l10n/uk.json
+++ b/apps/provisioning_api/l10n/uk.json
@@ -1,16 +1,42 @@
{ "translations": {
- "Logged in user must be an administrator or have authorization to edit this setting." : "Увійшовши в систему користувач повинен бути адміністратором або мати повноваження для редагування цього параметра.",
+ "Logged in account must be an administrator or have authorization to edit this setting." : "Обліковий запису, з яким ви увійшли, має бути адміністративним або дозволи редагування цих налаштувань.",
+ "Could not create non-existing user ID" : "Неможливо створити неіснуючого користувача ID",
"User already exists" : "Користувач вже існує",
+ "Group %1$s does not exist" : "Група %1$s не існує",
+ "Insufficient privileges for group %1$s" : "Недостатні дозволи для групи %1$s",
+ "No group specified (required for sub-admins)" : "Жодної групи не зазначено (потрібно для другорядних адміністраторів)",
+ "Sub-admin group does not exist" : "Група другорядних адміністраторів не існує",
+ "Cannot create sub-admins for admin group" : "Неможливо створити другорядних адміністраторів для групи адміністраторів",
+ "No permissions to promote sub-admins" : "Відсутні дозволи для збільшення повноважень другорядних адміністраторів",
+ "Invalid password value" : "Недійсне значення паролю",
+ "An email address is required, to send a password link to the user." : "Для надсилання посилання на пароль користувачеві необхідна адреса електронної пошти.",
+ "Required email address was not provided" : "Не зазначено обов'язкової ел. адреси",
+ "User creation failed" : "Не вдалося створити користувача",
+ "Invalid quota value: %1$s" : "Недійсне значення квоти: %1$s",
+ "Invalid quota value. %1$s is exceeding the maximum quota" : "Недійсне значення квоти: %1$s перебільшує максимальну квоту",
+ "Unlimited quota is forbidden on this instance" : "Необмежену квоту заборонено на цьому примірнику",
+ "Setting the password is not supported by the users backend" : "Встановлення паролю не підтримується бекендом користувача",
+ "Invalid language" : "Недійсний вибір мови",
+ "Invalid locale" : "Недійсний вибір локалі",
+ "Invalid first day of week" : "Недійсний перший день тижня",
+ "Cannot remove yourself from the admin group" : "Неможливо вилучити себе із групи адміністраторів",
+ "Cannot remove yourself from this group as you are a sub-admin" : "Неможливо вилучити себе із цієї групи, оскільки ви є другорядним адміністратором",
+ "Not viable to remove user from the last group you are sub-admin of" : "Неможливо вилучити користувача з останньої групи, в якій ви є другорядним адміністратором",
+ "User does not exist" : "Користувач не існує",
+ "Group does not exist" : "Група не існує",
+ "User is not a sub-admin of this group" : "Користувач не є другорядним адміністратором цієї групи",
+ "Email address not available" : "Ел. адреса недоступна",
+ "Sending email failed" : "Не вдалося надіслати ел. лист",
"Email confirmation" : "Підтвердження електронною поштою",
"To enable the email address %s please click the button below." : "Щоб увімкнути адресу електронної пошти %s, натисніть кнопку нижче.",
"Confirm" : "Підтвердити",
"Email was already removed from account and cannot be confirmed anymore." : "Електронну адресу вже видалено з облікового запису, і її більше неможливо підтвердити.",
- "Could not verify mail because the token is expired." : "Не вдалося перевірити пошту, оскільки термін дії маркера минув.",
- "Could not verify mail because the token is invalid." : "Не вдалося перевірити пошту, оскільки маркер недійсний.",
+ "Could not verify mail because the token is expired." : "Не вдалося перевірити пошту, оскільки термін дії токена минув.",
+ "Could not verify mail because the token is invalid." : "Не вдалося перевірити пошту, оскільки токен не дійсний.",
"An unexpected error occurred. Please contact your admin." : "Сталася неочікувана помилка. Будь ласка, зверніться до свого адміністратора.",
"Email confirmation successful" : "Підтвердження електронною поштою успішно",
"Provisioning API" : "API надання",
- "This application enables a set of APIs that external systems can use to manage users, groups and apps." : "Цей застосунок включає набір API, які зовнішні системи можуть використовувати для керування користувачами, групами та застосунками.",
- "This application enables a set of APIs that external systems can use to create, edit, delete and query user\n\t\tattributes, query, set and remove groups, set quota and query total storage used in Nextcloud. Group admin users\n\t\tcan also query Nextcloud and perform the same functions as an admin for groups they manage. The API also enables\n\t\tan admin to query for active Nextcloud applications, application info, and to enable or disable an app remotely.\n\t\tOnce the app is enabled, HTTP requests can be used via a Basic Auth header to perform any of the functions\n\t\tlisted above. More information is available in the Provisioning API documentation, including example calls\n\t\tand server responses." : "Цей застосунок підтримує набір API, які зовнішні системи можуть використовувати для створення, редагування, видалення та запитів користувача атрибути, запит, встановлення та видалення груп, встановлення квоти та запит загального обсягу пам’яті, що використовується в Nextcloud. Адміністратори групи користувачів також можуть надсилати запити Nextcloud і виконувати ті самі функції, що й адміністратори, для груп, якими вони керують. API також дозволяє адміністраторам надсилати запити до активних застосунків Nextcloud, отримувати інформацію про застосунок та віддалено вмикати чи вимикати застосунок. Після увімкнення застосунку HTTP-запити можна використовувати через заголовок Basic Auth для виконання будь-яких функцій, які перераховано вище. Додаткову інформацію можна знайти в документації Provisioning API включно з прикладами викликів та відповідей сервера."
+ "This application enables a set of APIs that external systems can use to manage accounts, groups and apps." : "Цей застосунок надає доступ до набору API, які можуть використовувати стоонні системи для керування обліковими записами, групами та застосунками.",
+ "This application enables a set of APIs that external systems can use to create, edit, delete and query account\n\t\tattributes, query, set and remove groups, set quota and query total storage used in Nextcloud. Group admin accounts\n\t\tcan also query Nextcloud and perform the same functions as an admin for groups they manage. The API also enables\n\t\tan admin to query for active Nextcloud applications, application info, and to enable or disable an app remotely.\n\t\tOnce the app is enabled, HTTP requests can be used via a Basic Auth header to perform any of the functions\n\t\tlisted above. More information is available in the Provisioning API documentation, including example calls\n\t\tand server responses." : "Цей застосунок підтримує набір API, які зовнішні системи можуть використовувати для створення, редагування, видалення та запитів користувача атрибути, запит, встановлення та видалення груп, встановлення квоти та запит загального обсягу пам’яті, що використовується в Nextcloud. Адміністратори групи користувачів також можуть надсилати запити Nextcloud і виконувати ті самі функції, що й адміністратори, для груп, якими вони керують. API також дозволяє адміністраторам надсилати запити до активних застосунків Nextcloud, отримувати інформацію про застосунок та віддалено вмикати чи вимикати застосунок. Після увімкнення застосунку HTTP-запити можна використовувати через заголовок Basic Auth для виконання будь-яких функцій, які перераховано вище. Додаткову інформацію можна знайти в документації Provisioning API включно з прикладами викликів та відповідей сервера."
},"pluralForm" :"nplurals=4; plural=(n % 1 == 0 && n % 10 == 1 && n % 100 != 11 ? 0 : n % 1 == 0 && n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14) ? 1 : n % 1 == 0 && (n % 10 ==0 || (n % 10 >=5 && n % 10 <=9) || (n % 100 >=11 && n % 100 <=14 )) ? 2: 3);"
} \ No newline at end of file
diff --git a/apps/provisioning_api/l10n/zh_CN.js b/apps/provisioning_api/l10n/zh_CN.js
index 1405b6d791e..2bb24cb01ae 100644
--- a/apps/provisioning_api/l10n/zh_CN.js
+++ b/apps/provisioning_api/l10n/zh_CN.js
@@ -1,8 +1,34 @@
OC.L10N.register(
"provisioning_api",
{
- "Logged in user must be an administrator or have authorization to edit this setting." : "已登录用户必须是一名管理员或拥有编辑此设置的授权",
+ "Logged in account must be an administrator or have authorization to edit this setting." : "登录的账号必须是管理员或有权编辑此设置。",
+ "Could not create non-existing user ID" : "无法创建不存在的用户 ID",
"User already exists" : "用户已存在",
+ "Group %1$s does not exist" : "组 %1$s 不存在",
+ "Insufficient privileges for group %1$s" : "组 %1$s 的权限不足",
+ "No group specified (required for sub-admins)" : "未指定组(子管理员需要)",
+ "Sub-admin group does not exist" : "子管理员组不存在",
+ "Cannot create sub-admins for admin group" : "无法为管理员组创建子管理员",
+ "No permissions to promote sub-admins" : "没有提升子管理员的权限",
+ "Invalid password value" : "密码值无效",
+ "An email address is required, to send a password link to the user." : "需要电子邮件地址,以将密码链接发送给用户。",
+ "Required email address was not provided" : "未提供所需的电子邮件地址",
+ "User creation failed" : "用户创建失败",
+ "Invalid quota value: %1$s" : "配额值无效:%1$s",
+ "Invalid quota value. %1$s is exceeding the maximum quota" : "配额值无效。%1$s 超过了最大配额",
+ "Unlimited quota is forbidden on this instance" : "此实例上禁止无限配额",
+ "Setting the password is not supported by the users backend" : "用户后端不支持设置密码",
+ "Invalid language" : "语言无效",
+ "Invalid locale" : "区域设置无效",
+ "Invalid first day of week" : "一周的第一天无效",
+ "Cannot remove yourself from the admin group" : "无法将自己从管理员组中移除",
+ "Cannot remove yourself from this group as you are a sub-admin" : "无法将自己从此组中移除,因为您是子管理员",
+ "Not viable to remove user from the last group you are sub-admin of" : "无法从您作为子管理员的最后一个组中移除用户",
+ "User does not exist" : "用户不存在",
+ "Group does not exist" : "组不存在",
+ "User is not a sub-admin of this group" : "用户不是此组的子管理员",
+ "Email address not available" : "电子邮件地址不可用",
+ "Sending email failed" : "发送电子邮件失败",
"Email confirmation" : "电子邮件确认",
"To enable the email address %s please click the button below." : "要启用电子邮件地址 %s 请点击下方按钮。",
"Confirm" : "确认",
@@ -11,8 +37,8 @@ OC.L10N.register(
"Could not verify mail because the token is invalid." : "无法验证邮件,因为令牌无效",
"An unexpected error occurred. Please contact your admin." : "发生意外错误。请联系系统管理员",
"Email confirmation successful" : "电子邮件确认成功",
- "Provisioning API" : "Provisioning API",
- "This application enables a set of APIs that external systems can use to manage users, groups and apps." : "此应用程序启用了一组 API ,外部系统可以使用这些 API 来管理用户、组和应用程序。",
- "This application enables a set of APIs that external systems can use to create, edit, delete and query user\n\t\tattributes, query, set and remove groups, set quota and query total storage used in Nextcloud. Group admin users\n\t\tcan also query Nextcloud and perform the same functions as an admin for groups they manage. The API also enables\n\t\tan admin to query for active Nextcloud applications, application info, and to enable or disable an app remotely.\n\t\tOnce the app is enabled, HTTP requests can be used via a Basic Auth header to perform any of the functions\n\t\tlisted above. More information is available in the Provisioning API documentation, including example calls\n\t\tand server responses." : "此应用程序启用了一组 API,外部系统可以使用它们来创建、编辑、删除和查询用户\n\t\t属性、查询、设置和删除组,设置配额以及查询 Nextcloud 中使用的总存储量。组管理员用户\n\t\t还可以查询 Nextcloud,并为其管理的组执行与管理员相同的功能。该 API 还支持\n\t\t管理员查询活动的 Nextcloud 应用程序、应用程序信息,以及远程启用或禁用应用程序。\n\t\t启用该应用后,可以通过基本身份验证标头使用 HTTP 请求执行\n以上所列任何功能。Provisioning API 文档中提供了更多信息,包括示例调用\n\t\t和服务器响应。"
+ "Provisioning API" : "供应 API",
+ "This application enables a set of APIs that external systems can use to manage accounts, groups and apps." : "此应用程序启用了一组 API,外部系统可以使用这些 API 来管理账号、组和应用。",
+ "This application enables a set of APIs that external systems can use to create, edit, delete and query account\n\t\tattributes, query, set and remove groups, set quota and query total storage used in Nextcloud. Group admin accounts\n\t\tcan also query Nextcloud and perform the same functions as an admin for groups they manage. The API also enables\n\t\tan admin to query for active Nextcloud applications, application info, and to enable or disable an app remotely.\n\t\tOnce the app is enabled, HTTP requests can be used via a Basic Auth header to perform any of the functions\n\t\tlisted above. More information is available in the Provisioning API documentation, including example calls\n\t\tand server responses." : "此应用程序启用了一组 API,外部系统可以使用这些 API 创建、编辑、删除和查询账号\n\t\t属性,查询、设置和移除组,设置配额和查询 Nextcloud 中使用的总存储量。组管理员账号\n\t\t还可以查询 Nextcloud,并为其管理的组执行与管理员相同的功能。API 还允许\n\t\t管理员查询活动的 Nextcloud 应用程序、应用程序信息,并远程启用或禁用应用程序。\n\t\t启用了应用程序后,可以通过基本身份验证标头使用 HTTP 请求来执行\n\t\t上方列出的任何功能。更多信息,可在供应 API 文档中获得,包括示例调用\n\t\t和服务器响应。"
},
"nplurals=1; plural=0;");
diff --git a/apps/provisioning_api/l10n/zh_CN.json b/apps/provisioning_api/l10n/zh_CN.json
index e0d94597806..03efc200979 100644
--- a/apps/provisioning_api/l10n/zh_CN.json
+++ b/apps/provisioning_api/l10n/zh_CN.json
@@ -1,6 +1,32 @@
{ "translations": {
- "Logged in user must be an administrator or have authorization to edit this setting." : "已登录用户必须是一名管理员或拥有编辑此设置的授权",
+ "Logged in account must be an administrator or have authorization to edit this setting." : "登录的账号必须是管理员或有权编辑此设置。",
+ "Could not create non-existing user ID" : "无法创建不存在的用户 ID",
"User already exists" : "用户已存在",
+ "Group %1$s does not exist" : "组 %1$s 不存在",
+ "Insufficient privileges for group %1$s" : "组 %1$s 的权限不足",
+ "No group specified (required for sub-admins)" : "未指定组(子管理员需要)",
+ "Sub-admin group does not exist" : "子管理员组不存在",
+ "Cannot create sub-admins for admin group" : "无法为管理员组创建子管理员",
+ "No permissions to promote sub-admins" : "没有提升子管理员的权限",
+ "Invalid password value" : "密码值无效",
+ "An email address is required, to send a password link to the user." : "需要电子邮件地址,以将密码链接发送给用户。",
+ "Required email address was not provided" : "未提供所需的电子邮件地址",
+ "User creation failed" : "用户创建失败",
+ "Invalid quota value: %1$s" : "配额值无效:%1$s",
+ "Invalid quota value. %1$s is exceeding the maximum quota" : "配额值无效。%1$s 超过了最大配额",
+ "Unlimited quota is forbidden on this instance" : "此实例上禁止无限配额",
+ "Setting the password is not supported by the users backend" : "用户后端不支持设置密码",
+ "Invalid language" : "语言无效",
+ "Invalid locale" : "区域设置无效",
+ "Invalid first day of week" : "一周的第一天无效",
+ "Cannot remove yourself from the admin group" : "无法将自己从管理员组中移除",
+ "Cannot remove yourself from this group as you are a sub-admin" : "无法将自己从此组中移除,因为您是子管理员",
+ "Not viable to remove user from the last group you are sub-admin of" : "无法从您作为子管理员的最后一个组中移除用户",
+ "User does not exist" : "用户不存在",
+ "Group does not exist" : "组不存在",
+ "User is not a sub-admin of this group" : "用户不是此组的子管理员",
+ "Email address not available" : "电子邮件地址不可用",
+ "Sending email failed" : "发送电子邮件失败",
"Email confirmation" : "电子邮件确认",
"To enable the email address %s please click the button below." : "要启用电子邮件地址 %s 请点击下方按钮。",
"Confirm" : "确认",
@@ -9,8 +35,8 @@
"Could not verify mail because the token is invalid." : "无法验证邮件,因为令牌无效",
"An unexpected error occurred. Please contact your admin." : "发生意外错误。请联系系统管理员",
"Email confirmation successful" : "电子邮件确认成功",
- "Provisioning API" : "Provisioning API",
- "This application enables a set of APIs that external systems can use to manage users, groups and apps." : "此应用程序启用了一组 API ,外部系统可以使用这些 API 来管理用户、组和应用程序。",
- "This application enables a set of APIs that external systems can use to create, edit, delete and query user\n\t\tattributes, query, set and remove groups, set quota and query total storage used in Nextcloud. Group admin users\n\t\tcan also query Nextcloud and perform the same functions as an admin for groups they manage. The API also enables\n\t\tan admin to query for active Nextcloud applications, application info, and to enable or disable an app remotely.\n\t\tOnce the app is enabled, HTTP requests can be used via a Basic Auth header to perform any of the functions\n\t\tlisted above. More information is available in the Provisioning API documentation, including example calls\n\t\tand server responses." : "此应用程序启用了一组 API,外部系统可以使用它们来创建、编辑、删除和查询用户\n\t\t属性、查询、设置和删除组,设置配额以及查询 Nextcloud 中使用的总存储量。组管理员用户\n\t\t还可以查询 Nextcloud,并为其管理的组执行与管理员相同的功能。该 API 还支持\n\t\t管理员查询活动的 Nextcloud 应用程序、应用程序信息,以及远程启用或禁用应用程序。\n\t\t启用该应用后,可以通过基本身份验证标头使用 HTTP 请求执行\n以上所列任何功能。Provisioning API 文档中提供了更多信息,包括示例调用\n\t\t和服务器响应。"
+ "Provisioning API" : "供应 API",
+ "This application enables a set of APIs that external systems can use to manage accounts, groups and apps." : "此应用程序启用了一组 API,外部系统可以使用这些 API 来管理账号、组和应用。",
+ "This application enables a set of APIs that external systems can use to create, edit, delete and query account\n\t\tattributes, query, set and remove groups, set quota and query total storage used in Nextcloud. Group admin accounts\n\t\tcan also query Nextcloud and perform the same functions as an admin for groups they manage. The API also enables\n\t\tan admin to query for active Nextcloud applications, application info, and to enable or disable an app remotely.\n\t\tOnce the app is enabled, HTTP requests can be used via a Basic Auth header to perform any of the functions\n\t\tlisted above. More information is available in the Provisioning API documentation, including example calls\n\t\tand server responses." : "此应用程序启用了一组 API,外部系统可以使用这些 API 创建、编辑、删除和查询账号\n\t\t属性,查询、设置和移除组,设置配额和查询 Nextcloud 中使用的总存储量。组管理员账号\n\t\t还可以查询 Nextcloud,并为其管理的组执行与管理员相同的功能。API 还允许\n\t\t管理员查询活动的 Nextcloud 应用程序、应用程序信息,并远程启用或禁用应用程序。\n\t\t启用了应用程序后,可以通过基本身份验证标头使用 HTTP 请求来执行\n\t\t上方列出的任何功能。更多信息,可在供应 API 文档中获得,包括示例调用\n\t\t和服务器响应。"
},"pluralForm" :"nplurals=1; plural=0;"
} \ No newline at end of file
diff --git a/apps/provisioning_api/l10n/zh_HK.js b/apps/provisioning_api/l10n/zh_HK.js
index ca26d15a8e8..50e0bd73c4a 100644
--- a/apps/provisioning_api/l10n/zh_HK.js
+++ b/apps/provisioning_api/l10n/zh_HK.js
@@ -1,8 +1,34 @@
OC.L10N.register(
"provisioning_api",
{
- "Logged in user must be an administrator or have authorization to edit this setting." : "登錄用戶必須是管理員或有編輯此設置的授權。",
+ "Logged in account must be an administrator or have authorization to edit this setting." : "登錄帳戶必須是管理員或有編輯此設置的授權。",
+ "Could not create non-existing user ID" : "無法建立不存在的用戶 ID",
"User already exists" : "用戶已存在",
+ "Group %1$s does not exist" : "群組 %1$s 不存在",
+ "Insufficient privileges for group %1$s" : "群組 %1$s 權限不足",
+ "No group specified (required for sub-admins)" : "未指定群組(子管理員需要)",
+ "Sub-admin group does not exist" : "子管理員群組不存在",
+ "Cannot create sub-admins for admin group" : "無法為管理員群組建立子管理員",
+ "No permissions to promote sub-admins" : "沒有新增子管理員的權限",
+ "Invalid password value" : "無效的密碼值",
+ "An email address is required, to send a password link to the user." : "需要提供電郵地址,以便向用戶發送密碼鏈接。",
+ "Required email address was not provided" : "未提供必要的電郵地址",
+ "User creation failed" : "用戶建立失敗",
+ "Invalid quota value: %1$s" : "無效的空間限額值:%1$s",
+ "Invalid quota value. %1$s is exceeding the maximum quota" : "無效的空間限額值。%1$s 超過了最大空間限額",
+ "Unlimited quota is forbidden on this instance" : "此實例禁止無限空間限額",
+ "Setting the password is not supported by the users backend" : "用戶後端系統不支援設定密碼",
+ "Invalid language" : "無效的語言",
+ "Invalid locale" : "無效的地區設定",
+ "Invalid first day of week" : "無效的一星期的第一天",
+ "Cannot remove yourself from the admin group" : "無法將您自己從管理員群組移除",
+ "Cannot remove yourself from this group as you are a sub-admin" : "因為您是子管理員,因此無法將自己從該群組中移除",
+ "Not viable to remove user from the last group you are sub-admin of" : "無法從您作為子管理員的最後一個群組中移除使用者",
+ "User does not exist" : "使用者不存在",
+ "Group does not exist" : "群組不存在",
+ "User is not a sub-admin of this group" : "用戶不是該群組的子管理員",
+ "Email address not available" : "電郵地址不可用",
+ "Sending email failed" : "傳送電子郵件失敗",
"Email confirmation" : "電郵地址確認",
"To enable the email address %s please click the button below." : "請單擊下面的按鈕以啟用電郵地址 %s。",
"Confirm" : "確認",
@@ -12,7 +38,7 @@ OC.L10N.register(
"An unexpected error occurred. Please contact your admin." : "發生了一個意料之外的錯誤。 請聯絡您的系統管理員。",
"Email confirmation successful" : "成功確認電郵地址",
"Provisioning API" : "Provisioning API",
- "This application enables a set of APIs that external systems can use to manage users, groups and apps." : "此應用程序啟用了一組 API ,外部系統可以使用這些 API 來管理用戶、組和應用程序。",
- "This application enables a set of APIs that external systems can use to create, edit, delete and query user\n\t\tattributes, query, set and remove groups, set quota and query total storage used in Nextcloud. Group admin users\n\t\tcan also query Nextcloud and perform the same functions as an admin for groups they manage. The API also enables\n\t\tan admin to query for active Nextcloud applications, application info, and to enable or disable an app remotely.\n\t\tOnce the app is enabled, HTTP requests can be used via a Basic Auth header to perform any of the functions\n\t\tlisted above. More information is available in the Provisioning API documentation, including example calls\n\t\tand server responses." : "此應用程序啟用了一組 API,外部系統可以使用它們來創建、編輯、刪除和查詢用戶\n\t\t屬性、查詢、設置和刪除組,設置配額以及查詢 Nextcloud 中使用的總存儲量。組管理員用戶\n\t\t還可以查詢 Nextcloud,並為其管理的組執行與管理員相同的功能。該 API 還支持\n\t\t管理員查詢活動的 Nextcloud 應用程序、應用程序信息,以及遠程啟用或禁用應用程序。\n\t\t啟用該應用後,可以通過基本身分驗證標頭使用 HTTP 請求執行\n以上所列任何功能。Provisioning API 文檔中提供了更多信息,包括示例調用\n\t\t和伺服器響應。"
+ "This application enables a set of APIs that external systems can use to manage accounts, groups and apps." : "此應用程序啟用了一組 API ,外部系統可以使用這些 API 來管理帳戶、組和應用程序。",
+ "This application enables a set of APIs that external systems can use to create, edit, delete and query account\n\t\tattributes, query, set and remove groups, set quota and query total storage used in Nextcloud. Group admin accounts\n\t\tcan also query Nextcloud and perform the same functions as an admin for groups they manage. The API also enables\n\t\tan admin to query for active Nextcloud applications, application info, and to enable or disable an app remotely.\n\t\tOnce the app is enabled, HTTP requests can be used via a Basic Auth header to perform any of the functions\n\t\tlisted above. More information is available in the Provisioning API documentation, including example calls\n\t\tand server responses." : "此應用程序啟用了一組 API,外部系統可以使用它們來創建、編輯、刪除和查詢帳戶\n\t\t屬性、查詢、設置和刪除群組,設置配額以及查詢 Nextcloud 中使用的總存儲量。群組管理員帳戶\n\t\t還可以查詢 Nextcloud,並為其管理的組執行與管理員相同的功能。該 API 還支持\n\t\t管理員查詢活動的 Nextcloud 應用程序、應用程序信息,以及遠程啟用或禁用應用程序。\n\t\t啟用該應用後,可以通過基本身分驗證標頭使用 HTTP 請求執行\n以上所列任何功能。Provisioning API 文檔中提供了更多信息,包括示例調用\n\t\t和伺服器響應。"
},
"nplurals=1; plural=0;");
diff --git a/apps/provisioning_api/l10n/zh_HK.json b/apps/provisioning_api/l10n/zh_HK.json
index 94aaa0f81e4..3ad90d8b398 100644
--- a/apps/provisioning_api/l10n/zh_HK.json
+++ b/apps/provisioning_api/l10n/zh_HK.json
@@ -1,6 +1,32 @@
{ "translations": {
- "Logged in user must be an administrator or have authorization to edit this setting." : "登錄用戶必須是管理員或有編輯此設置的授權。",
+ "Logged in account must be an administrator or have authorization to edit this setting." : "登錄帳戶必須是管理員或有編輯此設置的授權。",
+ "Could not create non-existing user ID" : "無法建立不存在的用戶 ID",
"User already exists" : "用戶已存在",
+ "Group %1$s does not exist" : "群組 %1$s 不存在",
+ "Insufficient privileges for group %1$s" : "群組 %1$s 權限不足",
+ "No group specified (required for sub-admins)" : "未指定群組(子管理員需要)",
+ "Sub-admin group does not exist" : "子管理員群組不存在",
+ "Cannot create sub-admins for admin group" : "無法為管理員群組建立子管理員",
+ "No permissions to promote sub-admins" : "沒有新增子管理員的權限",
+ "Invalid password value" : "無效的密碼值",
+ "An email address is required, to send a password link to the user." : "需要提供電郵地址,以便向用戶發送密碼鏈接。",
+ "Required email address was not provided" : "未提供必要的電郵地址",
+ "User creation failed" : "用戶建立失敗",
+ "Invalid quota value: %1$s" : "無效的空間限額值:%1$s",
+ "Invalid quota value. %1$s is exceeding the maximum quota" : "無效的空間限額值。%1$s 超過了最大空間限額",
+ "Unlimited quota is forbidden on this instance" : "此實例禁止無限空間限額",
+ "Setting the password is not supported by the users backend" : "用戶後端系統不支援設定密碼",
+ "Invalid language" : "無效的語言",
+ "Invalid locale" : "無效的地區設定",
+ "Invalid first day of week" : "無效的一星期的第一天",
+ "Cannot remove yourself from the admin group" : "無法將您自己從管理員群組移除",
+ "Cannot remove yourself from this group as you are a sub-admin" : "因為您是子管理員,因此無法將自己從該群組中移除",
+ "Not viable to remove user from the last group you are sub-admin of" : "無法從您作為子管理員的最後一個群組中移除使用者",
+ "User does not exist" : "使用者不存在",
+ "Group does not exist" : "群組不存在",
+ "User is not a sub-admin of this group" : "用戶不是該群組的子管理員",
+ "Email address not available" : "電郵地址不可用",
+ "Sending email failed" : "傳送電子郵件失敗",
"Email confirmation" : "電郵地址確認",
"To enable the email address %s please click the button below." : "請單擊下面的按鈕以啟用電郵地址 %s。",
"Confirm" : "確認",
@@ -10,7 +36,7 @@
"An unexpected error occurred. Please contact your admin." : "發生了一個意料之外的錯誤。 請聯絡您的系統管理員。",
"Email confirmation successful" : "成功確認電郵地址",
"Provisioning API" : "Provisioning API",
- "This application enables a set of APIs that external systems can use to manage users, groups and apps." : "此應用程序啟用了一組 API ,外部系統可以使用這些 API 來管理用戶、組和應用程序。",
- "This application enables a set of APIs that external systems can use to create, edit, delete and query user\n\t\tattributes, query, set and remove groups, set quota and query total storage used in Nextcloud. Group admin users\n\t\tcan also query Nextcloud and perform the same functions as an admin for groups they manage. The API also enables\n\t\tan admin to query for active Nextcloud applications, application info, and to enable or disable an app remotely.\n\t\tOnce the app is enabled, HTTP requests can be used via a Basic Auth header to perform any of the functions\n\t\tlisted above. More information is available in the Provisioning API documentation, including example calls\n\t\tand server responses." : "此應用程序啟用了一組 API,外部系統可以使用它們來創建、編輯、刪除和查詢用戶\n\t\t屬性、查詢、設置和刪除組,設置配額以及查詢 Nextcloud 中使用的總存儲量。組管理員用戶\n\t\t還可以查詢 Nextcloud,並為其管理的組執行與管理員相同的功能。該 API 還支持\n\t\t管理員查詢活動的 Nextcloud 應用程序、應用程序信息,以及遠程啟用或禁用應用程序。\n\t\t啟用該應用後,可以通過基本身分驗證標頭使用 HTTP 請求執行\n以上所列任何功能。Provisioning API 文檔中提供了更多信息,包括示例調用\n\t\t和伺服器響應。"
+ "This application enables a set of APIs that external systems can use to manage accounts, groups and apps." : "此應用程序啟用了一組 API ,外部系統可以使用這些 API 來管理帳戶、組和應用程序。",
+ "This application enables a set of APIs that external systems can use to create, edit, delete and query account\n\t\tattributes, query, set and remove groups, set quota and query total storage used in Nextcloud. Group admin accounts\n\t\tcan also query Nextcloud and perform the same functions as an admin for groups they manage. The API also enables\n\t\tan admin to query for active Nextcloud applications, application info, and to enable or disable an app remotely.\n\t\tOnce the app is enabled, HTTP requests can be used via a Basic Auth header to perform any of the functions\n\t\tlisted above. More information is available in the Provisioning API documentation, including example calls\n\t\tand server responses." : "此應用程序啟用了一組 API,外部系統可以使用它們來創建、編輯、刪除和查詢帳戶\n\t\t屬性、查詢、設置和刪除群組,設置配額以及查詢 Nextcloud 中使用的總存儲量。群組管理員帳戶\n\t\t還可以查詢 Nextcloud,並為其管理的組執行與管理員相同的功能。該 API 還支持\n\t\t管理員查詢活動的 Nextcloud 應用程序、應用程序信息,以及遠程啟用或禁用應用程序。\n\t\t啟用該應用後,可以通過基本身分驗證標頭使用 HTTP 請求執行\n以上所列任何功能。Provisioning API 文檔中提供了更多信息,包括示例調用\n\t\t和伺服器響應。"
},"pluralForm" :"nplurals=1; plural=0;"
} \ No newline at end of file
diff --git a/apps/provisioning_api/l10n/zh_TW.js b/apps/provisioning_api/l10n/zh_TW.js
index ff928772896..716e6e0ee44 100644
--- a/apps/provisioning_api/l10n/zh_TW.js
+++ b/apps/provisioning_api/l10n/zh_TW.js
@@ -1,18 +1,44 @@
OC.L10N.register(
"provisioning_api",
{
- "Logged in user must be an administrator or have authorization to edit this setting." : "登入的使用者必須為管理員或是有權編輯此設定的使用者。",
+ "Logged in account must be an administrator or have authorization to edit this setting." : "登入的帳號必須為管理員或是有權編輯此設定的帳號。",
+ "Could not create non-existing user ID" : "無法建立不存在的使用者 ID",
"User already exists" : "使用者已存在",
+ "Group %1$s does not exist" : "群組 %1$s 不存在",
+ "Insufficient privileges for group %1$s" : "群組 %1$s 權限不足",
+ "No group specified (required for sub-admins)" : "未指定群組(子管理員需要)",
+ "Sub-admin group does not exist" : "子管理員群組不存在",
+ "Cannot create sub-admins for admin group" : "無法為管理員群組建立子管理員",
+ "No permissions to promote sub-admins" : "沒有新增子管理員的權限",
+ "Invalid password value" : "無效的密碼值",
+ "An email address is required, to send a password link to the user." : "電子郵件地址必填,用來寄送密碼連結給使用者。",
+ "Required email address was not provided" : "未提供必要的電子郵件地址",
+ "User creation failed" : "使用者建立失敗",
+ "Invalid quota value: %1$s" : "無效的空間限額值:%1$s",
+ "Invalid quota value. %1$s is exceeding the maximum quota" : "無效的空間限額值。%1$s 超過了最大空間限額",
+ "Unlimited quota is forbidden on this instance" : "此站台禁止無限空間限額",
+ "Setting the password is not supported by the users backend" : "使用者後端不支援設定密碼",
+ "Invalid language" : "無效的語言",
+ "Invalid locale" : "無效的地區設定",
+ "Invalid first day of week" : "無效的一週第一天",
+ "Cannot remove yourself from the admin group" : "無法將您自己從管理員群組移除",
+ "Cannot remove yourself from this group as you are a sub-admin" : "因為您是子管理員,因此無法將自己從該群組中移除",
+ "Not viable to remove user from the last group you are sub-admin of" : "無法從您作為子管理員的最後一個群組中移除使用者",
+ "User does not exist" : "使用者不存在",
+ "Group does not exist" : "群組不存在",
+ "User is not a sub-admin of this group" : "使用者不是該群組的子管理員",
+ "Email address not available" : "電子郵件地址不可用",
+ "Sending email failed" : "傳送電子郵件失敗",
"Email confirmation" : "電子郵件確認",
- "To enable the email address %s please click the button below." : "要啟用電子郵件地址 %s,請點擊下方按鈕。",
+ "To enable the email address %s please click the button below." : "若要啟用電子郵件地址 %s,請點擊下方按鈕。",
"Confirm" : "確認",
- "Email was already removed from account and cannot be confirmed anymore." : "電子郵件已自帳號移除且無法再確認。",
- "Could not verify mail because the token is expired." : "無法驗證郵件,因為權杖已過期。",
- "Could not verify mail because the token is invalid." : "無法驗證郵件,因為權杖無效。",
+ "Email was already removed from account and cannot be confirmed anymore." : "電子郵件已從帳號移除,且無法再確認。",
+ "Could not verify mail because the token is expired." : "無法驗證郵件,因為代符已過期。",
+ "Could not verify mail because the token is invalid." : "無法驗證郵件,因為代符無效。",
"An unexpected error occurred. Please contact your admin." : "遇到非預期的錯誤。請聯絡您的管理員。",
"Email confirmation successful" : "電子郵件確認成功",
"Provisioning API" : "Provisioning API",
- "This application enables a set of APIs that external systems can use to manage users, groups and apps." : "此應用程式啟用了一組 API,外部系統可以使用其來管理使用者、群組與應用程式。",
- "This application enables a set of APIs that external systems can use to create, edit, delete and query user\n\t\tattributes, query, set and remove groups, set quota and query total storage used in Nextcloud. Group admin users\n\t\tcan also query Nextcloud and perform the same functions as an admin for groups they manage. The API also enables\n\t\tan admin to query for active Nextcloud applications, application info, and to enable or disable an app remotely.\n\t\tOnce the app is enabled, HTTP requests can be used via a Basic Auth header to perform any of the functions\n\t\tlisted above. More information is available in the Provisioning API documentation, including example calls\n\t\tand server responses." : "此應用程式啟用了一組 API,外部系統可以使用其來建立、編輯、刪除與查詢使用者\n\t\t屬性,查詢、設定與移除群組,設定配額與查詢 Nextcloud 中使用的總儲存空間。群組管理員使用者\n\t\t也可以用其來查詢 Nextcloud,並在其管理的群組中執行與系統管理員相同的動作。這組 API 也讓\n\t\t管理員可以查詢作用中的 Nextcloud 應用程式、應用程式資訊,以及遠端啟用或停用應用程式。\n\t\t應用程式啟用後,可以使用基本驗證標頭來使用 HTTP 請求執行上面\n\t\t列出的任何功能。更多資訊在 Provisioning API 的文件中提供,包含範例呼叫\n\t\t與伺服器回應。"
+ "This application enables a set of APIs that external systems can use to manage accounts, groups and apps." : "此應用程式啟用了一組 API,外部系統可以使用其來管理帳號、群組與應用程式。",
+ "This application enables a set of APIs that external systems can use to create, edit, delete and query account\n\t\tattributes, query, set and remove groups, set quota and query total storage used in Nextcloud. Group admin accounts\n\t\tcan also query Nextcloud and perform the same functions as an admin for groups they manage. The API also enables\n\t\tan admin to query for active Nextcloud applications, application info, and to enable or disable an app remotely.\n\t\tOnce the app is enabled, HTTP requests can be used via a Basic Auth header to perform any of the functions\n\t\tlisted above. More information is available in the Provisioning API documentation, including example calls\n\t\tand server responses." : "此應用程式啟用了一組 API,外部系統可以使用其來建立、編輯、刪除與查詢帳號\n\t\t屬性,查詢、設定與移除群組,設定配額與查詢 Nextcloud 中使用的總儲存空間。群組管理員帳號\n\t\t也可以用其來查詢 Nextcloud,並在其管理的群組中執行與系統管理員相同的動作。這組 API 也讓\n\t\t管理員可以查詢作用中的 Nextcloud 應用程式、應用程式資訊,以及遠端啟用或停用應用程式。\n\t\t應用程式啟用後,可以使用基本驗證標頭來使用 HTTP 請求執行上面\n\t\t列出的任何功能。更多資訊在 Provisioning API 的文件中提供,包含範例呼叫\n\t\t與伺服器回應。"
},
"nplurals=1; plural=0;");
diff --git a/apps/provisioning_api/l10n/zh_TW.json b/apps/provisioning_api/l10n/zh_TW.json
index dc78357cd61..e8b80a3f1d2 100644
--- a/apps/provisioning_api/l10n/zh_TW.json
+++ b/apps/provisioning_api/l10n/zh_TW.json
@@ -1,16 +1,42 @@
{ "translations": {
- "Logged in user must be an administrator or have authorization to edit this setting." : "登入的使用者必須為管理員或是有權編輯此設定的使用者。",
+ "Logged in account must be an administrator or have authorization to edit this setting." : "登入的帳號必須為管理員或是有權編輯此設定的帳號。",
+ "Could not create non-existing user ID" : "無法建立不存在的使用者 ID",
"User already exists" : "使用者已存在",
+ "Group %1$s does not exist" : "群組 %1$s 不存在",
+ "Insufficient privileges for group %1$s" : "群組 %1$s 權限不足",
+ "No group specified (required for sub-admins)" : "未指定群組(子管理員需要)",
+ "Sub-admin group does not exist" : "子管理員群組不存在",
+ "Cannot create sub-admins for admin group" : "無法為管理員群組建立子管理員",
+ "No permissions to promote sub-admins" : "沒有新增子管理員的權限",
+ "Invalid password value" : "無效的密碼值",
+ "An email address is required, to send a password link to the user." : "電子郵件地址必填,用來寄送密碼連結給使用者。",
+ "Required email address was not provided" : "未提供必要的電子郵件地址",
+ "User creation failed" : "使用者建立失敗",
+ "Invalid quota value: %1$s" : "無效的空間限額值:%1$s",
+ "Invalid quota value. %1$s is exceeding the maximum quota" : "無效的空間限額值。%1$s 超過了最大空間限額",
+ "Unlimited quota is forbidden on this instance" : "此站台禁止無限空間限額",
+ "Setting the password is not supported by the users backend" : "使用者後端不支援設定密碼",
+ "Invalid language" : "無效的語言",
+ "Invalid locale" : "無效的地區設定",
+ "Invalid first day of week" : "無效的一週第一天",
+ "Cannot remove yourself from the admin group" : "無法將您自己從管理員群組移除",
+ "Cannot remove yourself from this group as you are a sub-admin" : "因為您是子管理員,因此無法將自己從該群組中移除",
+ "Not viable to remove user from the last group you are sub-admin of" : "無法從您作為子管理員的最後一個群組中移除使用者",
+ "User does not exist" : "使用者不存在",
+ "Group does not exist" : "群組不存在",
+ "User is not a sub-admin of this group" : "使用者不是該群組的子管理員",
+ "Email address not available" : "電子郵件地址不可用",
+ "Sending email failed" : "傳送電子郵件失敗",
"Email confirmation" : "電子郵件確認",
- "To enable the email address %s please click the button below." : "要啟用電子郵件地址 %s,請點擊下方按鈕。",
+ "To enable the email address %s please click the button below." : "若要啟用電子郵件地址 %s,請點擊下方按鈕。",
"Confirm" : "確認",
- "Email was already removed from account and cannot be confirmed anymore." : "電子郵件已自帳號移除且無法再確認。",
- "Could not verify mail because the token is expired." : "無法驗證郵件,因為權杖已過期。",
- "Could not verify mail because the token is invalid." : "無法驗證郵件,因為權杖無效。",
+ "Email was already removed from account and cannot be confirmed anymore." : "電子郵件已從帳號移除,且無法再確認。",
+ "Could not verify mail because the token is expired." : "無法驗證郵件,因為代符已過期。",
+ "Could not verify mail because the token is invalid." : "無法驗證郵件,因為代符無效。",
"An unexpected error occurred. Please contact your admin." : "遇到非預期的錯誤。請聯絡您的管理員。",
"Email confirmation successful" : "電子郵件確認成功",
"Provisioning API" : "Provisioning API",
- "This application enables a set of APIs that external systems can use to manage users, groups and apps." : "此應用程式啟用了一組 API,外部系統可以使用其來管理使用者、群組與應用程式。",
- "This application enables a set of APIs that external systems can use to create, edit, delete and query user\n\t\tattributes, query, set and remove groups, set quota and query total storage used in Nextcloud. Group admin users\n\t\tcan also query Nextcloud and perform the same functions as an admin for groups they manage. The API also enables\n\t\tan admin to query for active Nextcloud applications, application info, and to enable or disable an app remotely.\n\t\tOnce the app is enabled, HTTP requests can be used via a Basic Auth header to perform any of the functions\n\t\tlisted above. More information is available in the Provisioning API documentation, including example calls\n\t\tand server responses." : "此應用程式啟用了一組 API,外部系統可以使用其來建立、編輯、刪除與查詢使用者\n\t\t屬性,查詢、設定與移除群組,設定配額與查詢 Nextcloud 中使用的總儲存空間。群組管理員使用者\n\t\t也可以用其來查詢 Nextcloud,並在其管理的群組中執行與系統管理員相同的動作。這組 API 也讓\n\t\t管理員可以查詢作用中的 Nextcloud 應用程式、應用程式資訊,以及遠端啟用或停用應用程式。\n\t\t應用程式啟用後,可以使用基本驗證標頭來使用 HTTP 請求執行上面\n\t\t列出的任何功能。更多資訊在 Provisioning API 的文件中提供,包含範例呼叫\n\t\t與伺服器回應。"
+ "This application enables a set of APIs that external systems can use to manage accounts, groups and apps." : "此應用程式啟用了一組 API,外部系統可以使用其來管理帳號、群組與應用程式。",
+ "This application enables a set of APIs that external systems can use to create, edit, delete and query account\n\t\tattributes, query, set and remove groups, set quota and query total storage used in Nextcloud. Group admin accounts\n\t\tcan also query Nextcloud and perform the same functions as an admin for groups they manage. The API also enables\n\t\tan admin to query for active Nextcloud applications, application info, and to enable or disable an app remotely.\n\t\tOnce the app is enabled, HTTP requests can be used via a Basic Auth header to perform any of the functions\n\t\tlisted above. More information is available in the Provisioning API documentation, including example calls\n\t\tand server responses." : "此應用程式啟用了一組 API,外部系統可以使用其來建立、編輯、刪除與查詢帳號\n\t\t屬性,查詢、設定與移除群組,設定配額與查詢 Nextcloud 中使用的總儲存空間。群組管理員帳號\n\t\t也可以用其來查詢 Nextcloud,並在其管理的群組中執行與系統管理員相同的動作。這組 API 也讓\n\t\t管理員可以查詢作用中的 Nextcloud 應用程式、應用程式資訊,以及遠端啟用或停用應用程式。\n\t\t應用程式啟用後,可以使用基本驗證標頭來使用 HTTP 請求執行上面\n\t\t列出的任何功能。更多資訊在 Provisioning API 的文件中提供,包含範例呼叫\n\t\t與伺服器回應。"
},"pluralForm" :"nplurals=1; plural=0;"
} \ No newline at end of file
diff --git a/apps/provisioning_api/lib/AppInfo/Application.php b/apps/provisioning_api/lib/AppInfo/Application.php
index c63720becef..57de9dad416 100644
--- a/apps/provisioning_api/lib/AppInfo/Application.php
+++ b/apps/provisioning_api/lib/AppInfo/Application.php
@@ -1,30 +1,8 @@
<?php
+
/**
- * @copyright Copyright (c) 2016 Roeland Jago Douma <roeland@famdouma.nl>
- *
- * @author Christoph Wurst <christoph@winzerhof-wurst.at>
- * @author Daniel Kesselberg <mail@danielkesselberg.de>
- * @author Joas Schilling <coding@schilljs.com>
- * @author Lukas Reschke <lukas@statuscode.ch>
- * @author Morris Jobke <hey@morrisjobke.de>
- * @author Roeland Jago Douma <roeland@famdouma.nl>
- * @author Vincent Petry <vincent@nextcloud.com>
- *
- * @license GNU AGPL version 3 or any later version
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as
- * published by the Free Software Foundation, either version 3 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- *
+ * SPDX-FileCopyrightText: 2016 Nextcloud GmbH and Nextcloud contributors
+ * SPDX-License-Identifier: AGPL-3.0-or-later
*/
namespace OCA\Provisioning_API\AppInfo;
diff --git a/apps/provisioning_api/lib/Capabilities.php b/apps/provisioning_api/lib/Capabilities.php
index 3504868fcf3..5becf6f611f 100644
--- a/apps/provisioning_api/lib/Capabilities.php
+++ b/apps/provisioning_api/lib/Capabilities.php
@@ -1,39 +1,21 @@
<?php
+
/**
- * @copyright Copyright (c) 2021 Vincent Petry <vincent@nextcloud.com>
- *
- * @author Vincent Petry <vincent@nextcloud.com>
- * @author Kate Döen <kate.doeen@nextcloud.com>
- *
- * @license GNU AGPL version 3 or any later version
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as
- * published by the Free Software Foundation, either version 3 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- *
+ * SPDX-FileCopyrightText: 2021 Nextcloud GmbH and Nextcloud contributors
+ * SPDX-License-Identifier: AGPL-3.0-or-later
*/
namespace OCA\Provisioning_API;
use OCA\FederatedFileSharing\FederatedShareProvider;
use OCP\App\IAppManager;
use OCP\Capabilities\ICapability;
+use OCP\Server;
class Capabilities implements ICapability {
- /** @var IAppManager */
- private $appManager;
-
- public function __construct(IAppManager $appManager) {
- $this->appManager = $appManager;
+ public function __construct(
+ private IAppManager $appManager,
+ ) {
}
/**
@@ -56,7 +38,7 @@ class Capabilities implements ICapability {
$federatedFileSharingEnabled = $this->appManager->isEnabledForUser('federatedfilesharing');
if ($federatedFileSharingEnabled) {
/** @var FederatedShareProvider $shareProvider */
- $shareProvider = \OC::$server->query(FederatedShareProvider::class);
+ $shareProvider = Server::get(FederatedShareProvider::class);
$publishedScopeEnabled = $shareProvider->isLookupServerUploadEnabled();
}
diff --git a/apps/provisioning_api/lib/Controller/AUserData.php b/apps/provisioning_api/lib/Controller/AUserDataOCSController.php
index 77d7f31c6da..d321adf7c8f 100644
--- a/apps/provisioning_api/lib/Controller/AUserData.php
+++ b/apps/provisioning_api/lib/Controller/AUserDataOCSController.php
@@ -3,39 +3,14 @@
declare(strict_types=1);
/**
- * @copyright Copyright (c) 2018 John Molakvoæ (skjnldsv) <skjnldsv@protonmail.com>
- *
- * @author Arthur Schiwon <blizzz@arthur-schiwon.de>
- * @author Christoph Wurst <christoph@winzerhof-wurst.at>
- * @author Georg Ehrke <oc.list@georgehrke.com>
- * @author Joas Schilling <coding@schilljs.com>
- * @author John Molakvoæ <skjnldsv@protonmail.com>
- * @author Roeland Jago Douma <roeland@famdouma.nl>
- * @author Vincent Petry <vincent@nextcloud.com>
- * @author Kate Döen <kate.doeen@nextcloud.com>
- *
- * @license GNU AGPL version 3 or any later version
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as
- * published by the Free Software Foundation, either version 3 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- *
+ * SPDX-FileCopyrightText: 2018 Nextcloud GmbH and Nextcloud contributors
+ * SPDX-License-Identifier: AGPL-3.0-or-later
*/
namespace OCA\Provisioning_API\Controller;
-use OC\Group\Manager;
+use OC\Group\Manager as GroupManager;
use OC\User\Backend;
use OC\User\NoUserException;
-use OC_Helper;
use OCA\Provisioning_API\ResponseDefinitions;
use OCP\Accounts\IAccountManager;
use OCP\Accounts\PropertyDoesNotExistException;
@@ -43,60 +18,50 @@ use OCP\AppFramework\Http;
use OCP\AppFramework\OCS\OCSException;
use OCP\AppFramework\OCS\OCSNotFoundException;
use OCP\AppFramework\OCSController;
+use OCP\Files\FileInfo;
+use OCP\Files\IRootFolder;
use OCP\Files\NotFoundException;
+use OCP\Group\ISubAdmin;
use OCP\IConfig;
-use OCP\IGroupManager;
use OCP\IRequest;
+use OCP\IUser;
use OCP\IUserManager;
use OCP\IUserSession;
use OCP\L10N\IFactory;
+use OCP\Server;
use OCP\User\Backend\ISetDisplayNameBackend;
use OCP\User\Backend\ISetPasswordBackend;
+use OCP\Util;
/**
* @psalm-import-type Provisioning_APIUserDetails from ResponseDefinitions
* @psalm-import-type Provisioning_APIUserDetailsQuota from ResponseDefinitions
*/
-abstract class AUserData extends OCSController {
+abstract class AUserDataOCSController extends OCSController {
public const SCOPE_SUFFIX = 'Scope';
public const USER_FIELD_DISPLAYNAME = 'display';
public const USER_FIELD_LANGUAGE = 'language';
public const USER_FIELD_LOCALE = 'locale';
+ public const USER_FIELD_FIRST_DAY_OF_WEEK = 'first_day_of_week';
public const USER_FIELD_PASSWORD = 'password';
public const USER_FIELD_QUOTA = 'quota';
public const USER_FIELD_MANAGER = 'manager';
public const USER_FIELD_NOTIFICATION_EMAIL = 'notify_email';
- /** @var IUserManager */
- protected $userManager;
- /** @var IConfig */
- protected $config;
- /** @var Manager */
- protected $groupManager;
- /** @var IUserSession */
- protected $userSession;
- /** @var IAccountManager */
- protected $accountManager;
- /** @var IFactory */
- protected $l10nFactory;
-
- public function __construct(string $appName,
+ public function __construct(
+ string $appName,
IRequest $request,
- IUserManager $userManager,
- IConfig $config,
- IGroupManager $groupManager,
- IUserSession $userSession,
- IAccountManager $accountManager,
- IFactory $l10nFactory) {
+ protected IUserManager $userManager,
+ protected IConfig $config,
+ protected GroupManager $groupManager,
+ protected IUserSession $userSession,
+ protected IAccountManager $accountManager,
+ protected ISubAdmin $subAdminManager,
+ protected IFactory $l10nFactory,
+ protected IRootFolder $rootFolder,
+ ) {
parent::__construct($appName, $request);
-
- $this->userManager = $userManager;
- $this->config = $config;
- $this->groupManager = $groupManager;
- $this->userSession = $userSession;
- $this->accountManager = $accountManager;
- $this->l10nFactory = $l10nFactory;
}
/**
@@ -122,7 +87,9 @@ abstract class AUserData extends OCSController {
}
$isAdmin = $this->groupManager->isAdmin($currentLoggedInUser->getUID());
+ $isDelegatedAdmin = $this->groupManager->isDelegatedAdmin($currentLoggedInUser->getUID());
if ($isAdmin
+ || $isDelegatedAdmin
|| $this->groupManager->getSubAdmin()->isUserAccessible($currentLoggedInUser, $targetUserObject)) {
$data['enabled'] = $this->config->getUserValue($targetUserObject->getUID(), 'core', 'enabled', 'true') === 'true';
} else {
@@ -140,7 +107,7 @@ abstract class AUserData extends OCSController {
$gids[] = $group->getGID();
}
- if ($isAdmin) {
+ if ($isAdmin || $isDelegatedAdmin) {
try {
# might be thrown by LDAP due to handling of users disappears
# from the external source (reasons unknown to us)
@@ -153,12 +120,14 @@ abstract class AUserData extends OCSController {
// Find the data
$data['id'] = $targetUserObject->getUID();
+ $data['firstLoginTimestamp'] = $targetUserObject->getFirstLogin();
+ $data['lastLoginTimestamp'] = $targetUserObject->getLastLogin();
$data['lastLogin'] = $targetUserObject->getLastLogin() * 1000;
$data['backend'] = $targetUserObject->getBackendClassName();
$data['subadmin'] = $this->getUserSubAdminGroupsData($targetUserObject->getUID());
- $data[self::USER_FIELD_QUOTA] = $this->fillStorageInfo($targetUserObject->getUID());
- $managerUids = $targetUserObject->getManagerUids();
- $data[self::USER_FIELD_MANAGER] = empty($managerUids) ? '' : $managerUids[0];
+ $data[self::USER_FIELD_QUOTA] = $this->fillStorageInfo($targetUserObject);
+ $managers = $this->getManagers($targetUserObject);
+ $data[self::USER_FIELD_MANAGER] = empty($managers) ? '' : $managers[0];
try {
if ($includeScopes) {
@@ -173,7 +142,8 @@ abstract class AUserData extends OCSController {
$additionalEmails = $additionalEmailScopes = [];
$emailCollection = $userAccount->getPropertyCollection(IAccountManager::COLLECTION_EMAIL);
foreach ($emailCollection->getProperties() as $property) {
- $additionalEmails[] = $property->getValue();
+ $email = mb_strtolower(trim($property->getValue()));
+ $additionalEmails[] = $email;
if ($includeScopes) {
$additionalEmailScopes[] = $property->getScope();
}
@@ -194,12 +164,14 @@ abstract class AUserData extends OCSController {
IAccountManager::PROPERTY_ADDRESS,
IAccountManager::PROPERTY_WEBSITE,
IAccountManager::PROPERTY_TWITTER,
+ IAccountManager::PROPERTY_BLUESKY,
IAccountManager::PROPERTY_FEDIVERSE,
IAccountManager::PROPERTY_ORGANISATION,
IAccountManager::PROPERTY_ROLE,
IAccountManager::PROPERTY_HEADLINE,
IAccountManager::PROPERTY_BIOGRAPHY,
IAccountManager::PROPERTY_PROFILE_ENABLED,
+ IAccountManager::PROPERTY_PRONOUNS,
] as $propertyName) {
$property = $userAccount->getProperty($propertyName);
$data[$propertyName] = $property->getValue();
@@ -227,10 +199,38 @@ abstract class AUserData extends OCSController {
}
/**
+ * @return string[]
+ */
+ protected function getManagers(IUser $user): array {
+ $currentLoggedInUser = $this->userSession->getUser();
+
+ $managerUids = $user->getManagerUids();
+ if ($this->groupManager->isAdmin($currentLoggedInUser->getUID()) || $this->groupManager->isDelegatedAdmin($currentLoggedInUser->getUID())) {
+ return $managerUids;
+ }
+
+ if ($this->subAdminManager->isSubAdmin($currentLoggedInUser)) {
+ $accessibleManagerUids = array_values(array_filter(
+ $managerUids,
+ function (string $managerUid) use ($currentLoggedInUser) {
+ $manager = $this->userManager->get($managerUid);
+ if (!($manager instanceof IUser)) {
+ return false;
+ }
+ return $this->subAdminManager->isUserAccessible($currentLoggedInUser, $manager);
+ },
+ ));
+ return $accessibleManagerUids;
+ }
+
+ return [];
+ }
+
+ /**
* Get the groups a user is a subadmin of
*
* @param string $userId
- * @return string[]
+ * @return list<string>
* @throws OCSException
*/
protected function getUserSubAdminGroupsData(string $userId): array {
@@ -251,47 +251,73 @@ abstract class AUserData extends OCSController {
}
/**
- * @param string $userId
+ * @param IUser $user
* @return Provisioning_APIUserDetailsQuota
* @throws OCSException
*/
- protected function fillStorageInfo(string $userId): array {
- try {
- \OC_Util::tearDownFS();
- \OC_Util::setupFS($userId);
- $storage = OC_Helper::getStorageInfo('/', null, true, false);
- $data = [
- 'free' => $storage['free'],
- 'used' => $storage['used'],
- 'total' => $storage['total'],
- 'relative' => $storage['relative'],
- self::USER_FIELD_QUOTA => $storage['quota'],
- ];
- } catch (NotFoundException $ex) {
- // User fs is not setup yet
- $user = $this->userManager->get($userId);
- if ($user === null) {
- throw new OCSException('User does not exist', 101);
+ protected function fillStorageInfo(IUser $user): array {
+ $includeExternal = $this->config->getSystemValueBool('quota_include_external_storage');
+ $userId = $user->getUID();
+
+ $quota = $user->getQuota();
+ if ($quota === 'none') {
+ $quota = FileInfo::SPACE_UNLIMITED;
+ } else {
+ $quota = Util::computerFileSize($quota);
+ if ($quota === false) {
+ $quota = FileInfo::SPACE_UNLIMITED;
}
- $quota = $user->getQuota();
- if ($quota !== 'none') {
- $quota = OC_Helper::computerFileSize($quota);
+ }
+
+ try {
+ if ($includeExternal) {
+ \OC_Util::tearDownFS();
+ \OC_Util::setupFS($user->getUID());
+ $storage = \OC_Helper::getStorageInfo('/', null, true, false);
+ $data = [
+ 'free' => $storage['free'],
+ 'used' => $storage['used'],
+ 'total' => $storage['total'],
+ 'relative' => $storage['relative'],
+ self::USER_FIELD_QUOTA => $storage['quota'],
+ ];
+ } else {
+ $userFileInfo = $this->rootFolder->getUserFolder($userId)->getStorage()->getCache()->get('');
+ $used = $userFileInfo->getSize();
+
+ if ($quota > 0) {
+ // prevent division by zero or error codes (negative values)
+ $relative = round(($used / $quota) * 10000) / 100;
+ $free = $quota - $used;
+ $total = $quota;
+ } else {
+ $relative = 0;
+ $free = FileInfo::SPACE_UNLIMITED;
+ $total = FileInfo::SPACE_UNLIMITED;
+ }
+
+ $data = [
+ 'free' => $free,
+ 'used' => $used,
+ 'total' => $total,
+ 'relative' => $relative,
+ self::USER_FIELD_QUOTA => $quota,
+ ];
}
+ } catch (NotFoundException $ex) {
$data = [
- self::USER_FIELD_QUOTA => $quota !== false ? $quota : 'none',
+ self::USER_FIELD_QUOTA => $quota >= 0 ? $quota : 'none',
'used' => 0
];
} catch (\Exception $e) {
- \OC::$server->get(\Psr\Log\LoggerInterface::class)->error(
- "Could not load storage info for {user}",
+ Server::get(\Psr\Log\LoggerInterface::class)->error(
+ 'Could not load storage info for {user}',
[
'app' => 'provisioning_api',
'user' => $userId,
'exception' => $e,
]
);
- /* In case the Exception left things in a bad state */
- \OC_Util::tearDownFS();
return [];
}
return $data;
diff --git a/apps/provisioning_api/lib/Controller/AppConfigController.php b/apps/provisioning_api/lib/Controller/AppConfigController.php
index ea862550e2d..d8af1f38d95 100644
--- a/apps/provisioning_api/lib/Controller/AppConfigController.php
+++ b/apps/provisioning_api/lib/Controller/AppConfigController.php
@@ -3,35 +3,20 @@
declare(strict_types=1);
/**
- * @copyright Copyright (c) 2016 Joas Schilling <coding@schilljs.com>
- *
- * @author Joas Schilling <coding@schilljs.com>
- * @author Roeland Jago Douma <roeland@famdouma.nl>
- * @author Kate Döen <kate.doeen@nextcloud.com>
- *
- * @license GNU AGPL version 3 or any later version
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as
- * published by the Free Software Foundation, either version 3 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- *
+ * SPDX-FileCopyrightText: 2016 Nextcloud GmbH and Nextcloud contributors
+ * SPDX-License-Identifier: AGPL-3.0-or-later
*/
namespace OCA\Provisioning_API\Controller;
use OC\AppConfig;
use OC\AppFramework\Middleware\Security\Exceptions\NotAdminException;
+use OCP\App\IAppManager;
use OCP\AppFramework\Http;
+use OCP\AppFramework\Http\Attribute\NoAdminRequired;
+use OCP\AppFramework\Http\Attribute\PasswordConfirmationRequired;
use OCP\AppFramework\Http\DataResponse;
use OCP\AppFramework\OCSController;
+use OCP\Exceptions\AppConfigUnknownKeyException;
use OCP\IAppConfig;
use OCP\IGroupManager;
use OCP\IL10N;
@@ -51,6 +36,7 @@ class AppConfigController extends OCSController {
private IL10N $l10n,
private IGroupManager $groupManager,
private IManager $settingManager,
+ private IAppManager $appManager,
) {
parent::__construct($appName, $request);
}
@@ -58,7 +44,7 @@ class AppConfigController extends OCSController {
/**
* Get a list of apps
*
- * @return DataResponse<Http::STATUS_OK, array{data: string[]}, array{}>
+ * @return DataResponse<Http::STATUS_OK, array{data: list<string>}, array{}>
*
* 200: Apps returned
*/
@@ -72,7 +58,7 @@ class AppConfigController extends OCSController {
* Get the config keys of an app
*
* @param string $app ID of the app
- * @return DataResponse<Http::STATUS_OK, array{data: string[]}, array{}>|DataResponse<Http::STATUS_FORBIDDEN, array{data: array{message: string}}, array{}>
+ * @return DataResponse<Http::STATUS_OK, array{data: list<string>}, array{}>|DataResponse<Http::STATUS_FORBIDDEN, array{data: array{message: string}}, array{}>
*
* 200: Keys returned
* 403: App is not allowed
@@ -112,28 +98,28 @@ class AppConfigController extends OCSController {
}
/**
- * @PasswordConfirmationRequired
* @NoSubAdminRequired
- * @NoAdminRequired
*
* Update the config value of an app
*
* @param string $app ID of the app
* @param string $key Key to update
* @param string $value New value for the key
- * @return DataResponse<Http::STATUS_OK, array<empty>, array{}>|DataResponse<Http::STATUS_FORBIDDEN, array{data: array{message: string}}, array{}>
+ * @return DataResponse<Http::STATUS_OK, list<empty>, array{}>|DataResponse<Http::STATUS_FORBIDDEN, array{data: array{message: string}}, array{}>
*
* 200: Value updated successfully
* 403: App or key is not allowed
*/
+ #[PasswordConfirmationRequired]
+ #[NoAdminRequired]
public function setValue(string $app, string $key, string $value): DataResponse {
$user = $this->userSession->getUser();
if ($user === null) {
- throw new \Exception("User is not logged in."); // Should not happen, since method is guarded by middleware
+ throw new \Exception('User is not logged in.'); // Should not happen, since method is guarded by middleware
}
if (!$this->isAllowedToChangedKey($user, $app, $key)) {
- throw new NotAdminException($this->l10n->t('Logged in user must be an administrator or have authorization to edit this setting.'));
+ throw new NotAdminException($this->l10n->t('Logged in account must be an administrator or have authorization to edit this setting.'));
}
try {
@@ -143,23 +129,37 @@ class AppConfigController extends OCSController {
return new DataResponse(['data' => ['message' => $e->getMessage()]], Http::STATUS_FORBIDDEN);
}
+ $type = null;
+ try {
+ $configDetails = $this->appConfig->getDetails($app, $key);
+ $type = $configDetails['type'];
+ } catch (AppConfigUnknownKeyException) {
+ }
+
/** @psalm-suppress InternalMethod */
- $this->appConfig->setValueMixed($app, $key, $value);
+ match ($type) {
+ IAppConfig::VALUE_BOOL => $this->appConfig->setValueBool($app, $key, (bool)$value),
+ IAppConfig::VALUE_FLOAT => $this->appConfig->setValueFloat($app, $key, (float)$value),
+ IAppConfig::VALUE_INT => $this->appConfig->setValueInt($app, $key, (int)$value),
+ IAppConfig::VALUE_STRING => $this->appConfig->setValueString($app, $key, $value),
+ IAppConfig::VALUE_ARRAY => $this->appConfig->setValueArray($app, $key, \json_decode($value, true)),
+ default => $this->appConfig->setValueMixed($app, $key, $value),
+ };
+
return new DataResponse();
}
/**
- * @PasswordConfirmationRequired
- *
* Delete a config key of an app
*
* @param string $app ID of the app
* @param string $key Key to delete
- * @return DataResponse<Http::STATUS_OK, array<empty>, array{}>|DataResponse<Http::STATUS_FORBIDDEN, array{data: array{message: string}}, array{}>
+ * @return DataResponse<Http::STATUS_OK, list<empty>, array{}>|DataResponse<Http::STATUS_FORBIDDEN, array{data: array{message: string}}, array{}>
*
* 200: Key deleted successfully
* 403: App or key is not allowed
*/
+ #[PasswordConfirmationRequired]
public function deleteKey(string $app, string $key): DataResponse {
try {
$this->verifyAppId($app);
@@ -173,11 +173,10 @@ class AppConfigController extends OCSController {
}
/**
- * @param string $app
* @throws \InvalidArgumentException
*/
- protected function verifyAppId(string $app) {
- if (\OC_App::cleanAppId($app) !== $app) {
+ protected function verifyAppId(string $app): void {
+ if ($this->appManager->cleanAppId($app) !== $app) {
throw new \InvalidArgumentException('Invalid app id given');
}
}
diff --git a/apps/provisioning_api/lib/Controller/AppsController.php b/apps/provisioning_api/lib/Controller/AppsController.php
index 534b1644262..3f6cff7442a 100644
--- a/apps/provisioning_api/lib/Controller/AppsController.php
+++ b/apps/provisioning_api/lib/Controller/AppsController.php
@@ -1,77 +1,64 @@
<?php
declare(strict_types=1);
-
/**
- * @copyright Copyright (c) 2016, ownCloud, Inc.
- *
- * @author Christoph Wurst <christoph@winzerhof-wurst.at>
- * @author Joas Schilling <coding@schilljs.com>
- * @author Lukas Reschke <lukas@statuscode.ch>
- * @author Roeland Jago Douma <roeland@famdouma.nl>
- * @author Tom Needham <tom@owncloud.com>
- * @author Kate Döen <kate.doeen@nextcloud.com>
- *
- * @license AGPL-3.0
- *
- * This code is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License, version 3,
- * as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License, version 3,
- * along with this program. If not, see <http://www.gnu.org/licenses/>
- *
+ * SPDX-FileCopyrightText: 2016-2024 Nextcloud GmbH and Nextcloud contributors
+ * SPDX-FileCopyrightText: 2016 ownCloud, Inc.
+ * SPDX-License-Identifier: AGPL-3.0-only
*/
namespace OCA\Provisioning_API\Controller;
+use OC\App\AppStore\AppNotFoundException;
+use OC\Installer;
use OC_App;
-use OCA\Provisioning_API\ResponseDefinitions;
use OCP\App\AppPathNotFoundException;
use OCP\App\IAppManager;
use OCP\AppFramework\Http;
+use OCP\AppFramework\Http\Attribute\PasswordConfirmationRequired;
use OCP\AppFramework\Http\DataResponse;
use OCP\AppFramework\OCS\OCSException;
use OCP\AppFramework\OCSController;
+use OCP\IAppConfig;
use OCP\IRequest;
-/**
- * @psalm-import-type Provisioning_APIAppInfo from ResponseDefinitions
- */
class AppsController extends OCSController {
- /** @var IAppManager */
- private $appManager;
-
public function __construct(
string $appName,
IRequest $request,
- IAppManager $appManager
+ private IAppManager $appManager,
+ private Installer $installer,
+ private IAppConfig $appConfig,
) {
parent::__construct($appName, $request);
+ }
- $this->appManager = $appManager;
+ /**
+ * @throws \InvalidArgumentException
+ */
+ protected function verifyAppId(string $app): string {
+ $cleanId = $this->appManager->cleanAppId($app);
+ if ($cleanId !== $app) {
+ throw new \InvalidArgumentException('Invalid app id given');
+ }
+ return $cleanId;
}
/**
* Get a list of installed apps
*
* @param ?string $filter Filter for enabled or disabled apps
- * @return DataResponse<Http::STATUS_OK, array{apps: string[]}, array{}>
+ * @return DataResponse<Http::STATUS_OK, array{apps: list<string>}, array{}>
* @throws OCSException
*
* 200: Installed apps returned
*/
public function getApps(?string $filter = null): DataResponse {
$apps = (new OC_App())->listAllApps();
+ /** @var list<string> $list */
$list = [];
foreach ($apps as $app) {
$list[] = $app['id'];
}
- /** @var string[] $list */
if ($filter) {
switch ($filter) {
case 'enabled':
@@ -79,7 +66,7 @@ class AppsController extends OCSController {
break;
case 'disabled':
$enabled = OC_App::getEnabledApps();
- return new DataResponse(['apps' => array_diff($list, $enabled)]);
+ return new DataResponse(['apps' => array_values(array_diff($list, $enabled))]);
break;
default:
// Invalid filter variable
@@ -94,12 +81,17 @@ class AppsController extends OCSController {
* Get the app info for an app
*
* @param string $app ID of the app
- * @return DataResponse<Http::STATUS_OK, Provisioning_APIAppInfo, array{}>
+ * @return DataResponse<Http::STATUS_OK, array<string, ?mixed>, array{}>
* @throws OCSException
*
* 200: App info returned
*/
public function getAppInfo(string $app): DataResponse {
+ try {
+ $app = $this->verifyAppId($app);
+ } catch (\InvalidArgumentException $e) {
+ throw new OCSException($e->getMessage(), OCSController::RESPOND_UNAUTHORISED);
+ }
$info = $this->appManager->getAppInfo($app);
if (!is_null($info)) {
return new DataResponse($info);
@@ -109,37 +101,53 @@ class AppsController extends OCSController {
}
/**
- * @PasswordConfirmationRequired
- *
* Enable an app
*
* @param string $app ID of the app
- * @return DataResponse<Http::STATUS_OK, array<empty>, array{}>
+ * @return DataResponse<Http::STATUS_OK, list<empty>, array{}>
* @throws OCSException
*
* 200: App enabled successfully
*/
+ #[PasswordConfirmationRequired]
public function enable(string $app): DataResponse {
try {
+ $app = $this->verifyAppId($app);
+
+ if (!$this->installer->isDownloaded($app)) {
+ $this->installer->downloadApp($app);
+ }
+
+ if ($this->appConfig->getValueString($app, 'installed_version', '') === '') {
+ $this->installer->installApp($app);
+ }
+
$this->appManager->enableApp($app);
- } catch (AppPathNotFoundException $e) {
+ } catch (\InvalidArgumentException $e) {
+ throw new OCSException($e->getMessage(), OCSController::RESPOND_UNAUTHORISED);
+ } catch (AppPathNotFoundException|AppNotFoundException $e) {
throw new OCSException('The request app was not found', OCSController::RESPOND_NOT_FOUND);
}
return new DataResponse();
}
/**
- * @PasswordConfirmationRequired
- *
* Disable an app
*
* @param string $app ID of the app
- * @return DataResponse<Http::STATUS_OK, array<empty>, array{}>
+ * @return DataResponse<Http::STATUS_OK, list<empty>, array{}>
+ * @throws OCSException
*
* 200: App disabled successfully
*/
+ #[PasswordConfirmationRequired]
public function disable(string $app): DataResponse {
- $this->appManager->disableApp($app);
+ try {
+ $app = $this->verifyAppId($app);
+ $this->appManager->disableApp($app);
+ } catch (\InvalidArgumentException $e) {
+ throw new OCSException($e->getMessage(), OCSController::RESPOND_UNAUTHORISED);
+ }
return new DataResponse();
}
}
diff --git a/apps/provisioning_api/lib/Controller/GroupsController.php b/apps/provisioning_api/lib/Controller/GroupsController.php
index d140c5d60b1..37af51419df 100644
--- a/apps/provisioning_api/lib/Controller/GroupsController.php
+++ b/apps/provisioning_api/lib/Controller/GroupsController.php
@@ -1,46 +1,28 @@
<?php
declare(strict_types=1);
-
/**
- * @copyright Copyright (c) 2016, ownCloud, Inc.
- *
- * @author Arthur Schiwon <blizzz@arthur-schiwon.de>
- * @author Christoph Wurst <christoph@winzerhof-wurst.at>
- * @author Joas Schilling <coding@schilljs.com>
- * @author John Molakvoæ <skjnldsv@protonmail.com>
- * @author Julius Härtl <jus@bitgrid.net>
- * @author Lukas Reschke <lukas@statuscode.ch>
- * @author Robin Appelman <robin@icewind.nl>
- * @author Roeland Jago Douma <roeland@famdouma.nl>
- * @author Tom Needham <tom@owncloud.com>
- * @author Kate Döen <kate.doeen@nextcloud.com>
- *
- * @license AGPL-3.0
- *
- * This code is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License, version 3,
- * as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License, version 3,
- * along with this program. If not, see <http://www.gnu.org/licenses/>
- *
+ * SPDX-FileCopyrightText: 2016-2024 Nextcloud GmbH and Nextcloud contributors
+ * SPDX-FileCopyrightText: 2016 ownCloud, Inc.
+ * SPDX-License-Identifier: AGPL-3.0-only
*/
namespace OCA\Provisioning_API\Controller;
use OCA\Provisioning_API\ResponseDefinitions;
+use OCA\Settings\Settings\Admin\Sharing;
+use OCA\Settings\Settings\Admin\Users;
use OCP\Accounts\IAccountManager;
use OCP\AppFramework\Http;
+use OCP\AppFramework\Http\Attribute\AuthorizedAdminSetting;
+use OCP\AppFramework\Http\Attribute\NoAdminRequired;
+use OCP\AppFramework\Http\Attribute\PasswordConfirmationRequired;
use OCP\AppFramework\Http\DataResponse;
use OCP\AppFramework\OCS\OCSException;
use OCP\AppFramework\OCS\OCSForbiddenException;
use OCP\AppFramework\OCS\OCSNotFoundException;
use OCP\AppFramework\OCSController;
+use OCP\Files\IRootFolder;
+use OCP\Group\ISubAdmin;
use OCP\IConfig;
use OCP\IGroup;
use OCP\IGroupManager;
@@ -55,20 +37,21 @@ use Psr\Log\LoggerInterface;
* @psalm-import-type Provisioning_APIGroupDetails from ResponseDefinitions
* @psalm-import-type Provisioning_APIUserDetails from ResponseDefinitions
*/
-class GroupsController extends AUserData {
-
- /** @var LoggerInterface */
- private $logger;
+class GroupsController extends AUserDataOCSController {
- public function __construct(string $appName,
+ public function __construct(
+ string $appName,
IRequest $request,
IUserManager $userManager,
IConfig $config,
IGroupManager $groupManager,
IUserSession $userSession,
IAccountManager $accountManager,
+ ISubAdmin $subAdminManager,
IFactory $l10nFactory,
- LoggerInterface $logger) {
+ IRootFolder $rootFolder,
+ private LoggerInterface $logger,
+ ) {
parent::__construct($appName,
$request,
$userManager,
@@ -76,50 +59,49 @@ class GroupsController extends AUserData {
$groupManager,
$userSession,
$accountManager,
- $l10nFactory
+ $subAdminManager,
+ $l10nFactory,
+ $rootFolder,
);
-
- $this->logger = $logger;
}
/**
- * @NoAdminRequired
- *
* Get a list of groups
*
* @param string $search Text to search for
* @param ?int $limit Limit the amount of groups returned
* @param int $offset Offset for searching for groups
- * @return DataResponse<Http::STATUS_OK, array{groups: string[]}, array{}>
+ * @return DataResponse<Http::STATUS_OK, array{groups: list<string>}, array{}>
*
* 200: Groups returned
*/
+ #[NoAdminRequired]
public function getGroups(string $search = '', ?int $limit = null, int $offset = 0): DataResponse {
$groups = $this->groupManager->search($search, $limit, $offset);
- $groups = array_map(function ($group) {
+ $groups = array_values(array_map(function ($group) {
/** @var IGroup $group */
return $group->getGID();
- }, $groups);
+ }, $groups));
return new DataResponse(['groups' => $groups]);
}
/**
- * @NoAdminRequired
- * @AuthorizedAdminSetting(settings=OCA\Settings\Settings\Admin\Sharing)
- *
* Get a list of groups details
*
* @param string $search Text to search for
* @param ?int $limit Limit the amount of groups returned
* @param int $offset Offset for searching for groups
- * @return DataResponse<Http::STATUS_OK, array{groups: Provisioning_APIGroupDetails[]}, array{}>
+ * @return DataResponse<Http::STATUS_OK, array{groups: list<Provisioning_APIGroupDetails>}, array{}>
*
* 200: Groups details returned
*/
- public function getGroupsDetails(string $search = '', int $limit = null, int $offset = 0): DataResponse {
+ #[NoAdminRequired]
+ #[AuthorizedAdminSetting(settings: Sharing::class)]
+ #[AuthorizedAdminSetting(settings: Users::class)]
+ public function getGroupsDetails(string $search = '', ?int $limit = null, int $offset = 0): DataResponse {
$groups = $this->groupManager->search($search, $limit, $offset);
- $groups = array_map(function ($group) {
+ $groups = array_values(array_map(function ($group) {
/** @var IGroup $group */
return [
'id' => $group->getGID(),
@@ -129,41 +111,39 @@ class GroupsController extends AUserData {
'canAdd' => $group->canAddUser(),
'canRemove' => $group->canRemoveUser(),
];
- }, $groups);
+ }, $groups));
return new DataResponse(['groups' => $groups]);
}
/**
- * @NoAdminRequired
- *
* Get a list of users in the specified group
*
* @param string $groupId ID of the group
- * @return DataResponse<Http::STATUS_OK, array{users: string[]}, array{}>
+ * @return DataResponse<Http::STATUS_OK, array{users: list<string>}, array{}>
* @throws OCSException
*
* @deprecated 14 Use getGroupUsers
*
* 200: Group users returned
*/
+ #[NoAdminRequired]
public function getGroup(string $groupId): DataResponse {
return $this->getGroupUsers($groupId);
}
/**
- * @NoAdminRequired
- *
* Get a list of users in the specified group
*
* @param string $groupId ID of the group
- * @return DataResponse<Http::STATUS_OK, array{users: string[]}, array{}>
+ * @return DataResponse<Http::STATUS_OK, array{users: list<string>}, array{}>
* @throws OCSException
* @throws OCSNotFoundException Group not found
* @throws OCSForbiddenException Missing permissions to get users in the group
*
* 200: User IDs returned
*/
+ #[NoAdminRequired]
public function getGroupUsers(string $groupId): DataResponse {
$groupId = urldecode($groupId);
@@ -179,14 +159,15 @@ class GroupsController extends AUserData {
}
// Check subadmin has access to this group
- if ($this->groupManager->isAdmin($user->getUID())
- || $isSubadminOfGroup) {
+ $isAdmin = $this->groupManager->isAdmin($user->getUID());
+ $isDelegatedAdmin = $this->groupManager->isDelegatedAdmin($user->getUID());
+ if ($isAdmin || $isDelegatedAdmin || $isSubadminOfGroup) {
$users = $this->groupManager->get($groupId)->getUsers();
$users = array_map(function ($user) {
/** @var IUser $user */
return $user->getUID();
}, $users);
- /** @var string[] $users */
+ /** @var list<string> $users */
$users = array_values($users);
return new DataResponse(['users' => $users]);
}
@@ -195,8 +176,6 @@ class GroupsController extends AUserData {
}
/**
- * @NoAdminRequired
- *
* Get a list of users details in the specified group
*
* @param string $groupId ID of the group
@@ -209,7 +188,8 @@ class GroupsController extends AUserData {
*
* 200: Group users details returned
*/
- public function getGroupUsersDetails(string $groupId, string $search = '', int $limit = null, int $offset = 0): DataResponse {
+ #[NoAdminRequired]
+ public function getGroupUsersDetails(string $groupId, string $search = '', ?int $limit = null, int $offset = 0): DataResponse {
$groupId = urldecode($groupId);
$currentUser = $this->userSession->getUser();
@@ -222,7 +202,9 @@ class GroupsController extends AUserData {
}
// Check subadmin has access to this group
- if ($this->groupManager->isAdmin($currentUser->getUID()) || $isSubadminOfGroup) {
+ $isAdmin = $this->groupManager->isAdmin($currentUser->getUID());
+ $isDelegatedAdmin = $this->groupManager->isDelegatedAdmin($currentUser->getUID());
+ if ($isAdmin || $isDelegatedAdmin || $isSubadminOfGroup) {
$users = $group->searchUsers($search, $limit, $offset);
// Extract required number
@@ -251,17 +233,17 @@ class GroupsController extends AUserData {
}
/**
- * @PasswordConfirmationRequired
- *
* Create a new group
*
* @param string $groupid ID of the group
* @param string $displayname Display name of the group
- * @return DataResponse<Http::STATUS_OK, array<empty>, array{}>
+ * @return DataResponse<Http::STATUS_OK, list<empty>, array{}>
* @throws OCSException
*
* 200: Group created successfully
*/
+ #[AuthorizedAdminSetting(settings:Users::class)]
+ #[PasswordConfirmationRequired]
public function addGroup(string $groupid, string $displayname = ''): DataResponse {
// Validate name
if (empty($groupid)) {
@@ -283,18 +265,18 @@ class GroupsController extends AUserData {
}
/**
- * @PasswordConfirmationRequired
- *
* Update a group
*
* @param string $groupId ID of the group
* @param string $key Key to update, only 'displayname'
* @param string $value New value for the key
- * @return DataResponse<Http::STATUS_OK, array<empty>, array{}>
+ * @return DataResponse<Http::STATUS_OK, list<empty>, array{}>
* @throws OCSException
*
* 200: Group updated successfully
*/
+ #[AuthorizedAdminSetting(settings:Users::class)]
+ #[PasswordConfirmationRequired]
public function updateGroup(string $groupId, string $key, string $value): DataResponse {
$groupId = urldecode($groupId);
@@ -314,16 +296,16 @@ class GroupsController extends AUserData {
}
/**
- * @PasswordConfirmationRequired
- *
* Delete a group
*
* @param string $groupId ID of the group
- * @return DataResponse<Http::STATUS_OK, array<empty>, array{}>
+ * @return DataResponse<Http::STATUS_OK, list<empty>, array{}>
* @throws OCSException
*
* 200: Group deleted successfully
*/
+ #[AuthorizedAdminSetting(settings:Users::class)]
+ #[PasswordConfirmationRequired]
public function deleteGroup(string $groupId): DataResponse {
$groupId = urldecode($groupId);
@@ -342,11 +324,12 @@ class GroupsController extends AUserData {
* Get the list of user IDs that are a subadmin of the group
*
* @param string $groupId ID of the group
- * @return DataResponse<Http::STATUS_OK, string[], array{}>
+ * @return DataResponse<Http::STATUS_OK, list<string>, array{}>
* @throws OCSException
*
* 200: Sub admins returned
*/
+ #[AuthorizedAdminSetting(settings:Users::class)]
public function getSubAdminsOfGroup(string $groupId): DataResponse {
// Check group exists
$targetGroup = $this->groupManager->get($groupId);
@@ -357,7 +340,7 @@ class GroupsController extends AUserData {
/** @var IUser[] $subadmins */
$subadmins = $this->groupManager->getSubAdmin()->getGroupsSubAdmins($targetGroup);
// New class returns IUser[] so convert back
- /** @var string[] $uids */
+ /** @var list<string> $uids */
$uids = [];
foreach ($subadmins as $user) {
$uids[] = $user->getUID();
diff --git a/apps/provisioning_api/lib/Controller/PreferencesController.php b/apps/provisioning_api/lib/Controller/PreferencesController.php
index cc7a9efd764..8ae64e65b81 100644
--- a/apps/provisioning_api/lib/Controller/PreferencesController.php
+++ b/apps/provisioning_api/lib/Controller/PreferencesController.php
@@ -3,31 +3,14 @@
declare(strict_types=1);
/**
- * @copyright Copyright (c) 2022 Joas Schilling <coding@schilljs.com>
- *
- * @author Joas Schilling <coding@schilljs.com>
- * @author Kate Döen <kate.doeen@nextcloud.com>
- *
- * @license GNU AGPL version 3 or any later version
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as
- * published by the Free Software Foundation, either version 3 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see <https://www.gnu.org/licenses/>.
- *
+ * SPDX-FileCopyrightText: 2022 Nextcloud GmbH and Nextcloud contributors
+ * SPDX-License-Identifier: AGPL-3.0-or-later
*/
namespace OCA\Provisioning_API\Controller;
use OCP\AppFramework\Http;
+use OCP\AppFramework\Http\Attribute\NoAdminRequired;
use OCP\AppFramework\Http\DataResponse;
use OCP\AppFramework\OCSController;
use OCP\Config\BeforePreferenceDeletedEvent;
@@ -39,25 +22,17 @@ use OCP\IUserSession;
class PreferencesController extends OCSController {
- private IConfig $config;
- private IUserSession $userSession;
- private IEventDispatcher $eventDispatcher;
-
public function __construct(
string $appName,
IRequest $request,
- IConfig $config,
- IUserSession $userSession,
- IEventDispatcher $eventDispatcher
+ private IConfig $config,
+ private IUserSession $userSession,
+ private IEventDispatcher $eventDispatcher,
) {
parent::__construct($appName, $request);
- $this->config = $config;
- $this->userSession = $userSession;
- $this->eventDispatcher = $eventDispatcher;
}
/**
- * @NoAdminRequired
* @NoSubAdminRequired
*
* Update multiple preference values of an app
@@ -65,11 +40,12 @@ class PreferencesController extends OCSController {
* @param string $appId ID of the app
* @param array<string, string> $configs Key-value pairs of the preferences
*
- * @return DataResponse<Http::STATUS_OK|Http::STATUS_BAD_REQUEST, array<empty>, array{}>
+ * @return DataResponse<Http::STATUS_OK|Http::STATUS_BAD_REQUEST, list<empty>, array{}>
*
* 200: Preferences updated successfully
* 400: Preference invalid
*/
+ #[NoAdminRequired]
public function setMultiplePreferences(string $appId, array $configs): DataResponse {
$userId = $this->userSession->getUser()->getUID();
@@ -102,7 +78,6 @@ class PreferencesController extends OCSController {
}
/**
- * @NoAdminRequired
* @NoSubAdminRequired
*
* Update a preference value of an app
@@ -110,11 +85,12 @@ class PreferencesController extends OCSController {
* @param string $appId ID of the app
* @param string $configKey Key of the preference
* @param string $configValue New value
- * @return DataResponse<Http::STATUS_OK|Http::STATUS_BAD_REQUEST, array<empty>, array{}>
+ * @return DataResponse<Http::STATUS_OK|Http::STATUS_BAD_REQUEST, list<empty>, array{}>
*
* 200: Preference updated successfully
* 400: Preference invalid
*/
+ #[NoAdminRequired]
public function setPreference(string $appId, string $configKey, string $configValue): DataResponse {
$userId = $this->userSession->getUser()->getUID();
@@ -143,18 +119,19 @@ class PreferencesController extends OCSController {
}
/**
- * @NoAdminRequired
* @NoSubAdminRequired
*
* Delete multiple preferences for an app
*
* @param string $appId ID of the app
- * @param string[] $configKeys Keys to delete
+ * @param list<string> $configKeys Keys to delete
+ *
+ * @return DataResponse<Http::STATUS_OK|Http::STATUS_BAD_REQUEST, list<empty>, array{}>
*
- * @return DataResponse<Http::STATUS_OK|Http::STATUS_BAD_REQUEST, array<empty>, array{}>
* 200: Preferences deleted successfully
* 400: Preference invalid
*/
+ #[NoAdminRequired]
public function deleteMultiplePreference(string $appId, array $configKeys): DataResponse {
$userId = $this->userSession->getUser()->getUID();
@@ -185,18 +162,18 @@ class PreferencesController extends OCSController {
}
/**
- * @NoAdminRequired
* @NoSubAdminRequired
*
* Delete a preference for an app
*
* @param string $appId ID of the app
* @param string $configKey Key to delete
- * @return DataResponse<Http::STATUS_OK|Http::STATUS_BAD_REQUEST, array<empty>, array{}>
+ * @return DataResponse<Http::STATUS_OK|Http::STATUS_BAD_REQUEST, list<empty>, array{}>
*
* 200: Preference deleted successfully
* 400: Preference invalid
*/
+ #[NoAdminRequired]
public function deletePreference(string $appId, string $configKey): DataResponse {
$userId = $this->userSession->getUser()->getUID();
diff --git a/apps/provisioning_api/lib/Controller/UsersController.php b/apps/provisioning_api/lib/Controller/UsersController.php
index 352970faa37..513a27c7df8 100644
--- a/apps/provisioning_api/lib/Controller/UsersController.php
+++ b/apps/provisioning_api/lib/Controller/UsersController.php
@@ -3,66 +3,43 @@
declare(strict_types=1);
/**
- * @copyright Copyright (c) 2016, ownCloud, Inc.
- *
- * @author Arthur Schiwon <blizzz@arthur-schiwon.de>
- * @author Bjoern Schiessle <bjoern@schiessle.org>
- * @author Christoph Wurst <christoph@winzerhof-wurst.at>
- * @author Daniel Calviño Sánchez <danxuliu@gmail.com>
- * @author Daniel Kesselberg <mail@danielkesselberg.de>
- * @author Joas Schilling <coding@schilljs.com>
- * @author John Molakvoæ <skjnldsv@protonmail.com>
- * @author Julius Härtl <jus@bitgrid.net>
- * @author Lukas Reschke <lukas@statuscode.ch>
- * @author michag86 <micha_g@arcor.de>
- * @author Mikael Hammarin <mikael@try2.se>
- * @author Morris Jobke <hey@morrisjobke.de>
- * @author Robin Appelman <robin@icewind.nl>
- * @author Roeland Jago Douma <roeland@famdouma.nl>
- * @author Sujith Haridasan <sujith.h@gmail.com>
- * @author Thomas Citharel <nextcloud@tcit.fr>
- * @author Thomas Müller <thomas.mueller@tmit.eu>
- * @author Tom Needham <tom@owncloud.com>
- * @author Vincent Petry <vincent@nextcloud.com>
- * @author Kate Döen <kate.doeen@nextcloud.com>
- *
- * @license AGPL-3.0
- *
- * This code is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License, version 3,
- * as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License, version 3,
- * along with this program. If not, see <http://www.gnu.org/licenses/>
- *
+ * SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors
+ * SPDX-FileCopyrightText: 2016 ownCloud, Inc.
+ * SPDX-License-Identifier: AGPL-3.0-only
*/
namespace OCA\Provisioning_API\Controller;
use InvalidArgumentException;
use OC\Authentication\Token\RemoteWipe;
+use OC\Group\Group;
use OC\KnownUser\KnownUserService;
use OC\User\Backend;
use OCA\Provisioning_API\ResponseDefinitions;
use OCA\Settings\Mailer\NewUserMailHelper;
+use OCA\Settings\Settings\Admin\Users;
use OCP\Accounts\IAccountManager;
use OCP\Accounts\IAccountProperty;
use OCP\Accounts\PropertyDoesNotExistException;
+use OCP\App\IAppManager;
use OCP\AppFramework\Http;
+use OCP\AppFramework\Http\Attribute\AuthorizedAdminSetting;
+use OCP\AppFramework\Http\Attribute\NoAdminRequired;
+use OCP\AppFramework\Http\Attribute\PasswordConfirmationRequired;
+use OCP\AppFramework\Http\Attribute\UserRateLimit;
use OCP\AppFramework\Http\DataResponse;
use OCP\AppFramework\OCS\OCSException;
use OCP\AppFramework\OCS\OCSForbiddenException;
+use OCP\AppFramework\OCS\OCSNotFoundException;
use OCP\AppFramework\OCSController;
use OCP\EventDispatcher\IEventDispatcher;
+use OCP\Files\IRootFolder;
+use OCP\Group\ISubAdmin;
use OCP\HintException;
use OCP\IConfig;
use OCP\IGroup;
use OCP\IGroupManager;
+use OCP\IL10N;
use OCP\IPhoneNumberUtil;
use OCP\IRequest;
use OCP\IURLGenerator;
@@ -73,28 +50,16 @@ use OCP\L10N\IFactory;
use OCP\Security\Events\GenerateSecurePasswordEvent;
use OCP\Security\ISecureRandom;
use OCP\User\Backend\ISetDisplayNameBackend;
+use OCP\Util;
use Psr\Log\LoggerInterface;
/**
+ * @psalm-import-type Provisioning_APIGroupDetails from ResponseDefinitions
* @psalm-import-type Provisioning_APIUserDetails from ResponseDefinitions
*/
-class UsersController extends AUserData {
- /** @var IURLGenerator */
- protected $urlGenerator;
- /** @var LoggerInterface */
- private $logger;
- /** @var IFactory */
- protected $l10nFactory;
- /** @var NewUserMailHelper */
- private $newUserMailHelper;
- /** @var ISecureRandom */
- private $secureRandom;
- /** @var RemoteWipe */
- private $remoteWipe;
- /** @var KnownUserService */
- private $knownUserService;
- /** @var IEventDispatcher */
- private $eventDispatcher;
+class UsersController extends AUserDataOCSController {
+
+ private IL10N $l10n;
public function __construct(
string $appName,
@@ -104,15 +69,18 @@ class UsersController extends AUserData {
IGroupManager $groupManager,
IUserSession $userSession,
IAccountManager $accountManager,
- IURLGenerator $urlGenerator,
- LoggerInterface $logger,
+ ISubAdmin $subAdminManager,
IFactory $l10nFactory,
- NewUserMailHelper $newUserMailHelper,
- ISecureRandom $secureRandom,
- RemoteWipe $remoteWipe,
- KnownUserService $knownUserService,
- IEventDispatcher $eventDispatcher,
+ IRootFolder $rootFolder,
+ private IURLGenerator $urlGenerator,
+ private LoggerInterface $logger,
+ private NewUserMailHelper $newUserMailHelper,
+ private ISecureRandom $secureRandom,
+ private RemoteWipe $remoteWipe,
+ private KnownUserService $knownUserService,
+ private IEventDispatcher $eventDispatcher,
private IPhoneNumberUtil $phoneNumberUtil,
+ private IAppManager $appManager,
) {
parent::__construct(
$appName,
@@ -122,39 +90,35 @@ class UsersController extends AUserData {
$groupManager,
$userSession,
$accountManager,
- $l10nFactory
+ $subAdminManager,
+ $l10nFactory,
+ $rootFolder,
);
- $this->urlGenerator = $urlGenerator;
- $this->logger = $logger;
- $this->l10nFactory = $l10nFactory;
- $this->newUserMailHelper = $newUserMailHelper;
- $this->secureRandom = $secureRandom;
- $this->remoteWipe = $remoteWipe;
- $this->knownUserService = $knownUserService;
- $this->eventDispatcher = $eventDispatcher;
+ $this->l10n = $l10nFactory->get($appName);
}
/**
- * @NoAdminRequired
- *
* Get a list of users
*
* @param string $search Text to search for
* @param int|null $limit Limit the amount of groups returned
* @param int $offset Offset for searching for groups
- * @return DataResponse<Http::STATUS_OK, array{users: string[]}, array{}>
+ * @return DataResponse<Http::STATUS_OK, array{users: list<string>}, array{}>
*
* 200: Users returned
*/
- public function getUsers(string $search = '', int $limit = null, int $offset = 0): DataResponse {
+ #[NoAdminRequired]
+ public function getUsers(string $search = '', ?int $limit = null, int $offset = 0): DataResponse {
$user = $this->userSession->getUser();
$users = [];
// Admin? Or SubAdmin?
$uid = $user->getUID();
$subAdminManager = $this->groupManager->getSubAdmin();
- if ($this->groupManager->isAdmin($uid)) {
+ $isAdmin = $this->groupManager->isAdmin($uid);
+ $isDelegatedAdmin = $this->groupManager->isDelegatedAdmin($uid);
+ if ($isAdmin || $isDelegatedAdmin) {
$users = $this->userManager->search($search, $limit, $offset);
} elseif ($subAdminManager->isSubAdmin($user)) {
$subAdminOfGroups = $subAdminManager->getSubAdminsGroups($user);
@@ -168,7 +132,7 @@ class UsersController extends AUserData {
}
}
- /** @var string[] $users */
+ /** @var list<string> $users */
$users = array_keys($users);
return new DataResponse([
@@ -177,8 +141,6 @@ class UsersController extends AUserData {
}
/**
- * @NoAdminRequired
- *
* Get a list of users and their details
*
* @param string $search Text to search for
@@ -188,14 +150,17 @@ class UsersController extends AUserData {
*
* 200: Users details returned
*/
- public function getUsersDetails(string $search = '', int $limit = null, int $offset = 0): DataResponse {
+ #[NoAdminRequired]
+ public function getUsersDetails(string $search = '', ?int $limit = null, int $offset = 0): DataResponse {
$currentUser = $this->userSession->getUser();
$users = [];
// Admin? Or SubAdmin?
$uid = $currentUser->getUID();
$subAdminManager = $this->groupManager->getSubAdmin();
- if ($this->groupManager->isAdmin($uid)) {
+ $isAdmin = $this->groupManager->isAdmin($uid);
+ $isDelegatedAdmin = $this->groupManager->isDelegatedAdmin($uid);
+ if ($isAdmin || $isDelegatedAdmin) {
$users = $this->userManager->search($search, $limit, $offset);
$users = array_keys($users);
} elseif ($subAdminManager->isSubAdmin($currentUser)) {
@@ -213,8 +178,15 @@ class UsersController extends AUserData {
$usersDetails = [];
foreach ($users as $userId) {
- $userId = (string) $userId;
- $userData = $this->getUserData($userId);
+ $userId = (string)$userId;
+ try {
+ $userData = $this->getUserData($userId);
+ } catch (OCSNotFoundException $e) {
+ // We still want to return all other accounts, but this one was removed from the backends
+ // yet they are still in our database. Might be a LDAP remnant.
+ $userData = null;
+ $this->logger->warning('Found one enabled account that is removed from its backend, but still exists in Nextcloud database', ['accountId' => $userId]);
+ }
// Do not insert empty entry
if ($userData !== null) {
$usersDetails[$userId] = $userData;
@@ -231,17 +203,17 @@ class UsersController extends AUserData {
}
/**
- * @NoAdminRequired
- *
* Get the list of disabled users and their details
*
+ * @param string $search Text to search for
* @param ?int $limit Limit the amount of users returned
* @param int $offset Offset
* @return DataResponse<Http::STATUS_OK, array{users: array<string, Provisioning_APIUserDetails|array{id: string}>}, array{}>
*
* 200: Disabled users details returned
*/
- public function getDisabledUsersDetails(?int $limit = null, int $offset = 0): DataResponse {
+ #[NoAdminRequired]
+ public function getDisabledUsersDetails(string $search = '', ?int $limit = null, int $offset = 0): DataResponse {
$currentUser = $this->userSession->getUser();
if ($currentUser === null) {
return new DataResponse(['users' => []]);
@@ -258,8 +230,10 @@ class UsersController extends AUserData {
// Admin? Or SubAdmin?
$uid = $currentUser->getUID();
$subAdminManager = $this->groupManager->getSubAdmin();
- if ($this->groupManager->isAdmin($uid)) {
- $users = $this->userManager->getDisabledUsers($limit, $offset);
+ $isAdmin = $this->groupManager->isAdmin($uid);
+ $isDelegatedAdmin = $this->groupManager->isDelegatedAdmin($uid);
+ if ($isAdmin || $isDelegatedAdmin) {
+ $users = $this->userManager->getDisabledUsers($limit, $offset, $search);
$users = array_map(fn (IUser $user): string => $user->getUID(), $users);
} elseif ($subAdminManager->isSubAdmin($currentUser)) {
$subAdminOfGroups = $subAdminManager->getSubAdminsGroups($currentUser);
@@ -268,31 +242,94 @@ class UsersController extends AUserData {
/* We have to handle offset ourselve for correctness */
$tempLimit = ($limit === null ? null : $limit + $offset);
foreach ($subAdminOfGroups as $group) {
- $users = array_merge(
+ $users = array_unique(array_merge(
$users,
array_map(
fn (IUser $user): string => $user->getUID(),
array_filter(
- $group->searchUsers('', ($tempLimit === null ? null : $tempLimit - count($users))),
- fn (IUser $user): bool => $user->isEnabled()
+ $group->searchUsers($search),
+ fn (IUser $user): bool => !$user->isEnabled()
)
)
- );
+ ));
if (($tempLimit !== null) && (count($users) >= $tempLimit)) {
break;
}
}
- $users = array_slice($users, $offset);
+ $users = array_slice($users, $offset, $limit);
}
$usersDetails = [];
foreach ($users as $userId) {
- $userData = $this->getUserData($userId);
+ try {
+ $userData = $this->getUserData($userId);
+ } catch (OCSNotFoundException $e) {
+ // We still want to return all other accounts, but this one was removed from the backends
+ // yet they are still in our database. Might be a LDAP remnant.
+ $userData = null;
+ $this->logger->warning('Found one disabled account that was removed from its backend, but still exists in Nextcloud database', ['accountId' => $userId]);
+ }
// Do not insert empty entry
if ($userData !== null) {
$usersDetails[$userId] = $userData;
} else {
- // Logged user does not have permissions to see this user
+ // Currently logged in user does not have permissions to see this user
+ // only showing its id
+ $usersDetails[$userId] = ['id' => $userId];
+ }
+ }
+
+ return new DataResponse([
+ 'users' => $usersDetails
+ ]);
+ }
+
+ /**
+ * Gets the list of users sorted by lastLogin, from most recent to least recent
+ *
+ * @param string $search Text to search for
+ * @param ?int $limit Limit the amount of users returned
+ * @param int $offset Offset
+ * @return DataResponse<Http::STATUS_OK, array{users: array<string, Provisioning_APIUserDetails|array{id: string}>}, array{}>
+ *
+ * 200: Users details returned based on last logged in information
+ */
+ #[AuthorizedAdminSetting(settings:Users::class)]
+ public function getLastLoggedInUsers(string $search = '',
+ ?int $limit = null,
+ int $offset = 0,
+ ): DataResponse {
+ $currentUser = $this->userSession->getUser();
+ if ($currentUser === null) {
+ return new DataResponse(['users' => []]);
+ }
+ if ($limit !== null && $limit < 0) {
+ throw new InvalidArgumentException("Invalid limit value: $limit");
+ }
+ if ($offset < 0) {
+ throw new InvalidArgumentException("Invalid offset value: $offset");
+ }
+
+ $users = [];
+
+ // For Admin alone user sorting based on lastLogin. For sub admin and groups this is not supported
+ $users = $this->userManager->getLastLoggedInUsers($limit, $offset, $search);
+
+ $usersDetails = [];
+ foreach ($users as $userId) {
+ try {
+ $userData = $this->getUserData($userId);
+ } catch (OCSNotFoundException $e) {
+ // We still want to return all other accounts, but this one was removed from the backends
+ // yet they are still in our database. Might be a LDAP remnant.
+ $userData = null;
+ $this->logger->warning('Found one account that was removed from its backend, but still exists in Nextcloud database', ['accountId' => $userId]);
+ }
+ // Do not insert empty entry
+ if ($userData !== null) {
+ $usersDetails[$userId] = $userData;
+ } else {
+ // Currently logged-in user does not have permissions to see this user
// only showing its id
$usersDetails[$userId] = ['id' => $userId];
}
@@ -304,19 +341,20 @@ class UsersController extends AUserData {
}
+
/**
- * @NoAdminRequired
* @NoSubAdminRequired
*
* Search users by their phone numbers
*
* @param string $location Location of the phone number (for country code)
- * @param array<string, string[]> $search Phone numbers to search for
- * @return DataResponse<Http::STATUS_OK, array<string, string>, array{}>|DataResponse<Http::STATUS_BAD_REQUEST, array<empty>, array{}>
+ * @param array<string, list<string>> $search Phone numbers to search for
+ * @return DataResponse<Http::STATUS_OK, array<string, string>, array{}>|DataResponse<Http::STATUS_BAD_REQUEST, list<empty>, array{}>
*
* 200: Users returned
* 400: Invalid location
*/
+ #[NoAdminRequired]
public function searchByPhoneNumbers(string $location, array $search): DataResponse {
if ($this->phoneNumberUtil->getCountryCodeForRegion($location) === null) {
// Not a valid region code
@@ -333,7 +371,7 @@ class UsersController extends AUserData {
foreach ($phoneNumbers as $phone) {
$normalizedNumber = $this->phoneNumberUtil->convertToStandardFormat($phone, $location);
if ($normalizedNumber !== null) {
- $normalizedNumberToKey[$normalizedNumber] = (string) $key;
+ $normalizedNumberToKey[$normalizedNumber] = (string)$key;
}
if ($defaultPhoneRegion !== '' && $defaultPhoneRegion !== $location && str_starts_with($phone, '0')) {
@@ -342,7 +380,7 @@ class UsersController extends AUserData {
// when it's different to the user's given region.
$normalizedNumber = $this->phoneNumberUtil->convertToStandardFormat($phone, $defaultPhoneRegion);
if ($normalizedNumber !== null) {
- $normalizedNumberToKey[$normalizedNumber] = (string) $key;
+ $normalizedNumberToKey[$normalizedNumber] = (string)$key;
}
}
}
@@ -392,21 +430,18 @@ class UsersController extends AUserData {
}
$attempts++;
} while ($attempts < 10);
- throw new OCSException('Could not create non-existing user id', 111);
+ throw new OCSException($this->l10n->t('Could not create non-existing user ID'), 111);
}
/**
- * @PasswordConfirmationRequired
- * @NoAdminRequired
- *
* Create a new user
*
* @param string $userid ID of the user
* @param string $password Password of the user
* @param string $displayName Display name of the user
* @param string $email Email of the user
- * @param string[] $groups Groups of the user
- * @param string[] $subadmin Groups where the user is subadmin
+ * @param list<string> $groups Groups of the user
+ * @param list<string> $subadmin Groups where the user is subadmin
* @param string $quota Quota of the user
* @param string $language Language of the user
* @param ?string $manager Manager of the user
@@ -416,6 +451,8 @@ class UsersController extends AUserData {
*
* 200: User added successfully
*/
+ #[PasswordConfirmationRequired]
+ #[NoAdminRequired]
public function addUser(
string $userid,
string $password = '',
@@ -429,6 +466,7 @@ class UsersController extends AUserData {
): DataResponse {
$user = $this->userSession->getUser();
$isAdmin = $this->groupManager->isAdmin($user->getUID());
+ $isDelegatedAdmin = $this->groupManager->isDelegatedAdmin($user->getUID());
$subAdminManager = $this->groupManager->getSubAdmin();
if (empty($userid) && $this->config->getAppValue('core', 'newUser.generateUserID', 'no') === 'yes') {
@@ -437,21 +475,21 @@ class UsersController extends AUserData {
if ($this->userManager->userExists($userid)) {
$this->logger->error('Failed addUser attempt: User already exists.', ['app' => 'ocs_api']);
- throw new OCSException($this->l10nFactory->get('provisioning_api')->t('User already exists'), 102);
+ throw new OCSException($this->l10n->t('User already exists'), 102);
}
if ($groups !== []) {
foreach ($groups as $group) {
if (!$this->groupManager->groupExists($group)) {
- throw new OCSException('group ' . $group . ' does not exist', 104);
+ throw new OCSException($this->l10n->t('Group %1$s does not exist', [$group]), 104);
}
- if (!$isAdmin && !$subAdminManager->isSubAdminOfGroup($user, $this->groupManager->get($group))) {
- throw new OCSException('insufficient privileges for group ' . $group, 105);
+ if (!$isAdmin && !($isDelegatedAdmin && $group !== 'admin') && !$subAdminManager->isSubAdminOfGroup($user, $this->groupManager->get($group))) {
+ throw new OCSException($this->l10n->t('Insufficient privileges for group %1$s', [$group]), 105);
}
}
} else {
- if (!$isAdmin) {
- throw new OCSException('no group specified (required for subadmins)', 106);
+ if (!$isAdmin && !$isDelegatedAdmin) {
+ throw new OCSException($this->l10n->t('No group specified (required for sub-admins)'), 106);
}
}
@@ -461,15 +499,15 @@ class UsersController extends AUserData {
$group = $this->groupManager->get($groupid);
// Check if group exists
if ($group === null) {
- throw new OCSException('Subadmin group does not exist', 102);
+ throw new OCSException($this->l10n->t('Sub-admin group does not exist'), 109);
}
// Check if trying to make subadmin of admin group
if ($group->getGID() === 'admin') {
- throw new OCSException('Cannot create subadmins for admin group', 103);
+ throw new OCSException($this->l10n->t('Cannot create sub-admins for admin group'), 103);
}
// Check if has permission to promote subadmins
- if (!$subAdminManager->isSubAdminOfGroup($user, $group) && !$isAdmin) {
- throw new OCSForbiddenException('No permissions to promote subadmins');
+ if (!$subAdminManager->isSubAdminOfGroup($user, $group) && !$isAdmin && !$isDelegatedAdmin) {
+ throw new OCSForbiddenException($this->l10n->t('No permissions to promote sub-admins'));
}
$subadminGroups[] = $group;
}
@@ -477,11 +515,11 @@ class UsersController extends AUserData {
$generatePasswordResetToken = false;
if (strlen($password) > IUserManager::MAX_PASSWORD_LENGTH) {
- throw new OCSException('Invalid password value', 101);
+ throw new OCSException($this->l10n->t('Invalid password value'), 101);
}
if ($password === '') {
if ($email === '') {
- throw new OCSException('To send a password link to the user an email address is required.', 108);
+ throw new OCSException($this->l10n->t('An email address is required, to send a password link to the user.'), 108);
}
$passwordEvent = new GenerateSecurePasswordEvent();
@@ -499,14 +537,21 @@ class UsersController extends AUserData {
$generatePasswordResetToken = true;
}
+ $email = mb_strtolower(trim($email));
if ($email === '' && $this->config->getAppValue('core', 'newUser.requireEmail', 'no') === 'yes') {
- throw new OCSException('Required email address was not provided', 110);
+ throw new OCSException($this->l10n->t('Required email address was not provided'), 110);
}
+ // Create the user
try {
$newUser = $this->userManager->createUser($userid, $password);
- $this->logger->info('Successful addUser call with userid: ' . $userid, ['app' => 'ocs_api']);
+ if (!$newUser instanceof IUser) {
+ // If the user is not an instance of IUser, it means the user creation failed
+ $this->logger->error('Failed addUser attempt: User creation failed.', ['app' => 'ocs_api']);
+ throw new OCSException($this->l10n->t('User creation failed'), 111);
+ }
+ $this->logger->info('Successful addUser call with userid: ' . $userid, ['app' => 'ocs_api']);
foreach ($groups as $group) {
$this->groupManager->get($group)->addUser($newUser);
$this->logger->info('Added userid ' . $userid . ' to group ' . $group, ['app' => 'ocs_api']);
@@ -545,7 +590,7 @@ class UsersController extends AUserData {
// Send new user mail only if a mail is set
if ($email !== '') {
- $newUser->setEMailAddress($email);
+ $newUser->setSystemEMailAddress($email);
if ($this->config->getAppValue('core', 'newUser.sendEmail', 'yes') === 'yes') {
try {
$emailTemplate = $this->newUserMailHelper->generateTemplate($newUser, $generatePasswordResetToken);
@@ -605,7 +650,6 @@ class UsersController extends AUserData {
}
/**
- * @NoAdminRequired
* @NoSubAdminRequired
*
* Get the details of a user
@@ -616,6 +660,7 @@ class UsersController extends AUserData {
*
* 200: User returned
*/
+ #[NoAdminRequired]
public function getUser(string $userId): DataResponse {
$includeScopes = false;
$currentUser = $this->userSession->getUser();
@@ -632,7 +677,6 @@ class UsersController extends AUserData {
}
/**
- * @NoAdminRequired
* @NoSubAdminRequired
*
* Get the details of the current user
@@ -642,6 +686,7 @@ class UsersController extends AUserData {
*
* 200: Current user returned
*/
+ #[NoAdminRequired]
public function getCurrentUser(): DataResponse {
$user = $this->userSession->getUser();
if ($user) {
@@ -654,16 +699,16 @@ class UsersController extends AUserData {
}
/**
- * @NoAdminRequired
* @NoSubAdminRequired
*
* Get a list of fields that are editable for the current user
*
- * @return DataResponse<Http::STATUS_OK, string[], array{}>
+ * @return DataResponse<Http::STATUS_OK, list<string>, array{}>
* @throws OCSException
*
* 200: Editable fields returned
*/
+ #[NoAdminRequired]
public function getEditableFields(): DataResponse {
$currentLoggedInUser = $this->userSession->getUser();
if (!$currentLoggedInUser instanceof IUser) {
@@ -674,17 +719,30 @@ class UsersController extends AUserData {
}
/**
- * @NoAdminRequired
+ * Get a list of enabled apps for the current user
+ *
+ * @return DataResponse<Http::STATUS_OK, array{apps: list<string>}, array{}>
+ *
+ * 200: Enabled apps returned
+ */
+ #[NoAdminRequired]
+ public function getEnabledApps(): DataResponse {
+ $currentLoggedInUser = $this->userSession->getUser();
+ return new DataResponse(['apps' => $this->appManager->getEnabledAppsForUser($currentLoggedInUser)]);
+ }
+
+ /**
* @NoSubAdminRequired
*
* Get a list of fields that are editable for a user
*
* @param string $userId ID of the user
- * @return DataResponse<Http::STATUS_OK, string[], array{}>
+ * @return DataResponse<Http::STATUS_OK, list<string>, array{}>
* @throws OCSException
*
* 200: Editable fields for user returned
*/
+ #[NoAdminRequired]
public function getEditableFieldsForUser(string $userId): DataResponse {
$currentLoggedInUser = $this->userSession->getUser();
if (!$currentLoggedInUser instanceof IUser) {
@@ -700,8 +758,10 @@ class UsersController extends AUserData {
}
$subAdminManager = $this->groupManager->getSubAdmin();
+ $isAdmin = $this->groupManager->isAdmin($currentLoggedInUser->getUID());
+ $isDelegatedAdmin = $this->groupManager->isDelegatedAdmin($currentLoggedInUser->getUID());
if (
- !$this->groupManager->isAdmin($currentLoggedInUser->getUID())
+ !($isAdmin || $isDelegatedAdmin)
&& !$subAdminManager->isUserAccessible($currentLoggedInUser, $targetUser)
) {
throw new OCSException('', OCSController::RESPOND_NOT_FOUND);
@@ -710,14 +770,16 @@ class UsersController extends AUserData {
$targetUser = $currentLoggedInUser;
}
- // Editing self (display, email)
- if ($this->config->getSystemValue('allow_user_to_change_display_name', true) !== false) {
- if (
- $targetUser->getBackend() instanceof ISetDisplayNameBackend
- || $targetUser->getBackend()->implementsActions(Backend::SET_DISPLAYNAME)
- ) {
- $permittedFields[] = IAccountManager::PROPERTY_DISPLAYNAME;
- }
+ $allowDisplayNameChange = $this->config->getSystemValue('allow_user_to_change_display_name', true);
+ if ($allowDisplayNameChange === true && (
+ $targetUser->getBackend() instanceof ISetDisplayNameBackend
+ || $targetUser->getBackend()->implementsActions(Backend::SET_DISPLAYNAME)
+ )) {
+ $permittedFields[] = IAccountManager::PROPERTY_DISPLAYNAME;
+ }
+
+ // Fallback to display name value to avoid changing behavior with the new option.
+ if ($this->config->getSystemValue('allow_user_to_change_email', $allowDisplayNameChange)) {
$permittedFields[] = IAccountManager::PROPERTY_EMAIL;
}
@@ -726,21 +788,20 @@ class UsersController extends AUserData {
$permittedFields[] = IAccountManager::PROPERTY_ADDRESS;
$permittedFields[] = IAccountManager::PROPERTY_WEBSITE;
$permittedFields[] = IAccountManager::PROPERTY_TWITTER;
+ $permittedFields[] = IAccountManager::PROPERTY_BLUESKY;
$permittedFields[] = IAccountManager::PROPERTY_FEDIVERSE;
$permittedFields[] = IAccountManager::PROPERTY_ORGANISATION;
$permittedFields[] = IAccountManager::PROPERTY_ROLE;
$permittedFields[] = IAccountManager::PROPERTY_HEADLINE;
$permittedFields[] = IAccountManager::PROPERTY_BIOGRAPHY;
$permittedFields[] = IAccountManager::PROPERTY_PROFILE_ENABLED;
+ $permittedFields[] = IAccountManager::PROPERTY_PRONOUNS;
return new DataResponse($permittedFields);
}
/**
- * @NoAdminRequired
* @NoSubAdminRequired
- * @PasswordConfirmationRequired
- * @UserRateThrottle(limit=5, period=60)
*
* Update multiple values of the user's details
*
@@ -748,16 +809,19 @@ class UsersController extends AUserData {
* @param string $collectionName Collection to update
* @param string $key Key that will be updated
* @param string $value New value for the key
- * @return DataResponse<Http::STATUS_OK, array<empty>, array{}>
+ * @return DataResponse<Http::STATUS_OK, list<empty>, array{}>
* @throws OCSException
*
* 200: User values edited successfully
*/
+ #[PasswordConfirmationRequired]
+ #[NoAdminRequired]
+ #[UserRateLimit(limit: 5, period: 60)]
public function editUserMultiValue(
string $userId,
string $collectionName,
string $key,
- string $value
+ string $value,
): DataResponse {
$currentLoggedInUser = $this->userSession->getUser();
if ($currentLoggedInUser === null) {
@@ -770,6 +834,7 @@ class UsersController extends AUserData {
}
$subAdminManager = $this->groupManager->getSubAdmin();
+ $isDelegatedAdmin = $this->groupManager->isDelegatedAdmin($currentLoggedInUser->getUID());
$isAdminOrSubadmin = $this->groupManager->isAdmin($currentLoggedInUser->getUID())
|| $subAdminManager->isUserAccessible($currentLoggedInUser, $targetUser);
@@ -780,7 +845,7 @@ class UsersController extends AUserData {
$permittedFields[] = IAccountManager::COLLECTION_EMAIL . self::SCOPE_SUFFIX;
} else {
// Check if admin / subadmin
- if ($isAdminOrSubadmin) {
+ if ($isAdminOrSubadmin || $isDelegatedAdmin && !$this->groupManager->isInGroup($targetUser->getUID(), 'admin')) {
// They have permissions over the user
$permittedFields[] = IAccountManager::COLLECTION_EMAIL;
} else {
@@ -800,6 +865,7 @@ class UsersController extends AUserData {
$mailCollection = $userAccount->getPropertyCollection(IAccountManager::COLLECTION_EMAIL);
$mailCollection->removePropertyByValue($key);
if ($value !== '') {
+ $value = mb_strtolower(trim($value));
$mailCollection->addPropertyWithDefaults($value);
$property = $mailCollection->getPropertyByValue($key);
if ($isAdminOrSubadmin && $property) {
@@ -808,6 +874,9 @@ class UsersController extends AUserData {
}
}
$this->accountManager->updateAccount($userAccount);
+ if ($value === '' && $key === $targetUser->getPrimaryEMailAddress()) {
+ $targetUser->setPrimaryEMailAddress('');
+ }
break;
case IAccountManager::COLLECTION_EMAIL . self::SCOPE_SUFFIX:
@@ -839,21 +908,21 @@ class UsersController extends AUserData {
}
/**
- * @NoAdminRequired
* @NoSubAdminRequired
- * @PasswordConfirmationRequired
- * @UserRateThrottle(limit=50, period=600)
*
* Update a value of the user's details
*
* @param string $userId ID of the user
* @param string $key Key that will be updated
* @param string $value New value for the key
- * @return DataResponse<Http::STATUS_OK, array<empty>, array{}>
+ * @return DataResponse<Http::STATUS_OK, list<empty>, array{}>
* @throws OCSException
*
* 200: User value edited successfully
*/
+ #[PasswordConfirmationRequired]
+ #[NoAdminRequired]
+ #[UserRateLimit(limit: 50, period: 600)]
public function editUser(string $userId, string $key, string $value): DataResponse {
$currentLoggedInUser = $this->userSession->getUser();
@@ -864,15 +933,17 @@ class UsersController extends AUserData {
$permittedFields = [];
if ($targetUser->getUID() === $currentLoggedInUser->getUID()) {
- // Editing self (display, email)
- if ($this->config->getSystemValue('allow_user_to_change_display_name', true) !== false) {
- if (
- $targetUser->getBackend() instanceof ISetDisplayNameBackend
- || $targetUser->getBackend()->implementsActions(Backend::SET_DISPLAYNAME)
- ) {
- $permittedFields[] = self::USER_FIELD_DISPLAYNAME;
- $permittedFields[] = IAccountManager::PROPERTY_DISPLAYNAME;
- }
+ $allowDisplayNameChange = $this->config->getSystemValue('allow_user_to_change_display_name', true);
+ if ($allowDisplayNameChange !== false && (
+ $targetUser->getBackend() instanceof ISetDisplayNameBackend
+ || $targetUser->getBackend()->implementsActions(Backend::SET_DISPLAYNAME)
+ )) {
+ $permittedFields[] = self::USER_FIELD_DISPLAYNAME;
+ $permittedFields[] = IAccountManager::PROPERTY_DISPLAYNAME;
+ }
+
+ // Fallback to display name value to avoid changing behavior with the new option.
+ if ($this->config->getSystemValue('allow_user_to_change_email', $allowDisplayNameChange)) {
$permittedFields[] = IAccountManager::PROPERTY_EMAIL;
}
@@ -884,44 +955,55 @@ class UsersController extends AUserData {
$permittedFields[] = self::USER_FIELD_PASSWORD;
$permittedFields[] = self::USER_FIELD_NOTIFICATION_EMAIL;
if (
- $this->config->getSystemValue('force_language', false) === false ||
- $this->groupManager->isAdmin($currentLoggedInUser->getUID())
+ $this->config->getSystemValue('force_language', false) === false
+ || $this->groupManager->isAdmin($currentLoggedInUser->getUID())
+ || $this->groupManager->isDelegatedAdmin($currentLoggedInUser->getUID())
) {
$permittedFields[] = self::USER_FIELD_LANGUAGE;
}
if (
- $this->config->getSystemValue('force_locale', false) === false ||
- $this->groupManager->isAdmin($currentLoggedInUser->getUID())
+ $this->config->getSystemValue('force_locale', false) === false
+ || $this->groupManager->isAdmin($currentLoggedInUser->getUID())
+ || $this->groupManager->isDelegatedAdmin($currentLoggedInUser->getUID())
) {
$permittedFields[] = self::USER_FIELD_LOCALE;
+ $permittedFields[] = self::USER_FIELD_FIRST_DAY_OF_WEEK;
}
$permittedFields[] = IAccountManager::PROPERTY_PHONE;
$permittedFields[] = IAccountManager::PROPERTY_ADDRESS;
$permittedFields[] = IAccountManager::PROPERTY_WEBSITE;
$permittedFields[] = IAccountManager::PROPERTY_TWITTER;
+ $permittedFields[] = IAccountManager::PROPERTY_BLUESKY;
$permittedFields[] = IAccountManager::PROPERTY_FEDIVERSE;
$permittedFields[] = IAccountManager::PROPERTY_ORGANISATION;
$permittedFields[] = IAccountManager::PROPERTY_ROLE;
$permittedFields[] = IAccountManager::PROPERTY_HEADLINE;
$permittedFields[] = IAccountManager::PROPERTY_BIOGRAPHY;
$permittedFields[] = IAccountManager::PROPERTY_PROFILE_ENABLED;
+ $permittedFields[] = IAccountManager::PROPERTY_BIRTHDATE;
+ $permittedFields[] = IAccountManager::PROPERTY_PRONOUNS;
+
$permittedFields[] = IAccountManager::PROPERTY_PHONE . self::SCOPE_SUFFIX;
$permittedFields[] = IAccountManager::PROPERTY_ADDRESS . self::SCOPE_SUFFIX;
$permittedFields[] = IAccountManager::PROPERTY_WEBSITE . self::SCOPE_SUFFIX;
$permittedFields[] = IAccountManager::PROPERTY_TWITTER . self::SCOPE_SUFFIX;
+ $permittedFields[] = IAccountManager::PROPERTY_BLUESKY . self::SCOPE_SUFFIX;
$permittedFields[] = IAccountManager::PROPERTY_FEDIVERSE . self::SCOPE_SUFFIX;
$permittedFields[] = IAccountManager::PROPERTY_ORGANISATION . self::SCOPE_SUFFIX;
$permittedFields[] = IAccountManager::PROPERTY_ROLE . self::SCOPE_SUFFIX;
$permittedFields[] = IAccountManager::PROPERTY_HEADLINE . self::SCOPE_SUFFIX;
$permittedFields[] = IAccountManager::PROPERTY_BIOGRAPHY . self::SCOPE_SUFFIX;
$permittedFields[] = IAccountManager::PROPERTY_PROFILE_ENABLED . self::SCOPE_SUFFIX;
-
+ $permittedFields[] = IAccountManager::PROPERTY_BIRTHDATE . self::SCOPE_SUFFIX;
$permittedFields[] = IAccountManager::PROPERTY_AVATAR . self::SCOPE_SUFFIX;
+ $permittedFields[] = IAccountManager::PROPERTY_PRONOUNS . self::SCOPE_SUFFIX;
// If admin they can edit their own quota and manager
- if ($this->groupManager->isAdmin($currentLoggedInUser->getUID())) {
+ $isAdmin = $this->groupManager->isAdmin($currentLoggedInUser->getUID());
+ $isDelegatedAdmin = $this->groupManager->isDelegatedAdmin($currentLoggedInUser->getUID());
+ if ($isAdmin || $isDelegatedAdmin) {
$permittedFields[] = self::USER_FIELD_QUOTA;
$permittedFields[] = self::USER_FIELD_MANAGER;
}
@@ -930,6 +1012,7 @@ class UsersController extends AUserData {
$subAdminManager = $this->groupManager->getSubAdmin();
if (
$this->groupManager->isAdmin($currentLoggedInUser->getUID())
+ || $this->groupManager->isDelegatedAdmin($currentLoggedInUser->getUID()) && !$this->groupManager->isInGroup($targetUser->getUID(), 'admin')
|| $subAdminManager->isUserAccessible($currentLoggedInUser, $targetUser)
) {
// They have permissions over the user
@@ -945,16 +1028,19 @@ class UsersController extends AUserData {
$permittedFields[] = self::USER_FIELD_PASSWORD;
$permittedFields[] = self::USER_FIELD_LANGUAGE;
$permittedFields[] = self::USER_FIELD_LOCALE;
+ $permittedFields[] = self::USER_FIELD_FIRST_DAY_OF_WEEK;
$permittedFields[] = IAccountManager::PROPERTY_PHONE;
$permittedFields[] = IAccountManager::PROPERTY_ADDRESS;
$permittedFields[] = IAccountManager::PROPERTY_WEBSITE;
$permittedFields[] = IAccountManager::PROPERTY_TWITTER;
+ $permittedFields[] = IAccountManager::PROPERTY_BLUESKY;
$permittedFields[] = IAccountManager::PROPERTY_FEDIVERSE;
$permittedFields[] = IAccountManager::PROPERTY_ORGANISATION;
$permittedFields[] = IAccountManager::PROPERTY_ROLE;
$permittedFields[] = IAccountManager::PROPERTY_HEADLINE;
$permittedFields[] = IAccountManager::PROPERTY_BIOGRAPHY;
$permittedFields[] = IAccountManager::PROPERTY_PROFILE_ENABLED;
+ $permittedFields[] = IAccountManager::PROPERTY_PRONOUNS;
$permittedFields[] = self::USER_FIELD_QUOTA;
$permittedFields[] = self::USER_FIELD_NOTIFICATION_EMAIL;
$permittedFields[] = self::USER_FIELD_MANAGER;
@@ -965,7 +1051,7 @@ class UsersController extends AUserData {
}
// Check if permitted to edit this field
if (!in_array($key, $permittedFields)) {
- throw new OCSException('', 103);
+ throw new OCSException('', 113);
}
// Process the edit
switch ($key) {
@@ -981,28 +1067,28 @@ class UsersController extends AUserData {
$quota = $value;
if ($quota !== 'none' && $quota !== 'default') {
if (is_numeric($quota)) {
- $quota = (float) $quota;
+ $quota = (float)$quota;
} else {
- $quota = \OCP\Util::computerFileSize($quota);
+ $quota = Util::computerFileSize($quota);
}
if ($quota === false) {
- throw new OCSException('Invalid quota value ' . $value, 102);
+ throw new OCSException($this->l10n->t('Invalid quota value: %1$s', [$value]), 101);
}
if ($quota === -1) {
$quota = 'none';
} else {
- $maxQuota = (int) $this->config->getAppValue('files', 'max_quota', '-1');
+ $maxQuota = (int)$this->config->getAppValue('files', 'max_quota', '-1');
if ($maxQuota !== -1 && $quota > $maxQuota) {
- throw new OCSException('Invalid quota value. ' . $value . ' is exceeding the maximum quota', 102);
+ throw new OCSException($this->l10n->t('Invalid quota value. %1$s is exceeding the maximum quota', [$value]), 101);
}
- $quota = \OCP\Util::humanFileSize($quota);
+ $quota = Util::humanFileSize($quota);
}
}
// no else block because quota can be set to 'none' in previous if
if ($quota === 'none') {
$allowUnlimitedQuota = $this->config->getAppValue('files', 'allow_unlimited_quota', '1') === '1';
if (!$allowUnlimitedQuota) {
- throw new OCSException('Unlimited quota is forbidden on this instance', 102);
+ throw new OCSException($this->l10n->t('Unlimited quota is forbidden on this instance'), 101);
}
}
$targetUser->setQuota($quota);
@@ -1013,29 +1099,40 @@ class UsersController extends AUserData {
case self::USER_FIELD_PASSWORD:
try {
if (strlen($value) > IUserManager::MAX_PASSWORD_LENGTH) {
- throw new OCSException('Invalid password value', 102);
+ throw new OCSException($this->l10n->t('Invalid password value'), 101);
}
if (!$targetUser->canChangePassword()) {
- throw new OCSException('Setting the password is not supported by the users backend', 103);
+ throw new OCSException($this->l10n->t('Setting the password is not supported by the users backend'), 112);
}
$targetUser->setPassword($value);
} catch (HintException $e) { // password policy error
- throw new OCSException($e->getMessage(), 103);
+ throw new OCSException($e->getHint(), 107);
}
break;
case self::USER_FIELD_LANGUAGE:
$languagesCodes = $this->l10nFactory->findAvailableLanguages();
if (!in_array($value, $languagesCodes, true) && $value !== 'en') {
- throw new OCSException('Invalid language', 102);
+ throw new OCSException($this->l10n->t('Invalid language'), 101);
}
$this->config->setUserValue($targetUser->getUID(), 'core', 'lang', $value);
break;
case self::USER_FIELD_LOCALE:
if (!$this->l10nFactory->localeExists($value)) {
- throw new OCSException('Invalid locale', 102);
+ throw new OCSException($this->l10n->t('Invalid locale'), 101);
}
$this->config->setUserValue($targetUser->getUID(), 'core', 'locale', $value);
break;
+ case self::USER_FIELD_FIRST_DAY_OF_WEEK:
+ $intValue = (int)$value;
+ if ($intValue < -1 || $intValue > 6) {
+ throw new OCSException($this->l10n->t('Invalid first day of week'), 101);
+ }
+ if ($intValue === -1) {
+ $this->config->deleteUserValue($targetUser->getUID(), 'core', AUserDataOCSController::USER_FIELD_FIRST_DAY_OF_WEEK);
+ } else {
+ $this->config->setUserValue($targetUser->getUID(), 'core', AUserDataOCSController::USER_FIELD_FIRST_DAY_OF_WEEK, $value);
+ }
+ break;
case self::USER_FIELD_NOTIFICATION_EMAIL:
$success = false;
if ($value === '' || filter_var($value, FILTER_VALIDATE_EMAIL)) {
@@ -1053,40 +1150,45 @@ class UsersController extends AUserData {
}
}
if (!$success) {
- throw new OCSException('', 102);
+ throw new OCSException('', 101);
}
break;
case IAccountManager::PROPERTY_EMAIL:
+ $value = mb_strtolower(trim($value));
if (filter_var($value, FILTER_VALIDATE_EMAIL) || $value === '') {
- $targetUser->setEMailAddress($value);
+ $targetUser->setSystemEMailAddress($value);
} else {
- throw new OCSException('', 102);
+ throw new OCSException('', 101);
}
break;
case IAccountManager::COLLECTION_EMAIL:
+ $value = mb_strtolower(trim($value));
if (filter_var($value, FILTER_VALIDATE_EMAIL) && $value !== $targetUser->getSystemEMailAddress()) {
$userAccount = $this->accountManager->getAccount($targetUser);
$mailCollection = $userAccount->getPropertyCollection(IAccountManager::COLLECTION_EMAIL);
if ($mailCollection->getPropertyByValue($value)) {
- throw new OCSException('', 102);
+ throw new OCSException('', 101);
}
$mailCollection->addPropertyWithDefaults($value);
$this->accountManager->updateAccount($userAccount);
} else {
- throw new OCSException('', 102);
+ throw new OCSException('', 101);
}
break;
case IAccountManager::PROPERTY_PHONE:
case IAccountManager::PROPERTY_ADDRESS:
case IAccountManager::PROPERTY_WEBSITE:
case IAccountManager::PROPERTY_TWITTER:
+ case IAccountManager::PROPERTY_BLUESKY:
case IAccountManager::PROPERTY_FEDIVERSE:
case IAccountManager::PROPERTY_ORGANISATION:
case IAccountManager::PROPERTY_ROLE:
case IAccountManager::PROPERTY_HEADLINE:
case IAccountManager::PROPERTY_BIOGRAPHY:
+ case IAccountManager::PROPERTY_BIRTHDATE:
+ case IAccountManager::PROPERTY_PRONOUNS:
$userAccount = $this->accountManager->getAccount($targetUser);
try {
$userProperty = $userAccount->getProperty($key);
@@ -1097,7 +1199,7 @@ class UsersController extends AUserData {
$this->knownUserService->deleteByContactUserId($targetUser->getUID());
}
} catch (InvalidArgumentException $e) {
- throw new OCSException('Invalid ' . $e->getMessage(), 102);
+ throw new OCSException('Invalid ' . $e->getMessage(), 101);
}
}
} catch (PropertyDoesNotExistException $e) {
@@ -1106,7 +1208,7 @@ class UsersController extends AUserData {
try {
$this->accountManager->updateAccount($userAccount);
} catch (InvalidArgumentException $e) {
- throw new OCSException('Invalid ' . $e->getMessage(), 102);
+ throw new OCSException('Invalid ' . $e->getMessage(), 101);
}
break;
case IAccountManager::PROPERTY_PROFILE_ENABLED:
@@ -1127,13 +1229,16 @@ class UsersController extends AUserData {
case IAccountManager::PROPERTY_ADDRESS . self::SCOPE_SUFFIX:
case IAccountManager::PROPERTY_WEBSITE . self::SCOPE_SUFFIX:
case IAccountManager::PROPERTY_TWITTER . self::SCOPE_SUFFIX:
+ case IAccountManager::PROPERTY_BLUESKY . self::SCOPE_SUFFIX:
case IAccountManager::PROPERTY_FEDIVERSE . self::SCOPE_SUFFIX:
case IAccountManager::PROPERTY_ORGANISATION . self::SCOPE_SUFFIX:
case IAccountManager::PROPERTY_ROLE . self::SCOPE_SUFFIX:
case IAccountManager::PROPERTY_HEADLINE . self::SCOPE_SUFFIX:
case IAccountManager::PROPERTY_BIOGRAPHY . self::SCOPE_SUFFIX:
case IAccountManager::PROPERTY_PROFILE_ENABLED . self::SCOPE_SUFFIX:
+ case IAccountManager::PROPERTY_BIRTHDATE . self::SCOPE_SUFFIX:
case IAccountManager::PROPERTY_AVATAR . self::SCOPE_SUFFIX:
+ case IAccountManager::PROPERTY_PRONOUNS . self::SCOPE_SUFFIX:
$propertyName = substr($key, 0, strlen($key) - strlen(self::SCOPE_SUFFIX));
$userAccount = $this->accountManager->getAccount($targetUser);
$userProperty = $userAccount->getProperty($propertyName);
@@ -1142,30 +1247,29 @@ class UsersController extends AUserData {
$userProperty->setScope($value);
$this->accountManager->updateAccount($userAccount);
} catch (InvalidArgumentException $e) {
- throw new OCSException('Invalid ' . $e->getMessage(), 102);
+ throw new OCSException('Invalid ' . $e->getMessage(), 101);
}
}
break;
default:
- throw new OCSException('', 103);
+ throw new OCSException('', 113);
}
return new DataResponse();
}
/**
- * @PasswordConfirmationRequired
- * @NoAdminRequired
- *
* Wipe all devices of a user
*
* @param string $userId ID of the user
*
- * @return DataResponse<Http::STATUS_OK, array<empty>, array{}>
+ * @return DataResponse<Http::STATUS_OK, list<empty>, array{}>
*
* @throws OCSException
*
* 200: Wiped all user devices successfully
*/
+ #[PasswordConfirmationRequired]
+ #[NoAdminRequired]
public function wipeUserDevices(string $userId): DataResponse {
/** @var IUser $currentLoggedInUser */
$currentLoggedInUser = $this->userSession->getUser();
@@ -1182,7 +1286,9 @@ class UsersController extends AUserData {
// If not permitted
$subAdminManager = $this->groupManager->getSubAdmin();
- if (!$this->groupManager->isAdmin($currentLoggedInUser->getUID()) && !$subAdminManager->isUserAccessible($currentLoggedInUser, $targetUser)) {
+ $isAdmin = $this->groupManager->isAdmin($currentLoggedInUser->getUID());
+ $isDelegatedAdmin = $this->groupManager->isDelegatedAdmin($currentLoggedInUser->getUID());
+ if (!$isAdmin && !($isDelegatedAdmin && !$this->groupManager->isInGroup($targetUser->getUID(), 'admin')) && !$subAdminManager->isUserAccessible($currentLoggedInUser, $targetUser)) {
throw new OCSException('', OCSController::RESPOND_NOT_FOUND);
}
@@ -1192,17 +1298,16 @@ class UsersController extends AUserData {
}
/**
- * @PasswordConfirmationRequired
- * @NoAdminRequired
- *
* Delete a user
*
* @param string $userId ID of the user
- * @return DataResponse<Http::STATUS_OK, array<empty>, array{}>
+ * @return DataResponse<Http::STATUS_OK, list<empty>, array{}>
* @throws OCSException
*
* 200: User deleted successfully
*/
+ #[PasswordConfirmationRequired]
+ #[NoAdminRequired]
public function deleteUser(string $userId): DataResponse {
$currentLoggedInUser = $this->userSession->getUser();
@@ -1218,7 +1323,9 @@ class UsersController extends AUserData {
// If not permitted
$subAdminManager = $this->groupManager->getSubAdmin();
- if (!$this->groupManager->isAdmin($currentLoggedInUser->getUID()) && !$subAdminManager->isUserAccessible($currentLoggedInUser, $targetUser)) {
+ $isAdmin = $this->groupManager->isAdmin($currentLoggedInUser->getUID());
+ $isDelegatedAdmin = $this->groupManager->isDelegatedAdmin($currentLoggedInUser->getUID());
+ if (!$isAdmin && !($isDelegatedAdmin && !$this->groupManager->isInGroup($targetUser->getUID(), 'admin')) && !$subAdminManager->isUserAccessible($currentLoggedInUser, $targetUser)) {
throw new OCSException('', OCSController::RESPOND_NOT_FOUND);
}
@@ -1231,33 +1338,31 @@ class UsersController extends AUserData {
}
/**
- * @PasswordConfirmationRequired
- * @NoAdminRequired
- *
* Disable a user
*
* @param string $userId ID of the user
- * @return DataResponse<Http::STATUS_OK, array<empty>, array{}>
+ * @return DataResponse<Http::STATUS_OK, list<empty>, array{}>
* @throws OCSException
*
* 200: User disabled successfully
*/
+ #[PasswordConfirmationRequired]
+ #[NoAdminRequired]
public function disableUser(string $userId): DataResponse {
return $this->setEnabled($userId, false);
}
/**
- * @PasswordConfirmationRequired
- * @NoAdminRequired
- *
* Enable a user
*
* @param string $userId ID of the user
- * @return DataResponse<Http::STATUS_OK, array<empty>, array{}>
+ * @return DataResponse<Http::STATUS_OK, list<empty>, array{}>
* @throws OCSException
*
* 200: User enabled successfully
*/
+ #[PasswordConfirmationRequired]
+ #[NoAdminRequired]
public function enableUser(string $userId): DataResponse {
return $this->setEnabled($userId, true);
}
@@ -1265,7 +1370,7 @@ class UsersController extends AUserData {
/**
* @param string $userId
* @param bool $value
- * @return DataResponse<Http::STATUS_OK, array<empty>, array{}>
+ * @return DataResponse<Http::STATUS_OK, list<empty>, array{}>
* @throws OCSException
*/
private function setEnabled(string $userId, bool $value): DataResponse {
@@ -1278,7 +1383,9 @@ class UsersController extends AUserData {
// If not permitted
$subAdminManager = $this->groupManager->getSubAdmin();
- if (!$this->groupManager->isAdmin($currentLoggedInUser->getUID()) && !$subAdminManager->isUserAccessible($currentLoggedInUser, $targetUser)) {
+ $isAdmin = $this->groupManager->isAdmin($currentLoggedInUser->getUID());
+ $isDelegatedAdmin = $this->groupManager->isDelegatedAdmin($currentLoggedInUser->getUID());
+ if (!$isAdmin && !($isDelegatedAdmin && !$this->groupManager->isInGroup($targetUser->getUID(), 'admin')) && !$subAdminManager->isUserAccessible($currentLoggedInUser, $targetUser)) {
throw new OCSException('', OCSController::RESPOND_NOT_FOUND);
}
@@ -1288,17 +1395,17 @@ class UsersController extends AUserData {
}
/**
- * @NoAdminRequired
* @NoSubAdminRequired
*
* Get a list of groups the user belongs to
*
* @param string $userId ID of the user
- * @return DataResponse<Http::STATUS_OK, array{groups: string[]}, array{}>
+ * @return DataResponse<Http::STATUS_OK, array{groups: list<string>}, array{}>
* @throws OCSException
*
* 200: Users groups returned
*/
+ #[NoAdminRequired]
public function getUsersGroups(string $userId): DataResponse {
$loggedInUser = $this->userSession->getUser();
@@ -1307,7 +1414,9 @@ class UsersController extends AUserData {
throw new OCSException('', OCSController::RESPOND_NOT_FOUND);
}
- if ($targetUser->getUID() === $loggedInUser->getUID() || $this->groupManager->isAdmin($loggedInUser->getUID())) {
+ $isAdmin = $this->groupManager->isAdmin($loggedInUser->getUID());
+ $isDelegatedAdmin = $this->groupManager->isDelegatedAdmin($loggedInUser->getUID());
+ if ($targetUser->getUID() === $loggedInUser->getUID() || $isAdmin || $isDelegatedAdmin) {
// Self lookup or admin lookup
return new DataResponse([
'groups' => $this->groupManager->getUserGroupIds($targetUser)
@@ -1318,16 +1427,10 @@ class UsersController extends AUserData {
// Looking up someone else
if ($subAdminManager->isUserAccessible($loggedInUser, $targetUser)) {
// Return the group that the method caller is subadmin of for the user in question
- /** @var IGroup[] $getSubAdminsGroups */
- $getSubAdminsGroups = $subAdminManager->getSubAdminsGroups($loggedInUser);
- foreach ($getSubAdminsGroups as $key => $group) {
- $getSubAdminsGroups[$key] = $group->getGID();
- }
- /** @var string[] $groups */
- $groups = array_intersect(
- $getSubAdminsGroups,
+ $groups = array_values(array_intersect(
+ array_map(static fn (IGroup $group) => $group->getGID(), $subAdminManager->getSubAdminsGroups($loggedInUser)),
$this->groupManager->getUserGroupIds($targetUser)
- );
+ ));
return new DataResponse(['groups' => $groups]);
} else {
// Not permitted
@@ -1337,18 +1440,138 @@ class UsersController extends AUserData {
}
/**
- * @PasswordConfirmationRequired
- * @NoAdminRequired
+ * @NoSubAdminRequired
+ *
+ * Get a list of groups with details
*
+ * @param string $userId ID of the user
+ * @return DataResponse<Http::STATUS_OK, array{groups: list<Provisioning_APIGroupDetails>}, array{}>
+ * @throws OCSException
+ *
+ * 200: Users groups returned
+ */
+ #[NoAdminRequired]
+ public function getUsersGroupsDetails(string $userId): DataResponse {
+ $loggedInUser = $this->userSession->getUser();
+
+ $targetUser = $this->userManager->get($userId);
+ if ($targetUser === null) {
+ throw new OCSException('', OCSController::RESPOND_NOT_FOUND);
+ }
+
+ $isAdmin = $this->groupManager->isAdmin($loggedInUser->getUID());
+ $isDelegatedAdmin = $this->groupManager->isDelegatedAdmin($loggedInUser->getUID());
+ if ($targetUser->getUID() === $loggedInUser->getUID() || $isAdmin || $isDelegatedAdmin) {
+ // Self lookup or admin lookup
+ $groups = array_map(
+ function (Group $group) {
+ return [
+ 'id' => $group->getGID(),
+ 'displayname' => $group->getDisplayName(),
+ 'usercount' => $group->count(),
+ 'disabled' => $group->countDisabled(),
+ 'canAdd' => $group->canAddUser(),
+ 'canRemove' => $group->canRemoveUser(),
+ ];
+ },
+ array_values($this->groupManager->getUserGroups($targetUser)),
+ );
+ return new DataResponse([
+ 'groups' => $groups,
+ ]);
+ } else {
+ $subAdminManager = $this->groupManager->getSubAdmin();
+
+ // Looking up someone else
+ if ($subAdminManager->isUserAccessible($loggedInUser, $targetUser)) {
+ // Return the group that the method caller is subadmin of for the user in question
+ $gids = array_values(array_intersect(
+ array_map(
+ static fn (IGroup $group) => $group->getGID(),
+ $subAdminManager->getSubAdminsGroups($loggedInUser),
+ ),
+ $this->groupManager->getUserGroupIds($targetUser)
+ ));
+ $groups = array_map(
+ function (string $gid) {
+ $group = $this->groupManager->get($gid);
+ return [
+ 'id' => $group->getGID(),
+ 'displayname' => $group->getDisplayName(),
+ 'usercount' => $group->count(),
+ 'disabled' => $group->countDisabled(),
+ 'canAdd' => $group->canAddUser(),
+ 'canRemove' => $group->canRemoveUser(),
+ ];
+ },
+ $gids,
+ );
+ return new DataResponse([
+ 'groups' => $groups,
+ ]);
+ } else {
+ // Not permitted
+ throw new OCSException('', OCSController::RESPOND_NOT_FOUND);
+ }
+ }
+ }
+
+ /**
+ * @NoSubAdminRequired
+ *
+ * Get a list of the groups the user is a subadmin of, with details
+ *
+ * @param string $userId ID of the user
+ * @return DataResponse<Http::STATUS_OK, array{groups: list<Provisioning_APIGroupDetails>}, array{}>
+ * @throws OCSException
+ *
+ * 200: Users subadmin groups returned
+ */
+ #[NoAdminRequired]
+ public function getUserSubAdminGroupsDetails(string $userId): DataResponse {
+ $loggedInUser = $this->userSession->getUser();
+
+ $targetUser = $this->userManager->get($userId);
+ if ($targetUser === null) {
+ throw new OCSException('', OCSController::RESPOND_NOT_FOUND);
+ }
+
+ $isAdmin = $this->groupManager->isAdmin($loggedInUser->getUID());
+ $isDelegatedAdmin = $this->groupManager->isDelegatedAdmin($loggedInUser->getUID());
+ if ($targetUser->getUID() === $loggedInUser->getUID() || $isAdmin || $isDelegatedAdmin) {
+ $subAdminManager = $this->groupManager->getSubAdmin();
+ $groups = array_map(
+ function (IGroup $group) {
+ return [
+ 'id' => $group->getGID(),
+ 'displayname' => $group->getDisplayName(),
+ 'usercount' => $group->count(),
+ 'disabled' => $group->countDisabled(),
+ 'canAdd' => $group->canAddUser(),
+ 'canRemove' => $group->canRemoveUser(),
+ ];
+ },
+ array_values($subAdminManager->getSubAdminsGroups($targetUser)),
+ );
+ return new DataResponse([
+ 'groups' => $groups,
+ ]);
+ }
+ throw new OCSException('', OCSController::RESPOND_NOT_FOUND);
+ }
+
+ /**
* Add a user to a group
*
* @param string $userId ID of the user
* @param string $groupid ID of the group
- * @return DataResponse<Http::STATUS_OK, array<empty>, array{}>
+ * @return DataResponse<Http::STATUS_OK, list<empty>, array{}>
* @throws OCSException
*
* 200: User added to group successfully
*/
+ #[PasswordConfirmationRequired]
+ #[NoAdminRequired]
public function addToGroup(string $userId, string $groupid = ''): DataResponse {
if ($groupid === '') {
throw new OCSException('', 101);
@@ -1366,7 +1589,9 @@ class UsersController extends AUserData {
// If they're not an admin, check they are a subadmin of the group in question
$loggedInUser = $this->userSession->getUser();
$subAdminManager = $this->groupManager->getSubAdmin();
- if (!$this->groupManager->isAdmin($loggedInUser->getUID()) && !$subAdminManager->isSubAdminOfGroup($loggedInUser, $group)) {
+ $isAdmin = $this->groupManager->isAdmin($loggedInUser->getUID());
+ $isDelegatedAdmin = $this->groupManager->isDelegatedAdmin($loggedInUser->getUID());
+ if (!$isAdmin && !($isDelegatedAdmin && $groupid !== 'admin') && !$subAdminManager->isSubAdminOfGroup($loggedInUser, $group)) {
throw new OCSException('', 104);
}
@@ -1376,18 +1601,17 @@ class UsersController extends AUserData {
}
/**
- * @PasswordConfirmationRequired
- * @NoAdminRequired
- *
* Remove a user from a group
*
* @param string $userId ID of the user
* @param string $groupid ID of the group
- * @return DataResponse<Http::STATUS_OK, array<empty>, array{}>
+ * @return DataResponse<Http::STATUS_OK, list<empty>, array{}>
* @throws OCSException
*
* 200: User removed from group successfully
*/
+ #[PasswordConfirmationRequired]
+ #[NoAdminRequired]
public function removeFromGroup(string $userId, string $groupid): DataResponse {
$loggedInUser = $this->userSession->getUser();
@@ -1407,21 +1631,23 @@ class UsersController extends AUserData {
// If they're not an admin, check they are a subadmin of the group in question
$subAdminManager = $this->groupManager->getSubAdmin();
- if (!$this->groupManager->isAdmin($loggedInUser->getUID()) && !$subAdminManager->isSubAdminOfGroup($loggedInUser, $group)) {
+ $isAdmin = $this->groupManager->isAdmin($loggedInUser->getUID());
+ $isDelegatedAdmin = $this->groupManager->isDelegatedAdmin($loggedInUser->getUID());
+ if (!$isAdmin && !($isDelegatedAdmin && $groupid !== 'admin') && !$subAdminManager->isSubAdminOfGroup($loggedInUser, $group)) {
throw new OCSException('', 104);
}
// Check they aren't removing themselves from 'admin' or their 'subadmin; group
if ($targetUser->getUID() === $loggedInUser->getUID()) {
- if ($this->groupManager->isAdmin($loggedInUser->getUID())) {
+ if ($isAdmin || $isDelegatedAdmin) {
if ($group->getGID() === 'admin') {
- throw new OCSException('Cannot remove yourself from the admin group', 105);
+ throw new OCSException($this->l10n->t('Cannot remove yourself from the admin group'), 105);
}
} else {
// Not an admin, so the user must be a subadmin of this group, but that is not allowed.
- throw new OCSException('Cannot remove yourself from this group as you are a SubAdmin', 105);
+ throw new OCSException($this->l10n->t('Cannot remove yourself from this group as you are a sub-admin'), 105);
}
- } elseif (!$this->groupManager->isAdmin($loggedInUser->getUID())) {
+ } elseif (!($isAdmin || $isDelegatedAdmin)) {
/** @var IGroup[] $subAdminGroups */
$subAdminGroups = $subAdminManager->getSubAdminsGroups($loggedInUser);
$subAdminGroups = array_map(function (IGroup $subAdminGroup) {
@@ -1432,7 +1658,7 @@ class UsersController extends AUserData {
if (count($userSubAdminGroups) <= 1) {
// Subadmin must not be able to remove a user from all their subadmin groups.
- throw new OCSException('Not viable to remove user from the last group you are SubAdmin of', 105);
+ throw new OCSException($this->l10n->t('Not viable to remove user from the last group you are sub-admin of'), 105);
}
}
@@ -1442,32 +1668,32 @@ class UsersController extends AUserData {
}
/**
- * @PasswordConfirmationRequired
- *
* Make a user a subadmin of a group
*
* @param string $userId ID of the user
* @param string $groupid ID of the group
- * @return DataResponse<Http::STATUS_OK, array<empty>, array{}>
+ * @return DataResponse<Http::STATUS_OK, list<empty>, array{}>
* @throws OCSException
*
* 200: User added as group subadmin successfully
*/
+ #[AuthorizedAdminSetting(settings:Users::class)]
+ #[PasswordConfirmationRequired]
public function addSubAdmin(string $userId, string $groupid): DataResponse {
$group = $this->groupManager->get($groupid);
$user = $this->userManager->get($userId);
// Check if the user exists
if ($user === null) {
- throw new OCSException('User does not exist', 101);
+ throw new OCSException($this->l10n->t('User does not exist'), 101);
}
// Check if group exists
if ($group === null) {
- throw new OCSException('Group does not exist', 102);
+ throw new OCSException($this->l10n->t('Group does not exist'), 102);
}
// Check if trying to make subadmin of admin group
if ($group->getGID() === 'admin') {
- throw new OCSException('Cannot create subadmins for admin group', 103);
+ throw new OCSException($this->l10n->t('Cannot create sub-admins for admin group'), 103);
}
$subAdminManager = $this->groupManager->getSubAdmin();
@@ -1482,17 +1708,17 @@ class UsersController extends AUserData {
}
/**
- * @PasswordConfirmationRequired
- *
* Remove a user from the subadmins of a group
*
* @param string $userId ID of the user
* @param string $groupid ID of the group
- * @return DataResponse<Http::STATUS_OK, array<empty>, array{}>
+ * @return DataResponse<Http::STATUS_OK, list<empty>, array{}>
* @throws OCSException
*
* 200: User removed as group subadmin successfully
*/
+ #[AuthorizedAdminSetting(settings:Users::class)]
+ #[PasswordConfirmationRequired]
public function removeSubAdmin(string $userId, string $groupid): DataResponse {
$group = $this->groupManager->get($groupid);
$user = $this->userManager->get($userId);
@@ -1500,15 +1726,15 @@ class UsersController extends AUserData {
// Check if the user exists
if ($user === null) {
- throw new OCSException('User does not exist', 101);
+ throw new OCSException($this->l10n->t('User does not exist'), 101);
}
// Check if the group exists
if ($group === null) {
- throw new OCSException('Group does not exist', 101);
+ throw new OCSException($this->l10n->t('Group does not exist'), 101);
}
// Check if they are a subadmin of this said group
if (!$subAdminManager->isSubAdminOfGroup($user, $group)) {
- throw new OCSException('User is not a subadmin of this group', 102);
+ throw new OCSException($this->l10n->t('User is not a sub-admin of this group'), 102);
}
// Go
@@ -1520,28 +1746,28 @@ class UsersController extends AUserData {
* Get the groups a user is a subadmin of
*
* @param string $userId ID if the user
- * @return DataResponse<Http::STATUS_OK, string[], array{}>
+ * @return DataResponse<Http::STATUS_OK, list<string>, array{}>
* @throws OCSException
*
* 200: User subadmin groups returned
*/
+ #[AuthorizedAdminSetting(settings:Users::class)]
public function getUserSubAdminGroups(string $userId): DataResponse {
$groups = $this->getUserSubAdminGroupsData($userId);
return new DataResponse($groups);
}
/**
- * @NoAdminRequired
- * @PasswordConfirmationRequired
- *
* Resend the welcome message
*
* @param string $userId ID if the user
- * @return DataResponse<Http::STATUS_OK, array<empty>, array{}>
+ * @return DataResponse<Http::STATUS_OK, list<empty>, array{}>
* @throws OCSException
*
* 200: Resent welcome message successfully
*/
+ #[PasswordConfirmationRequired]
+ #[NoAdminRequired]
public function resendWelcomeMessage(string $userId): DataResponse {
$currentLoggedInUser = $this->userSession->getUser();
@@ -1552,9 +1778,11 @@ class UsersController extends AUserData {
// Check if admin / subadmin
$subAdminManager = $this->groupManager->getSubAdmin();
+ $isAdmin = $this->groupManager->isAdmin($currentLoggedInUser->getUID());
+ $isDelegatedAdmin = $this->groupManager->isDelegatedAdmin($currentLoggedInUser->getUID());
if (
!$subAdminManager->isUserAccessible($currentLoggedInUser, $targetUser)
- && !$this->groupManager->isAdmin($currentLoggedInUser->getUID())
+ && !($isAdmin || $isDelegatedAdmin)
) {
// No rights
throw new OCSException('', OCSController::RESPOND_NOT_FOUND);
@@ -1562,11 +1790,16 @@ class UsersController extends AUserData {
$email = $targetUser->getEMailAddress();
if ($email === '' || $email === null) {
- throw new OCSException('Email address not available', 101);
+ throw new OCSException($this->l10n->t('Email address not available'), 101);
}
try {
- $emailTemplate = $this->newUserMailHelper->generateTemplate($targetUser, false);
+ if ($this->config->getUserValue($targetUser->getUID(), 'core', 'lostpassword')) {
+ $emailTemplate = $this->newUserMailHelper->generateTemplate($targetUser, true);
+ } else {
+ $emailTemplate = $this->newUserMailHelper->generateTemplate($targetUser, false);
+ }
+
$this->newUserMailHelper->sendMail($targetUser, $emailTemplate);
} catch (\Exception $e) {
$this->logger->error(
@@ -1576,7 +1809,7 @@ class UsersController extends AUserData {
'exception' => $e,
]
);
- throw new OCSException('Sending email failed', 102);
+ throw new OCSException($this->l10n->t('Sending email failed'), 102);
}
return new DataResponse();
diff --git a/apps/provisioning_api/lib/Controller/VerificationController.php b/apps/provisioning_api/lib/Controller/VerificationController.php
index 6b2443796fc..70535c4906c 100644
--- a/apps/provisioning_api/lib/Controller/VerificationController.php
+++ b/apps/provisioning_api/lib/Controller/VerificationController.php
@@ -3,26 +3,8 @@
declare(strict_types=1);
/**
- * @copyright Copyright (c) 2021 Arthur Schiwon <blizzz@arthur-schiwon.de>
- *
- * @author Arthur Schiwon <blizzz@arthur-schiwon.de>
- * @author Kate Döen <kate.doeen@nextcloud.com>
- *
- * @license GNU AGPL version 3 or any later version
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as
- * published by the Free Software Foundation, either version 3 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see <https://www.gnu.org/licenses/>.
- *
+ * SPDX-FileCopyrightText: 2021 Nextcloud GmbH and Nextcloud contributors
+ * SPDX-License-Identifier: AGPL-3.0-or-later
*/
namespace OCA\Provisioning_API\Controller;
@@ -31,6 +13,9 @@ use InvalidArgumentException;
use OC\Security\Crypto;
use OCP\Accounts\IAccountManager;
use OCP\AppFramework\Controller;
+use OCP\AppFramework\Http\Attribute\BruteForceProtection;
+use OCP\AppFramework\Http\Attribute\NoAdminRequired;
+use OCP\AppFramework\Http\Attribute\NoCSRFRequired;
use OCP\AppFramework\Http\Attribute\OpenAPI;
use OCP\AppFramework\Http\TemplateResponse;
use OCP\IL10N;
@@ -43,47 +28,32 @@ use OCP\Security\VerificationToken\IVerificationToken;
#[OpenAPI(scope: OpenAPI::SCOPE_IGNORE)]
class VerificationController extends Controller {
- /** @var IVerificationToken */
- private $verificationToken;
- /** @var IUserManager */
- private $userManager;
- /** @var IL10N */
- private $l10n;
- /** @var IUserSession */
- private $userSession;
- /** @var IAccountManager */
- private $accountManager;
/** @var Crypto */
private $crypto;
public function __construct(
string $appName,
IRequest $request,
- IVerificationToken $verificationToken,
- IUserManager $userManager,
- IL10N $l10n,
- IUserSession $userSession,
- IAccountManager $accountManager,
- Crypto $crypto
+ private IVerificationToken $verificationToken,
+ private IUserManager $userManager,
+ private IL10N $l10n,
+ private IUserSession $userSession,
+ private IAccountManager $accountManager,
+ Crypto $crypto,
) {
parent::__construct($appName, $request);
- $this->verificationToken = $verificationToken;
- $this->userManager = $userManager;
- $this->l10n = $l10n;
- $this->userSession = $userSession;
- $this->accountManager = $accountManager;
$this->crypto = $crypto;
}
/**
- * @NoCSRFRequired
- * @NoAdminRequired
* @NoSubAdminRequired
*/
- public function showVerifyMail(string $token, string $userId, string $key) {
+ #[NoAdminRequired]
+ #[NoCSRFRequired]
+ public function showVerifyMail(string $token, string $userId, string $key): TemplateResponse {
if ($this->userSession->getUser()->getUID() !== $userId) {
// not a public page, hence getUser() must return an IUser
- throw new InvalidArgumentException('Logged in user is not mail address owner');
+ throw new InvalidArgumentException('Logged in account is not mail address owner');
}
$email = $this->crypto->decrypt($key);
@@ -96,13 +66,15 @@ class VerificationController extends Controller {
}
/**
- * @NoAdminRequired
* @NoSubAdminRequired
*/
- public function verifyMail(string $token, string $userId, string $key) {
+ #[NoAdminRequired]
+ #[BruteForceProtection(action: 'emailVerification')]
+ public function verifyMail(string $token, string $userId, string $key): TemplateResponse {
+ $throttle = false;
try {
if ($this->userSession->getUser()->getUID() !== $userId) {
- throw new InvalidArgumentException('Logged in user is not mail address owner');
+ throw new InvalidArgumentException('Logged in account is not mail address owner');
}
$email = $this->crypto->decrypt($key);
$ref = \substr(hash('sha256', $email), 0, 8);
@@ -121,9 +93,12 @@ class VerificationController extends Controller {
$this->accountManager->updateAccount($userAccount);
$this->verificationToken->delete($token, $user, 'verifyMail' . $ref);
} catch (InvalidTokenException $e) {
- $error = $e->getCode() === InvalidTokenException::TOKEN_EXPIRED
- ? $this->l10n->t('Could not verify mail because the token is expired.')
- : $this->l10n->t('Could not verify mail because the token is invalid.');
+ if ($e->getCode() === InvalidTokenException::TOKEN_EXPIRED) {
+ $error = $this->l10n->t('Could not verify mail because the token is expired.');
+ } else {
+ $throttle = true;
+ $error = $this->l10n->t('Could not verify mail because the token is invalid.');
+ }
} catch (InvalidArgumentException $e) {
$error = $e->getMessage();
} catch (\Exception $e) {
@@ -131,10 +106,14 @@ class VerificationController extends Controller {
}
if (isset($error)) {
- return new TemplateResponse(
+ $response = new TemplateResponse(
'core', 'error', [
'errors' => [['error' => $error]]
], TemplateResponse::RENDER_AS_GUEST);
+ if ($throttle) {
+ $response->throttle();
+ }
+ return $response;
}
return new TemplateResponse(
diff --git a/apps/provisioning_api/lib/FederatedShareProviderFactory.php b/apps/provisioning_api/lib/FederatedShareProviderFactory.php
index 063f5261f2f..3da76102c4a 100644
--- a/apps/provisioning_api/lib/FederatedShareProviderFactory.php
+++ b/apps/provisioning_api/lib/FederatedShareProviderFactory.php
@@ -3,27 +3,8 @@
declare(strict_types=1);
/**
- * @copyright 2018, Roeland Jago Douma <roeland@famdouma.nl>
- *
- * @author Christoph Wurst <christoph@winzerhof-wurst.at>
- * @author Morris Jobke <hey@morrisjobke.de>
- * @author Roeland Jago Douma <roeland@famdouma.nl>
- *
- * @license GNU AGPL version 3 or any later version
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as
- * published by the Free Software Foundation, either version 3 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- *
+ * SPDX-FileCopyrightText: 2018 Nextcloud GmbH and Nextcloud contributors
+ * SPDX-License-Identifier: AGPL-3.0-or-later
*/
namespace OCA\Provisioning_API;
@@ -32,11 +13,9 @@ use OCP\IServerContainer;
class FederatedShareProviderFactory {
- /** @var IServerContainer */
- private $serverContainer;
-
- public function __construct(IServerContainer $serverContainer) {
- $this->serverContainer = $serverContainer;
+ public function __construct(
+ private IServerContainer $serverContainer,
+ ) {
}
public function get(): FederatedShareProvider {
diff --git a/apps/provisioning_api/lib/Listener/UserDeletedListener.php b/apps/provisioning_api/lib/Listener/UserDeletedListener.php
index d1fa8f6ad9f..099b5593ed7 100644
--- a/apps/provisioning_api/lib/Listener/UserDeletedListener.php
+++ b/apps/provisioning_api/lib/Listener/UserDeletedListener.php
@@ -3,25 +3,8 @@
declare(strict_types=1);
/**
- * @copyright Copyright (c) 2020 Joas Schilling <coding@schilljs.com>
- *
- * @author Joas Schilling <coding@schilljs.com>
- *
- * @license GNU AGPL version 3 or any later version
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as
- * published by the Free Software Foundation, either version 3 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- *
+ * SPDX-FileCopyrightText: 2020 Nextcloud GmbH and Nextcloud contributors
+ * SPDX-License-Identifier: AGPL-3.0-or-later
*/
namespace OCA\Provisioning_API\Listener;
@@ -30,6 +13,7 @@ use OCP\EventDispatcher\Event;
use OCP\EventDispatcher\IEventListener;
use OCP\User\Events\UserDeletedEvent;
+/** @template-implements IEventListener<UserDeletedEvent> */
class UserDeletedListener implements IEventListener {
/** @var KnownUserService */
diff --git a/apps/provisioning_api/lib/Middleware/Exceptions/NotSubAdminException.php b/apps/provisioning_api/lib/Middleware/Exceptions/NotSubAdminException.php
index 6f5b15628f9..b014d6a1495 100644
--- a/apps/provisioning_api/lib/Middleware/Exceptions/NotSubAdminException.php
+++ b/apps/provisioning_api/lib/Middleware/Exceptions/NotSubAdminException.php
@@ -1,25 +1,8 @@
<?php
+
/**
- * @copyright Copyright (c) 2016 Roeland Jago Douma <roeland@famdouma.nl>
- *
- * @author Morris Jobke <hey@morrisjobke.de>
- * @author Roeland Jago Douma <roeland@famdouma.nl>
- *
- * @license GNU AGPL version 3 or any later version
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as
- * published by the Free Software Foundation, either version 3 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- *
+ * SPDX-FileCopyrightText: 2016 Nextcloud GmbH and Nextcloud contributors
+ * SPDX-License-Identifier: AGPL-3.0-or-later
*/
namespace OCA\Provisioning_API\Middleware\Exceptions;
@@ -27,6 +10,6 @@ use OCP\AppFramework\Http;
class NotSubAdminException extends \Exception {
public function __construct() {
- parent::__construct('Logged in user must be at least a sub admin', Http::STATUS_FORBIDDEN);
+ parent::__construct('Logged in account must be at least a sub admin', Http::STATUS_FORBIDDEN);
}
}
diff --git a/apps/provisioning_api/lib/Middleware/ProvisioningApiMiddleware.php b/apps/provisioning_api/lib/Middleware/ProvisioningApiMiddleware.php
index 02fd0469513..1989ef5d4c1 100644
--- a/apps/provisioning_api/lib/Middleware/ProvisioningApiMiddleware.php
+++ b/apps/provisioning_api/lib/Middleware/ProvisioningApiMiddleware.php
@@ -3,28 +3,8 @@
declare(strict_types=1);
/**
- * @copyright Copyright (c) 2016 Roeland Jago Douma <roeland@famdouma.nl>
- *
- * @author Joas Schilling <coding@schilljs.com>
- * @author Lukas Reschke <lukas@statuscode.ch>
- * @author Morris Jobke <hey@morrisjobke.de>
- * @author Roeland Jago Douma <roeland@famdouma.nl>
- *
- * @license GNU AGPL version 3 or any later version
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as
- * published by the Free Software Foundation, either version 3 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- *
+ * SPDX-FileCopyrightText: 2016 Nextcloud GmbH and Nextcloud contributors
+ * SPDX-License-Identifier: AGPL-3.0-or-later
*/
namespace OCA\Provisioning_API\Middleware;
@@ -38,15 +18,6 @@ use OCP\AppFramework\Utility\IControllerMethodReflector;
class ProvisioningApiMiddleware extends Middleware {
- /** @var IControllerMethodReflector */
- private $reflector;
-
- /** @var bool */
- private $isAdmin;
-
- /** @var bool */
- private $isSubAdmin;
-
/**
* ProvisioningApiMiddleware constructor.
*
@@ -55,12 +26,10 @@ class ProvisioningApiMiddleware extends Middleware {
* @param bool $isSubAdmin
*/
public function __construct(
- IControllerMethodReflector $reflector,
- bool $isAdmin,
- bool $isSubAdmin) {
- $this->reflector = $reflector;
- $this->isAdmin = $isAdmin;
- $this->isSubAdmin = $isSubAdmin;
+ private IControllerMethodReflector $reflector,
+ private bool $isAdmin,
+ private bool $isSubAdmin,
+ ) {
}
/**
diff --git a/apps/provisioning_api/lib/ResponseDefinitions.php b/apps/provisioning_api/lib/ResponseDefinitions.php
index 0b4a3d1ebbc..62ae4ca577b 100644
--- a/apps/provisioning_api/lib/ResponseDefinitions.php
+++ b/apps/provisioning_api/lib/ResponseDefinitions.php
@@ -3,25 +3,8 @@
declare(strict_types=1);
/**
- * @copyright Copyright (c) 2023 Kate Döen <kate.doeen@nextcloud.com>
- *
- * @author Kate Döen <kate.doeen@nextcloud.com>
- *
- * @license GNU AGPL version 3 or any later version
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as
- * published by the Free Software Foundation, either version 3 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- *
+ * SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors
+ * SPDX-License-Identifier: AGPL-3.0-or-later
*/
namespace OCA\Provisioning_API;
@@ -35,93 +18,59 @@ namespace OCA\Provisioning_API;
* used?: float|int,
* }
*
+ * @psalm-type Provisioning_APIUserDetailsScope = 'v2-private'|'v2-local'|'v2-federated'|'v2-published'|'private'|'contacts'|'public'
+ *
* @psalm-type Provisioning_APIUserDetails = array{
- * additional_mail: string[],
- * additional_mailScope?: string[],
+ * additional_mail: list<string>,
+ * additional_mailScope?: list<Provisioning_APIUserDetailsScope>,
* address: string,
- * addressScope?: string,
- * avatarScope?: string,
+ * addressScope?: Provisioning_APIUserDetailsScope,
+ * avatarScope?: Provisioning_APIUserDetailsScope,
* backend: string,
* backendCapabilities: array{
* setDisplayName: bool,
* setPassword: bool
* },
* biography: string,
- * biographyScope?: string,
+ * biographyScope?: Provisioning_APIUserDetailsScope,
* display-name: string,
* displayname: string,
- * displaynameScope?: string,
+ * displaynameScope?: Provisioning_APIUserDetailsScope,
* email: ?string,
- * emailScope?: string,
+ * emailScope?: Provisioning_APIUserDetailsScope,
* enabled?: bool,
* fediverse: string,
- * fediverseScope?: string,
- * groups: string[],
+ * fediverseScope?: Provisioning_APIUserDetailsScope,
+ * groups: list<string>,
* headline: string,
- * headlineScope?: string,
+ * headlineScope?: Provisioning_APIUserDetailsScope,
* id: string,
* language: string,
+ * firstLoginTimestamp: int,
+ * lastLoginTimestamp: int,
* lastLogin: int,
* locale: string,
* manager: string,
* notify_email: ?string,
* organisation: string,
- * organisationScope?: string,
+ * organisationScope?: Provisioning_APIUserDetailsScope,
* phone: string,
- * phoneScope?: string,
+ * phoneScope?: Provisioning_APIUserDetailsScope,
* profile_enabled: string,
- * profile_enabledScope?: string,
+ * profile_enabledScope?: Provisioning_APIUserDetailsScope,
+ * pronouns: string,
+ * pronounsScope?: Provisioning_APIUserDetailsScope,
* quota: Provisioning_APIUserDetailsQuota,
* role: string,
- * roleScope?: string,
+ * roleScope?: Provisioning_APIUserDetailsScope,
* storageLocation?: string,
- * subadmin: string[],
+ * subadmin: list<string>,
* twitter: string,
- * twitterScope?: string,
+ * twitterScope?: Provisioning_APIUserDetailsScope,
+ * bluesky: string,
+ * blueskyScope?: Provisioning_APIUserDetailsScope,
* website: string,
- * websiteScope?: string,
- * }
- *
- * @psalm-type Provisioning_APIAppInfo = array{
- * active: bool|null,
- * activity: ?mixed,
- * author: ?mixed,
- * background-jobs: ?mixed,
- * bugs: ?mixed,
- * category: ?mixed,
- * collaboration: ?mixed,
- * commands: ?mixed,
- * default_enable: ?mixed,
- * dependencies: ?mixed,
- * description: string,
- * discussion: ?mixed,
- * documentation: ?mixed,
- * groups: ?mixed,
- * id: string,
- * info: ?mixed,
- * internal: bool|null,
- * level: int|null,
- * licence: ?mixed,
- * name: string,
- * namespace: ?mixed,
- * navigations: ?mixed,
- * preview: ?mixed,
- * previewAsIcon: bool|null,
- * public: ?mixed,
- * remote: ?mixed,
- * removable: bool|null,
- * repair-steps: ?mixed,
- * repository: ?mixed,
- * sabre: ?mixed,
- * screenshot: ?mixed,
- * settings: ?mixed,
- * summary: string,
- * trash: ?mixed,
- * two-factor-providers: ?mixed,
- * types: ?mixed,
- * version: string,
- * versions: ?mixed,
- * website: ?mixed,
+ * websiteScope?: Provisioning_APIUserDetailsScope,
* }
*
* @psalm-type Provisioning_APIGroupDetails = array{
diff --git a/apps/provisioning_api/openapi-administration.json b/apps/provisioning_api/openapi-administration.json
index ea8a5cdc546..08bba7a05a1 100644
--- a/apps/provisioning_api/openapi-administration.json
+++ b/apps/provisioning_api/openapi-administration.json
@@ -3,7 +3,7 @@
"info": {
"title": "provisioning_api-administration",
"version": "0.0.1",
- "description": "This application enables a set of APIs that external systems can use to manage users, groups and apps.",
+ "description": "This application enables a set of APIs that external systems can use to manage accounts, groups and apps.",
"license": {
"name": "agpl"
}
@@ -20,259 +20,347 @@
}
},
"schemas": {
- "AppInfo": {
+ "Capabilities": {
+ "type": "object",
+ "required": [
+ "provisioning_api"
+ ],
+ "properties": {
+ "provisioning_api": {
+ "type": "object",
+ "required": [
+ "version",
+ "AccountPropertyScopesVersion",
+ "AccountPropertyScopesFederatedEnabled",
+ "AccountPropertyScopesPublishedEnabled"
+ ],
+ "properties": {
+ "version": {
+ "type": "string"
+ },
+ "AccountPropertyScopesVersion": {
+ "type": "integer",
+ "format": "int64"
+ },
+ "AccountPropertyScopesFederatedEnabled": {
+ "type": "boolean"
+ },
+ "AccountPropertyScopesPublishedEnabled": {
+ "type": "boolean"
+ }
+ }
+ }
+ }
+ },
+ "OCSMeta": {
"type": "object",
"required": [
- "active",
- "activity",
- "author",
- "background-jobs",
- "bugs",
- "category",
- "collaboration",
- "commands",
- "default_enable",
- "dependencies",
- "description",
- "discussion",
- "documentation",
+ "status",
+ "statuscode"
+ ],
+ "properties": {
+ "status": {
+ "type": "string"
+ },
+ "statuscode": {
+ "type": "integer"
+ },
+ "message": {
+ "type": "string"
+ },
+ "totalitems": {
+ "type": "string"
+ },
+ "itemsperpage": {
+ "type": "string"
+ }
+ }
+ },
+ "UserDetails": {
+ "type": "object",
+ "required": [
+ "additional_mail",
+ "address",
+ "backend",
+ "backendCapabilities",
+ "biography",
+ "display-name",
+ "displayname",
+ "email",
+ "fediverse",
"groups",
+ "headline",
"id",
- "info",
- "internal",
- "level",
- "licence",
- "name",
- "namespace",
- "navigations",
- "preview",
- "previewAsIcon",
- "public",
- "remote",
- "removable",
- "repair-steps",
- "repository",
- "sabre",
- "screenshot",
- "settings",
- "summary",
- "trash",
- "two-factor-providers",
- "types",
- "version",
- "versions",
+ "language",
+ "firstLoginTimestamp",
+ "lastLoginTimestamp",
+ "lastLogin",
+ "locale",
+ "manager",
+ "notify_email",
+ "organisation",
+ "phone",
+ "profile_enabled",
+ "pronouns",
+ "quota",
+ "role",
+ "subadmin",
+ "twitter",
+ "bluesky",
"website"
],
"properties": {
- "active": {
- "type": "boolean",
- "nullable": true
+ "additional_mail": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
},
- "activity": {
- "type": "object",
- "nullable": true
+ "additional_mailScope": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/UserDetailsScope"
+ }
},
- "author": {
- "type": "object",
- "nullable": true
+ "address": {
+ "type": "string"
},
- "background-jobs": {
- "type": "object",
- "nullable": true
+ "addressScope": {
+ "$ref": "#/components/schemas/UserDetailsScope"
},
- "bugs": {
- "type": "object",
- "nullable": true
+ "avatarScope": {
+ "$ref": "#/components/schemas/UserDetailsScope"
},
- "category": {
- "type": "object",
- "nullable": true
+ "backend": {
+ "type": "string"
},
- "collaboration": {
+ "backendCapabilities": {
"type": "object",
- "nullable": true
+ "required": [
+ "setDisplayName",
+ "setPassword"
+ ],
+ "properties": {
+ "setDisplayName": {
+ "type": "boolean"
+ },
+ "setPassword": {
+ "type": "boolean"
+ }
+ }
},
- "commands": {
- "type": "object",
- "nullable": true
+ "biography": {
+ "type": "string"
},
- "default_enable": {
- "type": "object",
- "nullable": true
+ "biographyScope": {
+ "$ref": "#/components/schemas/UserDetailsScope"
},
- "dependencies": {
- "type": "object",
- "nullable": true
+ "display-name": {
+ "type": "string"
},
- "description": {
+ "displayname": {
"type": "string"
},
- "discussion": {
- "type": "object",
- "nullable": true
+ "displaynameScope": {
+ "$ref": "#/components/schemas/UserDetailsScope"
},
- "documentation": {
- "type": "object",
+ "email": {
+ "type": "string",
"nullable": true
},
+ "emailScope": {
+ "$ref": "#/components/schemas/UserDetailsScope"
+ },
+ "enabled": {
+ "type": "boolean"
+ },
+ "fediverse": {
+ "type": "string"
+ },
+ "fediverseScope": {
+ "$ref": "#/components/schemas/UserDetailsScope"
+ },
"groups": {
- "type": "object",
- "nullable": true
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "headline": {
+ "type": "string"
+ },
+ "headlineScope": {
+ "$ref": "#/components/schemas/UserDetailsScope"
},
"id": {
"type": "string"
},
- "info": {
- "type": "object",
- "nullable": true
+ "language": {
+ "type": "string"
},
- "internal": {
- "type": "boolean",
- "nullable": true
+ "firstLoginTimestamp": {
+ "type": "integer",
+ "format": "int64"
},
- "level": {
+ "lastLoginTimestamp": {
"type": "integer",
- "format": "int64",
- "nullable": true
+ "format": "int64"
},
- "licence": {
- "type": "object",
- "nullable": true
+ "lastLogin": {
+ "type": "integer",
+ "format": "int64"
},
- "name": {
+ "locale": {
"type": "string"
},
- "namespace": {
- "type": "object",
- "nullable": true
+ "manager": {
+ "type": "string"
},
- "navigations": {
- "type": "object",
+ "notify_email": {
+ "type": "string",
"nullable": true
},
- "preview": {
- "type": "object",
- "nullable": true
+ "organisation": {
+ "type": "string"
},
- "previewAsIcon": {
- "type": "boolean",
- "nullable": true
+ "organisationScope": {
+ "$ref": "#/components/schemas/UserDetailsScope"
},
- "public": {
- "type": "object",
- "nullable": true
+ "phone": {
+ "type": "string"
},
- "remote": {
- "type": "object",
- "nullable": true
+ "phoneScope": {
+ "$ref": "#/components/schemas/UserDetailsScope"
},
- "removable": {
- "type": "boolean",
- "nullable": true
+ "profile_enabled": {
+ "type": "string"
},
- "repair-steps": {
- "type": "object",
- "nullable": true
+ "profile_enabledScope": {
+ "$ref": "#/components/schemas/UserDetailsScope"
},
- "repository": {
- "type": "object",
- "nullable": true
+ "pronouns": {
+ "type": "string"
},
- "sabre": {
- "type": "object",
- "nullable": true
+ "pronounsScope": {
+ "$ref": "#/components/schemas/UserDetailsScope"
},
- "screenshot": {
- "type": "object",
- "nullable": true
+ "quota": {
+ "$ref": "#/components/schemas/UserDetailsQuota"
},
- "settings": {
- "type": "object",
- "nullable": true
+ "role": {
+ "type": "string"
+ },
+ "roleScope": {
+ "$ref": "#/components/schemas/UserDetailsScope"
},
- "summary": {
+ "storageLocation": {
"type": "string"
},
- "trash": {
- "type": "object",
- "nullable": true
+ "subadmin": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
},
- "two-factor-providers": {
- "type": "object",
- "nullable": true
+ "twitter": {
+ "type": "string"
},
- "types": {
- "type": "object",
- "nullable": true
+ "twitterScope": {
+ "$ref": "#/components/schemas/UserDetailsScope"
},
- "version": {
+ "bluesky": {
"type": "string"
},
- "versions": {
- "type": "object",
- "nullable": true
+ "blueskyScope": {
+ "$ref": "#/components/schemas/UserDetailsScope"
},
"website": {
- "type": "object",
- "nullable": true
+ "type": "string"
+ },
+ "websiteScope": {
+ "$ref": "#/components/schemas/UserDetailsScope"
}
}
},
- "Capabilities": {
+ "UserDetailsQuota": {
"type": "object",
- "required": [
- "provisioning_api"
- ],
"properties": {
- "provisioning_api": {
- "type": "object",
- "required": [
- "version",
- "AccountPropertyScopesVersion",
- "AccountPropertyScopesFederatedEnabled",
- "AccountPropertyScopesPublishedEnabled"
- ],
- "properties": {
- "version": {
- "type": "string"
+ "free": {
+ "anyOf": [
+ {
+ "type": "number",
+ "format": "double"
},
- "AccountPropertyScopesVersion": {
+ {
"type": "integer",
"format": "int64"
+ }
+ ]
+ },
+ "quota": {
+ "anyOf": [
+ {
+ "type": "number",
+ "format": "double"
},
- "AccountPropertyScopesFederatedEnabled": {
- "type": "boolean"
+ {
+ "type": "integer",
+ "format": "int64"
},
- "AccountPropertyScopesPublishedEnabled": {
- "type": "boolean"
+ {
+ "type": "string"
}
- }
- }
- }
- },
- "OCSMeta": {
- "type": "object",
- "required": [
- "status",
- "statuscode"
- ],
- "properties": {
- "status": {
- "type": "string"
- },
- "statuscode": {
- "type": "integer"
+ ]
},
- "message": {
- "type": "string"
+ "relative": {
+ "anyOf": [
+ {
+ "type": "number",
+ "format": "double"
+ },
+ {
+ "type": "integer",
+ "format": "int64"
+ }
+ ]
},
- "totalitems": {
- "type": "string"
+ "total": {
+ "anyOf": [
+ {
+ "type": "number",
+ "format": "double"
+ },
+ {
+ "type": "integer",
+ "format": "int64"
+ }
+ ]
},
- "itemsperpage": {
- "type": "string"
+ "used": {
+ "anyOf": [
+ {
+ "type": "number",
+ "format": "double"
+ },
+ {
+ "type": "integer",
+ "format": "int64"
+ }
+ ]
}
}
+ },
+ "UserDetailsScope": {
+ "type": "string",
+ "enum": [
+ "v2-private",
+ "v2-local",
+ "v2-federated",
+ "v2-published",
+ "private",
+ "contacts",
+ "public"
+ ]
}
}
},
@@ -300,7 +388,8 @@
"description": "Filter for enabled or disabled apps",
"schema": {
"type": "string",
- "nullable": true
+ "nullable": true,
+ "default": null
}
},
{
@@ -418,7 +507,11 @@
"$ref": "#/components/schemas/OCSMeta"
},
"data": {
- "$ref": "#/components/schemas/AppInfo"
+ "type": "object",
+ "additionalProperties": {
+ "type": "object",
+ "nullable": true
+ }
}
}
}
@@ -432,7 +525,7 @@
"post": {
"operationId": "apps-enable",
"summary": "Enable an app",
- "description": "This endpoint requires admin access",
+ "description": "This endpoint requires admin access\nThis endpoint requires password confirmation",
"tags": [
"apps"
],
@@ -499,7 +592,7 @@
"delete": {
"operationId": "apps-disable",
"summary": "Disable an app",
- "description": "This endpoint requires admin access",
+ "description": "This endpoint requires admin access\nThis endpoint requires password confirmation",
"tags": [
"apps"
],
@@ -643,7 +736,7 @@
"post": {
"operationId": "groups-add-group",
"summary": "Create a new group",
- "description": "This endpoint requires admin access",
+ "description": "This endpoint requires admin access\nThis endpoint requires password confirmation",
"tags": [
"groups"
],
@@ -655,25 +748,31 @@
"basic_auth": []
}
],
- "parameters": [
- {
- "name": "groupid",
- "in": "query",
- "description": "ID of the group",
- "required": true,
- "schema": {
- "type": "string"
- }
- },
- {
- "name": "displayname",
- "in": "query",
- "description": "Display name of the group",
- "schema": {
- "type": "string",
- "default": ""
+ "requestBody": {
+ "required": true,
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "required": [
+ "groupid"
+ ],
+ "properties": {
+ "groupid": {
+ "type": "string",
+ "description": "ID of the group"
+ },
+ "displayname": {
+ "type": "string",
+ "default": "",
+ "description": "Display name of the group"
+ }
+ }
+ }
}
- },
+ }
+ },
+ "parameters": [
{
"name": "OCS-APIRequest",
"in": "header",
@@ -721,7 +820,7 @@
"put": {
"operationId": "groups-update-group",
"summary": "Update a group",
- "description": "This endpoint requires admin access",
+ "description": "This endpoint requires admin access\nThis endpoint requires password confirmation",
"tags": [
"groups"
],
@@ -733,25 +832,31 @@
"basic_auth": []
}
],
- "parameters": [
- {
- "name": "key",
- "in": "query",
- "description": "Key to update, only 'displayname'",
- "required": true,
- "schema": {
- "type": "string"
- }
- },
- {
- "name": "value",
- "in": "query",
- "description": "New value for the key",
- "required": true,
- "schema": {
- "type": "string"
+ "requestBody": {
+ "required": true,
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "required": [
+ "key",
+ "value"
+ ],
+ "properties": {
+ "key": {
+ "type": "string",
+ "description": "Key to update, only 'displayname'"
+ },
+ "value": {
+ "type": "string",
+ "description": "New value for the key"
+ }
+ }
+ }
}
- },
+ }
+ },
+ "parameters": [
{
"name": "groupId",
"in": "path",
@@ -807,7 +912,7 @@
"delete": {
"operationId": "groups-delete-group",
"summary": "Delete a group",
- "description": "This endpoint requires admin access",
+ "description": "This endpoint requires admin access\nThis endpoint requires password confirmation",
"tags": [
"groups"
],
@@ -873,6 +978,124 @@
}
}
},
+ "/ocs/v2.php/cloud/users/recent": {
+ "get": {
+ "operationId": "users-get-last-logged-in-users",
+ "summary": "Gets the list of users sorted by lastLogin, from most recent to least recent",
+ "description": "This endpoint requires admin access",
+ "tags": [
+ "users"
+ ],
+ "security": [
+ {
+ "bearer_auth": []
+ },
+ {
+ "basic_auth": []
+ }
+ ],
+ "parameters": [
+ {
+ "name": "search",
+ "in": "query",
+ "description": "Text to search for",
+ "schema": {
+ "type": "string",
+ "default": ""
+ }
+ },
+ {
+ "name": "limit",
+ "in": "query",
+ "description": "Limit the amount of users returned",
+ "schema": {
+ "type": "integer",
+ "format": "int64",
+ "nullable": true,
+ "default": null
+ }
+ },
+ {
+ "name": "offset",
+ "in": "query",
+ "description": "Offset",
+ "schema": {
+ "type": "integer",
+ "format": "int64",
+ "default": 0
+ }
+ },
+ {
+ "name": "OCS-APIRequest",
+ "in": "header",
+ "description": "Required to be true for the API request to pass",
+ "required": true,
+ "schema": {
+ "type": "boolean",
+ "default": true
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Users details returned based on last logged in information",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "required": [
+ "ocs"
+ ],
+ "properties": {
+ "ocs": {
+ "type": "object",
+ "required": [
+ "meta",
+ "data"
+ ],
+ "properties": {
+ "meta": {
+ "$ref": "#/components/schemas/OCSMeta"
+ },
+ "data": {
+ "type": "object",
+ "required": [
+ "users"
+ ],
+ "properties": {
+ "users": {
+ "type": "object",
+ "additionalProperties": {
+ "anyOf": [
+ {
+ "$ref": "#/components/schemas/UserDetails"
+ },
+ {
+ "type": "object",
+ "required": [
+ "id"
+ ],
+ "properties": {
+ "id": {
+ "type": "string"
+ }
+ }
+ }
+ ]
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ },
"/ocs/v2.php/cloud/users/{userId}/subadmins": {
"get": {
"operationId": "users-get-user-sub-admin-groups",
@@ -949,7 +1172,7 @@
"post": {
"operationId": "users-add-sub-admin",
"summary": "Make a user a subadmin of a group",
- "description": "This endpoint requires admin access",
+ "description": "This endpoint requires admin access\nThis endpoint requires password confirmation",
"tags": [
"users"
],
@@ -961,16 +1184,26 @@
"basic_auth": []
}
],
- "parameters": [
- {
- "name": "groupid",
- "in": "query",
- "description": "ID of the group",
- "required": true,
- "schema": {
- "type": "string"
+ "requestBody": {
+ "required": true,
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "required": [
+ "groupid"
+ ],
+ "properties": {
+ "groupid": {
+ "type": "string",
+ "description": "ID of the group"
+ }
+ }
+ }
}
- },
+ }
+ },
+ "parameters": [
{
"name": "userId",
"in": "path",
@@ -1025,7 +1258,7 @@
"delete": {
"operationId": "users-remove-sub-admin",
"summary": "Remove a user from the subadmins of a group",
- "description": "This endpoint requires admin access",
+ "description": "This endpoint requires admin access\nThis endpoint requires password confirmation",
"tags": [
"users"
],
@@ -1039,18 +1272,18 @@
],
"parameters": [
{
- "name": "groupid",
- "in": "query",
- "description": "ID of the group",
+ "name": "userId",
+ "in": "path",
+ "description": "ID of the user",
"required": true,
"schema": {
"type": "string"
}
},
{
- "name": "userId",
- "in": "path",
- "description": "ID of the user",
+ "name": "groupid",
+ "in": "query",
+ "description": "ID of the group",
"required": true,
"schema": {
"type": "string"
@@ -1318,15 +1551,6 @@
],
"parameters": [
{
- "name": "defaultValue",
- "in": "query",
- "description": "Default returned value if the value is empty",
- "schema": {
- "type": "string",
- "default": ""
- }
- },
- {
"name": "app",
"in": "path",
"description": "ID of the app",
@@ -1345,6 +1569,15 @@
}
},
{
+ "name": "defaultValue",
+ "in": "query",
+ "description": "Default returned value if the value is empty",
+ "schema": {
+ "type": "string",
+ "default": ""
+ }
+ },
+ {
"name": "OCS-APIRequest",
"in": "header",
"description": "Required to be true for the API request to pass",
@@ -1445,7 +1678,7 @@
"delete": {
"operationId": "app_config-delete-key",
"summary": "Delete a config key of an app",
- "description": "This endpoint requires admin access",
+ "description": "This endpoint requires admin access\nThis endpoint requires password confirmation",
"tags": [
"app_config"
],
@@ -1567,4 +1800,4 @@
}
},
"tags": []
-} \ No newline at end of file
+}
diff --git a/apps/provisioning_api/openapi-administration.json.license b/apps/provisioning_api/openapi-administration.json.license
new file mode 100644
index 00000000000..5dcb9c9e84b
--- /dev/null
+++ b/apps/provisioning_api/openapi-administration.json.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors
+SPDX-License-Identifier: AGPL-3.0-or-later \ No newline at end of file
diff --git a/apps/provisioning_api/openapi-full.json b/apps/provisioning_api/openapi-full.json
index d7fbec5569e..3684e7cbc41 100644
--- a/apps/provisioning_api/openapi-full.json
+++ b/apps/provisioning_api/openapi-full.json
@@ -3,7 +3,7 @@
"info": {
"title": "provisioning_api-full",
"version": "0.0.1",
- "description": "This application enables a set of APIs that external systems can use to manage users, groups and apps.",
+ "description": "This application enables a set of APIs that external systems can use to manage accounts, groups and apps.",
"license": {
"name": "agpl"
}
@@ -20,204 +20,6 @@
}
},
"schemas": {
- "AppInfo": {
- "type": "object",
- "required": [
- "active",
- "activity",
- "author",
- "background-jobs",
- "bugs",
- "category",
- "collaboration",
- "commands",
- "default_enable",
- "dependencies",
- "description",
- "discussion",
- "documentation",
- "groups",
- "id",
- "info",
- "internal",
- "level",
- "licence",
- "name",
- "namespace",
- "navigations",
- "preview",
- "previewAsIcon",
- "public",
- "remote",
- "removable",
- "repair-steps",
- "repository",
- "sabre",
- "screenshot",
- "settings",
- "summary",
- "trash",
- "two-factor-providers",
- "types",
- "version",
- "versions",
- "website"
- ],
- "properties": {
- "active": {
- "type": "boolean",
- "nullable": true
- },
- "activity": {
- "type": "object",
- "nullable": true
- },
- "author": {
- "type": "object",
- "nullable": true
- },
- "background-jobs": {
- "type": "object",
- "nullable": true
- },
- "bugs": {
- "type": "object",
- "nullable": true
- },
- "category": {
- "type": "object",
- "nullable": true
- },
- "collaboration": {
- "type": "object",
- "nullable": true
- },
- "commands": {
- "type": "object",
- "nullable": true
- },
- "default_enable": {
- "type": "object",
- "nullable": true
- },
- "dependencies": {
- "type": "object",
- "nullable": true
- },
- "description": {
- "type": "string"
- },
- "discussion": {
- "type": "object",
- "nullable": true
- },
- "documentation": {
- "type": "object",
- "nullable": true
- },
- "groups": {
- "type": "object",
- "nullable": true
- },
- "id": {
- "type": "string"
- },
- "info": {
- "type": "object",
- "nullable": true
- },
- "internal": {
- "type": "boolean",
- "nullable": true
- },
- "level": {
- "type": "integer",
- "format": "int64",
- "nullable": true
- },
- "licence": {
- "type": "object",
- "nullable": true
- },
- "name": {
- "type": "string"
- },
- "namespace": {
- "type": "object",
- "nullable": true
- },
- "navigations": {
- "type": "object",
- "nullable": true
- },
- "preview": {
- "type": "object",
- "nullable": true
- },
- "previewAsIcon": {
- "type": "boolean",
- "nullable": true
- },
- "public": {
- "type": "object",
- "nullable": true
- },
- "remote": {
- "type": "object",
- "nullable": true
- },
- "removable": {
- "type": "boolean",
- "nullable": true
- },
- "repair-steps": {
- "type": "object",
- "nullable": true
- },
- "repository": {
- "type": "object",
- "nullable": true
- },
- "sabre": {
- "type": "object",
- "nullable": true
- },
- "screenshot": {
- "type": "object",
- "nullable": true
- },
- "settings": {
- "type": "object",
- "nullable": true
- },
- "summary": {
- "type": "string"
- },
- "trash": {
- "type": "object",
- "nullable": true
- },
- "two-factor-providers": {
- "type": "object",
- "nullable": true
- },
- "types": {
- "type": "object",
- "nullable": true
- },
- "version": {
- "type": "string"
- },
- "versions": {
- "type": "object",
- "nullable": true
- },
- "website": {
- "type": "object",
- "nullable": true
- }
- }
- },
"Capabilities": {
"type": "object",
"required": [
@@ -337,6 +139,8 @@
"headline",
"id",
"language",
+ "firstLoginTimestamp",
+ "lastLoginTimestamp",
"lastLogin",
"locale",
"manager",
@@ -344,10 +148,12 @@
"organisation",
"phone",
"profile_enabled",
+ "pronouns",
"quota",
"role",
"subadmin",
"twitter",
+ "bluesky",
"website"
],
"properties": {
@@ -360,17 +166,17 @@
"additional_mailScope": {
"type": "array",
"items": {
- "type": "string"
+ "$ref": "#/components/schemas/UserDetailsScope"
}
},
"address": {
"type": "string"
},
"addressScope": {
- "type": "string"
+ "$ref": "#/components/schemas/UserDetailsScope"
},
"avatarScope": {
- "type": "string"
+ "$ref": "#/components/schemas/UserDetailsScope"
},
"backend": {
"type": "string"
@@ -394,7 +200,7 @@
"type": "string"
},
"biographyScope": {
- "type": "string"
+ "$ref": "#/components/schemas/UserDetailsScope"
},
"display-name": {
"type": "string"
@@ -403,14 +209,14 @@
"type": "string"
},
"displaynameScope": {
- "type": "string"
+ "$ref": "#/components/schemas/UserDetailsScope"
},
"email": {
"type": "string",
"nullable": true
},
"emailScope": {
- "type": "string"
+ "$ref": "#/components/schemas/UserDetailsScope"
},
"enabled": {
"type": "boolean"
@@ -419,7 +225,7 @@
"type": "string"
},
"fediverseScope": {
- "type": "string"
+ "$ref": "#/components/schemas/UserDetailsScope"
},
"groups": {
"type": "array",
@@ -431,7 +237,7 @@
"type": "string"
},
"headlineScope": {
- "type": "string"
+ "$ref": "#/components/schemas/UserDetailsScope"
},
"id": {
"type": "string"
@@ -439,6 +245,14 @@
"language": {
"type": "string"
},
+ "firstLoginTimestamp": {
+ "type": "integer",
+ "format": "int64"
+ },
+ "lastLoginTimestamp": {
+ "type": "integer",
+ "format": "int64"
+ },
"lastLogin": {
"type": "integer",
"format": "int64"
@@ -457,20 +271,26 @@
"type": "string"
},
"organisationScope": {
- "type": "string"
+ "$ref": "#/components/schemas/UserDetailsScope"
},
"phone": {
"type": "string"
},
"phoneScope": {
- "type": "string"
+ "$ref": "#/components/schemas/UserDetailsScope"
},
"profile_enabled": {
"type": "string"
},
"profile_enabledScope": {
+ "$ref": "#/components/schemas/UserDetailsScope"
+ },
+ "pronouns": {
"type": "string"
},
+ "pronounsScope": {
+ "$ref": "#/components/schemas/UserDetailsScope"
+ },
"quota": {
"$ref": "#/components/schemas/UserDetailsQuota"
},
@@ -478,7 +298,7 @@
"type": "string"
},
"roleScope": {
- "type": "string"
+ "$ref": "#/components/schemas/UserDetailsScope"
},
"storageLocation": {
"type": "string"
@@ -493,13 +313,19 @@
"type": "string"
},
"twitterScope": {
+ "$ref": "#/components/schemas/UserDetailsScope"
+ },
+ "bluesky": {
"type": "string"
},
+ "blueskyScope": {
+ "$ref": "#/components/schemas/UserDetailsScope"
+ },
"website": {
"type": "string"
},
"websiteScope": {
- "type": "string"
+ "$ref": "#/components/schemas/UserDetailsScope"
}
}
},
@@ -507,10 +333,10 @@
"type": "object",
"properties": {
"free": {
- "oneOf": [
+ "anyOf": [
{
"type": "number",
- "format": "float"
+ "format": "double"
},
{
"type": "integer",
@@ -519,10 +345,10 @@
]
},
"quota": {
- "oneOf": [
+ "anyOf": [
{
"type": "number",
- "format": "float"
+ "format": "double"
},
{
"type": "integer",
@@ -534,10 +360,10 @@
]
},
"relative": {
- "oneOf": [
+ "anyOf": [
{
"type": "number",
- "format": "float"
+ "format": "double"
},
{
"type": "integer",
@@ -546,10 +372,10 @@
]
},
"total": {
- "oneOf": [
+ "anyOf": [
{
"type": "number",
- "format": "float"
+ "format": "double"
},
{
"type": "integer",
@@ -558,10 +384,10 @@
]
},
"used": {
- "oneOf": [
+ "anyOf": [
{
"type": "number",
- "format": "float"
+ "format": "double"
},
{
"type": "integer",
@@ -570,6 +396,18 @@
]
}
}
+ },
+ "UserDetailsScope": {
+ "type": "string",
+ "enum": [
+ "v2-private",
+ "v2-local",
+ "v2-federated",
+ "v2-published",
+ "private",
+ "contacts",
+ "public"
+ ]
}
}
},
@@ -597,7 +435,8 @@
"description": "Filter for enabled or disabled apps",
"schema": {
"type": "string",
- "nullable": true
+ "nullable": true,
+ "default": null
}
},
{
@@ -715,7 +554,11 @@
"$ref": "#/components/schemas/OCSMeta"
},
"data": {
- "$ref": "#/components/schemas/AppInfo"
+ "type": "object",
+ "additionalProperties": {
+ "type": "object",
+ "nullable": true
+ }
}
}
}
@@ -729,7 +572,7 @@
"post": {
"operationId": "apps-enable",
"summary": "Enable an app",
- "description": "This endpoint requires admin access",
+ "description": "This endpoint requires admin access\nThis endpoint requires password confirmation",
"tags": [
"apps"
],
@@ -796,7 +639,7 @@
"delete": {
"operationId": "apps-disable",
"summary": "Disable an app",
- "description": "This endpoint requires admin access",
+ "description": "This endpoint requires admin access\nThis endpoint requires password confirmation",
"tags": [
"apps"
],
@@ -937,6 +780,88 @@
}
},
"/ocs/v2.php/cloud/groups": {
+ "post": {
+ "operationId": "groups-add-group",
+ "summary": "Create a new group",
+ "description": "This endpoint requires admin access\nThis endpoint requires password confirmation",
+ "tags": [
+ "groups"
+ ],
+ "security": [
+ {
+ "bearer_auth": []
+ },
+ {
+ "basic_auth": []
+ }
+ ],
+ "requestBody": {
+ "required": true,
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "required": [
+ "groupid"
+ ],
+ "properties": {
+ "groupid": {
+ "type": "string",
+ "description": "ID of the group"
+ },
+ "displayname": {
+ "type": "string",
+ "default": "",
+ "description": "Display name of the group"
+ }
+ }
+ }
+ }
+ }
+ },
+ "parameters": [
+ {
+ "name": "OCS-APIRequest",
+ "in": "header",
+ "description": "Required to be true for the API request to pass",
+ "required": true,
+ "schema": {
+ "type": "boolean",
+ "default": true
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Group created successfully",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "required": [
+ "ocs"
+ ],
+ "properties": {
+ "ocs": {
+ "type": "object",
+ "required": [
+ "meta",
+ "data"
+ ],
+ "properties": {
+ "meta": {
+ "$ref": "#/components/schemas/OCSMeta"
+ },
+ "data": {}
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ },
"get": {
"operationId": "groups-get-groups",
"summary": "Get a list of groups",
@@ -968,7 +893,8 @@
"schema": {
"type": "integer",
"format": "int64",
- "nullable": true
+ "nullable": true,
+ "default": null
}
},
{
@@ -1038,6 +964,166 @@
}
},
"/ocs/v2.php/cloud/groups/{groupId}": {
+ "put": {
+ "operationId": "groups-update-group",
+ "summary": "Update a group",
+ "description": "This endpoint requires admin access\nThis endpoint requires password confirmation",
+ "tags": [
+ "groups"
+ ],
+ "security": [
+ {
+ "bearer_auth": []
+ },
+ {
+ "basic_auth": []
+ }
+ ],
+ "requestBody": {
+ "required": true,
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "required": [
+ "key",
+ "value"
+ ],
+ "properties": {
+ "key": {
+ "type": "string",
+ "description": "Key to update, only 'displayname'"
+ },
+ "value": {
+ "type": "string",
+ "description": "New value for the key"
+ }
+ }
+ }
+ }
+ }
+ },
+ "parameters": [
+ {
+ "name": "groupId",
+ "in": "path",
+ "description": "ID of the group",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "pattern": "^.+$"
+ }
+ },
+ {
+ "name": "OCS-APIRequest",
+ "in": "header",
+ "description": "Required to be true for the API request to pass",
+ "required": true,
+ "schema": {
+ "type": "boolean",
+ "default": true
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Group updated successfully",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "required": [
+ "ocs"
+ ],
+ "properties": {
+ "ocs": {
+ "type": "object",
+ "required": [
+ "meta",
+ "data"
+ ],
+ "properties": {
+ "meta": {
+ "$ref": "#/components/schemas/OCSMeta"
+ },
+ "data": {}
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "delete": {
+ "operationId": "groups-delete-group",
+ "summary": "Delete a group",
+ "description": "This endpoint requires admin access\nThis endpoint requires password confirmation",
+ "tags": [
+ "groups"
+ ],
+ "security": [
+ {
+ "bearer_auth": []
+ },
+ {
+ "basic_auth": []
+ }
+ ],
+ "parameters": [
+ {
+ "name": "groupId",
+ "in": "path",
+ "description": "ID of the group",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "pattern": "^.+$"
+ }
+ },
+ {
+ "name": "OCS-APIRequest",
+ "in": "header",
+ "description": "Required to be true for the API request to pass",
+ "required": true,
+ "schema": {
+ "type": "boolean",
+ "default": true
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Group deleted successfully",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "required": [
+ "ocs"
+ ],
+ "properties": {
+ "ocs": {
+ "type": "object",
+ "required": [
+ "meta",
+ "data"
+ ],
+ "properties": {
+ "meta": {
+ "$ref": "#/components/schemas/OCSMeta"
+ },
+ "data": {}
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ },
"get": {
"operationId": "groups-get-group",
"summary": "Get a list of users in the specified group",
@@ -1120,6 +1206,124 @@
}
}
},
+ "/ocs/v2.php/cloud/users/recent": {
+ "get": {
+ "operationId": "users-get-last-logged-in-users",
+ "summary": "Gets the list of users sorted by lastLogin, from most recent to least recent",
+ "description": "This endpoint requires admin access",
+ "tags": [
+ "users"
+ ],
+ "security": [
+ {
+ "bearer_auth": []
+ },
+ {
+ "basic_auth": []
+ }
+ ],
+ "parameters": [
+ {
+ "name": "search",
+ "in": "query",
+ "description": "Text to search for",
+ "schema": {
+ "type": "string",
+ "default": ""
+ }
+ },
+ {
+ "name": "limit",
+ "in": "query",
+ "description": "Limit the amount of users returned",
+ "schema": {
+ "type": "integer",
+ "format": "int64",
+ "nullable": true,
+ "default": null
+ }
+ },
+ {
+ "name": "offset",
+ "in": "query",
+ "description": "Offset",
+ "schema": {
+ "type": "integer",
+ "format": "int64",
+ "default": 0
+ }
+ },
+ {
+ "name": "OCS-APIRequest",
+ "in": "header",
+ "description": "Required to be true for the API request to pass",
+ "required": true,
+ "schema": {
+ "type": "boolean",
+ "default": true
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Users details returned based on last logged in information",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "required": [
+ "ocs"
+ ],
+ "properties": {
+ "ocs": {
+ "type": "object",
+ "required": [
+ "meta",
+ "data"
+ ],
+ "properties": {
+ "meta": {
+ "$ref": "#/components/schemas/OCSMeta"
+ },
+ "data": {
+ "type": "object",
+ "required": [
+ "users"
+ ],
+ "properties": {
+ "users": {
+ "type": "object",
+ "additionalProperties": {
+ "anyOf": [
+ {
+ "$ref": "#/components/schemas/UserDetails"
+ },
+ {
+ "type": "object",
+ "required": [
+ "id"
+ ],
+ "properties": {
+ "id": {
+ "type": "string"
+ }
+ }
+ }
+ ]
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ },
"/ocs/v2.php/cloud/users/{userId}/subadmins": {
"get": {
"operationId": "users-get-user-sub-admin-groups",
@@ -1196,7 +1400,7 @@
"post": {
"operationId": "users-add-sub-admin",
"summary": "Make a user a subadmin of a group",
- "description": "This endpoint requires admin access",
+ "description": "This endpoint requires admin access\nThis endpoint requires password confirmation",
"tags": [
"users"
],
@@ -1208,16 +1412,26 @@
"basic_auth": []
}
],
- "parameters": [
- {
- "name": "groupid",
- "in": "query",
- "description": "ID of the group",
- "required": true,
- "schema": {
- "type": "string"
+ "requestBody": {
+ "required": true,
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "required": [
+ "groupid"
+ ],
+ "properties": {
+ "groupid": {
+ "type": "string",
+ "description": "ID of the group"
+ }
+ }
+ }
}
- },
+ }
+ },
+ "parameters": [
{
"name": "userId",
"in": "path",
@@ -1272,7 +1486,7 @@
"delete": {
"operationId": "users-remove-sub-admin",
"summary": "Remove a user from the subadmins of a group",
- "description": "This endpoint requires admin access",
+ "description": "This endpoint requires admin access\nThis endpoint requires password confirmation",
"tags": [
"users"
],
@@ -1286,18 +1500,18 @@
],
"parameters": [
{
- "name": "groupid",
- "in": "query",
- "description": "ID of the group",
+ "name": "userId",
+ "in": "path",
+ "description": "ID of the user",
"required": true,
"schema": {
"type": "string"
}
},
{
- "name": "userId",
- "in": "path",
- "description": "ID of the user",
+ "name": "groupid",
+ "in": "query",
+ "description": "ID of the group",
"required": true,
"schema": {
"type": "string"
@@ -1548,9 +1762,10 @@
}
},
"/ocs/v2.php/apps/provisioning_api/api/v1/config/apps/{app}/{key}": {
- "post": {
- "operationId": "app_config-set-value",
- "summary": "Update the config value of an app",
+ "get": {
+ "operationId": "app_config-get-value",
+ "summary": "Get a the config value of an app",
+ "description": "This endpoint requires admin access",
"tags": [
"app_config"
],
@@ -1564,15 +1779,288 @@
],
"parameters": [
{
- "name": "value",
+ "name": "app",
+ "in": "path",
+ "description": "ID of the app",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "name": "key",
+ "in": "path",
+ "description": "Key",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "name": "defaultValue",
"in": "query",
- "description": "New value for the key",
+ "description": "Default returned value if the value is empty",
+ "schema": {
+ "type": "string",
+ "default": ""
+ }
+ },
+ {
+ "name": "OCS-APIRequest",
+ "in": "header",
+ "description": "Required to be true for the API request to pass",
+ "required": true,
+ "schema": {
+ "type": "boolean",
+ "default": true
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Value returned",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "required": [
+ "ocs"
+ ],
+ "properties": {
+ "ocs": {
+ "type": "object",
+ "required": [
+ "meta",
+ "data"
+ ],
+ "properties": {
+ "meta": {
+ "$ref": "#/components/schemas/OCSMeta"
+ },
+ "data": {
+ "type": "object",
+ "required": [
+ "data"
+ ],
+ "properties": {
+ "data": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "403": {
+ "description": "App is not allowed",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "required": [
+ "ocs"
+ ],
+ "properties": {
+ "ocs": {
+ "type": "object",
+ "required": [
+ "meta",
+ "data"
+ ],
+ "properties": {
+ "meta": {
+ "$ref": "#/components/schemas/OCSMeta"
+ },
+ "data": {
+ "type": "object",
+ "required": [
+ "data"
+ ],
+ "properties": {
+ "data": {
+ "type": "object",
+ "required": [
+ "message"
+ ],
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "delete": {
+ "operationId": "app_config-delete-key",
+ "summary": "Delete a config key of an app",
+ "description": "This endpoint requires admin access\nThis endpoint requires password confirmation",
+ "tags": [
+ "app_config"
+ ],
+ "security": [
+ {
+ "bearer_auth": []
+ },
+ {
+ "basic_auth": []
+ }
+ ],
+ "parameters": [
+ {
+ "name": "app",
+ "in": "path",
+ "description": "ID of the app",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "name": "key",
+ "in": "path",
+ "description": "Key to delete",
"required": true,
"schema": {
"type": "string"
}
},
{
+ "name": "OCS-APIRequest",
+ "in": "header",
+ "description": "Required to be true for the API request to pass",
+ "required": true,
+ "schema": {
+ "type": "boolean",
+ "default": true
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Key deleted successfully",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "required": [
+ "ocs"
+ ],
+ "properties": {
+ "ocs": {
+ "type": "object",
+ "required": [
+ "meta",
+ "data"
+ ],
+ "properties": {
+ "meta": {
+ "$ref": "#/components/schemas/OCSMeta"
+ },
+ "data": {}
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "403": {
+ "description": "App or key is not allowed",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "required": [
+ "ocs"
+ ],
+ "properties": {
+ "ocs": {
+ "type": "object",
+ "required": [
+ "meta",
+ "data"
+ ],
+ "properties": {
+ "meta": {
+ "$ref": "#/components/schemas/OCSMeta"
+ },
+ "data": {
+ "type": "object",
+ "required": [
+ "data"
+ ],
+ "properties": {
+ "data": {
+ "type": "object",
+ "required": [
+ "message"
+ ],
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "post": {
+ "operationId": "app_config-set-value",
+ "summary": "Update the config value of an app",
+ "description": "This endpoint requires password confirmation",
+ "tags": [
+ "app_config"
+ ],
+ "security": [
+ {
+ "bearer_auth": []
+ },
+ {
+ "basic_auth": []
+ }
+ ],
+ "requestBody": {
+ "required": true,
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "required": [
+ "value"
+ ],
+ "properties": {
+ "value": {
+ "type": "string",
+ "description": "New value for the key"
+ }
+ }
+ }
+ }
+ }
+ },
+ "parameters": [
+ {
"name": "app",
"in": "path",
"description": "ID of the app",
@@ -1711,7 +2199,8 @@
"schema": {
"type": "integer",
"format": "int64",
- "nullable": true
+ "nullable": true,
+ "default": null
}
},
{
@@ -1862,9 +2351,27 @@
"404": {
"description": "Group not found",
"content": {
- "text/plain": {
+ "application/json": {
"schema": {
- "type": "string"
+ "type": "object",
+ "required": [
+ "ocs"
+ ],
+ "properties": {
+ "ocs": {
+ "type": "object",
+ "required": [
+ "meta",
+ "data"
+ ],
+ "properties": {
+ "meta": {
+ "$ref": "#/components/schemas/OCSMeta"
+ },
+ "data": {}
+ }
+ }
+ }
}
}
}
@@ -1872,9 +2379,27 @@
"403": {
"description": "Missing permissions to get users in the group",
"content": {
- "text/plain": {
+ "application/json": {
"schema": {
- "type": "string"
+ "type": "object",
+ "required": [
+ "ocs"
+ ],
+ "properties": {
+ "ocs": {
+ "type": "object",
+ "required": [
+ "meta",
+ "data"
+ ],
+ "properties": {
+ "meta": {
+ "$ref": "#/components/schemas/OCSMeta"
+ },
+ "data": {}
+ }
+ }
+ }
}
}
}
@@ -1899,6 +2424,16 @@
],
"parameters": [
{
+ "name": "groupId",
+ "in": "path",
+ "description": "ID of the group",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "pattern": "^.+$"
+ }
+ },
+ {
"name": "search",
"in": "query",
"description": "Text to search for",
@@ -1914,7 +2449,8 @@
"schema": {
"type": "integer",
"format": "int64",
- "nullable": true
+ "nullable": true,
+ "default": null
}
},
{
@@ -1928,16 +2464,6 @@
}
},
{
- "name": "groupId",
- "in": "path",
- "description": "ID of the group",
- "required": true,
- "schema": {
- "type": "string",
- "pattern": "^.+$"
- }
- },
- {
"name": "OCS-APIRequest",
"in": "header",
"description": "Required to be true for the API request to pass",
@@ -1978,7 +2504,7 @@
"users": {
"type": "object",
"additionalProperties": {
- "oneOf": [
+ "anyOf": [
{
"$ref": "#/components/schemas/UserDetails"
},
@@ -2040,7 +2566,8 @@
"schema": {
"type": "integer",
"format": "int64",
- "nullable": true
+ "nullable": true,
+ "default": null
}
},
{
@@ -2111,6 +2638,7 @@
"post": {
"operationId": "users-add-user",
"summary": "Create a new user",
+ "description": "This endpoint requires password confirmation",
"tags": [
"users"
],
@@ -2122,94 +2650,73 @@
"basic_auth": []
}
],
- "parameters": [
- {
- "name": "userid",
- "in": "query",
- "description": "ID of the user",
- "required": true,
- "schema": {
- "type": "string"
- }
- },
- {
- "name": "password",
- "in": "query",
- "description": "Password of the user",
- "schema": {
- "type": "string",
- "default": ""
- }
- },
- {
- "name": "displayName",
- "in": "query",
- "description": "Display name of the user",
- "schema": {
- "type": "string",
- "default": ""
- }
- },
- {
- "name": "email",
- "in": "query",
- "description": "Email of the user",
- "schema": {
- "type": "string",
- "default": ""
- }
- },
- {
- "name": "groups[]",
- "in": "query",
- "description": "Groups of the user",
- "schema": {
- "type": "array",
- "default": [],
- "items": {
- "type": "string"
- }
- }
- },
- {
- "name": "subadmin[]",
- "in": "query",
- "description": "Groups where the user is subadmin",
- "schema": {
- "type": "array",
- "default": [],
- "items": {
- "type": "string"
+ "requestBody": {
+ "required": true,
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "required": [
+ "userid"
+ ],
+ "properties": {
+ "userid": {
+ "type": "string",
+ "description": "ID of the user"
+ },
+ "password": {
+ "type": "string",
+ "default": "",
+ "description": "Password of the user"
+ },
+ "displayName": {
+ "type": "string",
+ "default": "",
+ "description": "Display name of the user"
+ },
+ "email": {
+ "type": "string",
+ "default": "",
+ "description": "Email of the user"
+ },
+ "groups": {
+ "type": "array",
+ "default": [],
+ "description": "Groups of the user",
+ "items": {
+ "type": "string"
+ }
+ },
+ "subadmin": {
+ "type": "array",
+ "default": [],
+ "description": "Groups where the user is subadmin",
+ "items": {
+ "type": "string"
+ }
+ },
+ "quota": {
+ "type": "string",
+ "default": "",
+ "description": "Quota of the user"
+ },
+ "language": {
+ "type": "string",
+ "default": "",
+ "description": "Language of the user"
+ },
+ "manager": {
+ "type": "string",
+ "nullable": true,
+ "default": null,
+ "description": "Manager of the user"
+ }
+ }
}
}
- },
- {
- "name": "quota",
- "in": "query",
- "description": "Quota of the user",
- "schema": {
- "type": "string",
- "default": ""
- }
- },
- {
- "name": "language",
- "in": "query",
- "description": "Language of the user",
- "schema": {
- "type": "string",
- "default": ""
- }
- },
- {
- "name": "manager",
- "in": "query",
- "description": "Manager of the user",
- "schema": {
- "type": "string",
- "nullable": true
- }
- },
+ }
+ },
+ "parameters": [
{
"name": "OCS-APIRequest",
"in": "header",
@@ -2263,9 +2770,27 @@
"403": {
"description": "Missing permissions to make user subadmin",
"content": {
- "text/plain": {
+ "application/json": {
"schema": {
- "type": "string"
+ "type": "object",
+ "required": [
+ "ocs"
+ ],
+ "properties": {
+ "ocs": {
+ "type": "object",
+ "required": [
+ "meta",
+ "data"
+ ],
+ "properties": {
+ "meta": {
+ "$ref": "#/components/schemas/OCSMeta"
+ },
+ "data": {}
+ }
+ }
+ }
}
}
}
@@ -2305,7 +2830,8 @@
"schema": {
"type": "integer",
"format": "int64",
- "nullable": true
+ "nullable": true,
+ "default": null
}
},
{
@@ -2359,7 +2885,7 @@
"users": {
"type": "object",
"additionalProperties": {
- "oneOf": [
+ "anyOf": [
{
"$ref": "#/components/schemas/UserDetails"
},
@@ -2406,13 +2932,23 @@
],
"parameters": [
{
+ "name": "search",
+ "in": "query",
+ "description": "Text to search for",
+ "schema": {
+ "type": "string",
+ "default": ""
+ }
+ },
+ {
"name": "limit",
"in": "query",
"description": "Limit the amount of users returned",
"schema": {
"type": "integer",
"format": "int64",
- "nullable": true
+ "nullable": true,
+ "default": null
}
},
{
@@ -2466,7 +3002,7 @@
"users": {
"type": "object",
"additionalProperties": {
- "oneOf": [
+ "anyOf": [
{
"$ref": "#/components/schemas/UserDetails"
},
@@ -2511,25 +3047,37 @@
"basic_auth": []
}
],
- "parameters": [
- {
- "name": "location",
- "in": "query",
- "description": "Location of the phone number (for country code)",
- "required": true,
- "schema": {
- "type": "string"
- }
- },
- {
- "name": "search",
- "in": "query",
- "description": "Phone numbers to search for",
- "required": true,
- "schema": {
- "type": "string"
+ "requestBody": {
+ "required": true,
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "required": [
+ "location",
+ "search"
+ ],
+ "properties": {
+ "location": {
+ "type": "string",
+ "description": "Location of the phone number (for country code)"
+ },
+ "search": {
+ "type": "object",
+ "description": "Phone numbers to search for",
+ "additionalProperties": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ }
}
- },
+ }
+ },
+ "parameters": [
{
"name": "OCS-APIRequest",
"in": "header",
@@ -2678,6 +3226,7 @@
"put": {
"operationId": "users-edit-user",
"summary": "Update a value of the user's details",
+ "description": "This endpoint requires password confirmation",
"tags": [
"users"
],
@@ -2689,25 +3238,31 @@
"basic_auth": []
}
],
- "parameters": [
- {
- "name": "key",
- "in": "query",
- "description": "Key that will be updated",
- "required": true,
- "schema": {
- "type": "string"
- }
- },
- {
- "name": "value",
- "in": "query",
- "description": "New value for the key",
- "required": true,
- "schema": {
- "type": "string"
+ "requestBody": {
+ "required": true,
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "required": [
+ "key",
+ "value"
+ ],
+ "properties": {
+ "key": {
+ "type": "string",
+ "description": "Key that will be updated"
+ },
+ "value": {
+ "type": "string",
+ "description": "New value for the key"
+ }
+ }
+ }
}
- },
+ }
+ },
+ "parameters": [
{
"name": "userId",
"in": "path",
@@ -2762,6 +3317,7 @@
"delete": {
"operationId": "users-delete-user",
"summary": "Delete a user",
+ "description": "This endpoint requires password confirmation",
"tags": [
"users"
],
@@ -3024,10 +3580,10 @@
}
}
},
- "/ocs/v2.php/cloud/users/{userId}/{collectionName}": {
- "put": {
- "operationId": "users-edit-user-multi-value",
- "summary": "Update multiple values of the user's details",
+ "/ocs/v2.php/cloud/user/apps": {
+ "get": {
+ "operationId": "users-get-enabled-apps",
+ "summary": "Get a list of enabled apps for the current user",
"tags": [
"users"
],
@@ -3041,23 +3597,102 @@
],
"parameters": [
{
- "name": "key",
- "in": "query",
- "description": "Key that will be updated",
+ "name": "OCS-APIRequest",
+ "in": "header",
+ "description": "Required to be true for the API request to pass",
"required": true,
"schema": {
- "type": "string"
+ "type": "boolean",
+ "default": true
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Enabled apps returned",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "required": [
+ "ocs"
+ ],
+ "properties": {
+ "ocs": {
+ "type": "object",
+ "required": [
+ "meta",
+ "data"
+ ],
+ "properties": {
+ "meta": {
+ "$ref": "#/components/schemas/OCSMeta"
+ },
+ "data": {
+ "type": "object",
+ "required": [
+ "apps"
+ ],
+ "properties": {
+ "apps": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
}
+ }
+ }
+ }
+ },
+ "/ocs/v2.php/cloud/users/{userId}/{collectionName}": {
+ "put": {
+ "operationId": "users-edit-user-multi-value",
+ "summary": "Update multiple values of the user's details",
+ "description": "This endpoint requires password confirmation",
+ "tags": [
+ "users"
+ ],
+ "security": [
+ {
+ "bearer_auth": []
},
{
- "name": "value",
- "in": "query",
- "description": "New value for the key",
- "required": true,
- "schema": {
- "type": "string"
+ "basic_auth": []
+ }
+ ],
+ "requestBody": {
+ "required": true,
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "required": [
+ "key",
+ "value"
+ ],
+ "properties": {
+ "key": {
+ "type": "string",
+ "description": "Key that will be updated"
+ },
+ "value": {
+ "type": "string",
+ "description": "New value for the key"
+ }
+ }
+ }
}
- },
+ }
+ },
+ "parameters": [
{
"name": "userId",
"in": "path",
@@ -3124,6 +3759,7 @@
"post": {
"operationId": "users-wipe-user-devices",
"summary": "Wipe all devices of a user",
+ "description": "This endpoint requires password confirmation",
"tags": [
"users"
],
@@ -3192,6 +3828,7 @@
"put": {
"operationId": "users-enable-user",
"summary": "Enable a user",
+ "description": "This endpoint requires password confirmation",
"tags": [
"users"
],
@@ -3260,6 +3897,7 @@
"put": {
"operationId": "users-disable-user",
"summary": "Disable a user",
+ "description": "This endpoint requires password confirmation",
"tags": [
"users"
],
@@ -3407,6 +4045,7 @@
"post": {
"operationId": "users-add-to-group",
"summary": "Add a user to a group",
+ "description": "This endpoint requires password confirmation",
"tags": [
"users"
],
@@ -3418,16 +4057,24 @@
"basic_auth": []
}
],
- "parameters": [
- {
- "name": "groupid",
- "in": "query",
- "description": "ID of the group",
- "schema": {
- "type": "string",
- "default": ""
+ "requestBody": {
+ "required": false,
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "groupid": {
+ "type": "string",
+ "default": "",
+ "description": "ID of the group"
+ }
+ }
+ }
}
- },
+ }
+ },
+ "parameters": [
{
"name": "userId",
"in": "path",
@@ -3482,6 +4129,7 @@
"delete": {
"operationId": "users-remove-from-group",
"summary": "Remove a user from a group",
+ "description": "This endpoint requires password confirmation",
"tags": [
"users"
],
@@ -3495,6 +4143,15 @@
],
"parameters": [
{
+ "name": "userId",
+ "in": "path",
+ "description": "ID of the user",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
"name": "groupid",
"in": "query",
"description": "ID of the group",
@@ -3504,6 +4161,146 @@
}
},
{
+ "name": "OCS-APIRequest",
+ "in": "header",
+ "description": "Required to be true for the API request to pass",
+ "required": true,
+ "schema": {
+ "type": "boolean",
+ "default": true
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "User removed from group successfully",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "required": [
+ "ocs"
+ ],
+ "properties": {
+ "ocs": {
+ "type": "object",
+ "required": [
+ "meta",
+ "data"
+ ],
+ "properties": {
+ "meta": {
+ "$ref": "#/components/schemas/OCSMeta"
+ },
+ "data": {}
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/ocs/v2.php/cloud/users/{userId}/groups/details": {
+ "get": {
+ "operationId": "users-get-users-groups-details",
+ "summary": "Get a list of groups with details",
+ "tags": [
+ "users"
+ ],
+ "security": [
+ {
+ "bearer_auth": []
+ },
+ {
+ "basic_auth": []
+ }
+ ],
+ "parameters": [
+ {
+ "name": "userId",
+ "in": "path",
+ "description": "ID of the user",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "name": "OCS-APIRequest",
+ "in": "header",
+ "description": "Required to be true for the API request to pass",
+ "required": true,
+ "schema": {
+ "type": "boolean",
+ "default": true
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Users groups returned",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "required": [
+ "ocs"
+ ],
+ "properties": {
+ "ocs": {
+ "type": "object",
+ "required": [
+ "meta",
+ "data"
+ ],
+ "properties": {
+ "meta": {
+ "$ref": "#/components/schemas/OCSMeta"
+ },
+ "data": {
+ "type": "object",
+ "required": [
+ "groups"
+ ],
+ "properties": {
+ "groups": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/GroupDetails"
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/ocs/v2.php/cloud/users/{userId}/subadmins/details": {
+ "get": {
+ "operationId": "users-get-user-sub-admin-groups-details",
+ "summary": "Get a list of the groups the user is a subadmin of, with details",
+ "tags": [
+ "users"
+ ],
+ "security": [
+ {
+ "bearer_auth": []
+ },
+ {
+ "basic_auth": []
+ }
+ ],
+ "parameters": [
+ {
"name": "userId",
"in": "path",
"description": "ID of the user",
@@ -3525,7 +4322,7 @@
],
"responses": {
"200": {
- "description": "User removed from group successfully",
+ "description": "Users subadmin groups returned",
"content": {
"application/json": {
"schema": {
@@ -3544,7 +4341,20 @@
"meta": {
"$ref": "#/components/schemas/OCSMeta"
},
- "data": {}
+ "data": {
+ "type": "object",
+ "required": [
+ "groups"
+ ],
+ "properties": {
+ "groups": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/GroupDetails"
+ }
+ }
+ }
+ }
}
}
}
@@ -3559,6 +4369,7 @@
"post": {
"operationId": "users-resend-welcome-message",
"summary": "Resend the welcome message",
+ "description": "This endpoint requires password confirmation",
"tags": [
"users"
],
@@ -3638,16 +4449,26 @@
"basic_auth": []
}
],
- "parameters": [
- {
- "name": "configValue",
- "in": "query",
- "description": "New value",
- "required": true,
- "schema": {
- "type": "string"
+ "requestBody": {
+ "required": true,
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "required": [
+ "configValue"
+ ],
+ "properties": {
+ "configValue": {
+ "type": "string",
+ "description": "New value"
+ }
+ }
+ }
}
- },
+ }
+ },
+ "parameters": [
{
"name": "appId",
"in": "path",
@@ -3855,16 +4676,29 @@
"basic_auth": []
}
],
- "parameters": [
- {
- "name": "configs",
- "in": "query",
- "description": "Key-value pairs of the preferences",
- "required": true,
- "schema": {
- "type": "string"
+ "requestBody": {
+ "required": true,
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "required": [
+ "configs"
+ ],
+ "properties": {
+ "configs": {
+ "type": "object",
+ "description": "Key-value pairs of the preferences",
+ "additionalProperties": {
+ "type": "string"
+ }
+ }
+ }
+ }
}
- },
+ }
+ },
+ "parameters": [
{
"name": "appId",
"in": "path",
@@ -3960,6 +4794,15 @@
],
"parameters": [
{
+ "name": "appId",
+ "in": "path",
+ "description": "ID of the app",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
"name": "configKeys[]",
"in": "query",
"description": "Keys to delete",
@@ -3972,15 +4815,6 @@
}
},
{
- "name": "appId",
- "in": "path",
- "description": "ID of the app",
- "required": true,
- "schema": {
- "type": "string"
- }
- },
- {
"name": "OCS-APIRequest",
"in": "header",
"description": "Required to be true for the API request to pass",
@@ -4053,4 +4887,4 @@
}
},
"tags": []
-} \ No newline at end of file
+}
diff --git a/apps/provisioning_api/openapi-full.json.license b/apps/provisioning_api/openapi-full.json.license
new file mode 100644
index 00000000000..5dcb9c9e84b
--- /dev/null
+++ b/apps/provisioning_api/openapi-full.json.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors
+SPDX-License-Identifier: AGPL-3.0-or-later \ No newline at end of file
diff --git a/apps/provisioning_api/openapi.json b/apps/provisioning_api/openapi.json
index e26adfc2d0a..cec2f7f86f1 100644
--- a/apps/provisioning_api/openapi.json
+++ b/apps/provisioning_api/openapi.json
@@ -3,7 +3,7 @@
"info": {
"title": "provisioning_api",
"version": "0.0.1",
- "description": "This application enables a set of APIs that external systems can use to manage users, groups and apps.",
+ "description": "This application enables a set of APIs that external systems can use to manage accounts, groups and apps.",
"license": {
"name": "agpl"
}
@@ -139,6 +139,8 @@
"headline",
"id",
"language",
+ "firstLoginTimestamp",
+ "lastLoginTimestamp",
"lastLogin",
"locale",
"manager",
@@ -146,10 +148,12 @@
"organisation",
"phone",
"profile_enabled",
+ "pronouns",
"quota",
"role",
"subadmin",
"twitter",
+ "bluesky",
"website"
],
"properties": {
@@ -162,17 +166,17 @@
"additional_mailScope": {
"type": "array",
"items": {
- "type": "string"
+ "$ref": "#/components/schemas/UserDetailsScope"
}
},
"address": {
"type": "string"
},
"addressScope": {
- "type": "string"
+ "$ref": "#/components/schemas/UserDetailsScope"
},
"avatarScope": {
- "type": "string"
+ "$ref": "#/components/schemas/UserDetailsScope"
},
"backend": {
"type": "string"
@@ -196,7 +200,7 @@
"type": "string"
},
"biographyScope": {
- "type": "string"
+ "$ref": "#/components/schemas/UserDetailsScope"
},
"display-name": {
"type": "string"
@@ -205,14 +209,14 @@
"type": "string"
},
"displaynameScope": {
- "type": "string"
+ "$ref": "#/components/schemas/UserDetailsScope"
},
"email": {
"type": "string",
"nullable": true
},
"emailScope": {
- "type": "string"
+ "$ref": "#/components/schemas/UserDetailsScope"
},
"enabled": {
"type": "boolean"
@@ -221,7 +225,7 @@
"type": "string"
},
"fediverseScope": {
- "type": "string"
+ "$ref": "#/components/schemas/UserDetailsScope"
},
"groups": {
"type": "array",
@@ -233,7 +237,7 @@
"type": "string"
},
"headlineScope": {
- "type": "string"
+ "$ref": "#/components/schemas/UserDetailsScope"
},
"id": {
"type": "string"
@@ -241,6 +245,14 @@
"language": {
"type": "string"
},
+ "firstLoginTimestamp": {
+ "type": "integer",
+ "format": "int64"
+ },
+ "lastLoginTimestamp": {
+ "type": "integer",
+ "format": "int64"
+ },
"lastLogin": {
"type": "integer",
"format": "int64"
@@ -259,20 +271,26 @@
"type": "string"
},
"organisationScope": {
- "type": "string"
+ "$ref": "#/components/schemas/UserDetailsScope"
},
"phone": {
"type": "string"
},
"phoneScope": {
- "type": "string"
+ "$ref": "#/components/schemas/UserDetailsScope"
},
"profile_enabled": {
"type": "string"
},
"profile_enabledScope": {
+ "$ref": "#/components/schemas/UserDetailsScope"
+ },
+ "pronouns": {
"type": "string"
},
+ "pronounsScope": {
+ "$ref": "#/components/schemas/UserDetailsScope"
+ },
"quota": {
"$ref": "#/components/schemas/UserDetailsQuota"
},
@@ -280,7 +298,7 @@
"type": "string"
},
"roleScope": {
- "type": "string"
+ "$ref": "#/components/schemas/UserDetailsScope"
},
"storageLocation": {
"type": "string"
@@ -295,13 +313,19 @@
"type": "string"
},
"twitterScope": {
+ "$ref": "#/components/schemas/UserDetailsScope"
+ },
+ "bluesky": {
"type": "string"
},
+ "blueskyScope": {
+ "$ref": "#/components/schemas/UserDetailsScope"
+ },
"website": {
"type": "string"
},
"websiteScope": {
- "type": "string"
+ "$ref": "#/components/schemas/UserDetailsScope"
}
}
},
@@ -309,10 +333,10 @@
"type": "object",
"properties": {
"free": {
- "oneOf": [
+ "anyOf": [
{
"type": "number",
- "format": "float"
+ "format": "double"
},
{
"type": "integer",
@@ -321,10 +345,10 @@
]
},
"quota": {
- "oneOf": [
+ "anyOf": [
{
"type": "number",
- "format": "float"
+ "format": "double"
},
{
"type": "integer",
@@ -336,10 +360,10 @@
]
},
"relative": {
- "oneOf": [
+ "anyOf": [
{
"type": "number",
- "format": "float"
+ "format": "double"
},
{
"type": "integer",
@@ -348,10 +372,10 @@
]
},
"total": {
- "oneOf": [
+ "anyOf": [
{
"type": "number",
- "format": "float"
+ "format": "double"
},
{
"type": "integer",
@@ -360,10 +384,10 @@
]
},
"used": {
- "oneOf": [
+ "anyOf": [
{
"type": "number",
- "format": "float"
+ "format": "double"
},
{
"type": "integer",
@@ -372,6 +396,18 @@
]
}
}
+ },
+ "UserDetailsScope": {
+ "type": "string",
+ "enum": [
+ "v2-private",
+ "v2-local",
+ "v2-federated",
+ "v2-published",
+ "private",
+ "contacts",
+ "public"
+ ]
}
}
},
@@ -408,7 +444,8 @@
"schema": {
"type": "integer",
"format": "int64",
- "nullable": true
+ "nullable": true,
+ "default": null
}
},
{
@@ -509,7 +546,8 @@
"schema": {
"type": "integer",
"format": "int64",
- "nullable": true
+ "nullable": true,
+ "default": null
}
},
{
@@ -660,9 +698,27 @@
"404": {
"description": "Group not found",
"content": {
- "text/plain": {
+ "application/json": {
"schema": {
- "type": "string"
+ "type": "object",
+ "required": [
+ "ocs"
+ ],
+ "properties": {
+ "ocs": {
+ "type": "object",
+ "required": [
+ "meta",
+ "data"
+ ],
+ "properties": {
+ "meta": {
+ "$ref": "#/components/schemas/OCSMeta"
+ },
+ "data": {}
+ }
+ }
+ }
}
}
}
@@ -670,9 +726,27 @@
"403": {
"description": "Missing permissions to get users in the group",
"content": {
- "text/plain": {
+ "application/json": {
"schema": {
- "type": "string"
+ "type": "object",
+ "required": [
+ "ocs"
+ ],
+ "properties": {
+ "ocs": {
+ "type": "object",
+ "required": [
+ "meta",
+ "data"
+ ],
+ "properties": {
+ "meta": {
+ "$ref": "#/components/schemas/OCSMeta"
+ },
+ "data": {}
+ }
+ }
+ }
}
}
}
@@ -697,6 +771,16 @@
],
"parameters": [
{
+ "name": "groupId",
+ "in": "path",
+ "description": "ID of the group",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "pattern": "^.+$"
+ }
+ },
+ {
"name": "search",
"in": "query",
"description": "Text to search for",
@@ -712,7 +796,8 @@
"schema": {
"type": "integer",
"format": "int64",
- "nullable": true
+ "nullable": true,
+ "default": null
}
},
{
@@ -726,16 +811,6 @@
}
},
{
- "name": "groupId",
- "in": "path",
- "description": "ID of the group",
- "required": true,
- "schema": {
- "type": "string",
- "pattern": "^.+$"
- }
- },
- {
"name": "OCS-APIRequest",
"in": "header",
"description": "Required to be true for the API request to pass",
@@ -776,7 +851,7 @@
"users": {
"type": "object",
"additionalProperties": {
- "oneOf": [
+ "anyOf": [
{
"$ref": "#/components/schemas/UserDetails"
},
@@ -921,7 +996,8 @@
"schema": {
"type": "integer",
"format": "int64",
- "nullable": true
+ "nullable": true,
+ "default": null
}
},
{
@@ -992,6 +1068,7 @@
"post": {
"operationId": "users-add-user",
"summary": "Create a new user",
+ "description": "This endpoint requires password confirmation",
"tags": [
"users"
],
@@ -1003,94 +1080,73 @@
"basic_auth": []
}
],
- "parameters": [
- {
- "name": "userid",
- "in": "query",
- "description": "ID of the user",
- "required": true,
- "schema": {
- "type": "string"
- }
- },
- {
- "name": "password",
- "in": "query",
- "description": "Password of the user",
- "schema": {
- "type": "string",
- "default": ""
- }
- },
- {
- "name": "displayName",
- "in": "query",
- "description": "Display name of the user",
- "schema": {
- "type": "string",
- "default": ""
- }
- },
- {
- "name": "email",
- "in": "query",
- "description": "Email of the user",
- "schema": {
- "type": "string",
- "default": ""
- }
- },
- {
- "name": "groups[]",
- "in": "query",
- "description": "Groups of the user",
- "schema": {
- "type": "array",
- "default": [],
- "items": {
- "type": "string"
- }
- }
- },
- {
- "name": "subadmin[]",
- "in": "query",
- "description": "Groups where the user is subadmin",
- "schema": {
- "type": "array",
- "default": [],
- "items": {
- "type": "string"
+ "requestBody": {
+ "required": true,
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "required": [
+ "userid"
+ ],
+ "properties": {
+ "userid": {
+ "type": "string",
+ "description": "ID of the user"
+ },
+ "password": {
+ "type": "string",
+ "default": "",
+ "description": "Password of the user"
+ },
+ "displayName": {
+ "type": "string",
+ "default": "",
+ "description": "Display name of the user"
+ },
+ "email": {
+ "type": "string",
+ "default": "",
+ "description": "Email of the user"
+ },
+ "groups": {
+ "type": "array",
+ "default": [],
+ "description": "Groups of the user",
+ "items": {
+ "type": "string"
+ }
+ },
+ "subadmin": {
+ "type": "array",
+ "default": [],
+ "description": "Groups where the user is subadmin",
+ "items": {
+ "type": "string"
+ }
+ },
+ "quota": {
+ "type": "string",
+ "default": "",
+ "description": "Quota of the user"
+ },
+ "language": {
+ "type": "string",
+ "default": "",
+ "description": "Language of the user"
+ },
+ "manager": {
+ "type": "string",
+ "nullable": true,
+ "default": null,
+ "description": "Manager of the user"
+ }
+ }
}
}
- },
- {
- "name": "quota",
- "in": "query",
- "description": "Quota of the user",
- "schema": {
- "type": "string",
- "default": ""
- }
- },
- {
- "name": "language",
- "in": "query",
- "description": "Language of the user",
- "schema": {
- "type": "string",
- "default": ""
- }
- },
- {
- "name": "manager",
- "in": "query",
- "description": "Manager of the user",
- "schema": {
- "type": "string",
- "nullable": true
- }
- },
+ }
+ },
+ "parameters": [
{
"name": "OCS-APIRequest",
"in": "header",
@@ -1144,9 +1200,27 @@
"403": {
"description": "Missing permissions to make user subadmin",
"content": {
- "text/plain": {
+ "application/json": {
"schema": {
- "type": "string"
+ "type": "object",
+ "required": [
+ "ocs"
+ ],
+ "properties": {
+ "ocs": {
+ "type": "object",
+ "required": [
+ "meta",
+ "data"
+ ],
+ "properties": {
+ "meta": {
+ "$ref": "#/components/schemas/OCSMeta"
+ },
+ "data": {}
+ }
+ }
+ }
}
}
}
@@ -1186,7 +1260,8 @@
"schema": {
"type": "integer",
"format": "int64",
- "nullable": true
+ "nullable": true,
+ "default": null
}
},
{
@@ -1240,7 +1315,7 @@
"users": {
"type": "object",
"additionalProperties": {
- "oneOf": [
+ "anyOf": [
{
"$ref": "#/components/schemas/UserDetails"
},
@@ -1287,13 +1362,23 @@
],
"parameters": [
{
+ "name": "search",
+ "in": "query",
+ "description": "Text to search for",
+ "schema": {
+ "type": "string",
+ "default": ""
+ }
+ },
+ {
"name": "limit",
"in": "query",
"description": "Limit the amount of users returned",
"schema": {
"type": "integer",
"format": "int64",
- "nullable": true
+ "nullable": true,
+ "default": null
}
},
{
@@ -1347,7 +1432,7 @@
"users": {
"type": "object",
"additionalProperties": {
- "oneOf": [
+ "anyOf": [
{
"$ref": "#/components/schemas/UserDetails"
},
@@ -1392,25 +1477,37 @@
"basic_auth": []
}
],
- "parameters": [
- {
- "name": "location",
- "in": "query",
- "description": "Location of the phone number (for country code)",
- "required": true,
- "schema": {
- "type": "string"
- }
- },
- {
- "name": "search",
- "in": "query",
- "description": "Phone numbers to search for",
- "required": true,
- "schema": {
- "type": "string"
+ "requestBody": {
+ "required": true,
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "required": [
+ "location",
+ "search"
+ ],
+ "properties": {
+ "location": {
+ "type": "string",
+ "description": "Location of the phone number (for country code)"
+ },
+ "search": {
+ "type": "object",
+ "description": "Phone numbers to search for",
+ "additionalProperties": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ }
}
- },
+ }
+ },
+ "parameters": [
{
"name": "OCS-APIRequest",
"in": "header",
@@ -1559,6 +1656,7 @@
"put": {
"operationId": "users-edit-user",
"summary": "Update a value of the user's details",
+ "description": "This endpoint requires password confirmation",
"tags": [
"users"
],
@@ -1570,25 +1668,31 @@
"basic_auth": []
}
],
- "parameters": [
- {
- "name": "key",
- "in": "query",
- "description": "Key that will be updated",
- "required": true,
- "schema": {
- "type": "string"
- }
- },
- {
- "name": "value",
- "in": "query",
- "description": "New value for the key",
- "required": true,
- "schema": {
- "type": "string"
+ "requestBody": {
+ "required": true,
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "required": [
+ "key",
+ "value"
+ ],
+ "properties": {
+ "key": {
+ "type": "string",
+ "description": "Key that will be updated"
+ },
+ "value": {
+ "type": "string",
+ "description": "New value for the key"
+ }
+ }
+ }
}
- },
+ }
+ },
+ "parameters": [
{
"name": "userId",
"in": "path",
@@ -1643,6 +1747,7 @@
"delete": {
"operationId": "users-delete-user",
"summary": "Delete a user",
+ "description": "This endpoint requires password confirmation",
"tags": [
"users"
],
@@ -1905,10 +2010,10 @@
}
}
},
- "/ocs/v2.php/cloud/users/{userId}/{collectionName}": {
- "put": {
- "operationId": "users-edit-user-multi-value",
- "summary": "Update multiple values of the user's details",
+ "/ocs/v2.php/cloud/user/apps": {
+ "get": {
+ "operationId": "users-get-enabled-apps",
+ "summary": "Get a list of enabled apps for the current user",
"tags": [
"users"
],
@@ -1922,23 +2027,102 @@
],
"parameters": [
{
- "name": "key",
- "in": "query",
- "description": "Key that will be updated",
+ "name": "OCS-APIRequest",
+ "in": "header",
+ "description": "Required to be true for the API request to pass",
"required": true,
"schema": {
- "type": "string"
+ "type": "boolean",
+ "default": true
}
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Enabled apps returned",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "required": [
+ "ocs"
+ ],
+ "properties": {
+ "ocs": {
+ "type": "object",
+ "required": [
+ "meta",
+ "data"
+ ],
+ "properties": {
+ "meta": {
+ "$ref": "#/components/schemas/OCSMeta"
+ },
+ "data": {
+ "type": "object",
+ "required": [
+ "apps"
+ ],
+ "properties": {
+ "apps": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/ocs/v2.php/cloud/users/{userId}/{collectionName}": {
+ "put": {
+ "operationId": "users-edit-user-multi-value",
+ "summary": "Update multiple values of the user's details",
+ "description": "This endpoint requires password confirmation",
+ "tags": [
+ "users"
+ ],
+ "security": [
+ {
+ "bearer_auth": []
},
{
- "name": "value",
- "in": "query",
- "description": "New value for the key",
- "required": true,
- "schema": {
- "type": "string"
+ "basic_auth": []
+ }
+ ],
+ "requestBody": {
+ "required": true,
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "required": [
+ "key",
+ "value"
+ ],
+ "properties": {
+ "key": {
+ "type": "string",
+ "description": "Key that will be updated"
+ },
+ "value": {
+ "type": "string",
+ "description": "New value for the key"
+ }
+ }
+ }
}
- },
+ }
+ },
+ "parameters": [
{
"name": "userId",
"in": "path",
@@ -2005,6 +2189,7 @@
"post": {
"operationId": "users-wipe-user-devices",
"summary": "Wipe all devices of a user",
+ "description": "This endpoint requires password confirmation",
"tags": [
"users"
],
@@ -2073,6 +2258,7 @@
"put": {
"operationId": "users-enable-user",
"summary": "Enable a user",
+ "description": "This endpoint requires password confirmation",
"tags": [
"users"
],
@@ -2141,6 +2327,7 @@
"put": {
"operationId": "users-disable-user",
"summary": "Disable a user",
+ "description": "This endpoint requires password confirmation",
"tags": [
"users"
],
@@ -2288,6 +2475,7 @@
"post": {
"operationId": "users-add-to-group",
"summary": "Add a user to a group",
+ "description": "This endpoint requires password confirmation",
"tags": [
"users"
],
@@ -2299,16 +2487,24 @@
"basic_auth": []
}
],
- "parameters": [
- {
- "name": "groupid",
- "in": "query",
- "description": "ID of the group",
- "schema": {
- "type": "string",
- "default": ""
+ "requestBody": {
+ "required": false,
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "groupid": {
+ "type": "string",
+ "default": "",
+ "description": "ID of the group"
+ }
+ }
+ }
}
- },
+ }
+ },
+ "parameters": [
{
"name": "userId",
"in": "path",
@@ -2363,6 +2559,7 @@
"delete": {
"operationId": "users-remove-from-group",
"summary": "Remove a user from a group",
+ "description": "This endpoint requires password confirmation",
"tags": [
"users"
],
@@ -2376,6 +2573,15 @@
],
"parameters": [
{
+ "name": "userId",
+ "in": "path",
+ "description": "ID of the user",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
"name": "groupid",
"in": "query",
"description": "ID of the group",
@@ -2385,6 +2591,65 @@
}
},
{
+ "name": "OCS-APIRequest",
+ "in": "header",
+ "description": "Required to be true for the API request to pass",
+ "required": true,
+ "schema": {
+ "type": "boolean",
+ "default": true
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "User removed from group successfully",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "required": [
+ "ocs"
+ ],
+ "properties": {
+ "ocs": {
+ "type": "object",
+ "required": [
+ "meta",
+ "data"
+ ],
+ "properties": {
+ "meta": {
+ "$ref": "#/components/schemas/OCSMeta"
+ },
+ "data": {}
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/ocs/v2.php/cloud/users/{userId}/groups/details": {
+ "get": {
+ "operationId": "users-get-users-groups-details",
+ "summary": "Get a list of groups with details",
+ "tags": [
+ "users"
+ ],
+ "security": [
+ {
+ "bearer_auth": []
+ },
+ {
+ "basic_auth": []
+ }
+ ],
+ "parameters": [
+ {
"name": "userId",
"in": "path",
"description": "ID of the user",
@@ -2406,7 +2671,7 @@
],
"responses": {
"200": {
- "description": "User removed from group successfully",
+ "description": "Users groups returned",
"content": {
"application/json": {
"schema": {
@@ -2425,7 +2690,101 @@
"meta": {
"$ref": "#/components/schemas/OCSMeta"
},
- "data": {}
+ "data": {
+ "type": "object",
+ "required": [
+ "groups"
+ ],
+ "properties": {
+ "groups": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/GroupDetails"
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/ocs/v2.php/cloud/users/{userId}/subadmins/details": {
+ "get": {
+ "operationId": "users-get-user-sub-admin-groups-details",
+ "summary": "Get a list of the groups the user is a subadmin of, with details",
+ "tags": [
+ "users"
+ ],
+ "security": [
+ {
+ "bearer_auth": []
+ },
+ {
+ "basic_auth": []
+ }
+ ],
+ "parameters": [
+ {
+ "name": "userId",
+ "in": "path",
+ "description": "ID of the user",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "name": "OCS-APIRequest",
+ "in": "header",
+ "description": "Required to be true for the API request to pass",
+ "required": true,
+ "schema": {
+ "type": "boolean",
+ "default": true
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Users subadmin groups returned",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "required": [
+ "ocs"
+ ],
+ "properties": {
+ "ocs": {
+ "type": "object",
+ "required": [
+ "meta",
+ "data"
+ ],
+ "properties": {
+ "meta": {
+ "$ref": "#/components/schemas/OCSMeta"
+ },
+ "data": {
+ "type": "object",
+ "required": [
+ "groups"
+ ],
+ "properties": {
+ "groups": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/GroupDetails"
+ }
+ }
+ }
+ }
}
}
}
@@ -2440,6 +2799,7 @@
"post": {
"operationId": "users-resend-welcome-message",
"summary": "Resend the welcome message",
+ "description": "This endpoint requires password confirmation",
"tags": [
"users"
],
@@ -2508,6 +2868,7 @@
"post": {
"operationId": "app_config-set-value",
"summary": "Update the config value of an app",
+ "description": "This endpoint requires password confirmation",
"tags": [
"app_config"
],
@@ -2519,16 +2880,26 @@
"basic_auth": []
}
],
- "parameters": [
- {
- "name": "value",
- "in": "query",
- "description": "New value for the key",
- "required": true,
- "schema": {
- "type": "string"
+ "requestBody": {
+ "required": true,
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "required": [
+ "value"
+ ],
+ "properties": {
+ "value": {
+ "type": "string",
+ "description": "New value for the key"
+ }
+ }
+ }
}
- },
+ }
+ },
+ "parameters": [
{
"name": "app",
"in": "path",
@@ -2651,16 +3022,26 @@
"basic_auth": []
}
],
- "parameters": [
- {
- "name": "configValue",
- "in": "query",
- "description": "New value",
- "required": true,
- "schema": {
- "type": "string"
+ "requestBody": {
+ "required": true,
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "required": [
+ "configValue"
+ ],
+ "properties": {
+ "configValue": {
+ "type": "string",
+ "description": "New value"
+ }
+ }
+ }
}
- },
+ }
+ },
+ "parameters": [
{
"name": "appId",
"in": "path",
@@ -2868,16 +3249,29 @@
"basic_auth": []
}
],
- "parameters": [
- {
- "name": "configs",
- "in": "query",
- "description": "Key-value pairs of the preferences",
- "required": true,
- "schema": {
- "type": "string"
+ "requestBody": {
+ "required": true,
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "required": [
+ "configs"
+ ],
+ "properties": {
+ "configs": {
+ "type": "object",
+ "description": "Key-value pairs of the preferences",
+ "additionalProperties": {
+ "type": "string"
+ }
+ }
+ }
+ }
}
- },
+ }
+ },
+ "parameters": [
{
"name": "appId",
"in": "path",
@@ -2973,6 +3367,15 @@
],
"parameters": [
{
+ "name": "appId",
+ "in": "path",
+ "description": "ID of the app",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
"name": "configKeys[]",
"in": "query",
"description": "Keys to delete",
@@ -2985,15 +3388,6 @@
}
},
{
- "name": "appId",
- "in": "path",
- "description": "ID of the app",
- "required": true,
- "schema": {
- "type": "string"
- }
- },
- {
"name": "OCS-APIRequest",
"in": "header",
"description": "Required to be true for the API request to pass",
@@ -3066,4 +3460,4 @@
}
},
"tags": []
-} \ No newline at end of file
+}
diff --git a/apps/provisioning_api/openapi.json.license b/apps/provisioning_api/openapi.json.license
new file mode 100644
index 00000000000..83559daa9dc
--- /dev/null
+++ b/apps/provisioning_api/openapi.json.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors
+SPDX-License-Identifier: AGPL-3.0-or-later \ No newline at end of file
diff --git a/apps/provisioning_api/tests/CapabilitiesTest.php b/apps/provisioning_api/tests/CapabilitiesTest.php
index 8fc29b442eb..86d2bb8c4fa 100644
--- a/apps/provisioning_api/tests/CapabilitiesTest.php
+++ b/apps/provisioning_api/tests/CapabilitiesTest.php
@@ -1,26 +1,11 @@
<?php
+
+declare(strict_types=1);
/**
- * @copyright Copyright (c) 2021 Vincent Petry <vincent@nextcloud.com>
- *
- * @author Vincent Petry <vincent@nextcloud.com>
- *
- * @license GNU AGPL version 3 or any later version
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as
- * published by the Free Software Foundation, either version 3 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- *
+ * SPDX-FileCopyrightText: 2021 Nextcloud GmbH and Nextcloud contributors
+ * SPDX-License-Identifier: AGPL-3.0-or-later
*/
-namespace OCA\Provisioning_API\Tests\unit;
+namespace OCA\Provisioning_API\Tests;
use OCA\FederatedFileSharing\FederatedShareProvider;
use OCA\Provisioning_API\Capabilities;
@@ -38,11 +23,8 @@ use Test\TestCase;
*/
class CapabilitiesTest extends TestCase {
- /** @var Capabilities */
- protected $capabilities;
-
- /** @var IAppManager|MockObject */
- protected $appManager;
+ protected IAppManager&MockObject $appManager;
+ protected Capabilities $capabilities;
public function setUp(): void {
parent::setUp();
@@ -55,7 +37,7 @@ class CapabilitiesTest extends TestCase {
->willReturn('1.12');
}
- public function getCapabilitiesProvider() {
+ public static function getCapabilitiesProvider(): array {
return [
[true, false, false, true, false],
[true, true, false, true, false],
@@ -66,23 +48,21 @@ class CapabilitiesTest extends TestCase {
];
}
- /**
- * @dataProvider getCapabilitiesProvider
- */
- public function testGetCapabilities($federationAppEnabled, $federatedFileSharingAppEnabled, $lookupServerEnabled, $expectedFederatedScopeEnabled, $expectedPublishedScopeEnabled) {
+ #[\PHPUnit\Framework\Attributes\DataProvider('getCapabilitiesProvider')]
+ public function testGetCapabilities(bool $federationAppEnabled, bool $federatedFileSharingAppEnabled, bool $lookupServerEnabled, bool $expectedFederatedScopeEnabled, bool $expectedPublishedScopeEnabled): void {
$this->appManager->expects($this->any())
->method('isEnabledForUser')
- ->will($this->returnValueMap([
+ ->willReturnMap([
['federation', null, $federationAppEnabled],
['federatedfilesharing', null, $federatedFileSharingAppEnabled],
- ]));
+ ]);
$federatedShareProvider = $this->createMock(FederatedShareProvider::class);
$this->overwriteService(FederatedShareProvider::class, $federatedShareProvider);
$federatedShareProvider->expects($this->any())
- ->method('isLookupServerUploadEnabled')
- ->willReturn($lookupServerEnabled);
+ ->method('isLookupServerUploadEnabled')
+ ->willReturn($lookupServerEnabled);
$expected = [
'provisioning_api' => [
diff --git a/apps/provisioning_api/tests/Controller/AppConfigControllerTest.php b/apps/provisioning_api/tests/Controller/AppConfigControllerTest.php
index 9789fb8c4b8..1b09838cbc3 100644
--- a/apps/provisioning_api/tests/Controller/AppConfigControllerTest.php
+++ b/apps/provisioning_api/tests/Controller/AppConfigControllerTest.php
@@ -1,42 +1,30 @@
<?php
+
+declare(strict_types=1);
/**
- * @copyright Copyright (c) 2016 Joas Schilling <coding@schilljs.com>
- *
- * @author Christoph Wurst <christoph@winzerhof-wurst.at>
- * @author Joas Schilling <coding@schilljs.com>
- * @author Morris Jobke <hey@morrisjobke.de>
- * @author Roeland Jago Douma <roeland@famdouma.nl>
- *
- * @license GNU AGPL version 3 or any later version
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as
- * published by the Free Software Foundation, either version 3 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- *
+ * SPDX-FileCopyrightText: 2016 Nextcloud GmbH and Nextcloud contributors
+ * SPDX-License-Identifier: AGPL-3.0-or-later
*/
namespace OCA\Provisioning_API\Tests\Controller;
use OC\AppConfig;
use OCA\Provisioning_API\Controller\AppConfigController;
+use OCP\App\IAppManager;
use OCP\AppFramework\Http;
use OCP\AppFramework\Http\DataResponse;
+use OCP\Exceptions\AppConfigUnknownKeyException;
use OCP\IAppConfig;
use OCP\IGroupManager;
use OCP\IL10N;
use OCP\IRequest;
use OCP\IUser;
use OCP\IUserSession;
+use OCP\Server;
use OCP\Settings\IManager;
+use PHPUnit\Framework\MockObject\MockObject;
use Test\TestCase;
+use function json_decode;
+use function json_encode;
/**
* Class AppConfigControllerTest
@@ -44,17 +32,12 @@ use Test\TestCase;
* @package OCA\Provisioning_API\Tests
*/
class AppConfigControllerTest extends TestCase {
-
- /** @var IAppConfig|\PHPUnit\Framework\MockObject\MockObject */
- private $appConfig;
- /** @var IUserSession|\PHPUnit\Framework\MockObject\MockObject */
- private $userSession;
- /** @var IL10N|\PHPUnit\Framework\MockObject\MockObject */
- private $l10n;
- /** @var IManager|\PHPUnit\Framework\MockObject\MockObject */
- private $settingManager;
- /** @var IGroupManager|\PHPUnit\Framework\MockObject\MockObject */
- private $groupManager;
+ private IAppConfig&MockObject $appConfig;
+ private IUserSession&MockObject $userSession;
+ private IL10N&MockObject $l10n;
+ private IManager&MockObject $settingManager;
+ private IGroupManager&MockObject $groupManager;
+ private IAppManager $appManager;
protected function setUp(): void {
parent::setUp();
@@ -62,13 +45,14 @@ class AppConfigControllerTest extends TestCase {
$this->appConfig = $this->createMock(AppConfig::class);
$this->userSession = $this->createMock(IUserSession::class);
$this->l10n = $this->createMock(IL10N::class);
- $this->groupManager = $this->createMock(IGroupManager::class);
$this->settingManager = $this->createMock(IManager::class);
+ $this->groupManager = $this->createMock(IGroupManager::class);
+ $this->appManager = Server::get(IAppManager::class);
}
/**
* @param string[] $methods
- * @return AppConfigController|\PHPUnit\Framework\MockObject\MockObject
+ * @return AppConfigController|MockObject
*/
protected function getInstance(array $methods = []) {
$request = $this->createMock(IRequest::class);
@@ -81,7 +65,8 @@ class AppConfigControllerTest extends TestCase {
$this->userSession,
$this->l10n,
$this->groupManager,
- $this->settingManager
+ $this->settingManager,
+ $this->appManager,
);
} else {
return $this->getMockBuilder(AppConfigController::class)
@@ -92,14 +77,15 @@ class AppConfigControllerTest extends TestCase {
$this->userSession,
$this->l10n,
$this->groupManager,
- $this->settingManager
+ $this->settingManager,
+ $this->appManager,
])
- ->setMethods($methods)
+ ->onlyMethods($methods)
->getMock();
}
}
- public function testGetApps() {
+ public function testGetApps(): void {
$this->appConfig->expects($this->once())
->method('getApps')
->willReturn(['apps']);
@@ -110,21 +96,15 @@ class AppConfigControllerTest extends TestCase {
$this->assertEquals(['data' => ['apps']], $result->getData());
}
- public function dataGetKeys() {
+ public static function dataGetKeys(): array {
return [
['app1 ', null, new \InvalidArgumentException('error'), Http::STATUS_FORBIDDEN],
['app2', ['keys'], null, Http::STATUS_OK],
];
}
- /**
- * @dataProvider dataGetKeys
- * @param string $app
- * @param array|null $keys
- * @param \Exception|null $throws
- * @param int $status
- */
- public function testGetKeys($app, $keys, $throws, $status) {
+ #[\PHPUnit\Framework\Attributes\DataProvider('dataGetKeys')]
+ public function testGetKeys(string $app, ?array $keys, ?\Throwable $throws, int $status): void {
$api = $this->getInstance(['verifyAppId']);
if ($throws instanceof \Exception) {
$api->expects($this->once())
@@ -155,23 +135,15 @@ class AppConfigControllerTest extends TestCase {
}
}
- public function dataGetValue() {
+ public static function dataGetValue(): array {
return [
['app1', 'key', 'default', null, new \InvalidArgumentException('error'), Http::STATUS_FORBIDDEN],
['app2', 'key', 'default', 'return', null, Http::STATUS_OK],
];
}
- /**
- * @dataProvider dataGetValue
- * @param string $app
- * @param string|null $key
- * @param string|null $default
- * @param string|null $return
- * @param \Exception|null $throws
- * @param int $status
- */
- public function testGetValue($app, $key, $default, $return, $throws, $status) {
+ #[\PHPUnit\Framework\Attributes\DataProvider('dataGetValue')]
+ public function testGetValue(string $app, string $key, string $default, ?string $return, ?\Throwable $throws, int $status): void {
$api = $this->getInstance(['verifyAppId']);
if ($throws instanceof \Exception) {
$api->expects($this->once())
@@ -199,24 +171,23 @@ class AppConfigControllerTest extends TestCase {
}
}
- public function dataSetValue() {
+ public static function dataSetValue(): array {
return [
['app1', 'key', 'default', new \InvalidArgumentException('error1'), null, Http::STATUS_FORBIDDEN],
['app2', 'key', 'default', null, new \InvalidArgumentException('error2'), Http::STATUS_FORBIDDEN],
['app2', 'key', 'default', null, null, Http::STATUS_OK],
+ ['app2', 'key', '1', null, null, Http::STATUS_OK, IAppConfig::VALUE_BOOL],
+ ['app2', 'key', '42', null, null, Http::STATUS_OK, IAppConfig::VALUE_INT],
+ ['app2', 'key', '4.2', null, null, Http::STATUS_OK, IAppConfig::VALUE_FLOAT],
+ ['app2', 'key', '42', null, null, Http::STATUS_OK, IAppConfig::VALUE_STRING],
+ ['app2', 'key', 'secret', null, null, Http::STATUS_OK, IAppConfig::VALUE_STRING | IAppConfig::VALUE_SENSITIVE],
+ ['app2', 'key', json_encode([4, 2]), null, null, Http::STATUS_OK, IAppConfig::VALUE_ARRAY],
+ ['app2', 'key', json_encode([4, 2]), null, null, Http::STATUS_OK, new AppConfigUnknownKeyException()],
];
}
- /**
- * @dataProvider dataSetValue
- * @param string $app
- * @param string|null $key
- * @param string|null $value
- * @param \Exception|null $appThrows
- * @param \Exception|null $keyThrows
- * @param int $status
- */
- public function testSetValue($app, $key, $value, $appThrows, $keyThrows, $status) {
+ #[\PHPUnit\Framework\Attributes\DataProvider('dataSetValue')]
+ public function testSetValue(string $app, string $key, string $value, ?\Throwable $appThrows, ?\Throwable $keyThrows, int $status, int|\Throwable $type = IAppConfig::VALUE_MIXED): void {
$adminUser = $this->createMock(IUser::class);
$adminUser->expects($this->once())
->method('getUid')
@@ -259,9 +230,38 @@ class AppConfigControllerTest extends TestCase {
->method('verifyConfigKey')
->with($app, $key);
+ if ($type instanceof \Throwable) {
+ $this->appConfig->expects($this->once())
+ ->method('getDetails')
+ ->with($app, $key)
+ ->willThrowException($type);
+ } else {
+ $this->appConfig->expects($this->once())
+ ->method('getDetails')
+ ->with($app, $key)
+ ->willReturn([
+ 'app' => $app,
+ 'key' => $key,
+ 'value' => '', // 🤷
+ 'type' => $type,
+ 'lazy' => false,
+ 'typeString' => (string)$type, // this is not accurate, but acceptable
+ 'sensitive' => ($type & IAppConfig::VALUE_SENSITIVE) !== 0,
+ ]);
+ }
+
+ $configValueSetter = match ($type) {
+ IAppConfig::VALUE_BOOL => 'setValueBool',
+ IAppConfig::VALUE_FLOAT => 'setValueFloat',
+ IAppConfig::VALUE_INT => 'setValueInt',
+ IAppConfig::VALUE_STRING => 'setValueString',
+ IAppConfig::VALUE_ARRAY => 'setValueArray',
+ default => 'setValueMixed',
+ };
+
$this->appConfig->expects($this->once())
- ->method('setValueMixed')
- ->with($app, $key, $value);
+ ->method($configValueSetter)
+ ->with($app, $key, $configValueSetter === 'setValueArray' ? json_decode($value, true) : $value);
}
$result = $api->setValue($app, $key, $value);
@@ -276,7 +276,7 @@ class AppConfigControllerTest extends TestCase {
}
}
- public function dataDeleteValue() {
+ public static function dataDeleteValue(): array {
return [
['app1', 'key', new \InvalidArgumentException('error1'), null, Http::STATUS_FORBIDDEN],
['app2', 'key', null, new \InvalidArgumentException('error2'), Http::STATUS_FORBIDDEN],
@@ -284,15 +284,8 @@ class AppConfigControllerTest extends TestCase {
];
}
- /**
- * @dataProvider dataDeleteValue
- * @param string $app
- * @param string|null $key
- * @param \Exception|null $appThrows
- * @param \Exception|null $keyThrows
- * @param int $status
- */
- public function testDeleteValue($app, $key, $appThrows, $keyThrows, $status) {
+ #[\PHPUnit\Framework\Attributes\DataProvider('dataDeleteValue')]
+ public function testDeleteValue(string $app, string $key, ?\Throwable $appThrows, ?\Throwable $keyThrows, int $status): void {
$api = $this->getInstance(['verifyAppId', 'verifyConfigKey']);
if ($appThrows instanceof \Exception) {
$api->expects($this->once())
@@ -340,13 +333,13 @@ class AppConfigControllerTest extends TestCase {
}
}
- public function testVerifyAppId() {
+ public function testVerifyAppId(): void {
$api = $this->getInstance();
$this->invokePrivate($api, 'verifyAppId', ['activity']);
$this->addToAssertionCount(1);
}
- public function dataVerifyAppIdThrows() {
+ public static function dataVerifyAppIdThrows(): array {
return [
['activity..'],
['activity/'],
@@ -355,18 +348,15 @@ class AppConfigControllerTest extends TestCase {
];
}
- /**
- * @dataProvider dataVerifyAppIdThrows
- * @param string $app
- */
- public function testVerifyAppIdThrows($app) {
+ #[\PHPUnit\Framework\Attributes\DataProvider('dataVerifyAppIdThrows')]
+ public function testVerifyAppIdThrows(string $app): void {
$this->expectException(\InvalidArgumentException::class);
$api = $this->getInstance();
$this->invokePrivate($api, 'verifyAppId', [$app]);
}
- public function dataVerifyConfigKey() {
+ public static function dataVerifyConfigKey(): array {
return [
['activity', 'abc', ''],
['dav', 'public_route', ''],
@@ -375,19 +365,14 @@ class AppConfigControllerTest extends TestCase {
];
}
- /**
- * @dataProvider dataVerifyConfigKey
- * @param string $app
- * @param string $key
- * @param string $value
- */
- public function testVerifyConfigKey($app, $key, $value) {
+ #[\PHPUnit\Framework\Attributes\DataProvider('dataVerifyConfigKey')]
+ public function testVerifyConfigKey(string $app, string $key, string $value): void {
$api = $this->getInstance();
$this->invokePrivate($api, 'verifyConfigKey', [$app, $key, $value]);
$this->addToAssertionCount(1);
}
- public function dataVerifyConfigKeyThrows() {
+ public static function dataVerifyConfigKeyThrows(): array {
return [
['activity', 'installed_version', ''],
['calendar', 'enabled', ''],
@@ -401,13 +386,8 @@ class AppConfigControllerTest extends TestCase {
];
}
- /**
- * @dataProvider dataVerifyConfigKeyThrows
- * @param string $app
- * @param string $key
- * @param string $value
- */
- public function testVerifyConfigKeyThrows($app, $key, $value) {
+ #[\PHPUnit\Framework\Attributes\DataProvider('dataVerifyConfigKeyThrows')]
+ public function testVerifyConfigKeyThrows(string $app, string $key, string $value): void {
$this->expectException(\InvalidArgumentException::class);
$api = $this->getInstance();
diff --git a/apps/provisioning_api/tests/Controller/AppsControllerTest.php b/apps/provisioning_api/tests/Controller/AppsControllerTest.php
index 187247b9f66..f95daeae7d3 100644
--- a/apps/provisioning_api/tests/Controller/AppsControllerTest.php
+++ b/apps/provisioning_api/tests/Controller/AppsControllerTest.php
@@ -1,36 +1,23 @@
<?php
+
/**
- * @copyright Copyright (c) 2016, ownCloud, Inc.
- *
- * @author Christoph Wurst <christoph@winzerhof-wurst.at>
- * @author Joas Schilling <coding@schilljs.com>
- * @author Lukas Reschke <lukas@statuscode.ch>
- * @author Morris Jobke <hey@morrisjobke.de>
- * @author Roeland Jago Douma <roeland@famdouma.nl>
- * @author Thomas Müller <thomas.mueller@tmit.eu>
- * @author Tom Needham <tom@owncloud.com>
- *
- * @license AGPL-3.0
- *
- * This code is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License, version 3,
- * as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License, version 3,
- * along with this program. If not, see <http://www.gnu.org/licenses/>
- *
+ * SPDX-FileCopyrightText: 2016-2024 Nextcloud GmbH and Nextcloud contributors
+ * SPDX-FileCopyrightText: 2016 ownCloud, Inc.
+ * SPDX-License-Identifier: AGPL-3.0-only
*/
namespace OCA\Provisioning_API\Tests\Controller;
+use OC\Installer;
use OCA\Provisioning_API\Controller\AppsController;
+use OCA\Provisioning_API\Tests\TestCase;
use OCP\App\IAppManager;
+use OCP\AppFramework\OCS\OCSException;
+use OCP\IAppConfig;
+use OCP\IGroupManager;
use OCP\IRequest;
use OCP\IUserSession;
+use OCP\Server;
+use PHPUnit\Framework\MockObject\MockObject;
/**
* Class AppsTest
@@ -39,47 +26,52 @@ use OCP\IUserSession;
*
* @package OCA\Provisioning_API\Tests
*/
-class AppsControllerTest extends \OCA\Provisioning_API\Tests\TestCase {
- /** @var IAppManager */
- private $appManager;
- /** @var AppsController */
- private $api;
- /** @var IUserSession */
- private $userSession;
+class AppsControllerTest extends TestCase {
+ private IAppManager $appManager;
+ private IAppConfig&MockObject $appConfig;
+ private Installer&MockObject $installer;
+ private AppsController $api;
+ private IUserSession $userSession;
protected function setUp(): void {
parent::setUp();
- $this->appManager = \OC::$server->getAppManager();
- $this->groupManager = \OC::$server->getGroupManager();
- $this->userSession = \OC::$server->getUserSession();
+ $this->appManager = Server::get(IAppManager::class);
+ $this->groupManager = Server::get(IGroupManager::class);
+ $this->userSession = Server::get(IUserSession::class);
+ $this->appConfig = $this->createMock(IAppConfig::class);
+ $this->installer = $this->createMock(Installer::class);
- $request = $this->getMockBuilder(IRequest::class)
- ->disableOriginalConstructor()
- ->getMock();
+ $request = $this->createMock(IRequest::class);
$this->api = new AppsController(
'provisioning_api',
$request,
- $this->appManager
+ $this->appManager,
+ $this->installer,
+ $this->appConfig,
);
}
- public function testGetAppInfo() {
+ protected function tearDown(): void {
+ $this->userSession->setUser(null);
+ }
+
+ public function testGetAppInfo(): void {
$result = $this->api->getAppInfo('provisioning_api');
$expected = $this->appManager->getAppInfo('provisioning_api');
$this->assertEquals($expected, $result->getData());
}
-
- public function testGetAppInfoOnBadAppID() {
- $this->expectException(\OCP\AppFramework\OCS\OCSException::class);
+
+ public function testGetAppInfoOnBadAppID(): void {
+ $this->expectException(OCSException::class);
$this->expectExceptionCode(998);
$this->api->getAppInfo('not_provisioning_api');
}
- public function testGetApps() {
+ public function testGetApps(): void {
$user = $this->generateUsers();
$this->groupManager->get('admin')->addUser($user);
$this->userSession->setUser($user);
@@ -90,13 +82,13 @@ class AppsControllerTest extends \OCA\Provisioning_API\Tests\TestCase {
$this->assertEquals(count((new \OC_App())->listAllApps()), count($data['apps']));
}
- public function testGetAppsEnabled() {
+ public function testGetAppsEnabled(): void {
$result = $this->api->getApps('enabled');
$data = $result->getData();
$this->assertEquals(count(\OC_App::getEnabledApps()), count($data['apps']));
}
- public function testGetAppsDisabled() {
+ public function testGetAppsDisabled(): void {
$result = $this->api->getApps('disabled');
$data = $result->getData();
$apps = (new \OC_App)->listAllApps();
@@ -108,9 +100,9 @@ class AppsControllerTest extends \OCA\Provisioning_API\Tests\TestCase {
$this->assertEquals(count($disabled), count($data['apps']));
}
-
- public function testGetAppsInvalidFilter() {
- $this->expectException(\OCP\AppFramework\OCS\OCSException::class);
+
+ public function testGetAppsInvalidFilter(): void {
+ $this->expectException(OCSException::class);
$this->expectExceptionCode(101);
$this->api->getApps('foo');
diff --git a/apps/provisioning_api/tests/Controller/GroupsControllerTest.php b/apps/provisioning_api/tests/Controller/GroupsControllerTest.php
index a60d01f68c3..85e5d733b1f 100644
--- a/apps/provisioning_api/tests/Controller/GroupsControllerTest.php
+++ b/apps/provisioning_api/tests/Controller/GroupsControllerTest.php
@@ -1,70 +1,43 @@
<?php
+
/**
- * @copyright Copyright (c) 2016, ownCloud, Inc.
- *
- * @author Arthur Schiwon <blizzz@arthur-schiwon.de>
- * @author Christoph Wurst <christoph@winzerhof-wurst.at>
- * @author Joas Schilling <coding@schilljs.com>
- * @author John Molakvoæ <skjnldsv@protonmail.com>
- * @author Julius Härtl <jus@bitgrid.net>
- * @author Lukas Reschke <lukas@statuscode.ch>
- * @author Morris Jobke <hey@morrisjobke.de>
- * @author Roeland Jago Douma <roeland@famdouma.nl>
- * @author Tom Needham <tom@owncloud.com>
- *
- * @license AGPL-3.0
- *
- * This code is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License, version 3,
- * as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License, version 3,
- * along with this program. If not, see <http://www.gnu.org/licenses/>
- *
+ * SPDX-FileCopyrightText: 2017-2024 Nextcloud GmbH and Nextcloud contributors
+ * SPDX-FileCopyrightText: 2016 ownCloud, Inc.
+ * SPDX-License-Identifier: AGPL-3.0-only
*/
namespace OCA\Provisioning_API\Tests\Controller;
use OC\Group\Manager;
-use OC\SubAdmin;
use OC\User\NoUserException;
use OCA\Provisioning_API\Controller\GroupsController;
use OCP\Accounts\IAccountManager;
+use OCP\AppFramework\OCS\OCSException;
+use OCP\Files\IRootFolder;
+use OCP\Group\ISubAdmin;
use OCP\IConfig;
+use OCP\IGroup;
use OCP\IRequest;
use OCP\IUser;
use OCP\IUserManager;
use OCP\IUserSession;
use OCP\L10N\IFactory;
use OCP\UserInterface;
+use PHPUnit\Framework\MockObject\MockObject;
use Psr\Log\LoggerInterface;
class GroupsControllerTest extends \Test\TestCase {
- /** @var IRequest|\PHPUnit\Framework\MockObject\MockObject */
- protected $request;
- /** @var IUserManager|\PHPUnit\Framework\MockObject\MockObject */
- protected $userManager;
- /** @var IConfig|\PHPUnit\Framework\MockObject\MockObject */
- protected $config;
- /** @var Manager|\PHPUnit\Framework\MockObject\MockObject */
- protected $groupManager;
- /** @var IUserSession|\PHPUnit\Framework\MockObject\MockObject */
- protected $userSession;
- /** @var IAccountManager|\PHPUnit\Framework\MockObject\MockObject */
- protected $accountManager;
- /** @var IFactory|\PHPUnit\Framework\MockObject\MockObject */
- protected $l10nFactory;
- /** @var LoggerInterface|\PHPUnit\Framework\MockObject\MockObject */
- protected $logger;
- /** @var SubAdmin|\PHPUnit\Framework\MockObject\MockObject */
- protected $subAdminManager;
-
- /** @var GroupsController|\PHPUnit\Framework\MockObject\MockObject */
- protected $api;
+ protected IRequest&MockObject $request;
+ protected IUserManager&MockObject $userManager;
+ protected IConfig&MockObject $config;
+ protected Manager&MockObject $groupManager;
+ protected IUserSession&MockObject $userSession;
+ protected IAccountManager&MockObject $accountManager;
+ protected ISubAdmin&MockObject $subAdminManager;
+ protected IFactory&MockObject $l10nFactory;
+ protected LoggerInterface&MockObject $logger;
+ protected GroupsController&MockObject $api;
+
+ private IRootFolder $rootFolder;
protected function setUp(): void {
@@ -76,14 +49,14 @@ class GroupsControllerTest extends \Test\TestCase {
$this->groupManager = $this->createMock(Manager::class);
$this->userSession = $this->createMock(IUserSession::class);
$this->accountManager = $this->createMock(IAccountManager::class);
+ $this->subAdminManager = $this->createMock(ISubAdmin::class);
$this->l10nFactory = $this->createMock(IFactory::class);
$this->logger = $this->createMock(LoggerInterface::class);
-
- $this->subAdminManager = $this->createMock(SubAdmin::class);
+ $this->rootFolder = $this->createMock(IRootFolder::class);
$this->groupManager
- ->method('getSubAdmin')
- ->willReturn($this->subAdminManager);
+ ->method('getSubAdmin')
+ ->willReturn($this->subAdminManager);
$this->api = $this->getMockBuilder(GroupsController::class)
->setConstructorArgs([
@@ -94,25 +67,23 @@ class GroupsControllerTest extends \Test\TestCase {
$this->groupManager,
$this->userSession,
$this->accountManager,
+ $this->subAdminManager,
$this->l10nFactory,
+ $this->rootFolder,
$this->logger
])
- ->setMethods(['fillStorageInfo'])
+ ->onlyMethods(['fillStorageInfo'])
->getMock();
}
- /**
- * @param string $gid
- * @return \OCP\IGroup|\PHPUnit\Framework\MockObject\MockObject
- */
- private function createGroup($gid) {
- $group = $this->getMockBuilder('\OCP\IGroup')->disableOriginalConstructor()->getMock();
+ private function createGroup(string $gid): IGroup&MockObject {
+ $group = $this->createMock(IGroup::class);
$group
->method('getGID')
->willReturn($gid);
$group
->method('getDisplayName')
- ->willReturn($gid.'-name');
+ ->willReturn($gid . '-name');
$group
->method('count')
->willReturn(123);
@@ -131,7 +102,7 @@ class GroupsControllerTest extends \Test\TestCase {
/**
* @param string $uid
- * @return \OCP\IUser|\PHPUnit\Framework\MockObject\MockObject
+ * @return IUser&MockObject
*/
private function createUser($uid) {
$user = $this->getMockBuilder(IUser::class)->disableOriginalConstructor()->getMock();
@@ -180,7 +151,7 @@ class GroupsControllerTest extends \Test\TestCase {
});
}
- public function dataGetGroups() {
+ public static function dataGetGroups(): array {
return [
[null, 0, 0],
['foo', 0, 0],
@@ -190,14 +161,8 @@ class GroupsControllerTest extends \Test\TestCase {
];
}
- /**
- * @dataProvider dataGetGroups
- *
- * @param string|null $search
- * @param int|null $limit
- * @param int|null $offset
- */
- public function testGetGroups($search, $limit, $offset) {
+ #[\PHPUnit\Framework\Attributes\DataProvider('dataGetGroups')]
+ public function testGetGroups(?string $search, int $limit, int $offset): void {
$groups = [$this->createGroup('group1'), $this->createGroup('group2')];
$search = $search === null ? '' : $search;
@@ -213,13 +178,13 @@ class GroupsControllerTest extends \Test\TestCase {
}
/**
- * @dataProvider dataGetGroups
*
* @param string|null $search
* @param int|null $limit
* @param int|null $offset
*/
- public function testGetGroupsDetails($search, $limit, $offset) {
+ #[\PHPUnit\Framework\Attributes\DataProvider('dataGetGroups')]
+ public function testGetGroupsDetails($search, $limit, $offset): void {
$groups = [$this->createGroup('group1'), $this->createGroup('group2')];
$search = $search === null ? '' : $search;
@@ -251,7 +216,7 @@ class GroupsControllerTest extends \Test\TestCase {
]], $result->getData());
}
- public function testGetGroupAsSubadmin() {
+ public function testGetGroupAsSubadmin(): void {
$group = $this->createGroup('group');
$this->asSubAdminOfGroup($group);
@@ -276,8 +241,8 @@ class GroupsControllerTest extends \Test\TestCase {
}
- public function testGetGroupAsIrrelevantSubadmin() {
- $this->expectException(\OCP\AppFramework\OCS\OCSException::class);
+ public function testGetGroupAsIrrelevantSubadmin(): void {
+ $this->expectException(OCSException::class);
$this->expectExceptionCode(403);
$group = $this->createGroup('group');
@@ -296,7 +261,7 @@ class GroupsControllerTest extends \Test\TestCase {
$this->api->getGroup('group');
}
- public function testGetGroupAsAdmin() {
+ public function testGetGroupAsAdmin(): void {
$group = $this->createGroup('group');
$this->asAdmin();
@@ -321,8 +286,8 @@ class GroupsControllerTest extends \Test\TestCase {
}
- public function testGetGroupNonExisting() {
- $this->expectException(\OCP\AppFramework\OCS\OCSException::class);
+ public function testGetGroupNonExisting(): void {
+ $this->expectException(OCSException::class);
$this->expectExceptionMessage('The requested group could not be found');
$this->expectExceptionCode(404);
@@ -332,15 +297,15 @@ class GroupsControllerTest extends \Test\TestCase {
}
- public function testGetSubAdminsOfGroupsNotExists() {
- $this->expectException(\OCP\AppFramework\OCS\OCSException::class);
+ public function testGetSubAdminsOfGroupsNotExists(): void {
+ $this->expectException(OCSException::class);
$this->expectExceptionMessage('Group does not exist');
$this->expectExceptionCode(101);
$this->api->getSubAdminsOfGroup('NonExistingGroup');
}
- public function testGetSubAdminsOfGroup() {
+ public function testGetSubAdminsOfGroup(): void {
$group = $this->createGroup('GroupWithSubAdmins');
$this->groupManager
->method('get')
@@ -360,7 +325,7 @@ class GroupsControllerTest extends \Test\TestCase {
$this->assertEquals(['SubAdmin1', 'SubAdmin2'], $result->getData());
}
- public function testGetSubAdminsOfGroupEmptyList() {
+ public function testGetSubAdminsOfGroupEmptyList(): void {
$group = $this->createGroup('GroupWithOutSubAdmins');
$this->groupManager
->method('get')
@@ -379,8 +344,8 @@ class GroupsControllerTest extends \Test\TestCase {
}
- public function testAddGroupEmptyGroup() {
- $this->expectException(\OCP\AppFramework\OCS\OCSException::class);
+ public function testAddGroupEmptyGroup(): void {
+ $this->expectException(OCSException::class);
$this->expectExceptionMessage('Invalid group name');
$this->expectExceptionCode(101);
@@ -388,8 +353,8 @@ class GroupsControllerTest extends \Test\TestCase {
}
- public function testAddGroupExistingGroup() {
- $this->expectException(\OCP\AppFramework\OCS\OCSException::class);
+ public function testAddGroupExistingGroup(): void {
+ $this->expectException(OCSException::class);
$this->expectExceptionCode(102);
$this->groupManager
@@ -400,7 +365,7 @@ class GroupsControllerTest extends \Test\TestCase {
$this->api->addGroup('ExistingGroup');
}
- public function testAddGroup() {
+ public function testAddGroup(): void {
$this->groupManager
->method('groupExists')
->with('NewGroup')
@@ -416,7 +381,7 @@ class GroupsControllerTest extends \Test\TestCase {
$this->api->addGroup('NewGroup');
}
- public function testAddGroupWithSpecialChar() {
+ public function testAddGroupWithSpecialChar(): void {
$this->groupManager
->method('groupExists')
->with('Iñtërnâtiônàlizætiøn')
@@ -433,16 +398,16 @@ class GroupsControllerTest extends \Test\TestCase {
}
- public function testDeleteGroupNonExisting() {
- $this->expectException(\OCP\AppFramework\OCS\OCSException::class);
+ public function testDeleteGroupNonExisting(): void {
+ $this->expectException(OCSException::class);
$this->expectExceptionCode(101);
$this->api->deleteGroup('NonExistingGroup');
}
- public function testDeleteAdminGroup() {
- $this->expectException(\OCP\AppFramework\OCS\OCSException::class);
+ public function testDeleteAdminGroup(): void {
+ $this->expectException(OCSException::class);
$this->expectExceptionCode(102);
$this->groupManager
@@ -453,7 +418,7 @@ class GroupsControllerTest extends \Test\TestCase {
$this->api->deleteGroup('admin');
}
- public function testDeleteGroup() {
+ public function testDeleteGroup(): void {
$this->groupManager
->method('groupExists')
->with('ExistingGroup')
@@ -472,7 +437,7 @@ class GroupsControllerTest extends \Test\TestCase {
$this->api->deleteGroup('ExistingGroup');
}
- public function testDeleteGroupEncoding() {
+ public function testDeleteGroupEncoding(): void {
$this->groupManager
->method('groupExists')
->with('ExistingGroup A/B')
@@ -491,7 +456,7 @@ class GroupsControllerTest extends \Test\TestCase {
$this->api->deleteGroup(urlencode('ExistingGroup A/B'));
}
- public function testGetGroupUsersDetails() {
+ public function testGetGroupUsersDetails(): void {
$gid = 'ncg1';
$this->asAdmin();
@@ -524,7 +489,7 @@ class GroupsControllerTest extends \Test\TestCase {
->method('getUserGroups')
->willReturn([$group]);
- /** @var \PHPUnit\Framework\MockObject\MockObject */
+ /** @var MockObject */
$this->subAdminManager->expects($this->any())
->method('isSubAdminOfGroup')
->willReturn(false);
@@ -536,7 +501,7 @@ class GroupsControllerTest extends \Test\TestCase {
$this->api->getGroupUsersDetails($gid);
}
- public function testGetGroupUsersDetailsEncoded() {
+ public function testGetGroupUsersDetailsEncoded(): void {
$gid = 'Department A/B C/D';
$this->asAdmin();
@@ -569,7 +534,7 @@ class GroupsControllerTest extends \Test\TestCase {
->method('getUserGroups')
->willReturn([$group]);
- /** @var \PHPUnit\Framework\MockObject\MockObject */
+ /** @var MockObject */
$this->subAdminManager->expects($this->any())
->method('isSubAdminOfGroup')
->willReturn(false);
diff --git a/apps/provisioning_api/tests/Controller/UsersControllerTest.php b/apps/provisioning_api/tests/Controller/UsersControllerTest.php
index a48461c0a27..0c0a0ae3d74 100644
--- a/apps/provisioning_api/tests/Controller/UsersControllerTest.php
+++ b/apps/provisioning_api/tests/Controller/UsersControllerTest.php
@@ -1,45 +1,11 @@
<?php
+
/**
- * @copyright Copyright (c) 2016, ownCloud, Inc.
- *
- * @author Arthur Schiwon <blizzz@arthur-schiwon.de>
- * @author Bjoern Schiessle <bjoern@schiessle.org>
- * @author Christoph Wurst <christoph@winzerhof-wurst.at>
- * @author Daniel Calviño Sánchez <danxuliu@gmail.com>
- * @author Daniel Kesselberg <mail@danielkesselberg.de>
- * @author Georg Ehrke <oc.list@georgehrke.com>
- * @author GretaD <gretadoci@gmail.com>
- * @author Joas Schilling <coding@schilljs.com>
- * @author John Molakvoæ <skjnldsv@protonmail.com>
- * @author Julius Härtl <jus@bitgrid.net>
- * @author Lukas Reschke <lukas@statuscode.ch>
- * @author michag86 <micha_g@arcor.de>
- * @author Morris Jobke <hey@morrisjobke.de>
- * @author Roeland Jago Douma <roeland@famdouma.nl>
- * @author Sujith Haridasan <sujith.h@gmail.com>
- * @author Thomas Citharel <nextcloud@tcit.fr>
- * @author Thomas Müller <thomas.mueller@tmit.eu>
- * @author Tom Needham <tom@owncloud.com>
- * @author Vincent Petry <vincent@nextcloud.com>
- * @author zulan <git@zulan.net>
- *
- * @license AGPL-3.0
- *
- * This code is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License, version 3,
- * as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License, version 3,
- * along with this program. If not, see <http://www.gnu.org/licenses/>
- *
+ * SPDX-FileCopyrightText: 2017-2024 Nextcloud GmbH and Nextcloud contributors
+ * SPDX-FileCopyrightText: 2016 ownCloud, Inc.
+ * SPDX-License-Identifier: AGPL-3.0-only
*/
-
namespace OCA\Provisioning_API\Tests\Controller;
use Exception;
@@ -54,9 +20,12 @@ use OCP\Accounts\IAccount;
use OCP\Accounts\IAccountManager;
use OCP\Accounts\IAccountProperty;
use OCP\Accounts\IAccountPropertyCollection;
+use OCP\App\IAppManager;
use OCP\AppFramework\Http\DataResponse;
use OCP\AppFramework\OCS\OCSException;
use OCP\EventDispatcher\IEventDispatcher;
+use OCP\Files\IRootFolder;
+use OCP\Group\ISubAdmin;
use OCP\IConfig;
use OCP\IGroup;
use OCP\IL10N;
@@ -74,41 +43,29 @@ use OCP\User\Backend\ISetDisplayNameBackend;
use OCP\UserInterface;
use PHPUnit\Framework\MockObject\MockObject;
use Psr\Log\LoggerInterface;
+use RuntimeException;
use Test\TestCase;
class UsersControllerTest extends TestCase {
- /** @var IUserManager|MockObject */
- protected $userManager;
- /** @var IConfig|MockObject */
- protected $config;
- /** @var Manager|MockObject */
- protected $groupManager;
- /** @var IUserSession|MockObject */
- protected $userSession;
- /** @var LoggerInterface|MockObject */
- protected $logger;
- /** @var UsersController|MockObject */
- protected $api;
- /** @var IAccountManager|MockObject */
- protected $accountManager;
- /** @var IURLGenerator|MockObject */
- protected $urlGenerator;
- /** @var IRequest|MockObject */
- protected $request;
- /** @var IFactory|MockObject */
- private $l10nFactory;
- /** @var NewUserMailHelper|MockObject */
- private $newUserMailHelper;
- /** @var ISecureRandom|MockObject */
- private $secureRandom;
- /** @var RemoteWipe|MockObject */
- private $remoteWipe;
- /** @var KnownUserService|MockObject */
- private $knownUserService;
- /** @var IEventDispatcher|MockObject */
- private $eventDispatcher;
- /** @var IPhoneNumberUtil */
- private $phoneNumberUtil;
+ protected IUserManager&MockObject $userManager;
+ protected IConfig&MockObject $config;
+ protected Manager&MockObject $groupManager;
+ protected IUserSession&MockObject $userSession;
+ protected LoggerInterface&MockObject $logger;
+ protected UsersController&MockObject $api;
+ protected IAccountManager&MockObject $accountManager;
+ protected ISubAdmin&MockObject $subAdminManager;
+ protected IURLGenerator&MockObject $urlGenerator;
+ protected IRequest&MockObject $request;
+ private IFactory&MockObject $l10nFactory;
+ private NewUserMailHelper&MockObject $newUserMailHelper;
+ private ISecureRandom&MockObject $secureRandom;
+ private RemoteWipe&MockObject $remoteWipe;
+ private KnownUserService&MockObject $knownUserService;
+ private IEventDispatcher&MockObject $eventDispatcher;
+ private IRootFolder $rootFolder;
+ private IPhoneNumberUtil $phoneNumberUtil;
+ private IAppManager $appManager;
protected function setUp(): void {
parent::setUp();
@@ -120,6 +77,7 @@ class UsersControllerTest extends TestCase {
$this->logger = $this->createMock(LoggerInterface::class);
$this->request = $this->createMock(IRequest::class);
$this->accountManager = $this->createMock(IAccountManager::class);
+ $this->subAdminManager = $this->createMock(ISubAdmin::class);
$this->urlGenerator = $this->createMock(IURLGenerator::class);
$this->l10nFactory = $this->createMock(IFactory::class);
$this->newUserMailHelper = $this->createMock(NewUserMailHelper::class);
@@ -128,6 +86,12 @@ class UsersControllerTest extends TestCase {
$this->knownUserService = $this->createMock(KnownUserService::class);
$this->eventDispatcher = $this->createMock(IEventDispatcher::class);
$this->phoneNumberUtil = new PhoneNumberUtil();
+ $this->appManager = $this->createMock(IAppManager::class);
+ $this->rootFolder = $this->createMock(IRootFolder::class);
+
+ $l10n = $this->createMock(IL10N::class);
+ $l10n->method('t')->willReturnCallback(fn (string $txt, array $replacement = []) => sprintf($txt, ...$replacement));
+ $this->l10nFactory->method('get')->with('provisioning_api')->willReturn($l10n);
$this->api = $this->getMockBuilder(UsersController::class)
->setConstructorArgs([
@@ -138,21 +102,24 @@ class UsersControllerTest extends TestCase {
$this->groupManager,
$this->userSession,
$this->accountManager,
+ $this->subAdminManager,
+ $this->l10nFactory,
+ $this->rootFolder,
$this->urlGenerator,
$this->logger,
- $this->l10nFactory,
$this->newUserMailHelper,
$this->secureRandom,
$this->remoteWipe,
$this->knownUserService,
$this->eventDispatcher,
$this->phoneNumberUtil,
+ $this->appManager,
])
->onlyMethods(['fillStorageInfo'])
->getMock();
}
- public function testGetUsersAsAdmin() {
+ public function testGetUsersAsAdmin(): void {
$loggedInUser = $this->getMockBuilder(IUser::class)
->disableOriginalConstructor()
->getMock();
@@ -184,7 +151,7 @@ class UsersControllerTest extends TestCase {
$this->assertEquals($expected, $this->api->getUsers('MyCustomSearch')->getData());
}
- public function testGetUsersAsSubAdmin() {
+ public function testGetUsersAsSubAdmin(): void {
$loggedInUser = $this->getMockBuilder(IUser::class)
->disableOriginalConstructor()
->getMock();
@@ -232,8 +199,7 @@ class UsersControllerTest extends TestCase {
->willReturn($subAdminManager);
$this->groupManager
->expects($this->any())
- ->method('displayNamesInGroup')
- ->will($this->onConsecutiveCalls(['AnotherUserInTheFirstGroup' => []], ['UserInTheSecondGroup' => []]));
+ ->method('displayNamesInGroup')->willReturnOnConsecutiveCalls(['AnotherUserInTheFirstGroup' => []], ['UserInTheSecondGroup' => []]);
$expected = [
'users' => [
@@ -244,9 +210,134 @@ class UsersControllerTest extends TestCase {
$this->assertEquals($expected, $this->api->getUsers('MyCustomSearch')->getData());
}
+ private function createUserMock(string $uid, bool $enabled): MockObject&IUser {
+ $mockUser = $this->getMockBuilder(IUser::class)
+ ->disableOriginalConstructor()
+ ->getMock();
+ $mockUser
+ ->method('getUID')
+ ->willReturn($uid);
+ $mockUser
+ ->method('isEnabled')
+ ->willReturn($enabled);
+ return $mockUser;
+ }
+
+ public function testGetDisabledUsersAsAdmin(): void {
+ $loggedInUser = $this->getMockBuilder(IUser::class)
+ ->disableOriginalConstructor()
+ ->getMock();
+ $loggedInUser
+ ->expects($this->once())
+ ->method('getUID')
+ ->willReturn('admin');
+ $this->userSession
+ ->expects($this->atLeastOnce())
+ ->method('getUser')
+ ->willReturn($loggedInUser);
+ $this->groupManager
+ ->expects($this->once())
+ ->method('isAdmin')
+ ->willReturn(true);
+ $this->userManager
+ ->expects($this->once())
+ ->method('getDisabledUsers')
+ ->with(3, 0, 'MyCustomSearch')
+ ->willReturn([
+ $this->createUserMock('admin', false),
+ $this->createUserMock('foo', false),
+ $this->createUserMock('bar', false),
+ ]);
+
+ $expected = [
+ 'users' => [
+ 'admin' => ['id' => 'admin'],
+ 'foo' => ['id' => 'foo'],
+ 'bar' => ['id' => 'bar'],
+ ],
+ ];
+ $this->assertEquals($expected, $this->api->getDisabledUsersDetails('MyCustomSearch', 3)->getData());
+ }
+
+ public function testGetDisabledUsersAsSubAdmin(): void {
+ $loggedInUser = $this->getMockBuilder(IUser::class)
+ ->disableOriginalConstructor()
+ ->getMock();
+ $loggedInUser
+ ->expects($this->once())
+ ->method('getUID')
+ ->willReturn('subadmin');
+ $this->userSession
+ ->expects($this->atLeastOnce())
+ ->method('getUser')
+ ->willReturn($loggedInUser);
+ $this->groupManager
+ ->expects($this->once())
+ ->method('isAdmin')
+ ->willReturn(false);
+ $firstGroup = $this->getMockBuilder('OCP\IGroup')
+ ->disableOriginalConstructor()
+ ->getMock();
+ $secondGroup = $this->getMockBuilder('OCP\IGroup')
+ ->disableOriginalConstructor()
+ ->getMock();
+ $subAdminManager = $this->getMockBuilder('OC\SubAdmin')
+ ->disableOriginalConstructor()->getMock();
+ $subAdminManager
+ ->expects($this->once())
+ ->method('isSubAdmin')
+ ->with($loggedInUser)
+ ->willReturn(true);
+ $subAdminManager
+ ->expects($this->once())
+ ->method('getSubAdminsGroups')
+ ->with($loggedInUser)
+ ->willReturn([$firstGroup, $secondGroup]);
+ $this->groupManager
+ ->expects($this->once())
+ ->method('getSubAdmin')
+ ->willReturn($subAdminManager);
+ $this->groupManager
+ ->expects($this->never())
+ ->method('displayNamesInGroup');
+
+ $firstGroup
+ ->expects($this->once())
+ ->method('searchUsers')
+ ->with('MyCustomSearch')
+ ->willReturn([
+ $this->createUserMock('user1', false),
+ $this->createUserMock('bob', true),
+ $this->createUserMock('user2', false),
+ $this->createUserMock('alice', true),
+ ]);
+
+ $secondGroup
+ ->expects($this->once())
+ ->method('searchUsers')
+ ->with('MyCustomSearch')
+ ->willReturn([
+ $this->createUserMock('user2', false),
+ $this->createUserMock('joe', true),
+ $this->createUserMock('user3', false),
+ $this->createUserMock('jim', true),
+ $this->createUserMock('john', true),
+ ]);
+
+
+ $expected = [
+ 'users' => [
+ 'user1' => ['id' => 'user1'],
+ 'user2' => ['id' => 'user2'],
+ 'user3' => ['id' => 'user3'],
+ ],
+ ];
+ $this->assertEquals($expected, $this->api->getDisabledUsersDetails('MyCustomSearch', 3)->getData());
+ }
+
- public function testAddUserAlreadyExisting() {
- $this->expectException(\OCP\AppFramework\OCS\OCSException::class);
+ public function testAddUserAlreadyExisting(): void {
+ $this->expectException(OCSException::class);
$this->expectExceptionCode(102);
$this->userManager
@@ -262,7 +353,7 @@ class UsersControllerTest extends TestCase {
->disableOriginalConstructor()
->getMock();
$loggedInUser
- ->expects($this->once())
+ ->expects($this->exactly(2))
->method('getUID')
->willReturn('adminUser');
$this->userSession
@@ -274,20 +365,14 @@ class UsersControllerTest extends TestCase {
->method('isAdmin')
->with('adminUser')
->willReturn(true);
- $l10n = $this->createMock(IL10N::class);
- $this->l10nFactory
- ->expects($this->once())
- ->method('get')
- ->with('provisioning_api')
- ->willReturn($l10n);
$this->api->addUser('AlreadyExistingUser', 'password', '', '', []);
}
- public function testAddUserNonExistingGroup() {
- $this->expectException(\OCP\AppFramework\OCS\OCSException::class);
- $this->expectExceptionMessage('group NonExistingGroup does not exist');
+ public function testAddUserNonExistingGroup(): void {
+ $this->expectException(OCSException::class);
+ $this->expectExceptionMessage('Group NonExistingGroup does not exist');
$this->expectExceptionCode(104);
$this->userManager
@@ -299,7 +384,7 @@ class UsersControllerTest extends TestCase {
->disableOriginalConstructor()
->getMock();
$loggedInUser
- ->expects($this->once())
+ ->expects($this->exactly(2))
->method('getUID')
->willReturn('adminUser');
$this->userSession
@@ -321,9 +406,9 @@ class UsersControllerTest extends TestCase {
}
- public function testAddUserExistingGroupNonExistingGroup() {
- $this->expectException(\OCP\AppFramework\OCS\OCSException::class);
- $this->expectExceptionMessage('group NonExistingGroup does not exist');
+ public function testAddUserExistingGroupNonExistingGroup(): void {
+ $this->expectException(OCSException::class);
+ $this->expectExceptionMessage('Group NonExistingGroup does not exist');
$this->expectExceptionCode(104);
$this->userManager
@@ -335,7 +420,7 @@ class UsersControllerTest extends TestCase {
->disableOriginalConstructor()
->getMock();
$loggedInUser
- ->expects($this->once())
+ ->expects($this->exactly(2))
->method('getUID')
->willReturn('adminUser');
$this->userSession
@@ -350,10 +435,6 @@ class UsersControllerTest extends TestCase {
$this->groupManager
->expects($this->exactly(2))
->method('groupExists')
- ->withConsecutive(
- ['ExistingGroup'],
- ['NonExistingGroup']
- )
->willReturnMap([
['ExistingGroup', true],
['NonExistingGroup', false]
@@ -362,7 +443,7 @@ class UsersControllerTest extends TestCase {
$this->api->addUser('NewUser', 'pass', '', '', ['ExistingGroup', 'NonExistingGroup']);
}
- public function testAddUserSuccessful() {
+ public function testAddUserSuccessful(): void {
$this->userManager
->expects($this->once())
->method('userExists')
@@ -371,7 +452,8 @@ class UsersControllerTest extends TestCase {
$this->userManager
->expects($this->once())
->method('createUser')
- ->with('NewUser', 'PasswordOfTheNewUser');
+ ->with('NewUser', 'PasswordOfTheNewUser')
+ ->willReturn($this->createMock(IUser::class));
$this->logger
->expects($this->once())
->method('info')
@@ -380,7 +462,7 @@ class UsersControllerTest extends TestCase {
->disableOriginalConstructor()
->getMock();
$loggedInUser
- ->expects($this->once())
+ ->expects($this->exactly(2))
->method('getUID')
->willReturn('adminUser');
$this->userSession
@@ -399,7 +481,10 @@ class UsersControllerTest extends TestCase {
));
}
- public function testAddUserSuccessfulWithDisplayName() {
+ public function testAddUserSuccessfulWithDisplayName(): void {
+ /**
+ * @var UserController
+ */
$api = $this->getMockBuilder(UsersController::class)
->setConstructorArgs([
'provisioning_api',
@@ -409,15 +494,18 @@ class UsersControllerTest extends TestCase {
$this->groupManager,
$this->userSession,
$this->accountManager,
+ $this->subAdminManager,
+ $this->l10nFactory,
+ $this->rootFolder,
$this->urlGenerator,
$this->logger,
- $this->l10nFactory,
$this->newUserMailHelper,
$this->secureRandom,
$this->remoteWipe,
$this->knownUserService,
$this->eventDispatcher,
$this->phoneNumberUtil,
+ $this->appManager,
])
->onlyMethods(['editUser'])
->getMock();
@@ -430,7 +518,8 @@ class UsersControllerTest extends TestCase {
$this->userManager
->expects($this->once())
->method('createUser')
- ->with('NewUser', 'PasswordOfTheNewUser');
+ ->with('NewUser', 'PasswordOfTheNewUser')
+ ->willReturn($this->createMock(IUser::class));
$this->logger
->expects($this->once())
->method('info')
@@ -462,7 +551,7 @@ class UsersControllerTest extends TestCase {
));
}
- public function testAddUserSuccessfulGenerateUserID() {
+ public function testAddUserSuccessfulGenerateUserID(): void {
$this->config
->expects($this->any())
->method('getAppValue')
@@ -480,7 +569,8 @@ class UsersControllerTest extends TestCase {
$this->userManager
->expects($this->once())
->method('createUser')
- ->with($this->anything(), 'PasswordOfTheNewUser');
+ ->with($this->anything(), 'PasswordOfTheNewUser')
+ ->willReturn($this->createMock(IUser::class));
$this->logger
->expects($this->once())
->method('info')
@@ -489,7 +579,7 @@ class UsersControllerTest extends TestCase {
->disableOriginalConstructor()
->getMock();
$loggedInUser
- ->expects($this->once())
+ ->expects($this->exactly(2))
->method('getUID')
->willReturn('adminUser');
$this->userSession
@@ -514,7 +604,7 @@ class UsersControllerTest extends TestCase {
));
}
- public function testAddUserSuccessfulGeneratePassword() {
+ public function testAddUserSuccessfulGeneratePassword(): void {
$this->userManager
->expects($this->once())
->method('userExists')
@@ -522,7 +612,7 @@ class UsersControllerTest extends TestCase {
->willReturn(false);
$newUser = $this->createMock(IUser::class);
$newUser->expects($this->once())
- ->method('setEMailAddress');
+ ->method('setSystemEMailAddress');
$this->userManager
->expects($this->once())
->method('createUser')
@@ -535,7 +625,7 @@ class UsersControllerTest extends TestCase {
->disableOriginalConstructor()
->getMock();
$loggedInUser
- ->expects($this->once())
+ ->expects($this->exactly(2))
->method('getUID')
->willReturn('adminUser');
$this->userSession
@@ -558,10 +648,55 @@ class UsersControllerTest extends TestCase {
));
}
+ public function testAddUserSuccessfulLowercaseEmail(): void {
+ $this->userManager
+ ->expects($this->once())
+ ->method('userExists')
+ ->with('NewUser')
+ ->willReturn(false);
+ $newUser = $this->createMock(IUser::class);
+ $newUser->expects($this->once())
+ ->method('setSystemEMailAddress')
+ ->with('foo@bar.com');
+ $this->userManager
+ ->expects($this->once())
+ ->method('createUser')
+ ->willReturn($newUser);
+ $this->logger
+ ->expects($this->once())
+ ->method('info')
+ ->with('Successful addUser call with userid: NewUser', ['app' => 'ocs_api']);
+ $loggedInUser = $this->getMockBuilder(IUser::class)
+ ->disableOriginalConstructor()
+ ->getMock();
+ $loggedInUser
+ ->expects($this->exactly(2))
+ ->method('getUID')
+ ->willReturn('adminUser');
+ $this->userSession
+ ->expects($this->once())
+ ->method('getUser')
+ ->willReturn($loggedInUser);
+ $this->groupManager
+ ->expects($this->once())
+ ->method('isAdmin')
+ ->with('adminUser')
+ ->willReturn(true);
+ $this->eventDispatcher
+ ->expects($this->once())
+ ->method('dispatchTyped')
+ ->with(new GenerateSecurePasswordEvent());
+
+ $this->assertTrue(key_exists(
+ 'id',
+ $this->api->addUser('NewUser', '', '', 'fOo@BaR.CoM')->getData()
+ ));
+ }
- public function testAddUserFailedToGenerateUserID() {
- $this->expectException(\OCP\AppFramework\OCS\OCSException::class);
- $this->expectExceptionMessage('Could not create non-existing user id');
+
+ public function testAddUserFailedToGenerateUserID(): void {
+ $this->expectException(OCSException::class);
+ $this->expectExceptionMessage('Could not create non-existing user ID');
$this->expectExceptionCode(111);
$this->config
@@ -585,7 +720,7 @@ class UsersControllerTest extends TestCase {
->disableOriginalConstructor()
->getMock();
$loggedInUser
- ->expects($this->once())
+ ->expects($this->exactly(2))
->method('getUID')
->willReturn('adminUser');
$this->userSession
@@ -602,8 +737,8 @@ class UsersControllerTest extends TestCase {
}
- public function testAddUserEmailRequired() {
- $this->expectException(\OCP\AppFramework\OCS\OCSException::class);
+ public function testAddUserEmailRequired(): void {
+ $this->expectException(OCSException::class);
$this->expectExceptionMessage('Required email address was not provided');
$this->expectExceptionCode(110);
@@ -628,7 +763,7 @@ class UsersControllerTest extends TestCase {
->disableOriginalConstructor()
->getMock();
$loggedInUser
- ->expects($this->once())
+ ->expects($this->exactly(2))
->method('getUID')
->willReturn('adminUser');
$this->userSession
@@ -647,7 +782,7 @@ class UsersControllerTest extends TestCase {
));
}
- public function testAddUserExistingGroup() {
+ public function testAddUserExistingGroup(): void {
$this->userManager
->expects($this->once())
->method('userExists')
@@ -657,7 +792,7 @@ class UsersControllerTest extends TestCase {
->disableOriginalConstructor()
->getMock();
$loggedInUser
- ->expects($this->once())
+ ->expects($this->exactly(2))
->method('getUID')
->willReturn('adminUser');
$this->userSession
@@ -694,23 +829,25 @@ class UsersControllerTest extends TestCase {
->method('get')
->with('ExistingGroup')
->willReturn($group);
+
+ $calls = [
+ ['Successful addUser call with userid: NewUser', ['app' => 'ocs_api']],
+ ['Added userid NewUser to group ExistingGroup', ['app' => 'ocs_api']],
+ ];
$this->logger
->expects($this->exactly(2))
->method('info')
- ->withConsecutive(
- ['Successful addUser call with userid: NewUser', ['app' => 'ocs_api']],
- ['Added userid NewUser to group ExistingGroup', ['app' => 'ocs_api']]
- );
+ ->willReturnCallback(function () use (&$calls): void {
+ $expected = array_shift($calls);
+ $this->assertEquals($expected, func_get_args());
+ });
- $this->assertTrue(key_exists(
- 'id',
- $this->api->addUser('NewUser', 'PasswordOfTheNewUser', '', '', ['ExistingGroup'])->getData()
- ));
+ $this->assertArrayHasKey('id', $this->api->addUser('NewUser', 'PasswordOfTheNewUser', '', '', ['ExistingGroup'])->getData());
}
- public function testAddUserUnsuccessful() {
- $this->expectException(\OCP\AppFramework\OCS\OCSException::class);
+ public function testAddUserUnsuccessful(): void {
+ $this->expectException(OCSException::class);
$this->expectExceptionMessage('Bad request');
$this->expectExceptionCode(101);
@@ -724,7 +861,7 @@ class UsersControllerTest extends TestCase {
->expects($this->once())
->method('createUser')
->with('NewUser', 'PasswordOfTheNewUser')
- ->will($this->throwException($exception));
+ ->willThrowException($exception);
$this->logger
->expects($this->once())
->method('error')
@@ -739,7 +876,7 @@ class UsersControllerTest extends TestCase {
->disableOriginalConstructor()
->getMock();
$loggedInUser
- ->expects($this->once())
+ ->expects($this->exactly(2))
->method('getUID')
->willReturn('adminUser');
$this->userSession
@@ -756,16 +893,16 @@ class UsersControllerTest extends TestCase {
}
- public function testAddUserAsSubAdminNoGroup() {
- $this->expectException(\OCP\AppFramework\OCS\OCSException::class);
- $this->expectExceptionMessage('no group specified (required for subadmins)');
+ public function testAddUserAsSubAdminNoGroup(): void {
+ $this->expectException(OCSException::class);
+ $this->expectExceptionMessage('No group specified (required for sub-admins)');
$this->expectExceptionCode(106);
$loggedInUser = $this->getMockBuilder(IUser::class)
->disableOriginalConstructor()
->getMock();
$loggedInUser
- ->expects($this->once())
+ ->expects($this->exactly(2))
->method('getUID')
->willReturn('regularUser');
$this->userSession
@@ -789,16 +926,16 @@ class UsersControllerTest extends TestCase {
}
- public function testAddUserAsSubAdminValidGroupNotSubAdmin() {
- $this->expectException(\OCP\AppFramework\OCS\OCSException::class);
- $this->expectExceptionMessage('insufficient privileges for group ExistingGroup');
+ public function testAddUserAsSubAdminValidGroupNotSubAdmin(): void {
+ $this->expectException(OCSException::class);
+ $this->expectExceptionMessage('Insufficient privileges for group ExistingGroup');
$this->expectExceptionCode(105);
$loggedInUser = $this->getMockBuilder(IUser::class)
->disableOriginalConstructor()
->getMock();
$loggedInUser
- ->expects($this->once())
+ ->expects($this->exactly(2))
->method('getUID')
->willReturn('regularUser');
$this->userSession
@@ -837,7 +974,7 @@ class UsersControllerTest extends TestCase {
$this->api->addUser('NewUser', 'PasswordOfTheNewUser', '', '', ['ExistingGroup'])->getData();
}
- public function testAddUserAsSubAdminExistingGroups() {
+ public function testAddUserAsSubAdminExistingGroups(): void {
$this->userManager
->expects($this->once())
->method('userExists')
@@ -847,7 +984,7 @@ class UsersControllerTest extends TestCase {
->disableOriginalConstructor()
->getMock();
$loggedInUser
- ->expects($this->once())
+ ->expects($this->exactly(2))
->method('getUID')
->willReturn('subAdminUser');
$this->userSession
@@ -862,11 +999,10 @@ class UsersControllerTest extends TestCase {
$this->groupManager
->expects($this->exactly(2))
->method('groupExists')
- ->withConsecutive(
- ['ExistingGroup1'],
- ['ExistingGroup2']
- )
- ->willReturn(true);
+ ->willReturnMap([
+ ['ExistingGroup1', true],
+ ['ExistingGroup2', true]
+ ]);
$user = $this->getMockBuilder(IUser::class)
->disableOriginalConstructor()
->getMock();
@@ -892,24 +1028,23 @@ class UsersControllerTest extends TestCase {
$this->groupManager
->expects($this->exactly(4))
->method('get')
- ->withConsecutive(
- ['ExistingGroup1'],
- ['ExistingGroup2'],
- ['ExistingGroup1'],
- ['ExistingGroup2']
- )
->willReturnMap([
['ExistingGroup1', $existingGroup1],
['ExistingGroup2', $existingGroup2]
]);
+
+ $calls = [
+ ['Successful addUser call with userid: NewUser', ['app' => 'ocs_api']],
+ ['Added userid NewUser to group ExistingGroup1', ['app' => 'ocs_api']],
+ ['Added userid NewUser to group ExistingGroup2', ['app' => 'ocs_api']],
+ ];
$this->logger
->expects($this->exactly(3))
->method('info')
- ->withConsecutive(
- ['Successful addUser call with userid: NewUser', ['app' => 'ocs_api']],
- ['Added userid NewUser to group ExistingGroup1', ['app' => 'ocs_api']],
- ['Added userid NewUser to group ExistingGroup2', ['app' => 'ocs_api']]
- );
+ ->willReturnCallback(function () use (&$calls): void {
+ $expected = array_shift($calls);
+ $this->assertEquals($expected, func_get_args());
+ });
$subAdminManager = $this->getMockBuilder('OC\SubAdmin')
->disableOriginalConstructor()->getMock();
$this->groupManager
@@ -919,21 +1054,17 @@ class UsersControllerTest extends TestCase {
$subAdminManager
->expects($this->exactly(2))
->method('isSubAdminOfGroup')
- ->withConsecutive(
- [$loggedInUser, $existingGroup1],
- [$loggedInUser, $existingGroup2]
- )
- ->willReturn(true);
+ ->willReturnMap([
+ [$loggedInUser, $existingGroup1, true],
+ [$loggedInUser, $existingGroup2, true],
+ ]);
- $this->assertTrue(key_exists(
- 'id',
- $this->api->addUser('NewUser', 'PasswordOfTheNewUser', '', '', ['ExistingGroup1', 'ExistingGroup2'])->getData()
- ));
+ $this->assertArrayHasKey('id', $this->api->addUser('NewUser', 'PasswordOfTheNewUser', '', '', ['ExistingGroup1', 'ExistingGroup2'])->getData());
}
- public function testGetUserTargetDoesNotExist() {
- $this->expectException(\OCP\AppFramework\OCS\OCSException::class);
+ public function testGetUserTargetDoesNotExist(): void {
+ $this->expectException(OCSException::class);
$this->expectExceptionMessage('User does not exist');
$this->expectExceptionCode(404);
@@ -952,7 +1083,7 @@ class UsersControllerTest extends TestCase {
$this->api->getUser('UserToGet');
}
- public function testGetUserDataAsAdmin() {
+ public function testGetUserDataAsAdmin(): void {
$group0 = $this->createMock(IGroup::class);
$group1 = $this->createMock(IGroup::class);
$group2 = $this->createMock(IGroup::class);
@@ -964,7 +1095,6 @@ class UsersControllerTest extends TestCase {
->disableOriginalConstructor()
->getMock();
$loggedInUser
- ->expects($this->once())
->method('getUID')
->willReturn('admin');
$targetUser = $this->getMockBuilder(IUser::class)
@@ -974,16 +1104,13 @@ class UsersControllerTest extends TestCase {
->method('getSystemEMailAddress')
->willReturn('demo@nextcloud.com');
$this->userSession
- ->expects($this->once())
->method('getUser')
->willReturn($loggedInUser);
$this->userManager
- ->expects($this->exactly(2))
->method('get')
->with('UID')
->willReturn($targetUser);
$this->groupManager
- ->expects($this->once())
->method('isAdmin')
->with('admin')
->willReturn(true);
@@ -1016,6 +1143,7 @@ class UsersControllerTest extends TestCase {
IAccountManager::PROPERTY_ADDRESS => ['value' => 'address'],
IAccountManager::PROPERTY_PHONE => ['value' => 'phone'],
IAccountManager::PROPERTY_TWITTER => ['value' => 'twitter'],
+ IAccountManager::PROPERTY_BLUESKY => ['value' => 'bluesky'],
IAccountManager::PROPERTY_FEDIVERSE => ['value' => 'fediverse'],
IAccountManager::PROPERTY_WEBSITE => ['value' => 'website'],
IAccountManager::PROPERTY_ORGANISATION => ['value' => 'organisation'],
@@ -1023,6 +1151,7 @@ class UsersControllerTest extends TestCase {
IAccountManager::PROPERTY_HEADLINE => ['value' => 'headline'],
IAccountManager::PROPERTY_BIOGRAPHY => ['value' => 'biography'],
IAccountManager::PROPERTY_PROFILE_ENABLED => ['value' => '1'],
+ IAccountManager::PROPERTY_PRONOUNS => ['value' => 'they/them'],
]);
$this->config
->method('getUserValue')
@@ -1032,7 +1161,7 @@ class UsersControllerTest extends TestCase {
$this->api
->expects($this->once())
->method('fillStorageInfo')
- ->with('UID')
+ ->with($targetUser)
->willReturn(['DummyValue']);
$backend = $this->createMock(UserInterface::class);
@@ -1049,11 +1178,15 @@ class UsersControllerTest extends TestCase {
->method('getHome')
->willReturn('/var/www/newtcloud/data/UID');
$targetUser
- ->expects($this->once())
+ ->expects($this->exactly(2))
->method('getLastLogin')
->willReturn(1521191471);
$targetUser
->expects($this->once())
+ ->method('getFirstLogin')
+ ->willReturn(1511191471);
+ $targetUser
+ ->expects($this->once())
->method('getBackendClassName')
->willReturn('Database');
$targetUser
@@ -1074,6 +1207,8 @@ class UsersControllerTest extends TestCase {
'id' => 'UID',
'enabled' => true,
'storageLocation' => '/var/www/newtcloud/data/UID',
+ 'firstLoginTimestamp' => 1511191471,
+ 'lastLoginTimestamp' => 1521191471,
'lastLogin' => 1521191471000,
'backend' => 'Database',
'subadmin' => ['group3'],
@@ -1085,6 +1220,7 @@ class UsersControllerTest extends TestCase {
'address' => 'address',
'website' => 'website',
'twitter' => 'twitter',
+ 'bluesky' => 'bluesky',
'fediverse' => 'fediverse',
'groups' => ['group0', 'group1', 'group2'],
'language' => 'de',
@@ -1101,16 +1237,16 @@ class UsersControllerTest extends TestCase {
'profile_enabled' => '1',
'notify_email' => null,
'manager' => '',
+ 'pronouns' => 'they/them',
];
$this->assertEquals($expected, $this->invokePrivate($this->api, 'getUserData', ['UID']));
}
- public function testGetUserDataAsSubAdminAndUserIsAccessible() {
+ public function testGetUserDataAsSubAdminAndUserIsAccessible(): void {
$loggedInUser = $this->getMockBuilder(IUser::class)
->disableOriginalConstructor()
->getMock();
$loggedInUser
- ->expects($this->once())
->method('getUID')
->willReturn('subadmin');
$targetUser = $this->getMockBuilder(IUser::class)
@@ -1121,16 +1257,13 @@ class UsersControllerTest extends TestCase {
->method('getSystemEMailAddress')
->willReturn('demo@nextcloud.com');
$this->userSession
- ->expects($this->once())
->method('getUser')
->willReturn($loggedInUser);
$this->userManager
- ->expects($this->exactly(2))
->method('get')
->with('UID')
->willReturn($targetUser);
$this->groupManager
- ->expects($this->once())
->method('isAdmin')
->with('subadmin')
->willReturn(false);
@@ -1162,7 +1295,7 @@ class UsersControllerTest extends TestCase {
$this->api
->expects($this->once())
->method('fillStorageInfo')
- ->with('UID')
+ ->with($targetUser)
->willReturn(['DummyValue']);
$backend = $this->createMock(UserInterface::class);
@@ -1178,11 +1311,15 @@ class UsersControllerTest extends TestCase {
->expects($this->never())
->method('getHome');
$targetUser
- ->expects($this->once())
+ ->expects($this->exactly(2))
->method('getLastLogin')
->willReturn(1521191471);
$targetUser
->expects($this->once())
+ ->method('getFirstLogin')
+ ->willReturn(1511191471);
+ $targetUser
+ ->expects($this->once())
->method('getBackendClassName')
->willReturn('Database');
$targetUser
@@ -1197,6 +1334,7 @@ class UsersControllerTest extends TestCase {
IAccountManager::PROPERTY_ADDRESS => ['value' => 'address'],
IAccountManager::PROPERTY_PHONE => ['value' => 'phone'],
IAccountManager::PROPERTY_TWITTER => ['value' => 'twitter'],
+ IAccountManager::PROPERTY_BLUESKY => ['value' => 'bluesky'],
IAccountManager::PROPERTY_FEDIVERSE => ['value' => 'fediverse'],
IAccountManager::PROPERTY_WEBSITE => ['value' => 'website'],
IAccountManager::PROPERTY_ORGANISATION => ['value' => 'organisation'],
@@ -1204,6 +1342,7 @@ class UsersControllerTest extends TestCase {
IAccountManager::PROPERTY_HEADLINE => ['value' => 'headline'],
IAccountManager::PROPERTY_BIOGRAPHY => ['value' => 'biography'],
IAccountManager::PROPERTY_PROFILE_ENABLED => ['value' => '1'],
+ IAccountManager::PROPERTY_PRONOUNS => ['value' => 'they/them'],
]);
$this->l10nFactory
@@ -1215,6 +1354,8 @@ class UsersControllerTest extends TestCase {
$expected = [
'id' => 'UID',
'enabled' => true,
+ 'firstLoginTimestamp' => 1511191471,
+ 'lastLoginTimestamp' => 1521191471,
'lastLogin' => 1521191471000,
'backend' => 'Database',
'subadmin' => [],
@@ -1226,6 +1367,7 @@ class UsersControllerTest extends TestCase {
'address' => 'address',
'website' => 'website',
'twitter' => 'twitter',
+ 'bluesky' => 'bluesky',
'fediverse' => 'fediverse',
'groups' => [],
'language' => 'da',
@@ -1242,21 +1384,22 @@ class UsersControllerTest extends TestCase {
'profile_enabled' => '1',
'notify_email' => null,
'manager' => '',
+ 'pronouns' => 'they/them',
];
$this->assertEquals($expected, $this->invokePrivate($this->api, 'getUserData', ['UID']));
}
- public function testGetUserDataAsSubAdminAndUserIsNotAccessible() {
- $this->expectException(\OCP\AppFramework\OCS\OCSException::class);
+ public function testGetUserDataAsSubAdminAndUserIsNotAccessible(): void {
+ $this->expectException(OCSException::class);
$this->expectExceptionCode(998);
$loggedInUser = $this->getMockBuilder(IUser::class)
->disableOriginalConstructor()
->getMock();
$loggedInUser
- ->expects($this->exactly(3))
+ ->expects($this->exactly(4))
->method('getUID')
->willReturn('subadmin');
$targetUser = $this->getMockBuilder(IUser::class)
@@ -1291,28 +1434,24 @@ class UsersControllerTest extends TestCase {
$this->invokePrivate($this->api, 'getUser', ['UserToGet']);
}
- public function testGetUserDataAsSubAdminSelfLookup() {
+ public function testGetUserDataAsSubAdminSelfLookup(): void {
$loggedInUser = $this->getMockBuilder(IUser::class)
->disableOriginalConstructor()
->getMock();
$loggedInUser
- ->expects($this->exactly(2))
->method('getUID')
->willReturn('UID');
$targetUser = $this->getMockBuilder(IUser::class)
->disableOriginalConstructor()
->getMock();
$this->userSession
- ->expects($this->once())
->method('getUser')
->willReturn($loggedInUser);
$this->userManager
- ->expects($this->exactly(2))
->method('get')
->with('UID')
->willReturn($targetUser);
$this->groupManager
- ->expects($this->once())
->method('isAdmin')
->with('UID')
->willReturn(false);
@@ -1339,7 +1478,7 @@ class UsersControllerTest extends TestCase {
$this->api
->expects($this->once())
->method('fillStorageInfo')
- ->with('UID')
+ ->with($targetUser)
->willReturn(['DummyValue']);
$backend = $this->createMock(UserInterface::class);
@@ -1362,11 +1501,15 @@ class UsersControllerTest extends TestCase {
->expects($this->never())
->method('getHome');
$targetUser
- ->expects($this->once())
+ ->expects($this->exactly(2))
->method('getLastLogin')
->willReturn(1521191471);
$targetUser
->expects($this->once())
+ ->method('getFirstLogin')
+ ->willReturn(1511191471);
+ $targetUser
+ ->expects($this->once())
->method('getBackendClassName')
->willReturn('Database');
$targetUser
@@ -1377,6 +1520,7 @@ class UsersControllerTest extends TestCase {
IAccountManager::PROPERTY_ADDRESS => ['value' => 'address'],
IAccountManager::PROPERTY_PHONE => ['value' => 'phone'],
IAccountManager::PROPERTY_TWITTER => ['value' => 'twitter'],
+ IAccountManager::PROPERTY_BLUESKY => ['value' => 'bluesky'],
IAccountManager::PROPERTY_FEDIVERSE => ['value' => 'fediverse'],
IAccountManager::PROPERTY_WEBSITE => ['value' => 'website'],
IAccountManager::PROPERTY_ORGANISATION => ['value' => 'organisation'],
@@ -1384,6 +1528,7 @@ class UsersControllerTest extends TestCase {
IAccountManager::PROPERTY_HEADLINE => ['value' => 'headline'],
IAccountManager::PROPERTY_BIOGRAPHY => ['value' => 'biography'],
IAccountManager::PROPERTY_PROFILE_ENABLED => ['value' => '1'],
+ IAccountManager::PROPERTY_PRONOUNS => ['value' => 'they/them'],
]);
$this->l10nFactory
@@ -1394,6 +1539,8 @@ class UsersControllerTest extends TestCase {
$expected = [
'id' => 'UID',
+ 'firstLoginTimestamp' => 1511191471,
+ 'lastLoginTimestamp' => 1521191471,
'lastLogin' => 1521191471000,
'backend' => 'Database',
'subadmin' => [],
@@ -1405,6 +1552,7 @@ class UsersControllerTest extends TestCase {
'address' => 'address',
'website' => 'website',
'twitter' => 'twitter',
+ 'bluesky' => 'bluesky',
'fediverse' => 'fediverse',
'groups' => [],
'language' => 'ru',
@@ -1421,11 +1569,12 @@ class UsersControllerTest extends TestCase {
'profile_enabled' => '1',
'notify_email' => null,
'manager' => '',
+ 'pronouns' => 'they/them',
];
$this->assertEquals($expected, $this->invokePrivate($this->api, 'getUserData', ['UID']));
}
- public function dataSearchByPhoneNumbers(): array {
+ public static function dataSearchByPhoneNumbers(): array {
return [
'Invalid country' => ['Not a country code', ['12345' => ['NaN']], 400, null, null, []],
'No number to search' => ['DE', ['12345' => ['NaN']], 200, null, null, []],
@@ -1438,14 +1587,8 @@ class UsersControllerTest extends TestCase {
];
}
- /**
- * @dataProvider dataSearchByPhoneNumbers
- * @param string $location
- * @param array $search
- * @param int $status
- * @param array $expected
- */
- public function testSearchByPhoneNumbers(string $location, array $search, int $status, ?array $searchUsers, ?array $userMatches, array $expected) {
+ #[\PHPUnit\Framework\Attributes\DataProvider('dataSearchByPhoneNumbers')]
+ public function testSearchByPhoneNumbers(string $location, array $search, int $status, ?array $searchUsers, ?array $userMatches, array $expected): void {
$knownTo = 'knownTo';
$user = $this->createMock(IUser::class);
$user->method('getUID')
@@ -1481,7 +1624,7 @@ class UsersControllerTest extends TestCase {
self::assertEquals($expected, $response->getData());
}
- public function testEditUserRegularUserSelfEditChangeDisplayName() {
+ public function testEditUserRegularUserSelfEditChangeDisplayName(): void {
$loggedInUser = $this->getMockBuilder(IUser::class)
->disableOriginalConstructor()
->getMock();
@@ -1518,7 +1661,7 @@ class UsersControllerTest extends TestCase {
$this->assertEquals([], $this->api->editUser('UserToEdit', 'display', 'NewDisplayName')->getData());
}
- public function testEditUserRegularUserSelfEditChangeEmailValid() {
+ public function testEditUserRegularUserSelfEditChangeEmailValid(): void {
$loggedInUser = $this->getMockBuilder(IUser::class)
->disableOriginalConstructor()
->getMock();
@@ -1540,7 +1683,7 @@ class UsersControllerTest extends TestCase {
->willReturn($targetUser);
$targetUser
->expects($this->once())
- ->method('setEMailAddress')
+ ->method('setSystemEMailAddress')
->with('demo@nextcloud.com');
$targetUser
->expects($this->any())
@@ -1553,6 +1696,8 @@ class UsersControllerTest extends TestCase {
->method('getBackend')
->willReturn($backend);
+ $this->config->method('getSystemValue')->willReturnCallback(fn (string $key, mixed $default) => $default);
+
$this->assertEquals([], $this->api->editUser('UserToEdit', 'email', 'demo@nextcloud.com')->getData());
}
@@ -1650,7 +1795,7 @@ class UsersControllerTest extends TestCase {
->with($userAccount);
$this->expectException(OCSException::class);
- $this->expectExceptionCode(102);
+ $this->expectExceptionCode(101);
$this->api->editUser('UserToEdit', 'additional_mail', 'demo@nextcloud.com')->getData();
}
@@ -1709,13 +1854,13 @@ class UsersControllerTest extends TestCase {
->with($userAccount);
$this->expectException(OCSException::class);
- $this->expectExceptionCode(102);
+ $this->expectExceptionCode(101);
$this->api->editUser('UserToEdit', 'additional_mail', 'demo1@nextcloud.com')->getData();
}
- public function testEditUserRegularUserSelfEditChangeEmailInvalid() {
- $this->expectException(\OCP\AppFramework\OCS\OCSException::class);
- $this->expectExceptionCode(102);
+ public function testEditUserRegularUserSelfEditChangeEmailInvalid(): void {
+ $this->expectException(OCSException::class);
+ $this->expectExceptionCode(101);
$loggedInUser = $this->getMockBuilder(IUser::class)
->disableOriginalConstructor()
@@ -1747,12 +1892,15 @@ class UsersControllerTest extends TestCase {
->method('getBackend')
->willReturn($backend);
+ $this->config->method('getSystemValue')->willReturnCallback(fn (string $key, mixed $default) => $default);
+
$this->api->editUser('UserToEdit', 'email', 'demo.org');
}
- public function selfEditChangePropertyProvider() {
+ public static function selfEditChangePropertyProvider(): array {
return [
[IAccountManager::PROPERTY_TWITTER, '@oldtwitter', '@newtwitter'],
+ [IAccountManager::PROPERTY_BLUESKY, 'old.bluesky', 'new.bluesky'],
[IAccountManager::PROPERTY_FEDIVERSE, '@oldFediverse@floss.social', '@newFediverse@floss.social'],
[IAccountManager::PROPERTY_PHONE, '1234', '12345'],
[IAccountManager::PROPERTY_ADDRESS, 'Something street 2', 'Another street 3'],
@@ -1762,13 +1910,12 @@ class UsersControllerTest extends TestCase {
[IAccountManager::PROPERTY_HEADLINE, 'Hi', 'Hello'],
[IAccountManager::PROPERTY_BIOGRAPHY, 'A biography', 'Another biography'],
[IAccountManager::PROPERTY_PROFILE_ENABLED, '1', '0'],
+ [IAccountManager::PROPERTY_PRONOUNS, 'they/them', 'he/him'],
];
}
- /**
- * @dataProvider selfEditChangePropertyProvider
- */
- public function testEditUserRegularUserSelfEditChangeProperty($propertyName, $oldValue, $newValue) {
+ #[\PHPUnit\Framework\Attributes\DataProvider('selfEditChangePropertyProvider')]
+ public function testEditUserRegularUserSelfEditChangeProperty($propertyName, $oldValue, $newValue): void {
$loggedInUser = $this->getMockBuilder(IUser::class)
->disableOriginalConstructor()
->getMock();
@@ -1830,6 +1977,7 @@ class UsersControllerTest extends TestCase {
[IAccountManager::PROPERTY_DISPLAYNAME, IAccountManager::SCOPE_LOCAL, IAccountManager::SCOPE_FEDERATED],
[IAccountManager::PROPERTY_EMAIL, IAccountManager::SCOPE_LOCAL, IAccountManager::SCOPE_FEDERATED],
[IAccountManager::PROPERTY_TWITTER, IAccountManager::SCOPE_LOCAL, IAccountManager::SCOPE_FEDERATED],
+ [IAccountManager::PROPERTY_BLUESKY, IAccountManager::SCOPE_LOCAL, IAccountManager::SCOPE_FEDERATED],
[IAccountManager::PROPERTY_FEDIVERSE, IAccountManager::SCOPE_LOCAL, IAccountManager::SCOPE_FEDERATED],
[IAccountManager::PROPERTY_PHONE, IAccountManager::SCOPE_LOCAL, IAccountManager::SCOPE_FEDERATED],
[IAccountManager::PROPERTY_ADDRESS, IAccountManager::SCOPE_LOCAL, IAccountManager::SCOPE_FEDERATED],
@@ -1839,13 +1987,12 @@ class UsersControllerTest extends TestCase {
[IAccountManager::PROPERTY_HEADLINE, IAccountManager::SCOPE_LOCAL, IAccountManager::SCOPE_FEDERATED],
[IAccountManager::PROPERTY_BIOGRAPHY, IAccountManager::SCOPE_LOCAL, IAccountManager::SCOPE_FEDERATED],
[IAccountManager::PROPERTY_PROFILE_ENABLED, IAccountManager::SCOPE_LOCAL, IAccountManager::SCOPE_FEDERATED],
+ [IAccountManager::PROPERTY_PRONOUNS, IAccountManager::SCOPE_LOCAL, IAccountManager::SCOPE_FEDERATED],
];
}
- /**
- * @dataProvider selfEditChangePropertyProvider
- */
- public function testEditUserRegularUserSelfEditChangePropertyScope($propertyName, $oldScope, $newScope) {
+ #[\PHPUnit\Framework\Attributes\DataProvider('selfEditChangePropertyProvider')]
+ public function testEditUserRegularUserSelfEditChangePropertyScope($propertyName, $oldScope, $newScope): void {
$loggedInUser = $this->getMockBuilder(IUser::class)
->disableOriginalConstructor()
->getMock();
@@ -1901,7 +2048,7 @@ class UsersControllerTest extends TestCase {
$this->assertEquals([], $this->api->editUser('UserToEdit', $propertyName . 'Scope', $newScope)->getData());
}
- public function testEditUserRegularUserSelfEditChangePassword() {
+ public function testEditUserRegularUserSelfEditChangePassword(): void {
$loggedInUser = $this->getMockBuilder(IUser::class)
->disableOriginalConstructor()
->getMock();
@@ -1945,9 +2092,9 @@ class UsersControllerTest extends TestCase {
- public function testEditUserRegularUserSelfEditChangeQuota() {
- $this->expectException(\OCP\AppFramework\OCS\OCSException::class);
- $this->expectExceptionCode(103);
+ public function testEditUserRegularUserSelfEditChangeQuota(): void {
+ $this->expectException(OCSException::class);
+ $this->expectExceptionCode(113);
$loggedInUser = $this->getMockBuilder(IUser::class)
->disableOriginalConstructor()
@@ -1982,7 +2129,7 @@ class UsersControllerTest extends TestCase {
$this->api->editUser('UserToEdit', 'quota', 'NewQuota');
}
- public function testEditUserAdminUserSelfEditChangeValidQuota() {
+ public function testEditUserAdminUserSelfEditChangeValidQuota(): void {
$this->config
->expects($this->once())
->method('getAppValue')
@@ -2031,10 +2178,10 @@ class UsersControllerTest extends TestCase {
- public function testEditUserAdminUserSelfEditChangeInvalidQuota() {
- $this->expectException(\OCP\AppFramework\OCS\OCSException::class);
- $this->expectExceptionMessage('Invalid quota value ABC');
- $this->expectExceptionCode(102);
+ public function testEditUserAdminUserSelfEditChangeInvalidQuota(): void {
+ $this->expectException(OCSException::class);
+ $this->expectExceptionMessage('Invalid quota value: ABC');
+ $this->expectExceptionCode(101);
$loggedInUser = $this->getMockBuilder(IUser::class)->disableOriginalConstructor()->getMock();
$loggedInUser
@@ -2070,7 +2217,7 @@ class UsersControllerTest extends TestCase {
$this->api->editUser('UserToEdit', 'quota', 'ABC');
}
- public function testEditUserAdminUserEditChangeValidQuota() {
+ public function testEditUserAdminUserEditChangeValidQuota(): void {
$this->config
->expects($this->once())
->method('getAppValue')
@@ -2124,7 +2271,7 @@ class UsersControllerTest extends TestCase {
$this->assertEquals([], $this->api->editUser('UserToEdit', 'quota', '3042824')->getData());
}
- public function testEditUserSelfEditChangeLanguage() {
+ public function testEditUserSelfEditChangeLanguage(): void {
$this->l10nFactory->expects($this->once())
->method('findAvailableLanguages')
->willReturn(['en', 'de', 'sv']);
@@ -2172,18 +2319,16 @@ class UsersControllerTest extends TestCase {
$this->assertEquals([], $this->api->editUser('UserToEdit', 'language', 'de')->getData());
}
- public function dataEditUserSelfEditChangeLanguageButForced() {
+ public static function dataEditUserSelfEditChangeLanguageButForced(): array {
return [
['de'],
[true],
];
}
- /**
- * @dataProvider dataEditUserSelfEditChangeLanguageButForced
- */
- public function testEditUserSelfEditChangeLanguageButForced($forced) {
- $this->expectException(\OCP\AppFramework\OCS\OCSException::class);
+ #[\PHPUnit\Framework\Attributes\DataProvider('dataEditUserSelfEditChangeLanguageButForced')]
+ public function testEditUserSelfEditChangeLanguageButForced($forced): void {
+ $this->expectException(OCSException::class);
$this->config->expects($this->any())
->method('getSystemValue')
@@ -2228,7 +2373,7 @@ class UsersControllerTest extends TestCase {
$this->assertEquals([], $this->api->editUser('UserToEdit', 'language', 'de')->getData());
}
- public function testEditUserAdminEditChangeLanguage() {
+ public function testEditUserAdminEditChangeLanguage(): void {
$this->l10nFactory->expects($this->once())
->method('findAvailableLanguages')
->willReturn(['en', 'de', 'sv']);
@@ -2275,11 +2420,9 @@ class UsersControllerTest extends TestCase {
$this->assertEquals([], $this->api->editUser('UserToEdit', 'language', 'de')->getData());
}
- /**
- * @dataProvider dataEditUserSelfEditChangeLanguageButForced
- */
- public function testEditUserAdminEditChangeLanguageInvalidLanguage() {
- $this->expectException(\OCP\AppFramework\OCS\OCSException::class);
+ #[\PHPUnit\Framework\Attributes\DataProvider('dataEditUserSelfEditChangeLanguageButForced')]
+ public function testEditUserAdminEditChangeLanguageInvalidLanguage(): void {
+ $this->expectException(OCSException::class);
$this->l10nFactory->expects($this->once())
@@ -2327,7 +2470,7 @@ class UsersControllerTest extends TestCase {
$this->assertEquals([], $this->api->editUser('UserToEdit', 'language', 'ru')->getData());
}
- public function testEditUserSubadminUserAccessible() {
+ public function testEditUserSubadminUserAccessible(): void {
$this->config
->expects($this->once())
->method('getAppValue')
@@ -2382,8 +2525,8 @@ class UsersControllerTest extends TestCase {
}
- public function testEditUserSubadminUserInaccessible() {
- $this->expectException(\OCP\AppFramework\OCS\OCSException::class);
+ public function testEditUserSubadminUserInaccessible(): void {
+ $this->expectException(OCSException::class);
$this->expectExceptionCode(998);
$loggedInUser = $this->getMockBuilder(IUser::class)->disableOriginalConstructor()->getMock();
@@ -2422,8 +2565,8 @@ class UsersControllerTest extends TestCase {
}
- public function testDeleteUserNotExistingUser() {
- $this->expectException(\OCP\AppFramework\OCS\OCSException::class);
+ public function testDeleteUserNotExistingUser(): void {
+ $this->expectException(OCSException::class);
$this->expectExceptionCode(998);
$loggedInUser = $this->getMockBuilder(IUser::class)->disableOriginalConstructor()->getMock();
@@ -2445,8 +2588,8 @@ class UsersControllerTest extends TestCase {
}
- public function testDeleteUserSelf() {
- $this->expectException(\OCP\AppFramework\OCS\OCSException::class);
+ public function testDeleteUserSelf(): void {
+ $this->expectException(OCSException::class);
$this->expectExceptionCode(101);
$loggedInUser = $this->getMockBuilder(IUser::class)->disableOriginalConstructor()->getMock();
@@ -2472,7 +2615,7 @@ class UsersControllerTest extends TestCase {
$this->api->deleteUser('UserToDelete');
}
- public function testDeleteSuccessfulUserAsAdmin() {
+ public function testDeleteSuccessfulUserAsAdmin(): void {
$loggedInUser = $this->getMockBuilder(IUser::class)->disableOriginalConstructor()->getMock();
$loggedInUser
->expects($this->any())
@@ -2506,8 +2649,8 @@ class UsersControllerTest extends TestCase {
}
- public function testDeleteUnsuccessfulUserAsAdmin() {
- $this->expectException(\OCP\AppFramework\OCS\OCSException::class);
+ public function testDeleteUnsuccessfulUserAsAdmin(): void {
+ $this->expectException(OCSException::class);
$this->expectExceptionCode(101);
$loggedInUser = $this->getMockBuilder(IUser::class)->disableOriginalConstructor()->getMock();
@@ -2542,7 +2685,7 @@ class UsersControllerTest extends TestCase {
$this->api->deleteUser('UserToDelete');
}
- public function testDeleteSuccessfulUserAsSubadmin() {
+ public function testDeleteSuccessfulUserAsSubadmin(): void {
$loggedInUser = $this->getMockBuilder(IUser::class)->disableOriginalConstructor()->getMock();
$loggedInUser
->expects($this->any())
@@ -2587,8 +2730,8 @@ class UsersControllerTest extends TestCase {
}
- public function testDeleteUnsuccessfulUserAsSubadmin() {
- $this->expectException(\OCP\AppFramework\OCS\OCSException::class);
+ public function testDeleteUnsuccessfulUserAsSubadmin(): void {
+ $this->expectException(OCSException::class);
$this->expectExceptionCode(101);
$loggedInUser = $this->getMockBuilder(IUser::class)->disableOriginalConstructor()->getMock();
@@ -2635,8 +2778,8 @@ class UsersControllerTest extends TestCase {
}
- public function testDeleteUserAsSubAdminAndUserIsNotAccessible() {
- $this->expectException(\OCP\AppFramework\OCS\OCSException::class);
+ public function testDeleteUserAsSubAdminAndUserIsNotAccessible(): void {
+ $this->expectException(OCSException::class);
$this->expectExceptionCode(998);
$loggedInUser = $this->getMockBuilder(IUser::class)->disableOriginalConstructor()->getMock();
@@ -2679,8 +2822,8 @@ class UsersControllerTest extends TestCase {
}
- public function testGetUsersGroupsTargetUserNotExisting() {
- $this->expectException(\OCP\AppFramework\OCS\OCSException::class);
+ public function testGetUsersGroupsTargetUserNotExisting(): void {
+ $this->expectException(OCSException::class);
$this->expectExceptionCode(998);
$loggedInUser = $this->getMockBuilder(IUser::class)->disableOriginalConstructor()->getMock();
@@ -2692,10 +2835,10 @@ class UsersControllerTest extends TestCase {
$this->api->getUsersGroups('UserToLookup');
}
- public function testGetUsersGroupsSelfTargetted() {
+ public function testGetUsersGroupsSelfTargetted(): void {
$loggedInUser = $this->getMockBuilder(IUser::class)->disableOriginalConstructor()->getMock();
$loggedInUser
- ->expects($this->once())
+ ->expects($this->exactly(3))
->method('getUID')
->willReturn('UserToLookup');
$targetUser = $this->getMockBuilder(IUser::class)->disableOriginalConstructor()->getMock();
@@ -2721,10 +2864,10 @@ class UsersControllerTest extends TestCase {
$this->assertEquals(['groups' => ['DummyValue']], $this->api->getUsersGroups('UserToLookup')->getData());
}
- public function testGetUsersGroupsForAdminUser() {
+ public function testGetUsersGroupsForAdminUser(): void {
$loggedInUser = $this->getMockBuilder(IUser::class)->disableOriginalConstructor()->getMock();
$loggedInUser
- ->expects($this->exactly(2))
+ ->expects($this->exactly(3))
->method('getUID')
->willReturn('admin');
$targetUser = $this->getMockBuilder(IUser::class)->disableOriginalConstructor()->getMock();
@@ -2755,10 +2898,10 @@ class UsersControllerTest extends TestCase {
$this->assertEquals(['groups' => ['DummyValue']], $this->api->getUsersGroups('UserToLookup')->getData());
}
- public function testGetUsersGroupsForSubAdminUserAndUserIsAccessible() {
+ public function testGetUsersGroupsForSubAdminUserAndUserIsAccessible(): void {
$loggedInUser = $this->getMockBuilder(IUser::class)->disableOriginalConstructor()->getMock();
$loggedInUser
- ->expects($this->exactly(2))
+ ->expects($this->exactly(3))
->method('getUID')
->willReturn('subadmin');
$targetUser = $this->getMockBuilder(IUser::class)->disableOriginalConstructor()->getMock();
@@ -2816,13 +2959,13 @@ class UsersControllerTest extends TestCase {
}
- public function testGetUsersGroupsForSubAdminUserAndUserIsInaccessible() {
- $this->expectException(\OCP\AppFramework\OCS\OCSException::class);
+ public function testGetUsersGroupsForSubAdminUserAndUserIsInaccessible(): void {
+ $this->expectException(OCSException::class);
$this->expectExceptionCode(998);
$loggedInUser = $this->getMockBuilder(IUser::class)->disableOriginalConstructor()->getMock();
$loggedInUser
- ->expects($this->exactly(2))
+ ->expects($this->exactly(3))
->method('getUID')
->willReturn('subadmin');
$targetUser = $this->getMockBuilder(IUser::class)->disableOriginalConstructor()->getMock();
@@ -2865,8 +3008,8 @@ class UsersControllerTest extends TestCase {
}
- public function testAddToGroupWithTargetGroupNotExisting() {
- $this->expectException(\OCP\AppFramework\OCS\OCSException::class);
+ public function testAddToGroupWithTargetGroupNotExisting(): void {
+ $this->expectException(OCSException::class);
$this->expectExceptionCode(102);
$this->groupManager->expects($this->once())
@@ -2878,16 +3021,16 @@ class UsersControllerTest extends TestCase {
}
- public function testAddToGroupWithNoGroupSpecified() {
- $this->expectException(\OCP\AppFramework\OCS\OCSException::class);
+ public function testAddToGroupWithNoGroupSpecified(): void {
+ $this->expectException(OCSException::class);
$this->expectExceptionCode(101);
$this->api->addToGroup('TargetUser');
}
- public function testAddToGroupWithTargetUserNotExisting() {
- $this->expectException(\OCP\AppFramework\OCS\OCSException::class);
+ public function testAddToGroupWithTargetUserNotExisting(): void {
+ $this->expectException(OCSException::class);
$this->expectExceptionCode(103);
$targetGroup = $this->createMock(IGroup::class);
@@ -2900,13 +3043,13 @@ class UsersControllerTest extends TestCase {
}
- public function testAddToGroupNoSubadmin() {
- $this->expectException(\OCP\AppFramework\OCS\OCSException::class);
+ public function testAddToGroupNoSubadmin(): void {
+ $this->expectException(OCSException::class);
$this->expectExceptionCode(104);
$targetUser = $this->createMock(IUser::class);
$loggedInUser = $this->createMock(IUser::class);
- $loggedInUser->expects($this->once())
+ $loggedInUser->expects($this->exactly(2))
->method('getUID')
->willReturn('subadmin');
@@ -2947,10 +3090,10 @@ class UsersControllerTest extends TestCase {
$this->api->addToGroup('TargetUser', 'GroupToAddTo');
}
- public function testAddToGroupSuccessAsSubadmin() {
+ public function testAddToGroupSuccessAsSubadmin(): void {
$targetUser = $this->createMock(IUser::class);
$loggedInUser = $this->createMock(IUser::class);
- $loggedInUser->expects($this->once())
+ $loggedInUser->expects($this->exactly(2))
->method('getUID')
->willReturn('subadmin');
@@ -2991,10 +3134,10 @@ class UsersControllerTest extends TestCase {
$this->assertEquals(new DataResponse(), $this->api->addToGroup('TargetUser', 'GroupToAddTo'));
}
- public function testAddToGroupSuccessAsAdmin() {
+ public function testAddToGroupSuccessAsAdmin(): void {
$targetUser = $this->createMock(IUser::class);
$loggedInUser = $this->createMock(IUser::class);
- $loggedInUser->expects($this->once())
+ $loggedInUser->expects($this->exactly(2))
->method('getUID')
->willReturn('admin');
@@ -3034,8 +3177,8 @@ class UsersControllerTest extends TestCase {
}
- public function testRemoveFromGroupWithNoTargetGroup() {
- $this->expectException(\OCP\AppFramework\OCS\OCSException::class);
+ public function testRemoveFromGroupWithNoTargetGroup(): void {
+ $this->expectException(OCSException::class);
$this->expectExceptionCode(101);
$loggedInUser = $this->getMockBuilder(IUser::class)->disableOriginalConstructor()->getMock();
@@ -3048,8 +3191,8 @@ class UsersControllerTest extends TestCase {
}
- public function testRemoveFromGroupWithEmptyTargetGroup() {
- $this->expectException(\OCP\AppFramework\OCS\OCSException::class);
+ public function testRemoveFromGroupWithEmptyTargetGroup(): void {
+ $this->expectException(OCSException::class);
$this->expectExceptionCode(101);
$loggedInUser = $this->getMockBuilder(IUser::class)->disableOriginalConstructor()->getMock();
@@ -3062,8 +3205,8 @@ class UsersControllerTest extends TestCase {
}
- public function testRemoveFromGroupWithNotExistingTargetGroup() {
- $this->expectException(\OCP\AppFramework\OCS\OCSException::class);
+ public function testRemoveFromGroupWithNotExistingTargetGroup(): void {
+ $this->expectException(OCSException::class);
$this->expectExceptionCode(102);
$loggedInUser = $this->getMockBuilder(IUser::class)->disableOriginalConstructor()->getMock();
@@ -3081,8 +3224,8 @@ class UsersControllerTest extends TestCase {
}
- public function testRemoveFromGroupWithNotExistingTargetUser() {
- $this->expectException(\OCP\AppFramework\OCS\OCSException::class);
+ public function testRemoveFromGroupWithNotExistingTargetUser(): void {
+ $this->expectException(OCSException::class);
$this->expectExceptionCode(103);
$loggedInUser = $this->getMockBuilder(IUser::class)->disableOriginalConstructor()->getMock();
@@ -3106,13 +3249,13 @@ class UsersControllerTest extends TestCase {
}
- public function testRemoveFromGroupWithoutPermission() {
- $this->expectException(\OCP\AppFramework\OCS\OCSException::class);
+ public function testRemoveFromGroupWithoutPermission(): void {
+ $this->expectException(OCSException::class);
$this->expectExceptionCode(104);
$loggedInUser = $this->getMockBuilder(IUser::class)->disableOriginalConstructor()->getMock();
$loggedInUser
- ->expects($this->once())
+ ->expects($this->exactly(2))
->method('getUID')
->willReturn('unauthorizedUser');
$targetUser = $this->getMockBuilder(IUser::class)->disableOriginalConstructor()->getMock();
@@ -3147,8 +3290,8 @@ class UsersControllerTest extends TestCase {
}
- public function testRemoveFromGroupAsAdminFromAdmin() {
- $this->expectException(\OCP\AppFramework\OCS\OCSException::class);
+ public function testRemoveFromGroupAsAdminFromAdmin(): void {
+ $this->expectException(OCSException::class);
$this->expectExceptionMessage('Cannot remove yourself from the admin group');
$this->expectExceptionCode(105);
@@ -3197,9 +3340,9 @@ class UsersControllerTest extends TestCase {
}
- public function testRemoveFromGroupAsSubAdminFromSubAdmin() {
- $this->expectException(\OCP\AppFramework\OCS\OCSException::class);
- $this->expectExceptionMessage('Cannot remove yourself from this group as you are a SubAdmin');
+ public function testRemoveFromGroupAsSubAdminFromSubAdmin(): void {
+ $this->expectException(OCSException::class);
+ $this->expectExceptionMessage('Cannot remove yourself from this group as you are a sub-admin');
$this->expectExceptionCode(105);
$loggedInUser = $this->getMockBuilder(IUser::class)->disableOriginalConstructor()->getMock();
@@ -3252,9 +3395,9 @@ class UsersControllerTest extends TestCase {
}
- public function testRemoveFromGroupAsSubAdminFromLastSubAdminGroup() {
- $this->expectException(\OCP\AppFramework\OCS\OCSException::class);
- $this->expectExceptionMessage('Not viable to remove user from the last group you are SubAdmin of');
+ public function testRemoveFromGroupAsSubAdminFromLastSubAdminGroup(): void {
+ $this->expectException(OCSException::class);
+ $this->expectExceptionMessage('Not viable to remove user from the last group you are sub-admin of');
$this->expectExceptionCode(105);
$loggedInUser = $this->getMockBuilder(IUser::class)->disableOriginalConstructor()->getMock();
@@ -3313,7 +3456,7 @@ class UsersControllerTest extends TestCase {
$this->api->removeFromGroup('AnotherUser', 'subadmin');
}
- public function testRemoveFromGroupSuccessful() {
+ public function testRemoveFromGroupSuccessful(): void {
$loggedInUser = $this->getMockBuilder(IUser::class)->disableOriginalConstructor()->getMock();
$loggedInUser
->expects($this->any())
@@ -3355,8 +3498,8 @@ class UsersControllerTest extends TestCase {
}
- public function testAddSubAdminWithNotExistingTargetUser() {
- $this->expectException(\OCP\AppFramework\OCS\OCSException::class);
+ public function testAddSubAdminWithNotExistingTargetUser(): void {
+ $this->expectException(OCSException::class);
$this->expectExceptionMessage('User does not exist');
$this->expectExceptionCode(101);
@@ -3370,8 +3513,8 @@ class UsersControllerTest extends TestCase {
}
- public function testAddSubAdminWithNotExistingTargetGroup() {
- $this->expectException(\OCP\AppFramework\OCS\OCSException::class);
+ public function testAddSubAdminWithNotExistingTargetGroup(): void {
+ $this->expectException(OCSException::class);
$this->expectExceptionMessage('Group does not exist');
$this->expectExceptionCode(102);
@@ -3392,9 +3535,9 @@ class UsersControllerTest extends TestCase {
}
- public function testAddSubAdminToAdminGroup() {
- $this->expectException(\OCP\AppFramework\OCS\OCSException::class);
- $this->expectExceptionMessage('Cannot create subadmins for admin group');
+ public function testAddSubAdminToAdminGroup(): void {
+ $this->expectException(OCSException::class);
+ $this->expectExceptionMessage('Cannot create sub-admins for admin group');
$this->expectExceptionCode(103);
$targetUser = $this->getMockBuilder(IUser::class)->disableOriginalConstructor()->getMock();
@@ -3417,7 +3560,7 @@ class UsersControllerTest extends TestCase {
$this->api->addSubAdmin('ExistingUser', 'ADmiN');
}
- public function testAddSubAdminTwice() {
+ public function testAddSubAdminTwice(): void {
$targetUser = $this->getMockBuilder(IUser::class)->disableOriginalConstructor()->getMock();
$targetGroup = $this->getMockBuilder('\OCP\IGroup')->disableOriginalConstructor()->getMock();
$this->userManager
@@ -3445,7 +3588,7 @@ class UsersControllerTest extends TestCase {
$this->assertEquals([], $this->api->addSubAdmin('ExistingUser', 'TargetGroup')->getData());
}
- public function testAddSubAdminSuccessful() {
+ public function testAddSubAdminSuccessful(): void {
$targetUser = $this->getMockBuilder(IUser::class)->disableOriginalConstructor()->getMock();
$targetGroup = $this->getMockBuilder('\OCP\IGroup')->disableOriginalConstructor()->getMock();
$this->userManager
@@ -3478,8 +3621,8 @@ class UsersControllerTest extends TestCase {
}
- public function testRemoveSubAdminNotExistingTargetUser() {
- $this->expectException(\OCP\AppFramework\OCS\OCSException::class);
+ public function testRemoveSubAdminNotExistingTargetUser(): void {
+ $this->expectException(OCSException::class);
$this->expectExceptionMessage('User does not exist');
$this->expectExceptionCode(101);
@@ -3493,8 +3636,8 @@ class UsersControllerTest extends TestCase {
}
- public function testRemoveSubAdminNotExistingTargetGroup() {
- $this->expectException(\OCP\AppFramework\OCS\OCSException::class);
+ public function testRemoveSubAdminNotExistingTargetGroup(): void {
+ $this->expectException(OCSException::class);
$this->expectExceptionMessage('Group does not exist');
$this->expectExceptionCode(101);
@@ -3515,9 +3658,9 @@ class UsersControllerTest extends TestCase {
- public function testRemoveSubAdminFromNotASubadmin() {
- $this->expectException(\OCP\AppFramework\OCS\OCSException::class);
- $this->expectExceptionMessage('User is not a subadmin of this group');
+ public function testRemoveSubAdminFromNotASubadmin(): void {
+ $this->expectException(OCSException::class);
+ $this->expectExceptionMessage('User is not a sub-admin of this group');
$this->expectExceptionCode(102);
$targetUser = $this->getMockBuilder(IUser::class)->disableOriginalConstructor()->getMock();
@@ -3547,7 +3690,7 @@ class UsersControllerTest extends TestCase {
$this->api->removeSubAdmin('ExistingUser', 'GroupToDeleteFrom');
}
- public function testRemoveSubAdminSuccessful() {
+ public function testRemoveSubAdminSuccessful(): void {
$targetUser = $this->getMockBuilder(IUser::class)->disableOriginalConstructor()->getMock();
$targetGroup = $this->getMockBuilder('\OCP\IGroup')->disableOriginalConstructor()->getMock();
$this->userManager
@@ -3580,8 +3723,8 @@ class UsersControllerTest extends TestCase {
}
- public function testGetUserSubAdminGroupsNotExistingTargetUser() {
- $this->expectException(\OCP\AppFramework\OCS\OCSException::class);
+ public function testGetUserSubAdminGroupsNotExistingTargetUser(): void {
+ $this->expectException(OCSException::class);
$this->expectExceptionMessage('User does not exist');
$this->expectExceptionCode(404);
@@ -3594,7 +3737,7 @@ class UsersControllerTest extends TestCase {
$this->api->getUserSubAdminGroups('RequestedUser');
}
- public function testGetUserSubAdminGroupsWithGroups() {
+ public function testGetUserSubAdminGroupsWithGroups(): void {
$targetUser = $this->getMockBuilder(IUser::class)->disableOriginalConstructor()->getMock();
$targetGroup = $this->getMockBuilder('\OCP\IGroup')->disableOriginalConstructor()->getMock();
$targetGroup
@@ -3621,7 +3764,7 @@ class UsersControllerTest extends TestCase {
$this->assertEquals(['TargetGroup'], $this->api->getUserSubAdminGroups('RequestedUser')->getData());
}
- public function testEnableUser() {
+ public function testEnableUser(): void {
$targetUser = $this->getMockBuilder(IUser::class)->disableOriginalConstructor()->getMock();
$targetUser->expects($this->once())
->method('setEnabled')
@@ -3633,7 +3776,7 @@ class UsersControllerTest extends TestCase {
->willReturn($targetUser);
$loggedInUser = $this->getMockBuilder(IUser::class)->disableOriginalConstructor()->getMock();
$loggedInUser
- ->expects($this->exactly(2))
+ ->expects($this->exactly(3))
->method('getUID')
->willReturn('admin');
$this->userSession
@@ -3648,7 +3791,7 @@ class UsersControllerTest extends TestCase {
$this->assertEquals([], $this->api->enableUser('RequestedUser')->getData());
}
- public function testDisableUser() {
+ public function testDisableUser(): void {
$targetUser = $this->getMockBuilder(IUser::class)->disableOriginalConstructor()->getMock();
$targetUser->expects($this->once())
->method('setEnabled')
@@ -3660,7 +3803,7 @@ class UsersControllerTest extends TestCase {
->willReturn($targetUser);
$loggedInUser = $this->getMockBuilder(IUser::class)->disableOriginalConstructor()->getMock();
$loggedInUser
- ->expects($this->exactly(2))
+ ->expects($this->exactly(3))
->method('getUID')
->willReturn('admin');
$this->userSession
@@ -3675,7 +3818,7 @@ class UsersControllerTest extends TestCase {
$this->assertEquals([], $this->api->disableUser('RequestedUser')->getData());
}
- public function testGetCurrentUserLoggedIn() {
+ public function testGetCurrentUserLoggedIn(): void {
$user = $this->createMock(IUser::class);
$user->expects($this->once())->method('getUID')->willReturn('UID');
@@ -3692,15 +3835,18 @@ class UsersControllerTest extends TestCase {
$this->groupManager,
$this->userSession,
$this->accountManager,
+ $this->subAdminManager,
+ $this->l10nFactory,
+ $this->rootFolder,
$this->urlGenerator,
$this->logger,
- $this->l10nFactory,
$this->newUserMailHelper,
$this->secureRandom,
$this->remoteWipe,
$this->knownUserService,
$this->eventDispatcher,
$this->phoneNumberUtil,
+ $this->appManager,
])
->onlyMethods(['getUserData'])
->getMock();
@@ -3718,12 +3864,14 @@ class UsersControllerTest extends TestCase {
'address' => 'address',
'website' => 'website',
'twitter' => 'twitter',
+ 'bluesky' => 'bluesky',
'fediverse' => 'fediverse',
'organisation' => 'organisation',
'role' => 'role',
'headline' => 'headline',
'biography' => 'biography',
- 'profile_enabled' => '1'
+ 'profile_enabled' => '1',
+ 'pronouns' => 'they/them',
]
);
@@ -3738,20 +3886,22 @@ class UsersControllerTest extends TestCase {
'address' => 'address',
'website' => 'website',
'twitter' => 'twitter',
+ 'bluesky' => 'bluesky',
'fediverse' => 'fediverse',
'organisation' => 'organisation',
'role' => 'role',
'headline' => 'headline',
'biography' => 'biography',
'profile_enabled' => '1',
+ 'pronouns' => 'they/them',
];
$this->assertSame($expected, $api->getCurrentUser()->getData());
}
- public function testGetCurrentUserNotLoggedIn() {
- $this->expectException(\OCP\AppFramework\OCS\OCSException::class);
+ public function testGetCurrentUserNotLoggedIn(): void {
+ $this->expectException(OCSException::class);
$this->userSession->expects($this->once())->method('getUser')
@@ -3760,7 +3910,7 @@ class UsersControllerTest extends TestCase {
$this->api->getCurrentUser();
}
- public function testGetUser() {
+ public function testGetUser(): void {
$loggedInUser = $this->createMock(IUser::class);
$loggedInUser
->method('getUID')
@@ -3779,15 +3929,18 @@ class UsersControllerTest extends TestCase {
$this->groupManager,
$this->userSession,
$this->accountManager,
+ $this->subAdminManager,
+ $this->l10nFactory,
+ $this->rootFolder,
$this->urlGenerator,
$this->logger,
- $this->l10nFactory,
$this->newUserMailHelper,
$this->secureRandom,
$this->remoteWipe,
$this->knownUserService,
$this->eventDispatcher,
$this->phoneNumberUtil,
+ $this->appManager,
])
->onlyMethods(['getUserData'])
->getMock();
@@ -3801,6 +3954,7 @@ class UsersControllerTest extends TestCase {
'address' => 'address',
'website' => 'website',
'twitter' => 'twitter',
+ 'bluesky' => 'bluesky',
'fediverse' => 'fediverse',
'displayname' => 'Demo User',
'display-name' => 'Demo User',
@@ -3808,16 +3962,16 @@ class UsersControllerTest extends TestCase {
'role' => 'role',
'headline' => 'headline',
'biography' => 'biography',
- 'profile_enabled' => '1'
+ 'profile_enabled' => '1',
+ 'pronouns' => 'they/them',
];
$api->expects($this->exactly(2))
->method('getUserData')
- ->withConsecutive(
- ['uid', false],
- ['currentuser', true],
- )
- ->willReturn($expected);
+ ->willReturnMap([
+ ['uid', false, $expected],
+ ['currentuser', true, $expected],
+ ]);
$this->assertSame($expected, $api->getUser('uid')->getData());
@@ -3825,8 +3979,8 @@ class UsersControllerTest extends TestCase {
}
- public function testResendWelcomeMessageWithNotExistingTargetUser() {
- $this->expectException(\OCP\AppFramework\OCS\OCSException::class);
+ public function testResendWelcomeMessageWithNotExistingTargetUser(): void {
+ $this->expectException(OCSException::class);
$this->expectExceptionCode(998);
$this->userManager
@@ -3839,15 +3993,15 @@ class UsersControllerTest extends TestCase {
}
- public function testResendWelcomeMessageAsSubAdminAndUserIsNotAccessible() {
- $this->expectException(\OCP\AppFramework\OCS\OCSException::class);
+ public function testResendWelcomeMessageAsSubAdminAndUserIsNotAccessible(): void {
+ $this->expectException(OCSException::class);
$this->expectExceptionCode(998);
$loggedInUser = $this->getMockBuilder(IUser::class)
->disableOriginalConstructor()
->getMock();
$loggedInUser
- ->expects($this->exactly(1))
+ ->expects($this->exactly(2))
->method('getUID')
->willReturn('subadmin');
$targetUser = $this->getMockBuilder(IUser::class)
@@ -3884,8 +4038,8 @@ class UsersControllerTest extends TestCase {
}
- public function testResendWelcomeMessageNoEmail() {
- $this->expectException(\OCP\AppFramework\OCS\OCSException::class);
+ public function testResendWelcomeMessageNoEmail(): void {
+ $this->expectException(OCSException::class);
$this->expectExceptionMessage('Email address not available');
$this->expectExceptionCode(101);
@@ -3916,6 +4070,10 @@ class UsersControllerTest extends TestCase {
->expects($this->once())
->method('getSubAdmin')
->willReturn($subAdminManager);
+ $loggedInUser
+ ->expects($this->exactly(2))
+ ->method('getUID')
+ ->willReturn('logged-user-id');
$targetUser
->expects($this->once())
->method('getEmailAddress')
@@ -3925,8 +4083,8 @@ class UsersControllerTest extends TestCase {
}
- public function testResendWelcomeMessageNullEmail() {
- $this->expectException(\OCP\AppFramework\OCS\OCSException::class);
+ public function testResendWelcomeMessageNullEmail(): void {
+ $this->expectException(OCSException::class);
$this->expectExceptionMessage('Email address not available');
$this->expectExceptionCode(101);
@@ -3957,6 +4115,10 @@ class UsersControllerTest extends TestCase {
->expects($this->once())
->method('getSubAdmin')
->willReturn($subAdminManager);
+ $loggedInUser
+ ->expects($this->exactly(2))
+ ->method('getUID')
+ ->willReturn('logged-user-id');
$targetUser
->expects($this->once())
->method('getEmailAddress')
@@ -3965,13 +4127,16 @@ class UsersControllerTest extends TestCase {
$this->api->resendWelcomeMessage('UserToGet');
}
- public function testResendWelcomeMessageSuccess() {
+ public function testResendWelcomeMessageSuccess(): void {
$loggedInUser = $this->getMockBuilder(IUser::class)
->disableOriginalConstructor()
->getMock();
$targetUser = $this->getMockBuilder(IUser::class)
->disableOriginalConstructor()
->getMock();
+ $loggedInUser
+ ->method('getUID')
+ ->willReturn('logged-user-id');
$targetUser
->method('getUID')
->willReturn('user-id');
@@ -4013,13 +4178,16 @@ class UsersControllerTest extends TestCase {
$this->api->resendWelcomeMessage('UserToGet');
}
- public function testResendWelcomeMessageSuccessWithFallbackLanguage() {
+ public function testResendWelcomeMessageSuccessWithFallbackLanguage(): void {
$loggedInUser = $this->getMockBuilder(IUser::class)
->disableOriginalConstructor()
->getMock();
$targetUser = $this->getMockBuilder(IUser::class)
->disableOriginalConstructor()
->getMock();
+ $loggedInUser
+ ->method('getUID')
+ ->willReturn('logged-user-id');
$targetUser
->method('getUID')
->willReturn('user-id');
@@ -4048,9 +4216,6 @@ class UsersControllerTest extends TestCase {
->expects($this->once())
->method('getEmailAddress')
->willReturn('abc@example.org');
- $l10n = $this->getMockBuilder(IL10N::class)
- ->disableOriginalConstructor()
- ->getMock();
$emailTemplate = $this->createMock(IEMailTemplate::class);
$this->newUserMailHelper
->expects($this->once())
@@ -4065,8 +4230,8 @@ class UsersControllerTest extends TestCase {
}
- public function testResendWelcomeMessageFailed() {
- $this->expectException(\OCP\AppFramework\OCS\OCSException::class);
+ public function testResendWelcomeMessageFailed(): void {
+ $this->expectException(OCSException::class);
$this->expectExceptionMessage('Sending email failed');
$this->expectExceptionCode(102);
@@ -4076,6 +4241,10 @@ class UsersControllerTest extends TestCase {
$targetUser = $this->getMockBuilder(IUser::class)
->disableOriginalConstructor()
->getMock();
+ $loggedInUser
+ ->expects($this->exactly(2))
+ ->method('getUID')
+ ->willReturn('logged-user-id');
$targetUser
->method('getUID')
->willReturn('user-id');
@@ -4119,22 +4288,41 @@ class UsersControllerTest extends TestCase {
}
- public function dataGetEditableFields() {
+ public static function dataGetEditableFields(): array {
return [
- [false, ISetDisplayNameBackend::class, [
+ [false, true, ISetDisplayNameBackend::class, [
+ IAccountManager::PROPERTY_EMAIL,
+ IAccountManager::COLLECTION_EMAIL,
+ IAccountManager::PROPERTY_PHONE,
+ IAccountManager::PROPERTY_ADDRESS,
+ IAccountManager::PROPERTY_WEBSITE,
+ IAccountManager::PROPERTY_TWITTER,
+ IAccountManager::PROPERTY_BLUESKY,
+ IAccountManager::PROPERTY_FEDIVERSE,
+ IAccountManager::PROPERTY_ORGANISATION,
+ IAccountManager::PROPERTY_ROLE,
+ IAccountManager::PROPERTY_HEADLINE,
+ IAccountManager::PROPERTY_BIOGRAPHY,
+ IAccountManager::PROPERTY_PROFILE_ENABLED,
+ IAccountManager::PROPERTY_PRONOUNS,
+ ]],
+ [true, false, ISetDisplayNameBackend::class, [
+ IAccountManager::PROPERTY_DISPLAYNAME,
IAccountManager::COLLECTION_EMAIL,
IAccountManager::PROPERTY_PHONE,
IAccountManager::PROPERTY_ADDRESS,
IAccountManager::PROPERTY_WEBSITE,
IAccountManager::PROPERTY_TWITTER,
+ IAccountManager::PROPERTY_BLUESKY,
IAccountManager::PROPERTY_FEDIVERSE,
IAccountManager::PROPERTY_ORGANISATION,
IAccountManager::PROPERTY_ROLE,
IAccountManager::PROPERTY_HEADLINE,
IAccountManager::PROPERTY_BIOGRAPHY,
IAccountManager::PROPERTY_PROFILE_ENABLED,
+ IAccountManager::PROPERTY_PRONOUNS,
]],
- [true, ISetDisplayNameBackend::class, [
+ [true, true, ISetDisplayNameBackend::class, [
IAccountManager::PROPERTY_DISPLAYNAME,
IAccountManager::PROPERTY_EMAIL,
IAccountManager::COLLECTION_EMAIL,
@@ -4142,44 +4330,102 @@ class UsersControllerTest extends TestCase {
IAccountManager::PROPERTY_ADDRESS,
IAccountManager::PROPERTY_WEBSITE,
IAccountManager::PROPERTY_TWITTER,
+ IAccountManager::PROPERTY_BLUESKY,
IAccountManager::PROPERTY_FEDIVERSE,
IAccountManager::PROPERTY_ORGANISATION,
IAccountManager::PROPERTY_ROLE,
IAccountManager::PROPERTY_HEADLINE,
IAccountManager::PROPERTY_BIOGRAPHY,
IAccountManager::PROPERTY_PROFILE_ENABLED,
+ IAccountManager::PROPERTY_PRONOUNS,
]],
- [true, UserInterface::class, [
+ [false, false, ISetDisplayNameBackend::class, [
+ IAccountManager::COLLECTION_EMAIL,
+ IAccountManager::PROPERTY_PHONE,
+ IAccountManager::PROPERTY_ADDRESS,
+ IAccountManager::PROPERTY_WEBSITE,
+ IAccountManager::PROPERTY_TWITTER,
+ IAccountManager::PROPERTY_BLUESKY,
+ IAccountManager::PROPERTY_FEDIVERSE,
+ IAccountManager::PROPERTY_ORGANISATION,
+ IAccountManager::PROPERTY_ROLE,
+ IAccountManager::PROPERTY_HEADLINE,
+ IAccountManager::PROPERTY_BIOGRAPHY,
+ IAccountManager::PROPERTY_PROFILE_ENABLED,
+ IAccountManager::PROPERTY_PRONOUNS,
+ ]],
+ [false, true, UserInterface::class, [
IAccountManager::PROPERTY_EMAIL,
IAccountManager::COLLECTION_EMAIL,
IAccountManager::PROPERTY_PHONE,
IAccountManager::PROPERTY_ADDRESS,
IAccountManager::PROPERTY_WEBSITE,
IAccountManager::PROPERTY_TWITTER,
+ IAccountManager::PROPERTY_BLUESKY,
+ IAccountManager::PROPERTY_FEDIVERSE,
+ IAccountManager::PROPERTY_ORGANISATION,
+ IAccountManager::PROPERTY_ROLE,
+ IAccountManager::PROPERTY_HEADLINE,
+ IAccountManager::PROPERTY_BIOGRAPHY,
+ IAccountManager::PROPERTY_PROFILE_ENABLED,
+ IAccountManager::PROPERTY_PRONOUNS,
+ ]],
+ [true, false, UserInterface::class, [
+ IAccountManager::COLLECTION_EMAIL,
+ IAccountManager::PROPERTY_PHONE,
+ IAccountManager::PROPERTY_ADDRESS,
+ IAccountManager::PROPERTY_WEBSITE,
+ IAccountManager::PROPERTY_TWITTER,
+ IAccountManager::PROPERTY_BLUESKY,
IAccountManager::PROPERTY_FEDIVERSE,
IAccountManager::PROPERTY_ORGANISATION,
IAccountManager::PROPERTY_ROLE,
IAccountManager::PROPERTY_HEADLINE,
IAccountManager::PROPERTY_BIOGRAPHY,
IAccountManager::PROPERTY_PROFILE_ENABLED,
+ IAccountManager::PROPERTY_PRONOUNS,
+ ]],
+ [true, true, UserInterface::class, [
+ IAccountManager::PROPERTY_EMAIL,
+ IAccountManager::COLLECTION_EMAIL,
+ IAccountManager::PROPERTY_PHONE,
+ IAccountManager::PROPERTY_ADDRESS,
+ IAccountManager::PROPERTY_WEBSITE,
+ IAccountManager::PROPERTY_TWITTER,
+ IAccountManager::PROPERTY_BLUESKY,
+ IAccountManager::PROPERTY_FEDIVERSE,
+ IAccountManager::PROPERTY_ORGANISATION,
+ IAccountManager::PROPERTY_ROLE,
+ IAccountManager::PROPERTY_HEADLINE,
+ IAccountManager::PROPERTY_BIOGRAPHY,
+ IAccountManager::PROPERTY_PROFILE_ENABLED,
+ IAccountManager::PROPERTY_PRONOUNS,
+ ]],
+ [false, false, UserInterface::class, [
+ IAccountManager::COLLECTION_EMAIL,
+ IAccountManager::PROPERTY_PHONE,
+ IAccountManager::PROPERTY_ADDRESS,
+ IAccountManager::PROPERTY_WEBSITE,
+ IAccountManager::PROPERTY_TWITTER,
+ IAccountManager::PROPERTY_BLUESKY,
+ IAccountManager::PROPERTY_FEDIVERSE,
+ IAccountManager::PROPERTY_ORGANISATION,
+ IAccountManager::PROPERTY_ROLE,
+ IAccountManager::PROPERTY_HEADLINE,
+ IAccountManager::PROPERTY_BIOGRAPHY,
+ IAccountManager::PROPERTY_PROFILE_ENABLED,
+ IAccountManager::PROPERTY_PRONOUNS,
]],
];
}
- /**
- * @dataProvider dataGetEditableFields
- *
- * @param bool $allowedToChangeDisplayName
- * @param string $userBackend
- * @param array $expected
- */
- public function testGetEditableFields(bool $allowedToChangeDisplayName, string $userBackend, array $expected) {
- $this->config
- ->method('getSystemValue')
- ->with(
- $this->equalTo('allow_user_to_change_display_name'),
- $this->anything()
- )->willReturn($allowedToChangeDisplayName);
+ #[\PHPUnit\Framework\Attributes\DataProvider('dataGetEditableFields')]
+ public function testGetEditableFields(bool $allowedToChangeDisplayName, bool $allowedToChangeEmail, string $userBackend, array $expected): void {
+ $this->config->method('getSystemValue')->willReturnCallback(fn (string $key, mixed $default) => match ($key) {
+ 'allow_user_to_change_display_name' => $allowedToChangeDisplayName,
+ 'allow_user_to_change_email' => $allowedToChangeEmail,
+ default => throw new RuntimeException('Unexpected system config key: ' . $key),
+ });
$user = $this->createMock(IUser::class);
$this->userSession->method('getUser')
@@ -4208,7 +4454,7 @@ class UsersControllerTest extends TestCase {
$account = $this->createMock(IAccount::class);
$account->method('getProperty')
- ->will($this->returnValueMap($mockedProperties));
+ ->willReturnMap($mockedProperties);
$this->accountManager->expects($this->any())->method('getAccount')
->with($targetUser)
diff --git a/apps/provisioning_api/tests/Middleware/ProvisioningApiMiddlewareTest.php b/apps/provisioning_api/tests/Middleware/ProvisioningApiMiddlewareTest.php
index 37ab03f758c..c027e518a3d 100644
--- a/apps/provisioning_api/tests/Middleware/ProvisioningApiMiddlewareTest.php
+++ b/apps/provisioning_api/tests/Middleware/ProvisioningApiMiddlewareTest.php
@@ -1,26 +1,8 @@
<?php
+
/**
- * @copyright 2016, Roeland Jago Douma <roeland@famdouma.nl>
- *
- * @author Joas Schilling <coding@schilljs.com>
- * @author Morris Jobke <hey@morrisjobke.de>
- * @author Roeland Jago Douma <roeland@famdouma.nl>
- *
- * @license GNU AGPL version 3 or any later version
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as
- * published by the Free Software Foundation, either version 3 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- *
+ * SPDX-FileCopyrightText: 2016 Nextcloud GmbH and Nextcloud contributors
+ * SPDX-License-Identifier: AGPL-3.0-or-later
*/
namespace OCA\Provisioning_API\Tests\Middleware;
@@ -43,34 +25,27 @@ class ProvisioningApiMiddlewareTest extends TestCase {
$this->reflector = $this->createMock(IControllerMethodReflector::class);
}
- public function dataAnnotation() {
+ public static function dataAnnotation(): array {
return [
[false, false, false, false, false],
- [false, false, true, false, false],
- [false, true, true, false, false],
- [ true, false, false, false, true],
- [ true, false, true, false, false],
- [ true, true, false, false, false],
- [ true, true, true, false, false],
+ [false, false, true, false, false],
+ [false, true, true, false, false],
+ [true, false, false, false, true],
+ [true, false, true, false, false],
+ [true, true, false, false, false],
+ [true, true, true, false, false],
[false, false, false, true, false],
- [false, false, true, true, false],
- [false, true, true, true, false],
- [ true, false, false, true, false],
- [ true, false, true, true, false],
- [ true, true, false, true, false],
- [ true, true, true, true, false],
+ [false, false, true, true, false],
+ [false, true, true, true, false],
+ [true, false, false, true, false],
+ [true, false, true, true, false],
+ [true, true, false, true, false],
+ [true, true, true, true, false],
];
}
- /**
- * @dataProvider dataAnnotation
- *
- * @param bool $subadminRequired
- * @param bool $isAdmin
- * @param bool $isSubAdmin
- * @param bool $shouldThrowException
- */
- public function testBeforeController($subadminRequired, $isAdmin, $isSubAdmin, $hasSettingAuthorizationAnnotation, $shouldThrowException) {
+ #[\PHPUnit\Framework\Attributes\DataProvider('dataAnnotation')]
+ public function testBeforeController(bool $subadminRequired, bool $isAdmin, bool $isSubAdmin, bool $hasSettingAuthorizationAnnotation, bool $shouldThrowException): void {
$middleware = new ProvisioningApiMiddleware(
$this->reflector,
$isAdmin,
@@ -99,20 +74,15 @@ class ProvisioningApiMiddlewareTest extends TestCase {
}
}
- public function dataAfterException() {
+ public static function dataAfterException(): array {
return [
[new NotSubAdminException(), false],
[new \Exception('test', 42), true],
];
}
- /**
- * @dataProvider dataAfterException
- *
- * @param \Exception $e
- * @param bool $forwared
- */
- public function testAfterException(\Exception $exception, $forwared) {
+ #[\PHPUnit\Framework\Attributes\DataProvider('dataAfterException')]
+ public function testAfterException(\Exception $exception, bool $forwared): void {
$middleware = new ProvisioningApiMiddleware(
$this->reflector,
false,
diff --git a/apps/provisioning_api/tests/TestCase.php b/apps/provisioning_api/tests/TestCase.php
index 5cbab2ab200..30e7f3a4ecf 100644
--- a/apps/provisioning_api/tests/TestCase.php
+++ b/apps/provisioning_api/tests/TestCase.php
@@ -1,32 +1,16 @@
<?php
+
/**
- * @copyright Copyright (c) 2016, ownCloud, Inc.
- *
- * @author Christoph Wurst <christoph@winzerhof-wurst.at>
- * @author Joas Schilling <coding@schilljs.com>
- * @author Roeland Jago Douma <roeland@famdouma.nl>
- * @author Thomas Müller <thomas.mueller@tmit.eu>
- *
- * @license AGPL-3.0
- *
- * This code is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License, version 3,
- * as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License, version 3,
- * along with this program. If not, see <http://www.gnu.org/licenses/>
- *
+ * SPDX-FileCopyrightText: 2019-2024 Nextcloud GmbH and Nextcloud contributors
+ * SPDX-FileCopyrightText: 2016 ownCloud, Inc.
+ * SPDX-License-Identifier: AGPL-3.0-only
*/
namespace OCA\Provisioning_API\Tests;
use OCP\IGroupManager;
use OCP\IUser;
use OCP\IUserManager;
+use OCP\Server;
abstract class TestCase extends \Test\TestCase {
@@ -42,8 +26,8 @@ abstract class TestCase extends \Test\TestCase {
protected function setUp(): void {
parent::setUp();
- $this->userManager = \OC::$server->getUserManager();
- $this->groupManager = \OC::$server->getGroupManager();
+ $this->userManager = Server::get(IUserManager::class);
+ $this->groupManager = Server::get(IGroupManager::class);
$this->groupManager->createGroup('admin');
}