diff options
Diffstat (limited to 'apps/federation')
193 files changed, 3756 insertions, 2502 deletions
diff --git a/apps/federation/appinfo/info.xml b/apps/federation/appinfo/info.xml index 67280335769..2762344344d 100644 --- a/apps/federation/appinfo/info.xml +++ b/apps/federation/appinfo/info.xml @@ -1,15 +1,19 @@ <?xml version="1.0"?> +<!-- + - SPDX-FileCopyrightText: 2016-2024 Nextcloud GmbH and Nextcloud contributors + - SPDX-FileCopyrightText: 2015-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>federation</id> <name>Federation</name> - <summary>Federation allows you to connect with other trusted servers to exchange the user directory.</summary> - <description>Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing.</description> - <version>1.15.0</version> + <summary>Federation allows you to connect with other trusted servers to exchange the account directory.</summary> + <description>Federation allows you to connect with other trusted servers to exchange the account directory. For example this will be used to auto-complete external accounts for federated sharing.</description> + <version>1.22.0</version> <licence>agpl</licence> <author>Bjoern Schiessle</author> <namespace>Federation</namespace> - <default_enable/> <types> <authentication/> @@ -18,7 +22,7 @@ <bugs>https://github.com/nextcloud/server/issues</bugs> <dependencies> - <nextcloud min-version="25" max-version="25"/> + <nextcloud min-version="32" max-version="32"/> </dependencies> <background-jobs> diff --git a/apps/federation/appinfo/routes.php b/apps/federation/appinfo/routes.php index dd1e24ab2fb..343870614b3 100644 --- a/apps/federation/appinfo/routes.php +++ b/apps/federation/appinfo/routes.php @@ -1,39 +1,11 @@ <?php + /** - * @copyright Copyright (c) 2016, ownCloud, Inc. - * - * @author Björn Schießle <bjoern@schiessle.org> - * @author Julius Härtl <jus@bitgrid.net> - * @author Roeland Jago Douma <roeland@famdouma.nl> - * - * @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 */ return [ - 'routes' => [ - [ - 'name' => 'Settings#addServer', - 'url' => '/trusted-servers', - 'verb' => 'POST' - ], - [ - 'name' => 'Settings#removeServer', - 'url' => '/trusted-servers/{id}', - 'verb' => 'DELETE' - ], - ], 'ocs' => [ // old endpoints, only used by Nextcloud and ownCloud [ diff --git a/apps/federation/composer/autoload.php b/apps/federation/composer/autoload.php index 77ae3e1c118..08b3d13070a 100644 --- a/apps/federation/composer/autoload.php +++ b/apps/federation/composer/autoload.php @@ -3,8 +3,21 @@ // autoload.php @generated by Composer if (PHP_VERSION_ID < 50600) { - echo 'Composer 2.3.0 dropped support for autoloading on PHP <5.6 and you are running '.PHP_VERSION.', please upgrade PHP or use Composer 2.2 LTS via "composer self-update --2.2". Aborting.'.PHP_EOL; - exit(1); + if (!headers_sent()) { + header('HTTP/1.1 500 Internal Server Error'); + } + $err = 'Composer 2.3.0 dropped support for autoloading on PHP <5.6 and you are running '.PHP_VERSION.', please upgrade PHP or use Composer 2.2 LTS via "composer self-update --2.2". Aborting.'.PHP_EOL; + if (!ini_get('display_errors')) { + if (PHP_SAPI === 'cli' || PHP_SAPI === 'phpdbg') { + fwrite(STDERR, $err); + } elseif (!headers_sent()) { + echo $err; + } + } + trigger_error( + $err, + E_USER_ERROR + ); } require_once __DIR__ . '/composer/autoload_real.php'; diff --git a/apps/federation/composer/composer/ClassLoader.php b/apps/federation/composer/composer/ClassLoader.php index afef3fa2ad8..7824d8f7eaf 100644 --- a/apps/federation/composer/composer/ClassLoader.php +++ b/apps/federation/composer/composer/ClassLoader.php @@ -42,35 +42,37 @@ namespace Composer\Autoload; */ class ClassLoader { - /** @var ?string */ + /** @var \Closure(string):void */ + private static $includeFile; + + /** @var string|null */ private $vendorDir; // PSR-4 /** - * @var array[] - * @psalm-var array<string, array<string, int>> + * @var array<string, array<string, int>> */ private $prefixLengthsPsr4 = array(); /** - * @var array[] - * @psalm-var array<string, array<int, string>> + * @var array<string, list<string>> */ private $prefixDirsPsr4 = array(); /** - * @var array[] - * @psalm-var array<string, string> + * @var list<string> */ private $fallbackDirsPsr4 = array(); // PSR-0 /** - * @var array[] - * @psalm-var array<string, array<string, string[]>> + * List of PSR-0 prefixes + * + * Structured as array('F (first letter)' => array('Foo\Bar (full prefix)' => array('path', 'path2'))) + * + * @var array<string, array<string, list<string>>> */ private $prefixesPsr0 = array(); /** - * @var array[] - * @psalm-var array<string, string> + * @var list<string> */ private $fallbackDirsPsr0 = array(); @@ -78,8 +80,7 @@ class ClassLoader private $useIncludePath = false; /** - * @var string[] - * @psalm-var array<string, string> + * @var array<string, string> */ private $classMap = array(); @@ -87,29 +88,29 @@ class ClassLoader private $classMapAuthoritative = false; /** - * @var bool[] - * @psalm-var array<string, bool> + * @var array<string, bool> */ private $missingClasses = array(); - /** @var ?string */ + /** @var string|null */ private $apcuPrefix; /** - * @var self[] + * @var array<string, self> */ private static $registeredLoaders = array(); /** - * @param ?string $vendorDir + * @param string|null $vendorDir */ public function __construct($vendorDir = null) { $this->vendorDir = $vendorDir; + self::initializeIncludeClosure(); } /** - * @return string[] + * @return array<string, list<string>> */ public function getPrefixes() { @@ -121,8 +122,7 @@ class ClassLoader } /** - * @return array[] - * @psalm-return array<string, array<int, string>> + * @return array<string, list<string>> */ public function getPrefixesPsr4() { @@ -130,8 +130,7 @@ class ClassLoader } /** - * @return array[] - * @psalm-return array<string, string> + * @return list<string> */ public function getFallbackDirs() { @@ -139,8 +138,7 @@ class ClassLoader } /** - * @return array[] - * @psalm-return array<string, string> + * @return list<string> */ public function getFallbackDirsPsr4() { @@ -148,8 +146,7 @@ class ClassLoader } /** - * @return string[] Array of classname => path - * @psalm-return array<string, string> + * @return array<string, string> Array of classname => path */ public function getClassMap() { @@ -157,8 +154,7 @@ class ClassLoader } /** - * @param string[] $classMap Class to filename map - * @psalm-param array<string, string> $classMap + * @param array<string, string> $classMap Class to filename map * * @return void */ @@ -175,24 +171,25 @@ class ClassLoader * Registers a set of PSR-0 directories for a given prefix, either * appending or prepending to the ones previously set for this prefix. * - * @param string $prefix The prefix - * @param string[]|string $paths The PSR-0 root directories - * @param bool $prepend Whether to prepend the directories + * @param string $prefix The prefix + * @param list<string>|string $paths The PSR-0 root directories + * @param bool $prepend Whether to prepend the directories * * @return void */ public function add($prefix, $paths, $prepend = false) { + $paths = (array) $paths; if (!$prefix) { if ($prepend) { $this->fallbackDirsPsr0 = array_merge( - (array) $paths, + $paths, $this->fallbackDirsPsr0 ); } else { $this->fallbackDirsPsr0 = array_merge( $this->fallbackDirsPsr0, - (array) $paths + $paths ); } @@ -201,19 +198,19 @@ class ClassLoader $first = $prefix[0]; if (!isset($this->prefixesPsr0[$first][$prefix])) { - $this->prefixesPsr0[$first][$prefix] = (array) $paths; + $this->prefixesPsr0[$first][$prefix] = $paths; return; } if ($prepend) { $this->prefixesPsr0[$first][$prefix] = array_merge( - (array) $paths, + $paths, $this->prefixesPsr0[$first][$prefix] ); } else { $this->prefixesPsr0[$first][$prefix] = array_merge( $this->prefixesPsr0[$first][$prefix], - (array) $paths + $paths ); } } @@ -222,9 +219,9 @@ class ClassLoader * Registers a set of PSR-4 directories for a given namespace, either * appending or prepending to the ones previously set for this namespace. * - * @param string $prefix The prefix/namespace, with trailing '\\' - * @param string[]|string $paths The PSR-4 base directories - * @param bool $prepend Whether to prepend the directories + * @param string $prefix The prefix/namespace, with trailing '\\' + * @param list<string>|string $paths The PSR-4 base directories + * @param bool $prepend Whether to prepend the directories * * @throws \InvalidArgumentException * @@ -232,17 +229,18 @@ class ClassLoader */ public function addPsr4($prefix, $paths, $prepend = false) { + $paths = (array) $paths; if (!$prefix) { // Register directories for the root namespace. if ($prepend) { $this->fallbackDirsPsr4 = array_merge( - (array) $paths, + $paths, $this->fallbackDirsPsr4 ); } else { $this->fallbackDirsPsr4 = array_merge( $this->fallbackDirsPsr4, - (array) $paths + $paths ); } } elseif (!isset($this->prefixDirsPsr4[$prefix])) { @@ -252,18 +250,18 @@ class ClassLoader throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator."); } $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length; - $this->prefixDirsPsr4[$prefix] = (array) $paths; + $this->prefixDirsPsr4[$prefix] = $paths; } elseif ($prepend) { // Prepend directories for an already registered namespace. $this->prefixDirsPsr4[$prefix] = array_merge( - (array) $paths, + $paths, $this->prefixDirsPsr4[$prefix] ); } else { // Append directories for an already registered namespace. $this->prefixDirsPsr4[$prefix] = array_merge( $this->prefixDirsPsr4[$prefix], - (array) $paths + $paths ); } } @@ -272,8 +270,8 @@ class ClassLoader * Registers a set of PSR-0 directories for a given prefix, * replacing any others previously set for this prefix. * - * @param string $prefix The prefix - * @param string[]|string $paths The PSR-0 base directories + * @param string $prefix The prefix + * @param list<string>|string $paths The PSR-0 base directories * * @return void */ @@ -290,8 +288,8 @@ class ClassLoader * Registers a set of PSR-4 directories for a given namespace, * replacing any others previously set for this namespace. * - * @param string $prefix The prefix/namespace, with trailing '\\' - * @param string[]|string $paths The PSR-4 base directories + * @param string $prefix The prefix/namespace, with trailing '\\' + * @param list<string>|string $paths The PSR-4 base directories * * @throws \InvalidArgumentException * @@ -425,7 +423,8 @@ class ClassLoader public function loadClass($class) { if ($file = $this->findFile($class)) { - includeFile($file); + $includeFile = self::$includeFile; + $includeFile($file); return true; } @@ -476,9 +475,9 @@ class ClassLoader } /** - * Returns the currently registered loaders indexed by their corresponding vendor directories. + * Returns the currently registered loaders keyed by their corresponding vendor directories. * - * @return self[] + * @return array<string, self> */ public static function getRegisteredLoaders() { @@ -555,18 +554,26 @@ class ClassLoader return false; } -} -/** - * Scope isolated include. - * - * Prevents access to $this/self from included files. - * - * @param string $file - * @return void - * @private - */ -function includeFile($file) -{ - include $file; + /** + * @return void + */ + private static function initializeIncludeClosure() + { + if (self::$includeFile !== null) { + return; + } + + /** + * Scope isolated include. + * + * Prevents access to $this/self from included files. + * + * @param string $file + * @return void + */ + self::$includeFile = \Closure::bind(static function($file) { + include $file; + }, null, null); + } } diff --git a/apps/federation/composer/composer/InstalledVersions.php b/apps/federation/composer/composer/InstalledVersions.php index 41bc143c114..51e734a774b 100644 --- a/apps/federation/composer/composer/InstalledVersions.php +++ b/apps/federation/composer/composer/InstalledVersions.php @@ -28,7 +28,7 @@ class InstalledVersions { /** * @var mixed[]|null - * @psalm-var array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>}|array{}|null + * @psalm-var array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>}|array{}|null */ private static $installed; @@ -39,7 +39,7 @@ class InstalledVersions /** * @var array[] - * @psalm-var array<string, array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>}> + * @psalm-var array<string, array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>}> */ private static $installedByVendor = array(); @@ -98,7 +98,7 @@ class InstalledVersions { foreach (self::getInstalled() as $installed) { if (isset($installed['versions'][$packageName])) { - return $includeDevRequirements || empty($installed['versions'][$packageName]['dev_requirement']); + return $includeDevRequirements || !isset($installed['versions'][$packageName]['dev_requirement']) || $installed['versions'][$packageName]['dev_requirement'] === false; } } @@ -119,7 +119,7 @@ class InstalledVersions */ public static function satisfies(VersionParser $parser, $packageName, $constraint) { - $constraint = $parser->parseConstraints($constraint); + $constraint = $parser->parseConstraints((string) $constraint); $provided = $parser->parseConstraints(self::getVersionRanges($packageName)); return $provided->matches($constraint); @@ -243,7 +243,7 @@ class InstalledVersions /** * @return array - * @psalm-return array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string} + * @psalm-return array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool} */ public static function getRootPackage() { @@ -257,7 +257,7 @@ class InstalledVersions * * @deprecated Use getAllRawData() instead which returns all datasets for all autoloaders present in the process. getRawData only returns the first dataset loaded, which may not be what you expect. * @return array[] - * @psalm-return array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>} + * @psalm-return array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>} */ public static function getRawData() { @@ -280,7 +280,7 @@ class InstalledVersions * Returns the raw data of all installed.php which are currently loaded for custom implementations * * @return array[] - * @psalm-return list<array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>}> + * @psalm-return list<array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>}> */ public static function getAllRawData() { @@ -303,7 +303,7 @@ class InstalledVersions * @param array[] $data A vendor/composer/installed.php data set * @return void * - * @psalm-param array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>} $data + * @psalm-param array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>} $data */ public static function reload($data) { @@ -313,7 +313,7 @@ class InstalledVersions /** * @return array[] - * @psalm-return list<array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>}> + * @psalm-return list<array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>}> */ private static function getInstalled() { @@ -328,7 +328,9 @@ class InstalledVersions if (isset(self::$installedByVendor[$vendorDir])) { $installed[] = self::$installedByVendor[$vendorDir]; } elseif (is_file($vendorDir.'/composer/installed.php')) { - $installed[] = self::$installedByVendor[$vendorDir] = require $vendorDir.'/composer/installed.php'; + /** @var array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>} $required */ + $required = require $vendorDir.'/composer/installed.php'; + $installed[] = self::$installedByVendor[$vendorDir] = $required; if (null === self::$installed && strtr($vendorDir.'/composer', '\\', '/') === strtr(__DIR__, '\\', '/')) { self::$installed = $installed[count($installed) - 1]; } @@ -340,12 +342,17 @@ class InstalledVersions // only require the installed.php file if this file is loaded from its dumped location, // and not from its source location in the composer/composer package, see https://github.com/composer/composer/issues/9937 if (substr(__DIR__, -8, 1) !== 'C') { - self::$installed = require __DIR__ . '/installed.php'; + /** @var array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>} $required */ + $required = require __DIR__ . '/installed.php'; + self::$installed = $required; } else { self::$installed = array(); } } - $installed[] = self::$installed; + + if (self::$installed !== array()) { + $installed[] = self::$installed; + } return $installed; } diff --git a/apps/federation/composer/composer/autoload_classmap.php b/apps/federation/composer/composer/autoload_classmap.php index 1be343a65d1..d648b643c46 100644 --- a/apps/federation/composer/composer/autoload_classmap.php +++ b/apps/federation/composer/composer/autoload_classmap.php @@ -16,7 +16,6 @@ return array( 'OCA\\Federation\\DAV\\FedAuth' => $baseDir . '/../lib/DAV/FedAuth.php', 'OCA\\Federation\\DbHandler' => $baseDir . '/../lib/DbHandler.php', 'OCA\\Federation\\Listener\\SabrePluginAuthInitListener' => $baseDir . '/../lib/Listener/SabrePluginAuthInitListener.php', - 'OCA\\Federation\\Middleware\\AddServerMiddleware' => $baseDir . '/../lib/Middleware/AddServerMiddleware.php', 'OCA\\Federation\\Migration\\Version1010Date20200630191302' => $baseDir . '/../lib/Migration/Version1010Date20200630191302.php', 'OCA\\Federation\\Settings\\Admin' => $baseDir . '/../lib/Settings/Admin.php', 'OCA\\Federation\\SyncFederationAddressBooks' => $baseDir . '/../lib/SyncFederationAddressBooks.php', diff --git a/apps/federation/composer/composer/autoload_static.php b/apps/federation/composer/composer/autoload_static.php index 927aca66949..29932e1dffc 100644 --- a/apps/federation/composer/composer/autoload_static.php +++ b/apps/federation/composer/composer/autoload_static.php @@ -31,7 +31,6 @@ class ComposerStaticInitFederation 'OCA\\Federation\\DAV\\FedAuth' => __DIR__ . '/..' . '/../lib/DAV/FedAuth.php', 'OCA\\Federation\\DbHandler' => __DIR__ . '/..' . '/../lib/DbHandler.php', 'OCA\\Federation\\Listener\\SabrePluginAuthInitListener' => __DIR__ . '/..' . '/../lib/Listener/SabrePluginAuthInitListener.php', - 'OCA\\Federation\\Middleware\\AddServerMiddleware' => __DIR__ . '/..' . '/../lib/Middleware/AddServerMiddleware.php', 'OCA\\Federation\\Migration\\Version1010Date20200630191302' => __DIR__ . '/..' . '/../lib/Migration/Version1010Date20200630191302.php', 'OCA\\Federation\\Settings\\Admin' => __DIR__ . '/..' . '/../lib/Settings/Admin.php', 'OCA\\Federation\\SyncFederationAddressBooks' => __DIR__ . '/..' . '/../lib/SyncFederationAddressBooks.php', diff --git a/apps/federation/composer/composer/installed.php b/apps/federation/composer/composer/installed.php index 5440719fa40..1a66c7f2416 100644 --- a/apps/federation/composer/composer/installed.php +++ b/apps/federation/composer/composer/installed.php @@ -1,22 +1,22 @@ <?php return array( 'root' => array( + 'name' => '__root__', 'pretty_version' => 'dev-master', 'version' => 'dev-master', + 'reference' => 'b1797842784b250fb01ed5e3bf130705eb94751b', 'type' => 'library', 'install_path' => __DIR__ . '/../', 'aliases' => array(), - 'reference' => 'c6429e6cd19c57582364338362e543580821cf99', - 'name' => '__root__', 'dev' => false, ), 'versions' => array( '__root__' => array( 'pretty_version' => 'dev-master', 'version' => 'dev-master', + 'reference' => 'b1797842784b250fb01ed5e3bf130705eb94751b', 'type' => 'library', 'install_path' => __DIR__ . '/../', 'aliases' => array(), - 'reference' => 'c6429e6cd19c57582364338362e543580821cf99', 'dev_requirement' => false, ), ), diff --git a/apps/federation/css/settings-admin.css b/apps/federation/css/settings-admin.css index c4c846bd812..6fa103e83b2 100644 --- a/apps/federation/css/settings-admin.css +++ b/apps/federation/css/settings-admin.css @@ -1,15 +1,22 @@ +/** + * SPDX-FileCopyrightText: 2016-2024 Nextcloud GmbH and Nextcloud contributors + * SPDX-FileCopyrightText: 2015-2016 ownCloud, Inc. + * SPDX-License-Identifier: AGPL-3.0-only + */ #ocFederationSettings p { padding-bottom: 10px; } #listOfTrustedServers li { padding-bottom: 10px; + display: flex; + align-items: center; } .removeTrustedServer { display: none; - vertical-align:middle; - padding-left: 10px; + vertical-align: middle; + padding-inline-start: 10px; } #ocFederationAddServerButton { @@ -17,16 +24,24 @@ } #listOfTrustedServers .status { - margin-right: 10px; + margin-inline-end: 10px; } #listOfTrustedServers .icon { - cursor: pointer; display: inline-block; + cursor: pointer; vertical-align: middle; - margin-left: 10px; + margin-inline-start: 10px; +} + +.serverUrl-block { + display: flex; + align-items: center; + flex-direction: row; + justify-content: flex-start; + gap: 8px; } -#ocFederationAddServer #serverUrl { - width: 300px; +.serverUrl-block input { + width: 270px; } diff --git a/apps/federation/img/app.svg b/apps/federation/img/app.svg index d019883ac9b..22ce8e18f99 100644 --- a/apps/federation/img/app.svg +++ b/apps/federation/img/app.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" height="16" width="16" viewBox="0 0 16 16"><path d="M12.228 1a2.457 2.457 0 0 0-2.46 2.454c0 .075.01.15.016.224L5.05 6.092a2.445 2.445 0 0 0-1.596-.586A2.453 2.453 0 0 0 1 7.96a2.453 2.453 0 0 0 2.454 2.455 2.45 2.45 0 0 0 1.46-.477l4.865 2.474c-.004.044-.01.09-.01.134a2.457 2.457 0 1 0 .804-1.818l-4.696-2.4a2.55 2.55 0 0 0 .035-.378c0-.072-.01-.144-.015-.214l4.74-2.415A2.457 2.457 0 1 0 12.227.99z" fill="#fff"/></svg>
\ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" height="20px" viewBox="0 -960 960 960" width="20px" fill="#fff"><path d="M696-96q-50 0-85-35t-35-85q0-8 1-14.5t3-14.5L342-390q-15 16-35.35 23-20.36 7-42.65 7-50 0-85-35t-35-85q0-50 35-85t85-35q22 0 42.5 7.5T342-570l238-145q-2-8-3-14.5t-1-14.5q0-50 35-85t85-35q50 0 85 35t35 85q0 50-35 85t-85 35q-22.29 0-42.65-7Q633-638 618-654L380-509q2 8 3 14.5t1 14.5q0 8-1 14.5t-3 14.5l238 145q15-17 35.35-23.5Q673.71-336 696-336q50 0 85 35t35 85q0 50-35 85t-85 35Z"/></svg>
\ No newline at end of file diff --git a/apps/federation/js/settings-admin.js b/apps/federation/js/settings-admin.js index d8ec194dcda..aa672e53e94 100644 --- a/apps/federation/js/settings-admin.js +++ b/apps/federation/js/settings-admin.js @@ -1,21 +1,8 @@ + /** - * @author Björn Schießle <schiessle@owncloud.com> - * - * @copyright Copyright (c) 2015, ownCloud, Inc. - * @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 */ (function( $ ) { @@ -45,8 +32,8 @@ $btnAddServer.on('click', function() { $btnAddServer.addClass('hidden'); + $wrapper.find(".serverUrl").removeClass('hidden'); $inpServerUrl - .removeClass('hidden') .focus(); }); @@ -64,12 +51,9 @@ }); $inpServerUrl.on("change keyup", function (e) { - - console.log("typing away"); - var url = $(this).val(); - // toggle add-button visiblity based on input length + // toggle add-button visibility based on input length if ( url.length > 0 ) $btnSubmit.removeClass("hidden") else @@ -92,11 +76,14 @@ OC.msg.startSaving('#ocFederationAddServer .msg'); $.post( - OC.generateUrl('/apps/federation/trusted-servers'), + OC.getRootPath() + '/ocs/v2.php/apps/federation/trusted-servers', { url: url - } - ).done(function (data) { + }, + null, + 'json' + ).done(function({ ocs }) { + var data = ocs.data; $("#serverUrl").attr('value', ''); $("#listOfTrustedServers").prepend( $('<li>') @@ -108,13 +95,13 @@ OC.msg.finishedSuccess('#ocFederationAddServer .msg', data.message); }) .fail(function (jqXHR) { - OC.msg.finishedError('#ocFederationAddServer .msg', JSON.parse(jqXHR.responseText).message); + OC.msg.finishedError('#ocFederationAddServer .msg', JSON.parse(jqXHR.responseText).ocs.meta.message); }); }; function removeServer( id ) { $.ajax({ - url: OC.generateUrl('/apps/federation/trusted-servers/' + id), + url: OC.getRootPath() + '/ocs/v2.php/apps/federation/trusted-servers/' + id, type: 'DELETE', success: function(response) { $("#ocFederationSettings").find("#" + id).remove(); diff --git a/apps/federation/l10n/ar.js b/apps/federation/l10n/ar.js index 62692b57ee6..41215a74cfd 100644 --- a/apps/federation/l10n/ar.js +++ b/apps/federation/l10n/ar.js @@ -1,12 +1,21 @@ OC.L10N.register( "federation", { - "Server is already in the list of trusted servers." : "الخادوم موجود بالفعل في قائمة الخوادم الموثوق فيها.", - "Could not add server" : "تعذَّرت إضافة خادم", - "Trusted servers" : "الخوادم الموثوق فيها", - "Federation" : "الإتحاد", - "+ Add trusted server" : "+ إضافة خادوم موثوق فيه", - "Trusted server" : "خادوم موثوق فيه", + "Added to the list of trusted servers" : "أُضيف إلى قائمة الخوادم غير الموثوقة", + "No server found with ID: %s" : "لايوجد أي خادوم بهذا الرقم: %s", + "Could not remove server" : "تتعذّر إزالة الخادوم", + "Server is already in the list of trusted servers." : "الخادم موجود بالفعل في قائمة الخوادم الموثوقة.", + "No server to federate with found" : "لم يُمكن إيجاد أي خادم للاتحاد معه", + "Could not add server" : "تعذّرت إضافة الخادم", + "Trusted servers" : "الخوادم الموثوقة", + "Federation" : "الربط عبر السحابة الموحدة", + "Federation allows you to connect with other trusted servers to exchange the account directory." : "يسمح لك الاتحاد بالاتصال بخوادم موثوقة أخرى لتبادل أدلة الحسابات معها.", + "Federation allows you to connect with other trusted servers to exchange the account directory. For example this will be used to auto-complete external accounts for federated sharing." : "يسمح لك الاتحاد بالاتصال بخوادم موثوقة أخرى لتبادل أدلة الحسابات معها. على سبيل المثال، سيتم استخدام هذا للإكمال التلقائي للحسابات الخارجية عند المشاركة عبر السحابة الموحدة federated sharing.", + "External documentation for Federated Cloud Sharing" : "التوثيق الخارجي لمشاركة السحابة الاتحادية", + "Federation allows you to connect with other trusted servers to exchange the account directory. For example this will be used to auto-complete external accounts for federated sharing. It is not necessary to add a server as trusted server in order to create a federated share." : "يسمح لك الاتحاد بالاتصال بخوادم موثوقة أخرى لتبادل أدلة الحسابات معها. على سبيل المثال، سيتم استخدام هذا للإكمال التلقائي للحسابات الخارجية عند المشاركة الاتحادية. ليس من الضروري إضافة خادم كخادم موثوق به لإنشاء مشاركة السحابة الموحدة.", + "Each server must validate the other. This process may require a few cron cycles." : "يجب على كل خادوم أن يُصادِق على الآخر. هذه العملية يمكن أن تستغرق عدة دورات من مهام الخلفية cron.", + "+ Add trusted server" : "+ إضافة خادم موثوق", + "Trusted server" : "خادم موثوق", "Add" : "إضافة" }, "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/federation/l10n/ar.json b/apps/federation/l10n/ar.json index f2a9c3252a3..318f3393348 100644 --- a/apps/federation/l10n/ar.json +++ b/apps/federation/l10n/ar.json @@ -1,10 +1,19 @@ { "translations": { - "Server is already in the list of trusted servers." : "الخادوم موجود بالفعل في قائمة الخوادم الموثوق فيها.", - "Could not add server" : "تعذَّرت إضافة خادم", - "Trusted servers" : "الخوادم الموثوق فيها", - "Federation" : "الإتحاد", - "+ Add trusted server" : "+ إضافة خادوم موثوق فيه", - "Trusted server" : "خادوم موثوق فيه", + "Added to the list of trusted servers" : "أُضيف إلى قائمة الخوادم غير الموثوقة", + "No server found with ID: %s" : "لايوجد أي خادوم بهذا الرقم: %s", + "Could not remove server" : "تتعذّر إزالة الخادوم", + "Server is already in the list of trusted servers." : "الخادم موجود بالفعل في قائمة الخوادم الموثوقة.", + "No server to federate with found" : "لم يُمكن إيجاد أي خادم للاتحاد معه", + "Could not add server" : "تعذّرت إضافة الخادم", + "Trusted servers" : "الخوادم الموثوقة", + "Federation" : "الربط عبر السحابة الموحدة", + "Federation allows you to connect with other trusted servers to exchange the account directory." : "يسمح لك الاتحاد بالاتصال بخوادم موثوقة أخرى لتبادل أدلة الحسابات معها.", + "Federation allows you to connect with other trusted servers to exchange the account directory. For example this will be used to auto-complete external accounts for federated sharing." : "يسمح لك الاتحاد بالاتصال بخوادم موثوقة أخرى لتبادل أدلة الحسابات معها. على سبيل المثال، سيتم استخدام هذا للإكمال التلقائي للحسابات الخارجية عند المشاركة عبر السحابة الموحدة federated sharing.", + "External documentation for Federated Cloud Sharing" : "التوثيق الخارجي لمشاركة السحابة الاتحادية", + "Federation allows you to connect with other trusted servers to exchange the account directory. For example this will be used to auto-complete external accounts for federated sharing. It is not necessary to add a server as trusted server in order to create a federated share." : "يسمح لك الاتحاد بالاتصال بخوادم موثوقة أخرى لتبادل أدلة الحسابات معها. على سبيل المثال، سيتم استخدام هذا للإكمال التلقائي للحسابات الخارجية عند المشاركة الاتحادية. ليس من الضروري إضافة خادم كخادم موثوق به لإنشاء مشاركة السحابة الموحدة.", + "Each server must validate the other. This process may require a few cron cycles." : "يجب على كل خادوم أن يُصادِق على الآخر. هذه العملية يمكن أن تستغرق عدة دورات من مهام الخلفية cron.", + "+ Add trusted server" : "+ إضافة خادم موثوق", + "Trusted server" : "خادم موثوق", "Add" : "إضافة" },"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/federation/l10n/ast.js b/apps/federation/l10n/ast.js index 00b27718045..f19158a881e 100644 --- a/apps/federation/l10n/ast.js +++ b/apps/federation/l10n/ast.js @@ -1,14 +1,16 @@ OC.L10N.register( "federation", { - "Added to the list of trusted servers" : "Amestóse al llistáu de sirvidores d'enfotu", - "Server is already in the list of trusted servers." : "El sirvidor yá ta nel llistáu de sirvidores d'enfotu.", - "No server to federate with found" : "Nun s'alcontró dengún sirvidor col que federase", - "Could not add server" : "Nun pudo amestase'l sirvidor", + "Added to the list of trusted servers" : "Amestóse a la llista de sirvidores d'enfotu", + "Server is already in the list of trusted servers." : "El sirvidor yá ta na llista de los sirvidores d'enfotu.", + "No server to federate with found" : "Nun s'atopó nengún sirvidor col que se federar", + "Could not add server" : "Nun se pudo amestar el sirvidor", "Trusted servers" : "Sirvidores d'enfotu", "Federation" : "Federación", - "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "La federación permítete coneutar con otros sirvidores d'enfotu pa intercambiar el direutoriu d'usuarios. Por exemplu, esto usaráse p'auto-completar usuarios esternos y compatir de mou federáu.", - "+ Add trusted server" : "+ Amestar sirvidor d'enfotu", + "Federation allows you to connect with other trusted servers to exchange the account directory." : "La federación permíte que te conectes con otros sirvidores d'enfotu pa intercambiar el direutoriu de cuentes.", + "Federation allows you to connect with other trusted servers to exchange the account directory. For example this will be used to auto-complete external accounts for federated sharing." : "La federación permite que te conectes a otros sirvidores d'enfotu pa intercambiar el direutoriu de cuentes. Por exemplu, va usase pa completar automáticamente les cuentes esternes de la compartición federada.", + "Federation allows you to connect with other trusted servers to exchange the account directory. For example this will be used to auto-complete external accounts for federated sharing. It is not necessary to add a server as trusted server in order to create a federated share." : "La federación permite que te conectes a otros sirvidores d'enfotu pa intercambiar el direutoriu de cuentes. Por exemplu, va usase pa completar automáticamente les cuentes esternes de la compartición federada. Nun ye necesario amestar un sirvidor como sirvidor d'enfotu pa crear una compartición federada.", + "+ Add trusted server" : "+ Amestar un sirvidor d'enfotu", "Trusted server" : "Sirvidor d'enfotu", "Add" : "Amestar" }, diff --git a/apps/federation/l10n/ast.json b/apps/federation/l10n/ast.json index f7a9ce06ec3..a9849dbf5dd 100644 --- a/apps/federation/l10n/ast.json +++ b/apps/federation/l10n/ast.json @@ -1,12 +1,14 @@ { "translations": { - "Added to the list of trusted servers" : "Amestóse al llistáu de sirvidores d'enfotu", - "Server is already in the list of trusted servers." : "El sirvidor yá ta nel llistáu de sirvidores d'enfotu.", - "No server to federate with found" : "Nun s'alcontró dengún sirvidor col que federase", - "Could not add server" : "Nun pudo amestase'l sirvidor", + "Added to the list of trusted servers" : "Amestóse a la llista de sirvidores d'enfotu", + "Server is already in the list of trusted servers." : "El sirvidor yá ta na llista de los sirvidores d'enfotu.", + "No server to federate with found" : "Nun s'atopó nengún sirvidor col que se federar", + "Could not add server" : "Nun se pudo amestar el sirvidor", "Trusted servers" : "Sirvidores d'enfotu", "Federation" : "Federación", - "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "La federación permítete coneutar con otros sirvidores d'enfotu pa intercambiar el direutoriu d'usuarios. Por exemplu, esto usaráse p'auto-completar usuarios esternos y compatir de mou federáu.", - "+ Add trusted server" : "+ Amestar sirvidor d'enfotu", + "Federation allows you to connect with other trusted servers to exchange the account directory." : "La federación permíte que te conectes con otros sirvidores d'enfotu pa intercambiar el direutoriu de cuentes.", + "Federation allows you to connect with other trusted servers to exchange the account directory. For example this will be used to auto-complete external accounts for federated sharing." : "La federación permite que te conectes a otros sirvidores d'enfotu pa intercambiar el direutoriu de cuentes. Por exemplu, va usase pa completar automáticamente les cuentes esternes de la compartición federada.", + "Federation allows you to connect with other trusted servers to exchange the account directory. For example this will be used to auto-complete external accounts for federated sharing. It is not necessary to add a server as trusted server in order to create a federated share." : "La federación permite que te conectes a otros sirvidores d'enfotu pa intercambiar el direutoriu de cuentes. Por exemplu, va usase pa completar automáticamente les cuentes esternes de la compartición federada. Nun ye necesario amestar un sirvidor como sirvidor d'enfotu pa crear una compartición federada.", + "+ Add trusted server" : "+ Amestar un sirvidor d'enfotu", "Trusted server" : "Sirvidor d'enfotu", "Add" : "Amestar" },"pluralForm" :"nplurals=2; plural=(n != 1);" diff --git a/apps/federation/l10n/bg.js b/apps/federation/l10n/bg.js index fd79b369fcc..8d1071ed3fe 100644 --- a/apps/federation/l10n/bg.js +++ b/apps/federation/l10n/bg.js @@ -7,9 +7,6 @@ OC.L10N.register( "Could not add server" : "Не можа да се добави сървър", "Trusted servers" : "Доверени сървъри", "Federation" : "Федерация", - "Federation allows you to connect with other trusted servers to exchange the user directory." : "Федерирането ви позволява да се свържете с други доверени сървъри, за да обменяте потребителската директория.", - "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "Федерирането ви позволява да се свържете с други доверени сървъри, за да обменяте потребителската директория. Например това ще се използва за автоматично довършване/на думи/ на външни потребители за федерирано споделяне.", - "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing. It is not necessary to add a server as trusted server in order to create a federated share." : "Федерирането ви позволява да се свържете с други доверени сървъри, за да обменяте потребителската директория. Например това ще се използва за автоматично довършване/на думи/ на външни потребители за федерирано споделяне. Не е необходимо да добавяте един сървър, като доверен сървър, за да създадете федерирано споделяне. ", "+ Add trusted server" : "+ Добави доверен сървър", "Trusted server" : "Доверен сървър", "Add" : "Добави" diff --git a/apps/federation/l10n/bg.json b/apps/federation/l10n/bg.json index 0c9e3777340..caf88a7d6c2 100644 --- a/apps/federation/l10n/bg.json +++ b/apps/federation/l10n/bg.json @@ -5,9 +5,6 @@ "Could not add server" : "Не можа да се добави сървър", "Trusted servers" : "Доверени сървъри", "Federation" : "Федерация", - "Federation allows you to connect with other trusted servers to exchange the user directory." : "Федерирането ви позволява да се свържете с други доверени сървъри, за да обменяте потребителската директория.", - "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "Федерирането ви позволява да се свържете с други доверени сървъри, за да обменяте потребителската директория. Например това ще се използва за автоматично довършване/на думи/ на външни потребители за федерирано споделяне.", - "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing. It is not necessary to add a server as trusted server in order to create a federated share." : "Федерирането ви позволява да се свържете с други доверени сървъри, за да обменяте потребителската директория. Например това ще се използва за автоматично довършване/на думи/ на външни потребители за федерирано споделяне. Не е необходимо да добавяте един сървър, като доверен сървър, за да създадете федерирано споделяне. ", "+ Add trusted server" : "+ Добави доверен сървър", "Trusted server" : "Доверен сървър", "Add" : "Добави" diff --git a/apps/federation/l10n/br.js b/apps/federation/l10n/br.js index 3167b8b1db4..d896f18e6d3 100644 --- a/apps/federation/l10n/br.js +++ b/apps/federation/l10n/br.js @@ -7,9 +7,6 @@ OC.L10N.register( "Could not add server" : "Dibosupl ouzhpennañ ar servijour", "Trusted servers" : "Servijourienn fiziet", "Federation" : "Kevread", - "Federation allows you to connect with other trusted servers to exchange the user directory." : "Aotreañ a ra deoc'h ar gevread d'en em genstagañ gant servijrourienn fiziet all evit eskemm teuliadoù.", - "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "Aotreañ a ra deoc'h ar gevread d'en em genstagañ gant servijrourienn fiziet all evit eskemm teuliadoù. Da skouer implijet e vo evit klokañ en un doare otomatek implijourienn diavaez evit rannadennoù kevredet.", - "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing. It is not necessary to add a server as trusted server in order to create a federated share." : "Aotreañ a ra deoc'h ar gevread d'en em genstagañ gant servijrourienn fiziet all evit eskemm teuliadoù. Da skouer implijet e vo evit klokañ en un doare otomatek implijourienn diavaez evit rannadennoù kevredet. N'eo ket rediet ouzhpennañ ur servijour fiziet evit kroui ur rannadenn kevredet.", "+ Add trusted server" : "+ Ouzhpenna ur servijour fiziet", "Trusted server" : "Servijour fiziet", "Add" : "Ouzhpennañ" diff --git a/apps/federation/l10n/br.json b/apps/federation/l10n/br.json index 07e26d09673..f5e656c2472 100644 --- a/apps/federation/l10n/br.json +++ b/apps/federation/l10n/br.json @@ -5,9 +5,6 @@ "Could not add server" : "Dibosupl ouzhpennañ ar servijour", "Trusted servers" : "Servijourienn fiziet", "Federation" : "Kevread", - "Federation allows you to connect with other trusted servers to exchange the user directory." : "Aotreañ a ra deoc'h ar gevread d'en em genstagañ gant servijrourienn fiziet all evit eskemm teuliadoù.", - "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "Aotreañ a ra deoc'h ar gevread d'en em genstagañ gant servijrourienn fiziet all evit eskemm teuliadoù. Da skouer implijet e vo evit klokañ en un doare otomatek implijourienn diavaez evit rannadennoù kevredet.", - "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing. It is not necessary to add a server as trusted server in order to create a federated share." : "Aotreañ a ra deoc'h ar gevread d'en em genstagañ gant servijrourienn fiziet all evit eskemm teuliadoù. Da skouer implijet e vo evit klokañ en un doare otomatek implijourienn diavaez evit rannadennoù kevredet. N'eo ket rediet ouzhpennañ ur servijour fiziet evit kroui ur rannadenn kevredet.", "+ Add trusted server" : "+ Ouzhpenna ur servijour fiziet", "Trusted server" : "Servijour fiziet", "Add" : "Ouzhpennañ" diff --git a/apps/federation/l10n/ca.js b/apps/federation/l10n/ca.js index 0ffbffa0ce9..ab76d309c6f 100644 --- a/apps/federation/l10n/ca.js +++ b/apps/federation/l10n/ca.js @@ -2,14 +2,18 @@ OC.L10N.register( "federation", { "Added to the list of trusted servers" : "S'ha afegit a la llista de servidors de confiança", + "No server found with ID: %s" : "No s'ha trobat cap servidor amb ID: %s", + "Could not remove server" : "No s'ha pogut suprimir el servidor", "Server is already in the list of trusted servers." : "El servidor ja es troba en la llista de servidors de confiança.", "No server to federate with found" : "No s'ha trobat cap servidor amb què federar-se", "Could not add server" : "No s'ha pogut afegir el servidor", "Trusted servers" : "Servidors de confiança", "Federation" : "Federació", - "Federation allows you to connect with other trusted servers to exchange the user directory." : "La federació us permet connectar-vos amb altres servidors de confiança per a intercanviar la carpeta d'usuari.", - "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "La federació us permet connectar-vos amb altres servidors de confiança per a intercanviar carpetes d'usuari. Per exemple, s'utilitzarà per a proporcionar resultats d'emplenament automàtic d'usuaris externs per a l'ús compartit federat.", - "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing. It is not necessary to add a server as trusted server in order to create a federated share." : "La federació us permet connectar-vos amb altres servidors de confiança per a intercanviar carpetes d'usuari. Per exemple, s'utilitzarà per a proporcionar resultats d'emplenament automàtic d'usuaris externs per a l'ús compartit federat. No cal afegir un servidor com a servidor de confiança per a crear un recurs d'ús compartit federat.", + "Federation allows you to connect with other trusted servers to exchange the account directory." : "La federació us permet connectar-vos amb altres servidors de confiança per a intercanviar la carpeta del compte.", + "Federation allows you to connect with other trusted servers to exchange the account directory. For example this will be used to auto-complete external accounts for federated sharing." : "La federació us permet connectar-vos amb altres servidors de confiança per a intercanviar carpetes de compte. Per exemple, s'utilitzarà per a proporcionar resultats d'emplenament automàtic de comptes externs per a l'ús compartit federat.", + "External documentation for Federated Cloud Sharing" : "Documentació externa per a compartició federada de núvol", + "Federation allows you to connect with other trusted servers to exchange the account directory. For example this will be used to auto-complete external accounts for federated sharing. It is not necessary to add a server as trusted server in order to create a federated share." : "La federació us permet connectar-vos amb altres servidors de confiança per a intercanviar carpetes de compte. Per exemple, s'utilitzarà per a proporcionar resultats d'emplenament automàtic de comptes externs per a l'ús compartit federat. No cal afegir un servidor com a servidor de confiança per a crear un recurs d'ús compartit federat.", + "Each server must validate the other. This process may require a few cron cycles." : "Cada servidor ha de validar l'altre. Aquest procés pot requerir uns quants cicles cron.", "+ Add trusted server" : "+ Afegeix un servidor de confiança", "Trusted server" : "Servidor de confiança", "Add" : "Afegeix" diff --git a/apps/federation/l10n/ca.json b/apps/federation/l10n/ca.json index 965d10fa0f4..0d4579feb04 100644 --- a/apps/federation/l10n/ca.json +++ b/apps/federation/l10n/ca.json @@ -1,13 +1,17 @@ { "translations": { "Added to the list of trusted servers" : "S'ha afegit a la llista de servidors de confiança", + "No server found with ID: %s" : "No s'ha trobat cap servidor amb ID: %s", + "Could not remove server" : "No s'ha pogut suprimir el servidor", "Server is already in the list of trusted servers." : "El servidor ja es troba en la llista de servidors de confiança.", "No server to federate with found" : "No s'ha trobat cap servidor amb què federar-se", "Could not add server" : "No s'ha pogut afegir el servidor", "Trusted servers" : "Servidors de confiança", "Federation" : "Federació", - "Federation allows you to connect with other trusted servers to exchange the user directory." : "La federació us permet connectar-vos amb altres servidors de confiança per a intercanviar la carpeta d'usuari.", - "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "La federació us permet connectar-vos amb altres servidors de confiança per a intercanviar carpetes d'usuari. Per exemple, s'utilitzarà per a proporcionar resultats d'emplenament automàtic d'usuaris externs per a l'ús compartit federat.", - "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing. It is not necessary to add a server as trusted server in order to create a federated share." : "La federació us permet connectar-vos amb altres servidors de confiança per a intercanviar carpetes d'usuari. Per exemple, s'utilitzarà per a proporcionar resultats d'emplenament automàtic d'usuaris externs per a l'ús compartit federat. No cal afegir un servidor com a servidor de confiança per a crear un recurs d'ús compartit federat.", + "Federation allows you to connect with other trusted servers to exchange the account directory." : "La federació us permet connectar-vos amb altres servidors de confiança per a intercanviar la carpeta del compte.", + "Federation allows you to connect with other trusted servers to exchange the account directory. For example this will be used to auto-complete external accounts for federated sharing." : "La federació us permet connectar-vos amb altres servidors de confiança per a intercanviar carpetes de compte. Per exemple, s'utilitzarà per a proporcionar resultats d'emplenament automàtic de comptes externs per a l'ús compartit federat.", + "External documentation for Federated Cloud Sharing" : "Documentació externa per a compartició federada de núvol", + "Federation allows you to connect with other trusted servers to exchange the account directory. For example this will be used to auto-complete external accounts for federated sharing. It is not necessary to add a server as trusted server in order to create a federated share." : "La federació us permet connectar-vos amb altres servidors de confiança per a intercanviar carpetes de compte. Per exemple, s'utilitzarà per a proporcionar resultats d'emplenament automàtic de comptes externs per a l'ús compartit federat. No cal afegir un servidor com a servidor de confiança per a crear un recurs d'ús compartit federat.", + "Each server must validate the other. This process may require a few cron cycles." : "Cada servidor ha de validar l'altre. Aquest procés pot requerir uns quants cicles cron.", "+ Add trusted server" : "+ Afegeix un servidor de confiança", "Trusted server" : "Servidor de confiança", "Add" : "Afegeix" diff --git a/apps/federation/l10n/cs.js b/apps/federation/l10n/cs.js index 0d8e0e4f0f6..8a10ca10b9f 100644 --- a/apps/federation/l10n/cs.js +++ b/apps/federation/l10n/cs.js @@ -2,14 +2,18 @@ OC.L10N.register( "federation", { "Added to the list of trusted servers" : "Přidáno na seznam důvěryhodných serverů", + "No server found with ID: %s" : "Nenalezen žádný server, který by měl identifikátor: %s", + "Could not remove server" : "Nebylo možné odebrat server", "Server is already in the list of trusted servers." : "Server se už nachází na seznamu těch důvěryhodných.", "No server to federate with found" : "Nenalezen žádný server, se kterým by bylo možné federovat", - "Could not add server" : "Nepodařilo se přidat server", + "Could not add server" : "Server se nepodařilo přidat", "Trusted servers" : "Důvěryhodné servery", "Federation" : "Federování", - "Federation allows you to connect with other trusted servers to exchange the user directory." : "Federování umožňuje propojit s ostatními servery, kterým věříte a vyměňovat si tak adresář uživatelů.", - "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "Federování umožňuje propojit s ostatními servery, kterým věříte a vyměňovat si tak adresář uživatelů. Používá se to např. pro automatické doplňování uživatelů při federovaném sdílení.", - "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing. It is not necessary to add a server as trusted server in order to create a federated share." : "Federování vám umožní se spojovat s dalšími důvěryhodnými servery a sdílet tak uživatelské účty. Například bude toto využito při automatickém dokončování externích uživatelů pro federované sdílení. K vytvoření federovaného sdílení není nezbytné přidávat server jako důvěryhodný.", + "Federation allows you to connect with other trusted servers to exchange the account directory." : "Federování umožňuje propojit s ostatními servery, kterým věříte a vyměňovat si tak adresář účtů.", + "Federation allows you to connect with other trusted servers to exchange the account directory. For example this will be used to auto-complete external accounts for federated sharing." : "Federování umožňuje propojit s ostatními servery, kterým věříte a vyměňovat si tak adresář uživatelských účtů. Používá se toho například pro automatické doplňování externích účtů při federovaném sdílení.", + "External documentation for Federated Cloud Sharing" : "Externí dokumentace pro sdílení v rámci federovaného cloudu", + "Federation allows you to connect with other trusted servers to exchange the account directory. For example this will be used to auto-complete external accounts for federated sharing. It is not necessary to add a server as trusted server in order to create a federated share." : "Federování umožňuje propojit se s ostatními servery, kterým věříte a vyměňovat si tak adresář uživatelských účtů. Používá se toho například pro automatické dokončování externích účtů při federovaném sdílení. Nicméně pro vytvoření federovaného sdílení jako takového není nezbytné přidávat server jako důvěryhodný.", + "Each server must validate the other. This process may require a few cron cycles." : "Je třeba, aby každý server ověřil ten druhý. Tento proces může vyžadovat několik cyklů plánovače.", "+ Add trusted server" : "+ Přidat důvěryhodný server", "Trusted server" : "Důvěryhodný server", "Add" : "Přidat" diff --git a/apps/federation/l10n/cs.json b/apps/federation/l10n/cs.json index e8f616d2aff..d11979fbca2 100644 --- a/apps/federation/l10n/cs.json +++ b/apps/federation/l10n/cs.json @@ -1,13 +1,17 @@ { "translations": { "Added to the list of trusted servers" : "Přidáno na seznam důvěryhodných serverů", + "No server found with ID: %s" : "Nenalezen žádný server, který by měl identifikátor: %s", + "Could not remove server" : "Nebylo možné odebrat server", "Server is already in the list of trusted servers." : "Server se už nachází na seznamu těch důvěryhodných.", "No server to federate with found" : "Nenalezen žádný server, se kterým by bylo možné federovat", - "Could not add server" : "Nepodařilo se přidat server", + "Could not add server" : "Server se nepodařilo přidat", "Trusted servers" : "Důvěryhodné servery", "Federation" : "Federování", - "Federation allows you to connect with other trusted servers to exchange the user directory." : "Federování umožňuje propojit s ostatními servery, kterým věříte a vyměňovat si tak adresář uživatelů.", - "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "Federování umožňuje propojit s ostatními servery, kterým věříte a vyměňovat si tak adresář uživatelů. Používá se to např. pro automatické doplňování uživatelů při federovaném sdílení.", - "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing. It is not necessary to add a server as trusted server in order to create a federated share." : "Federování vám umožní se spojovat s dalšími důvěryhodnými servery a sdílet tak uživatelské účty. Například bude toto využito při automatickém dokončování externích uživatelů pro federované sdílení. K vytvoření federovaného sdílení není nezbytné přidávat server jako důvěryhodný.", + "Federation allows you to connect with other trusted servers to exchange the account directory." : "Federování umožňuje propojit s ostatními servery, kterým věříte a vyměňovat si tak adresář účtů.", + "Federation allows you to connect with other trusted servers to exchange the account directory. For example this will be used to auto-complete external accounts for federated sharing." : "Federování umožňuje propojit s ostatními servery, kterým věříte a vyměňovat si tak adresář uživatelských účtů. Používá se toho například pro automatické doplňování externích účtů při federovaném sdílení.", + "External documentation for Federated Cloud Sharing" : "Externí dokumentace pro sdílení v rámci federovaného cloudu", + "Federation allows you to connect with other trusted servers to exchange the account directory. For example this will be used to auto-complete external accounts for federated sharing. It is not necessary to add a server as trusted server in order to create a federated share." : "Federování umožňuje propojit se s ostatními servery, kterým věříte a vyměňovat si tak adresář uživatelských účtů. Používá se toho například pro automatické dokončování externích účtů při federovaném sdílení. Nicméně pro vytvoření federovaného sdílení jako takového není nezbytné přidávat server jako důvěryhodný.", + "Each server must validate the other. This process may require a few cron cycles." : "Je třeba, aby každý server ověřil ten druhý. Tento proces může vyžadovat několik cyklů plánovače.", "+ Add trusted server" : "+ Přidat důvěryhodný server", "Trusted server" : "Důvěryhodný server", "Add" : "Přidat" diff --git a/apps/federation/l10n/da.js b/apps/federation/l10n/da.js index 568ebab2f3e..547aaddb6c5 100644 --- a/apps/federation/l10n/da.js +++ b/apps/federation/l10n/da.js @@ -2,14 +2,18 @@ OC.L10N.register( "federation", { "Added to the list of trusted servers" : "Tilføjet listen af godkendte servere", + "No server found with ID: %s" : "Ingen server fundet med ID: %s", + "Could not remove server" : "Serveren kunne ikke fjernes", "Server is already in the list of trusted servers." : "Serveren står allerede på listen over sikre servere", - "No server to federate with found" : "Ingen server at forbinde til blev fundet", + "No server to federate with found" : "Der blev ikke fundet nogen server til at sammenkoble med", "Could not add server" : "Kunne ikke tilføje server", "Trusted servers" : "Pålidelige servere", - "Federation" : "Datafællesskab", - "Federation allows you to connect with other trusted servers to exchange the user directory." : "Datafællesskab gør dig i stand til at forbinde med andre serveren du stoler på og udveksle brugerdatabaser.", - "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "Federation gør dig i stand til at forbinde med andre serveren du stoler på og udveksle brugerdatabaser. F. eks. dette kan blive bruge til at auto complete eksterne brugere når du laver federated deling.", - "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing. It is not necessary to add a server as trusted server in order to create a federated share." : "Federation giver dig mulighed for at oprette forbindelse til andre betroede servere for at udveksle brugerkataloget. For eksempel vil dette blive brugt til automatisk at udfylde eksterne brugere til fødereret deling. Det er ikke nødvendigt at tilføje en server som betroet server for at oprette en sammensat deling.", + "Federation" : "Sammenkobling", + "Federation allows you to connect with other trusted servers to exchange the account directory." : "Sammenkobling giver dig mulighed for at oprette forbindelse til andre betroede servere for at udveksle kontobiblioteket.", + "Federation allows you to connect with other trusted servers to exchange the account directory. For example this will be used to auto-complete external accounts for federated sharing." : "Sammenkobling giver dig mulighed for at oprette forbindelse til andre betroede servere for at udveksle kontobiblioteket. For eksempel vil dette blive brugt til automatisk at fuldføre eksterne konti til deling.", + "External documentation for Federated Cloud Sharing" : "Ekstern dokumentation for Sammenkoblings Cloud deling", + "Federation allows you to connect with other trusted servers to exchange the account directory. For example this will be used to auto-complete external accounts for federated sharing. It is not necessary to add a server as trusted server in order to create a federated share." : "Sammenkobling giver dig mulighed for at oprette forbindelse til andre betroede servere for at udveksle kontobiblioteket. For eksempel vil dette blive brugt til automatisk at fuldføre eksterne konti til sammenkoblet deling. Det er ikke nødvendigt at tilføje en server som betroet server for at oprette en sammenkoblet deling.", + "Each server must validate the other. This process may require a few cron cycles." : "Hver server skal validere den anden. Denne proces kan kræve et par cron cyklusser.", "+ Add trusted server" : "+ Tilføj pålidelig server", "Trusted server" : "Pålidelig server", "Add" : "Tilføj" diff --git a/apps/federation/l10n/da.json b/apps/federation/l10n/da.json index 294995126dd..932c5156ed7 100644 --- a/apps/federation/l10n/da.json +++ b/apps/federation/l10n/da.json @@ -1,13 +1,17 @@ { "translations": { "Added to the list of trusted servers" : "Tilføjet listen af godkendte servere", + "No server found with ID: %s" : "Ingen server fundet med ID: %s", + "Could not remove server" : "Serveren kunne ikke fjernes", "Server is already in the list of trusted servers." : "Serveren står allerede på listen over sikre servere", - "No server to federate with found" : "Ingen server at forbinde til blev fundet", + "No server to federate with found" : "Der blev ikke fundet nogen server til at sammenkoble med", "Could not add server" : "Kunne ikke tilføje server", "Trusted servers" : "Pålidelige servere", - "Federation" : "Datafællesskab", - "Federation allows you to connect with other trusted servers to exchange the user directory." : "Datafællesskab gør dig i stand til at forbinde med andre serveren du stoler på og udveksle brugerdatabaser.", - "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "Federation gør dig i stand til at forbinde med andre serveren du stoler på og udveksle brugerdatabaser. F. eks. dette kan blive bruge til at auto complete eksterne brugere når du laver federated deling.", - "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing. It is not necessary to add a server as trusted server in order to create a federated share." : "Federation giver dig mulighed for at oprette forbindelse til andre betroede servere for at udveksle brugerkataloget. For eksempel vil dette blive brugt til automatisk at udfylde eksterne brugere til fødereret deling. Det er ikke nødvendigt at tilføje en server som betroet server for at oprette en sammensat deling.", + "Federation" : "Sammenkobling", + "Federation allows you to connect with other trusted servers to exchange the account directory." : "Sammenkobling giver dig mulighed for at oprette forbindelse til andre betroede servere for at udveksle kontobiblioteket.", + "Federation allows you to connect with other trusted servers to exchange the account directory. For example this will be used to auto-complete external accounts for federated sharing." : "Sammenkobling giver dig mulighed for at oprette forbindelse til andre betroede servere for at udveksle kontobiblioteket. For eksempel vil dette blive brugt til automatisk at fuldføre eksterne konti til deling.", + "External documentation for Federated Cloud Sharing" : "Ekstern dokumentation for Sammenkoblings Cloud deling", + "Federation allows you to connect with other trusted servers to exchange the account directory. For example this will be used to auto-complete external accounts for federated sharing. It is not necessary to add a server as trusted server in order to create a federated share." : "Sammenkobling giver dig mulighed for at oprette forbindelse til andre betroede servere for at udveksle kontobiblioteket. For eksempel vil dette blive brugt til automatisk at fuldføre eksterne konti til sammenkoblet deling. Det er ikke nødvendigt at tilføje en server som betroet server for at oprette en sammenkoblet deling.", + "Each server must validate the other. This process may require a few cron cycles." : "Hver server skal validere den anden. Denne proces kan kræve et par cron cyklusser.", "+ Add trusted server" : "+ Tilføj pålidelig server", "Trusted server" : "Pålidelig server", "Add" : "Tilføj" diff --git a/apps/federation/l10n/de.js b/apps/federation/l10n/de.js index ea613b489ce..070c7e76e92 100644 --- a/apps/federation/l10n/de.js +++ b/apps/federation/l10n/de.js @@ -2,14 +2,18 @@ OC.L10N.register( "federation", { "Added to the list of trusted servers" : "Der Liste der vertrauenswürdigen Server hinzugefügt", + "No server found with ID: %s" : "Kein Server mit folgender ID gefunden: %s", + "Could not remove server" : "Server konnte nicht entfernt werden", "Server is already in the list of trusted servers." : "Server ist bereits in der Liste der vertrauenswürdigen Server.", "No server to federate with found" : "Es wurde kein Server zum Verbinden per Federation gefunden", - "Could not add server" : "Konnte Server nicht hinzufügen", + "Could not add server" : "Server konnte nicht hinzugefügt werden", "Trusted servers" : "Vertrauenswürdige Server", "Federation" : "Federation", - "Federation allows you to connect with other trusted servers to exchange the user directory." : "Federation ermöglicht die Verbindung mit anderen vertrauenswürdigen Servern um das Nutzerverzeichnis auszutauschen.", - "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "Federation erlaubt es Dir, Dich mit anderen vertrauenswürdigen Servern zu verbinden, um das Benutzerverzeichnis auszutauschen. Dies wird zum Beispiel für die automatische Vervollständigung externer Benutzernamen beim Federated-Sharing verwendet.", - "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing. It is not necessary to add a server as trusted server in order to create a federated share." : "Federation ermöglicht es Dir, Dich mit anderen vertrauenswürdigen Servern zu verbinden, um das Benutzerverzeichnis auszutauschen. Dies wird zum Beispiel für die automatische Vervollständigung externer Benutzernamen beim Federated-Sharing verwendet. Es ist nicht erforderlich einen Server als vertrauenswürdig hinzuzufügen, um eine \"federated\" Freigabe zu erstellen.", + "Federation allows you to connect with other trusted servers to exchange the account directory." : "Federation ermöglicht die Verbindung mit anderen vertrauenswürdigen Servern, um das Kontenverzeichnis auszutauschen.", + "Federation allows you to connect with other trusted servers to exchange the account directory. For example this will be used to auto-complete external accounts for federated sharing." : "Federation ermöglicht es dir, dich mit anderen vertrauenswürdigen Servern zu verbinden, um das Kontoverzeichnis auszutauschen. Dies wird zum Beispiel für die automatische Vervollständigung externer Konten beim Federated-Sharing verwendet.", + "External documentation for Federated Cloud Sharing" : "Externe Dokumentation für das Teilen über Federated Cloud", + "Federation allows you to connect with other trusted servers to exchange the account directory. For example this will be used to auto-complete external accounts for federated sharing. It is not necessary to add a server as trusted server in order to create a federated share." : "Federation ermöglicht es dir, dich mit anderen vertrauenswürdigen Servern zu verbinden, um das Kontoverzeichnis auszutauschen. Dies wird zum Beispiel für die automatische Vervollständigung externer Konten beim Federated-Sharing verwendet. Es ist nicht erforderlich einen Server als vertrauenswürdig hinzuzufügen, um eine \"federated\" Freigabe zu erstellen.", + "Each server must validate the other. This process may require a few cron cycles." : "Jeder Server muss den anderen validieren. Dieser Vorgang kann einige Cron-Zyklen benötigen.", "+ Add trusted server" : "+ Vertrauenswürdigen Server hinzufügen", "Trusted server" : "Vertrauenswürdiger Server", "Add" : "Hinzufügen" diff --git a/apps/federation/l10n/de.json b/apps/federation/l10n/de.json index 29109675428..ec1118bce91 100644 --- a/apps/federation/l10n/de.json +++ b/apps/federation/l10n/de.json @@ -1,13 +1,17 @@ { "translations": { "Added to the list of trusted servers" : "Der Liste der vertrauenswürdigen Server hinzugefügt", + "No server found with ID: %s" : "Kein Server mit folgender ID gefunden: %s", + "Could not remove server" : "Server konnte nicht entfernt werden", "Server is already in the list of trusted servers." : "Server ist bereits in der Liste der vertrauenswürdigen Server.", "No server to federate with found" : "Es wurde kein Server zum Verbinden per Federation gefunden", - "Could not add server" : "Konnte Server nicht hinzufügen", + "Could not add server" : "Server konnte nicht hinzugefügt werden", "Trusted servers" : "Vertrauenswürdige Server", "Federation" : "Federation", - "Federation allows you to connect with other trusted servers to exchange the user directory." : "Federation ermöglicht die Verbindung mit anderen vertrauenswürdigen Servern um das Nutzerverzeichnis auszutauschen.", - "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "Federation erlaubt es Dir, Dich mit anderen vertrauenswürdigen Servern zu verbinden, um das Benutzerverzeichnis auszutauschen. Dies wird zum Beispiel für die automatische Vervollständigung externer Benutzernamen beim Federated-Sharing verwendet.", - "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing. It is not necessary to add a server as trusted server in order to create a federated share." : "Federation ermöglicht es Dir, Dich mit anderen vertrauenswürdigen Servern zu verbinden, um das Benutzerverzeichnis auszutauschen. Dies wird zum Beispiel für die automatische Vervollständigung externer Benutzernamen beim Federated-Sharing verwendet. Es ist nicht erforderlich einen Server als vertrauenswürdig hinzuzufügen, um eine \"federated\" Freigabe zu erstellen.", + "Federation allows you to connect with other trusted servers to exchange the account directory." : "Federation ermöglicht die Verbindung mit anderen vertrauenswürdigen Servern, um das Kontenverzeichnis auszutauschen.", + "Federation allows you to connect with other trusted servers to exchange the account directory. For example this will be used to auto-complete external accounts for federated sharing." : "Federation ermöglicht es dir, dich mit anderen vertrauenswürdigen Servern zu verbinden, um das Kontoverzeichnis auszutauschen. Dies wird zum Beispiel für die automatische Vervollständigung externer Konten beim Federated-Sharing verwendet.", + "External documentation for Federated Cloud Sharing" : "Externe Dokumentation für das Teilen über Federated Cloud", + "Federation allows you to connect with other trusted servers to exchange the account directory. For example this will be used to auto-complete external accounts for federated sharing. It is not necessary to add a server as trusted server in order to create a federated share." : "Federation ermöglicht es dir, dich mit anderen vertrauenswürdigen Servern zu verbinden, um das Kontoverzeichnis auszutauschen. Dies wird zum Beispiel für die automatische Vervollständigung externer Konten beim Federated-Sharing verwendet. Es ist nicht erforderlich einen Server als vertrauenswürdig hinzuzufügen, um eine \"federated\" Freigabe zu erstellen.", + "Each server must validate the other. This process may require a few cron cycles." : "Jeder Server muss den anderen validieren. Dieser Vorgang kann einige Cron-Zyklen benötigen.", "+ Add trusted server" : "+ Vertrauenswürdigen Server hinzufügen", "Trusted server" : "Vertrauenswürdiger Server", "Add" : "Hinzufügen" diff --git a/apps/federation/l10n/de_DE.js b/apps/federation/l10n/de_DE.js index 52262ab9384..efb22f90bb5 100644 --- a/apps/federation/l10n/de_DE.js +++ b/apps/federation/l10n/de_DE.js @@ -2,14 +2,18 @@ OC.L10N.register( "federation", { "Added to the list of trusted servers" : "Der Liste der vertrauenswürdigen Server hinzugefügt", + "No server found with ID: %s" : "Kein Server mit folgender ID gefunden: %s", + "Could not remove server" : "Server konnte nicht entfernt werden", "Server is already in the list of trusted servers." : "Server ist bereits in der Liste der vertrauenswürdigen Servern.", "No server to federate with found" : "Es wurde kein Server zum Verbinden per Federation gefunden", - "Could not add server" : "Konnte Server nicht hinzufügen", + "Could not add server" : "Server konnte nicht hinzugefügt werden", "Trusted servers" : "Vertrauenswürdige Server", "Federation" : "Federation", - "Federation allows you to connect with other trusted servers to exchange the user directory." : "Federation ermöglicht die Verbindung mit anderen vertrauenswürdigen Servern, um das Benutzerverzeichnis auszutauschen.", - "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "Federation erlaubt es Ihnen, sich mit anderen vertrauenswürdigen Servern zu verbinden, um das Benutzerverzeichnis auszutauschen. Dies wird zum Beispiel für die automatische Vervollständigung externer Benutzernamen beim Federated-Sharing verwendet.", - "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing. It is not necessary to add a server as trusted server in order to create a federated share." : "Federation ermöglicht es Ihnen, sich mit anderen vertrauenswürdigen Servern zu verbinden, um das Benutzerverzeichnis auszutauschen. Dies wird zum Beispiel für die automatische Vervollständigung externer Benutzernamen beim Federated-Sharing verwendet. Es ist nicht erforderlich einen Server als vertrauenswürdig hinzuzufügen, um eine \"federated\" Freigabe zu erstellen.", + "Federation allows you to connect with other trusted servers to exchange the account directory." : "Federation ermöglicht die Verbindung mit anderen vertrauenswürdigen Servern, um das Kontenverzeichnis auszutauschen.", + "Federation allows you to connect with other trusted servers to exchange the account directory. For example this will be used to auto-complete external accounts for federated sharing." : "Federation ermöglicht es Ihnen, sich mit anderen vertrauenswürdigen Servern zu verbinden, um das Kontoverzeichnis auszutauschen. Dies wird zum Beispiel für die automatische Vervollständigung externer Konten beim Federated-Sharing verwendet.", + "External documentation for Federated Cloud Sharing" : "Externe Dokumentation für Teilen über Federated Cloud", + "Federation allows you to connect with other trusted servers to exchange the account directory. For example this will be used to auto-complete external accounts for federated sharing. It is not necessary to add a server as trusted server in order to create a federated share." : "Federation ermöglicht es Ihnen, sich mit anderen vertrauenswürdigen Servern zu verbinden, um das Kontoverzeichnis auszutauschen. Dies wird zum Beispiel für die automatische Vervollständigung externer Konten beim Federated-Sharing verwendet. Es ist nicht erforderlich einen Server als vertrauenswürdig hinzuzufügen, um eine \"federated\" Freigabe zu erstellen.", + "Each server must validate the other. This process may require a few cron cycles." : "Jeder Server muss den anderen validieren. Dieser Vorgang kann einige Cron-Zyklen erfordern.", "+ Add trusted server" : "+ Vertrauenswürdigen Server hinzufügen", "Trusted server" : "Vertrauenswürdiger Server", "Add" : "Hinzufügen" diff --git a/apps/federation/l10n/de_DE.json b/apps/federation/l10n/de_DE.json index 89b40992163..96f5fb099d3 100644 --- a/apps/federation/l10n/de_DE.json +++ b/apps/federation/l10n/de_DE.json @@ -1,13 +1,17 @@ { "translations": { "Added to the list of trusted servers" : "Der Liste der vertrauenswürdigen Server hinzugefügt", + "No server found with ID: %s" : "Kein Server mit folgender ID gefunden: %s", + "Could not remove server" : "Server konnte nicht entfernt werden", "Server is already in the list of trusted servers." : "Server ist bereits in der Liste der vertrauenswürdigen Servern.", "No server to federate with found" : "Es wurde kein Server zum Verbinden per Federation gefunden", - "Could not add server" : "Konnte Server nicht hinzufügen", + "Could not add server" : "Server konnte nicht hinzugefügt werden", "Trusted servers" : "Vertrauenswürdige Server", "Federation" : "Federation", - "Federation allows you to connect with other trusted servers to exchange the user directory." : "Federation ermöglicht die Verbindung mit anderen vertrauenswürdigen Servern, um das Benutzerverzeichnis auszutauschen.", - "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "Federation erlaubt es Ihnen, sich mit anderen vertrauenswürdigen Servern zu verbinden, um das Benutzerverzeichnis auszutauschen. Dies wird zum Beispiel für die automatische Vervollständigung externer Benutzernamen beim Federated-Sharing verwendet.", - "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing. It is not necessary to add a server as trusted server in order to create a federated share." : "Federation ermöglicht es Ihnen, sich mit anderen vertrauenswürdigen Servern zu verbinden, um das Benutzerverzeichnis auszutauschen. Dies wird zum Beispiel für die automatische Vervollständigung externer Benutzernamen beim Federated-Sharing verwendet. Es ist nicht erforderlich einen Server als vertrauenswürdig hinzuzufügen, um eine \"federated\" Freigabe zu erstellen.", + "Federation allows you to connect with other trusted servers to exchange the account directory." : "Federation ermöglicht die Verbindung mit anderen vertrauenswürdigen Servern, um das Kontenverzeichnis auszutauschen.", + "Federation allows you to connect with other trusted servers to exchange the account directory. For example this will be used to auto-complete external accounts for federated sharing." : "Federation ermöglicht es Ihnen, sich mit anderen vertrauenswürdigen Servern zu verbinden, um das Kontoverzeichnis auszutauschen. Dies wird zum Beispiel für die automatische Vervollständigung externer Konten beim Federated-Sharing verwendet.", + "External documentation for Federated Cloud Sharing" : "Externe Dokumentation für Teilen über Federated Cloud", + "Federation allows you to connect with other trusted servers to exchange the account directory. For example this will be used to auto-complete external accounts for federated sharing. It is not necessary to add a server as trusted server in order to create a federated share." : "Federation ermöglicht es Ihnen, sich mit anderen vertrauenswürdigen Servern zu verbinden, um das Kontoverzeichnis auszutauschen. Dies wird zum Beispiel für die automatische Vervollständigung externer Konten beim Federated-Sharing verwendet. Es ist nicht erforderlich einen Server als vertrauenswürdig hinzuzufügen, um eine \"federated\" Freigabe zu erstellen.", + "Each server must validate the other. This process may require a few cron cycles." : "Jeder Server muss den anderen validieren. Dieser Vorgang kann einige Cron-Zyklen erfordern.", "+ Add trusted server" : "+ Vertrauenswürdigen Server hinzufügen", "Trusted server" : "Vertrauenswürdiger Server", "Add" : "Hinzufügen" diff --git a/apps/federation/l10n/el.js b/apps/federation/l10n/el.js index a22fc2ff178..d877d7dfe0d 100644 --- a/apps/federation/l10n/el.js +++ b/apps/federation/l10n/el.js @@ -7,9 +7,6 @@ OC.L10N.register( "Could not add server" : "Αδυναμία προσθήκης διακομιστή", "Trusted servers" : "Έμπιστοι διακομιστές", "Federation" : "Federation", - "Federation allows you to connect with other trusted servers to exchange the user directory." : "Το Federation σας επιτρέπει να συνδεθείτε με αξιόπιστους διακομιστές για ανταλλαγή καταλόγου χρηστών.", - "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "Το Federation σας επιτρέπει να συνδεθείτε με άλλους αξιόπιστους διακομιστές για να ανταλλάξετε τον κατάλογο χρηστών. Για παράδειγμα, αυτό θα χρησιμοποιηθεί για την αυτόματη συμπλήρωση εξωτερικών χρηστών για ομαδική κοινή χρήση.", - "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing. It is not necessary to add a server as trusted server in order to create a federated share." : "Το Federation σας επιτρέπει να συνδεθείτε με άλλους αξιόπιστους διακομιστές για να ανταλλάξετε τον κατάλογο χρηστών. Για παράδειγμα, αυτό θα χρησιμοποιηθεί για την αυτόματη συμπλήρωση εξωτερικών χρηστών για ομαδική κοινή χρήση. Δεν είναι απαραίτητο να προσθέσετε έναν διακομιστή ως αξιόπιστο για να δημιουργήσετε ένα κοινόχρηστο μεταξύ τους στοιχείο.", "+ Add trusted server" : "+Προσθήκη έμπιστων διακομιστών", "Trusted server" : "Έμπιστοι διακομιστές", "Add" : "Προσθήκη" diff --git a/apps/federation/l10n/el.json b/apps/federation/l10n/el.json index 43263dac013..d074129fe06 100644 --- a/apps/federation/l10n/el.json +++ b/apps/federation/l10n/el.json @@ -5,9 +5,6 @@ "Could not add server" : "Αδυναμία προσθήκης διακομιστή", "Trusted servers" : "Έμπιστοι διακομιστές", "Federation" : "Federation", - "Federation allows you to connect with other trusted servers to exchange the user directory." : "Το Federation σας επιτρέπει να συνδεθείτε με αξιόπιστους διακομιστές για ανταλλαγή καταλόγου χρηστών.", - "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "Το Federation σας επιτρέπει να συνδεθείτε με άλλους αξιόπιστους διακομιστές για να ανταλλάξετε τον κατάλογο χρηστών. Για παράδειγμα, αυτό θα χρησιμοποιηθεί για την αυτόματη συμπλήρωση εξωτερικών χρηστών για ομαδική κοινή χρήση.", - "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing. It is not necessary to add a server as trusted server in order to create a federated share." : "Το Federation σας επιτρέπει να συνδεθείτε με άλλους αξιόπιστους διακομιστές για να ανταλλάξετε τον κατάλογο χρηστών. Για παράδειγμα, αυτό θα χρησιμοποιηθεί για την αυτόματη συμπλήρωση εξωτερικών χρηστών για ομαδική κοινή χρήση. Δεν είναι απαραίτητο να προσθέσετε έναν διακομιστή ως αξιόπιστο για να δημιουργήσετε ένα κοινόχρηστο μεταξύ τους στοιχείο.", "+ Add trusted server" : "+Προσθήκη έμπιστων διακομιστών", "Trusted server" : "Έμπιστοι διακομιστές", "Add" : "Προσθήκη" diff --git a/apps/federation/l10n/en_GB.js b/apps/federation/l10n/en_GB.js index e75f4da38d2..d0b88545467 100644 --- a/apps/federation/l10n/en_GB.js +++ b/apps/federation/l10n/en_GB.js @@ -2,14 +2,18 @@ OC.L10N.register( "federation", { "Added to the list of trusted servers" : "Added to the list of trusted servers", + "No server found with ID: %s" : "No server found with ID: %s", + "Could not remove server" : "Could not remove server", "Server is already in the list of trusted servers." : "Server is already in the list of trusted servers.", "No server to federate with found" : "No server to federate with found", "Could not add server" : "Could not add server", "Trusted servers" : "Trusted servers", "Federation" : "Federation", - "Federation allows you to connect with other trusted servers to exchange the user directory." : "Federation allows you to connect with other trusted servers to exchange the user directory.", - "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "Federation allows you to connect with other trusted servers to exchange the user directory. For example: to auto-complete external users for federated sharing.", - "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing. It is not necessary to add a server as trusted server in order to create a federated share." : "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing. It is not necessary to add a server as trusted server in order to create a federated share.", + "Federation allows you to connect with other trusted servers to exchange the account directory." : "Federation allows you to connect with other trusted servers to exchange the account directory.", + "Federation allows you to connect with other trusted servers to exchange the account directory. For example this will be used to auto-complete external accounts for federated sharing." : "Federation allows you to connect with other trusted servers to exchange the account directory. For example this will be used to auto-complete external accounts for federated sharing.", + "External documentation for Federated Cloud Sharing" : "External documentation for Federated Cloud Sharing", + "Federation allows you to connect with other trusted servers to exchange the account directory. For example this will be used to auto-complete external accounts for federated sharing. It is not necessary to add a server as trusted server in order to create a federated share." : "Federation allows you to connect with other trusted servers to exchange the account directory. For example this will be used to auto-complete external accounts for federated sharing. It is not necessary to add a server as trusted server in order to create a federated share.", + "Each server must validate the other. This process may require a few cron cycles." : "Each server must validate the other. This process may require a few cron cycles.", "+ Add trusted server" : "+ Add trusted server", "Trusted server" : "Trusted server", "Add" : "Add" diff --git a/apps/federation/l10n/en_GB.json b/apps/federation/l10n/en_GB.json index 9297da2f998..7a7b7f9a060 100644 --- a/apps/federation/l10n/en_GB.json +++ b/apps/federation/l10n/en_GB.json @@ -1,13 +1,17 @@ { "translations": { "Added to the list of trusted servers" : "Added to the list of trusted servers", + "No server found with ID: %s" : "No server found with ID: %s", + "Could not remove server" : "Could not remove server", "Server is already in the list of trusted servers." : "Server is already in the list of trusted servers.", "No server to federate with found" : "No server to federate with found", "Could not add server" : "Could not add server", "Trusted servers" : "Trusted servers", "Federation" : "Federation", - "Federation allows you to connect with other trusted servers to exchange the user directory." : "Federation allows you to connect with other trusted servers to exchange the user directory.", - "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "Federation allows you to connect with other trusted servers to exchange the user directory. For example: to auto-complete external users for federated sharing.", - "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing. It is not necessary to add a server as trusted server in order to create a federated share." : "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing. It is not necessary to add a server as trusted server in order to create a federated share.", + "Federation allows you to connect with other trusted servers to exchange the account directory." : "Federation allows you to connect with other trusted servers to exchange the account directory.", + "Federation allows you to connect with other trusted servers to exchange the account directory. For example this will be used to auto-complete external accounts for federated sharing." : "Federation allows you to connect with other trusted servers to exchange the account directory. For example this will be used to auto-complete external accounts for federated sharing.", + "External documentation for Federated Cloud Sharing" : "External documentation for Federated Cloud Sharing", + "Federation allows you to connect with other trusted servers to exchange the account directory. For example this will be used to auto-complete external accounts for federated sharing. It is not necessary to add a server as trusted server in order to create a federated share." : "Federation allows you to connect with other trusted servers to exchange the account directory. For example this will be used to auto-complete external accounts for federated sharing. It is not necessary to add a server as trusted server in order to create a federated share.", + "Each server must validate the other. This process may require a few cron cycles." : "Each server must validate the other. This process may require a few cron cycles.", "+ Add trusted server" : "+ Add trusted server", "Trusted server" : "Trusted server", "Add" : "Add" diff --git a/apps/federation/l10n/eo.js b/apps/federation/l10n/eo.js index af2213c95d3..e1739be31e8 100644 --- a/apps/federation/l10n/eo.js +++ b/apps/federation/l10n/eo.js @@ -7,8 +7,6 @@ OC.L10N.register( "Could not add server" : "Ne eblas aldoni servilon", "Trusted servers" : "Fidindaj serviloj", "Federation" : "Federado", - "Federation allows you to connect with other trusted servers to exchange the user directory." : "„Federado“ ebligas vin konekti al aliaj fidindaj serviloj por interŝanĝi liston de uzantoj.", - "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "„Federado“ ebligas vin konekti al aliaj fidindaj serviloj por interŝanĝi liston de uzantoj. Ekzemple, tio uziĝos por aŭtomate kompletigi forajn uzantojn en federa kunhavigo.", "+ Add trusted server" : "+ Aldoni fidindan servilon", "Trusted server" : "Fidinda servilo", "Add" : "Aldoni" diff --git a/apps/federation/l10n/eo.json b/apps/federation/l10n/eo.json index c74fbb149e6..375ae2a6433 100644 --- a/apps/federation/l10n/eo.json +++ b/apps/federation/l10n/eo.json @@ -5,8 +5,6 @@ "Could not add server" : "Ne eblas aldoni servilon", "Trusted servers" : "Fidindaj serviloj", "Federation" : "Federado", - "Federation allows you to connect with other trusted servers to exchange the user directory." : "„Federado“ ebligas vin konekti al aliaj fidindaj serviloj por interŝanĝi liston de uzantoj.", - "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "„Federado“ ebligas vin konekti al aliaj fidindaj serviloj por interŝanĝi liston de uzantoj. Ekzemple, tio uziĝos por aŭtomate kompletigi forajn uzantojn en federa kunhavigo.", "+ Add trusted server" : "+ Aldoni fidindan servilon", "Trusted server" : "Fidinda servilo", "Add" : "Aldoni" diff --git a/apps/federation/l10n/es.js b/apps/federation/l10n/es.js index 7abc1a9b11b..83e1acb38f8 100644 --- a/apps/federation/l10n/es.js +++ b/apps/federation/l10n/es.js @@ -2,16 +2,20 @@ OC.L10N.register( "federation", { "Added to the list of trusted servers" : "Añadido a la lista de servidores de confianza", + "No server found with ID: %s" : "No se ha encontrado el servidor con ID: %s", + "Could not remove server" : "No se pudo eliminar el servidor", "Server is already in the list of trusted servers." : "El servidor ya está en la lista de servidores en los que se confía.", "No server to federate with found" : "No se ha encontrado ningún servidor con el que federarse.", "Could not add server" : "No se ha podido añadir el servidor", "Trusted servers" : "Servidores de confianza", "Federation" : "Federación", - "Federation allows you to connect with other trusted servers to exchange the user directory." : "Federación te permite conectar con otros servidores de confianza para intercambiar el directorio de usuarios.", - "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "La federación permite conectarte con otros servidores de confianza para intercambiar directorios. Por ejemplo, esto se usará para autocompletar la selección de usuarios externos al compartir en federación.", - "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing. It is not necessary to add a server as trusted server in order to create a federated share." : "La Federación le permite conectarse con otros servidores de confianza para intercambiar el directorio de usuarios. Por ejemplo, esto se utilizará para autocompletar a los usuarios externos para el intercambio federado. No es necesario añadir un servidor como servidor de confianza para crear una recurso compartido federado.", + "Federation allows you to connect with other trusted servers to exchange the account directory." : "La federación le permite conectarse con otros servidores de confianza para intercambiar el directorio de usuarios.", + "Federation allows you to connect with other trusted servers to exchange the account directory. For example this will be used to auto-complete external accounts for federated sharing." : "La Federación le permite conectarse con otros servidores de confianza para intercambiar el directorio de usuarios. Por ejemplo, esto se utilizará para auto-completar a los usuarios externos para el intercambio federado.", + "External documentation for Federated Cloud Sharing" : "Documentación externa para Compartir con Nube Federada", + "Federation allows you to connect with other trusted servers to exchange the account directory. For example this will be used to auto-complete external accounts for federated sharing. It is not necessary to add a server as trusted server in order to create a federated share." : "La Federación le permite conectarse con otros servidores de confianza para intercambiar el directorio de usuarios. Por ejemplo, esto se utilizará para auto-completar a los usuarios externos para el intercambio federado. No es necesario añadir un servidor como servidor de confianza para crear una recurso compartido federado.", + "Each server must validate the other. This process may require a few cron cycles." : "Cada servidor debe validar al otro. Este proceso puede necesitar algunos ciclos de cron.", "+ Add trusted server" : "+ Añadir servidor de confianza", "Trusted server" : "Servidor de confianza", "Add" : "Añadir" }, -"nplurals=2; plural=(n != 1);"); +"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); diff --git a/apps/federation/l10n/es.json b/apps/federation/l10n/es.json index 177ca9a3bf6..3c07677f806 100644 --- a/apps/federation/l10n/es.json +++ b/apps/federation/l10n/es.json @@ -1,15 +1,19 @@ { "translations": { "Added to the list of trusted servers" : "Añadido a la lista de servidores de confianza", + "No server found with ID: %s" : "No se ha encontrado el servidor con ID: %s", + "Could not remove server" : "No se pudo eliminar el servidor", "Server is already in the list of trusted servers." : "El servidor ya está en la lista de servidores en los que se confía.", "No server to federate with found" : "No se ha encontrado ningún servidor con el que federarse.", "Could not add server" : "No se ha podido añadir el servidor", "Trusted servers" : "Servidores de confianza", "Federation" : "Federación", - "Federation allows you to connect with other trusted servers to exchange the user directory." : "Federación te permite conectar con otros servidores de confianza para intercambiar el directorio de usuarios.", - "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "La federación permite conectarte con otros servidores de confianza para intercambiar directorios. Por ejemplo, esto se usará para autocompletar la selección de usuarios externos al compartir en federación.", - "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing. It is not necessary to add a server as trusted server in order to create a federated share." : "La Federación le permite conectarse con otros servidores de confianza para intercambiar el directorio de usuarios. Por ejemplo, esto se utilizará para autocompletar a los usuarios externos para el intercambio federado. No es necesario añadir un servidor como servidor de confianza para crear una recurso compartido federado.", + "Federation allows you to connect with other trusted servers to exchange the account directory." : "La federación le permite conectarse con otros servidores de confianza para intercambiar el directorio de usuarios.", + "Federation allows you to connect with other trusted servers to exchange the account directory. For example this will be used to auto-complete external accounts for federated sharing." : "La Federación le permite conectarse con otros servidores de confianza para intercambiar el directorio de usuarios. Por ejemplo, esto se utilizará para auto-completar a los usuarios externos para el intercambio federado.", + "External documentation for Federated Cloud Sharing" : "Documentación externa para Compartir con Nube Federada", + "Federation allows you to connect with other trusted servers to exchange the account directory. For example this will be used to auto-complete external accounts for federated sharing. It is not necessary to add a server as trusted server in order to create a federated share." : "La Federación le permite conectarse con otros servidores de confianza para intercambiar el directorio de usuarios. Por ejemplo, esto se utilizará para auto-completar a los usuarios externos para el intercambio federado. No es necesario añadir un servidor como servidor de confianza para crear una recurso compartido federado.", + "Each server must validate the other. This process may require a few cron cycles." : "Cada servidor debe validar al otro. Este proceso puede necesitar algunos ciclos de cron.", "+ Add trusted server" : "+ Añadir servidor de confianza", "Trusted server" : "Servidor de confianza", "Add" : "Añadir" -},"pluralForm" :"nplurals=2; plural=(n != 1);" +},"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" }
\ No newline at end of file diff --git a/apps/federation/l10n/es_419.js b/apps/federation/l10n/es_419.js index 728757e26b7..38d278ed2b9 100644 --- a/apps/federation/l10n/es_419.js +++ b/apps/federation/l10n/es_419.js @@ -7,9 +7,8 @@ OC.L10N.register( "Could not add server" : "No fue posible agregar el servidor", "Trusted servers" : "Servidores de confianza", "Federation" : "Federación", - "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "La federación te permite conectarte con otros servidores de confianza para intercambiar el directorio de usuarios. Por ejemplo, esto se usará para auto-completar usuarios externos en el recurso compartido federado.", "+ Add trusted server" : "+ Agregar servidor de confianza", "Trusted server" : "Servidor de confianza", "Add" : "Agregar" }, -"nplurals=2; plural=(n != 1);"); +"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); diff --git a/apps/federation/l10n/es_419.json b/apps/federation/l10n/es_419.json index a9a3523d001..0864dcbcee6 100644 --- a/apps/federation/l10n/es_419.json +++ b/apps/federation/l10n/es_419.json @@ -5,9 +5,8 @@ "Could not add server" : "No fue posible agregar el servidor", "Trusted servers" : "Servidores de confianza", "Federation" : "Federación", - "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "La federación te permite conectarte con otros servidores de confianza para intercambiar el directorio de usuarios. Por ejemplo, esto se usará para auto-completar usuarios externos en el recurso compartido federado.", "+ Add trusted server" : "+ Agregar servidor de confianza", "Trusted server" : "Servidor de confianza", "Add" : "Agregar" -},"pluralForm" :"nplurals=2; plural=(n != 1);" +},"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" }
\ No newline at end of file diff --git a/apps/federation/l10n/es_AR.js b/apps/federation/l10n/es_AR.js index 3dbb1d97184..38d278ed2b9 100644 --- a/apps/federation/l10n/es_AR.js +++ b/apps/federation/l10n/es_AR.js @@ -7,9 +7,8 @@ OC.L10N.register( "Could not add server" : "No fue posible agregar el servidor", "Trusted servers" : "Servidores de confianza", "Federation" : "Federación", - "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "La federación le permite conectarse con otros servidores de confianza para intercambiar el directorio de usuarios. Por ejemplo, esto se usará para auto-completar usuarios externos en el recurso compartido federado.", "+ Add trusted server" : "+ Agregar servidor de confianza", "Trusted server" : "Servidor de confianza", "Add" : "Agregar" }, -"nplurals=2; plural=(n != 1);"); +"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); diff --git a/apps/federation/l10n/es_AR.json b/apps/federation/l10n/es_AR.json index c37e122d95c..0864dcbcee6 100644 --- a/apps/federation/l10n/es_AR.json +++ b/apps/federation/l10n/es_AR.json @@ -5,9 +5,8 @@ "Could not add server" : "No fue posible agregar el servidor", "Trusted servers" : "Servidores de confianza", "Federation" : "Federación", - "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "La federación le permite conectarse con otros servidores de confianza para intercambiar el directorio de usuarios. Por ejemplo, esto se usará para auto-completar usuarios externos en el recurso compartido federado.", "+ Add trusted server" : "+ Agregar servidor de confianza", "Trusted server" : "Servidor de confianza", "Add" : "Agregar" -},"pluralForm" :"nplurals=2; plural=(n != 1);" +},"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" }
\ No newline at end of file diff --git a/apps/federation/l10n/es_CL.js b/apps/federation/l10n/es_CL.js index 728757e26b7..38d278ed2b9 100644 --- a/apps/federation/l10n/es_CL.js +++ b/apps/federation/l10n/es_CL.js @@ -7,9 +7,8 @@ OC.L10N.register( "Could not add server" : "No fue posible agregar el servidor", "Trusted servers" : "Servidores de confianza", "Federation" : "Federación", - "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "La federación te permite conectarte con otros servidores de confianza para intercambiar el directorio de usuarios. Por ejemplo, esto se usará para auto-completar usuarios externos en el recurso compartido federado.", "+ Add trusted server" : "+ Agregar servidor de confianza", "Trusted server" : "Servidor de confianza", "Add" : "Agregar" }, -"nplurals=2; plural=(n != 1);"); +"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); diff --git a/apps/federation/l10n/es_CL.json b/apps/federation/l10n/es_CL.json index a9a3523d001..0864dcbcee6 100644 --- a/apps/federation/l10n/es_CL.json +++ b/apps/federation/l10n/es_CL.json @@ -5,9 +5,8 @@ "Could not add server" : "No fue posible agregar el servidor", "Trusted servers" : "Servidores de confianza", "Federation" : "Federación", - "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "La federación te permite conectarte con otros servidores de confianza para intercambiar el directorio de usuarios. Por ejemplo, esto se usará para auto-completar usuarios externos en el recurso compartido federado.", "+ Add trusted server" : "+ Agregar servidor de confianza", "Trusted server" : "Servidor de confianza", "Add" : "Agregar" -},"pluralForm" :"nplurals=2; plural=(n != 1);" +},"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" }
\ No newline at end of file diff --git a/apps/federation/l10n/es_CO.js b/apps/federation/l10n/es_CO.js index 728757e26b7..38d278ed2b9 100644 --- a/apps/federation/l10n/es_CO.js +++ b/apps/federation/l10n/es_CO.js @@ -7,9 +7,8 @@ OC.L10N.register( "Could not add server" : "No fue posible agregar el servidor", "Trusted servers" : "Servidores de confianza", "Federation" : "Federación", - "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "La federación te permite conectarte con otros servidores de confianza para intercambiar el directorio de usuarios. Por ejemplo, esto se usará para auto-completar usuarios externos en el recurso compartido federado.", "+ Add trusted server" : "+ Agregar servidor de confianza", "Trusted server" : "Servidor de confianza", "Add" : "Agregar" }, -"nplurals=2; plural=(n != 1);"); +"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); diff --git a/apps/federation/l10n/es_CO.json b/apps/federation/l10n/es_CO.json index a9a3523d001..0864dcbcee6 100644 --- a/apps/federation/l10n/es_CO.json +++ b/apps/federation/l10n/es_CO.json @@ -5,9 +5,8 @@ "Could not add server" : "No fue posible agregar el servidor", "Trusted servers" : "Servidores de confianza", "Federation" : "Federación", - "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "La federación te permite conectarte con otros servidores de confianza para intercambiar el directorio de usuarios. Por ejemplo, esto se usará para auto-completar usuarios externos en el recurso compartido federado.", "+ Add trusted server" : "+ Agregar servidor de confianza", "Trusted server" : "Servidor de confianza", "Add" : "Agregar" -},"pluralForm" :"nplurals=2; plural=(n != 1);" +},"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" }
\ No newline at end of file diff --git a/apps/federation/l10n/es_CR.js b/apps/federation/l10n/es_CR.js index 728757e26b7..38d278ed2b9 100644 --- a/apps/federation/l10n/es_CR.js +++ b/apps/federation/l10n/es_CR.js @@ -7,9 +7,8 @@ OC.L10N.register( "Could not add server" : "No fue posible agregar el servidor", "Trusted servers" : "Servidores de confianza", "Federation" : "Federación", - "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "La federación te permite conectarte con otros servidores de confianza para intercambiar el directorio de usuarios. Por ejemplo, esto se usará para auto-completar usuarios externos en el recurso compartido federado.", "+ Add trusted server" : "+ Agregar servidor de confianza", "Trusted server" : "Servidor de confianza", "Add" : "Agregar" }, -"nplurals=2; plural=(n != 1);"); +"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); diff --git a/apps/federation/l10n/es_CR.json b/apps/federation/l10n/es_CR.json index a9a3523d001..0864dcbcee6 100644 --- a/apps/federation/l10n/es_CR.json +++ b/apps/federation/l10n/es_CR.json @@ -5,9 +5,8 @@ "Could not add server" : "No fue posible agregar el servidor", "Trusted servers" : "Servidores de confianza", "Federation" : "Federación", - "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "La federación te permite conectarte con otros servidores de confianza para intercambiar el directorio de usuarios. Por ejemplo, esto se usará para auto-completar usuarios externos en el recurso compartido federado.", "+ Add trusted server" : "+ Agregar servidor de confianza", "Trusted server" : "Servidor de confianza", "Add" : "Agregar" -},"pluralForm" :"nplurals=2; plural=(n != 1);" +},"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" }
\ No newline at end of file diff --git a/apps/federation/l10n/es_DO.js b/apps/federation/l10n/es_DO.js index 1283cac1945..38d278ed2b9 100644 --- a/apps/federation/l10n/es_DO.js +++ b/apps/federation/l10n/es_DO.js @@ -7,11 +7,8 @@ OC.L10N.register( "Could not add server" : "No fue posible agregar el servidor", "Trusted servers" : "Servidores de confianza", "Federation" : "Federación", - "Federation allows you to connect with other trusted servers to exchange the user directory." : "La federación le permite conectarse con otros servidores de confianza para intercambiar el directorio de usuarios.", - "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "La federación te permite conectarte con otros servidores de confianza para intercambiar el directorio de usuarios. Por ejemplo, esto se usará para auto-completar usuarios externos en el recurso compartido federado.", - "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing. It is not necessary to add a server as trusted server in order to create a federated share." : "La federación le permite conectarse con otros servidores de confianza para intercambiar el directorio de usuarios. Por ejemplo, esto se utilizará para autocompletar usuarios externos para uso compartido federado. No es necesario agregar un servidor como servidor de confianza para crear un recurso compartido federado.", "+ Add trusted server" : "+ Agregar servidor de confianza", "Trusted server" : "Servidor de confianza", "Add" : "Agregar" }, -"nplurals=2; plural=(n != 1);"); +"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); diff --git a/apps/federation/l10n/es_DO.json b/apps/federation/l10n/es_DO.json index 285f2486cfd..0864dcbcee6 100644 --- a/apps/federation/l10n/es_DO.json +++ b/apps/federation/l10n/es_DO.json @@ -5,11 +5,8 @@ "Could not add server" : "No fue posible agregar el servidor", "Trusted servers" : "Servidores de confianza", "Federation" : "Federación", - "Federation allows you to connect with other trusted servers to exchange the user directory." : "La federación le permite conectarse con otros servidores de confianza para intercambiar el directorio de usuarios.", - "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "La federación te permite conectarte con otros servidores de confianza para intercambiar el directorio de usuarios. Por ejemplo, esto se usará para auto-completar usuarios externos en el recurso compartido federado.", - "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing. It is not necessary to add a server as trusted server in order to create a federated share." : "La federación le permite conectarse con otros servidores de confianza para intercambiar el directorio de usuarios. Por ejemplo, esto se utilizará para autocompletar usuarios externos para uso compartido federado. No es necesario agregar un servidor como servidor de confianza para crear un recurso compartido federado.", "+ Add trusted server" : "+ Agregar servidor de confianza", "Trusted server" : "Servidor de confianza", "Add" : "Agregar" -},"pluralForm" :"nplurals=2; plural=(n != 1);" +},"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" }
\ No newline at end of file diff --git a/apps/federation/l10n/es_EC.js b/apps/federation/l10n/es_EC.js index 728757e26b7..38d278ed2b9 100644 --- a/apps/federation/l10n/es_EC.js +++ b/apps/federation/l10n/es_EC.js @@ -7,9 +7,8 @@ OC.L10N.register( "Could not add server" : "No fue posible agregar el servidor", "Trusted servers" : "Servidores de confianza", "Federation" : "Federación", - "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "La federación te permite conectarte con otros servidores de confianza para intercambiar el directorio de usuarios. Por ejemplo, esto se usará para auto-completar usuarios externos en el recurso compartido federado.", "+ Add trusted server" : "+ Agregar servidor de confianza", "Trusted server" : "Servidor de confianza", "Add" : "Agregar" }, -"nplurals=2; plural=(n != 1);"); +"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); diff --git a/apps/federation/l10n/es_EC.json b/apps/federation/l10n/es_EC.json index a9a3523d001..0864dcbcee6 100644 --- a/apps/federation/l10n/es_EC.json +++ b/apps/federation/l10n/es_EC.json @@ -5,9 +5,8 @@ "Could not add server" : "No fue posible agregar el servidor", "Trusted servers" : "Servidores de confianza", "Federation" : "Federación", - "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "La federación te permite conectarte con otros servidores de confianza para intercambiar el directorio de usuarios. Por ejemplo, esto se usará para auto-completar usuarios externos en el recurso compartido federado.", "+ Add trusted server" : "+ Agregar servidor de confianza", "Trusted server" : "Servidor de confianza", "Add" : "Agregar" -},"pluralForm" :"nplurals=2; plural=(n != 1);" +},"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" }
\ No newline at end of file diff --git a/apps/federation/l10n/es_GT.js b/apps/federation/l10n/es_GT.js index 728757e26b7..38d278ed2b9 100644 --- a/apps/federation/l10n/es_GT.js +++ b/apps/federation/l10n/es_GT.js @@ -7,9 +7,8 @@ OC.L10N.register( "Could not add server" : "No fue posible agregar el servidor", "Trusted servers" : "Servidores de confianza", "Federation" : "Federación", - "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "La federación te permite conectarte con otros servidores de confianza para intercambiar el directorio de usuarios. Por ejemplo, esto se usará para auto-completar usuarios externos en el recurso compartido federado.", "+ Add trusted server" : "+ Agregar servidor de confianza", "Trusted server" : "Servidor de confianza", "Add" : "Agregar" }, -"nplurals=2; plural=(n != 1);"); +"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); diff --git a/apps/federation/l10n/es_GT.json b/apps/federation/l10n/es_GT.json index a9a3523d001..0864dcbcee6 100644 --- a/apps/federation/l10n/es_GT.json +++ b/apps/federation/l10n/es_GT.json @@ -5,9 +5,8 @@ "Could not add server" : "No fue posible agregar el servidor", "Trusted servers" : "Servidores de confianza", "Federation" : "Federación", - "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "La federación te permite conectarte con otros servidores de confianza para intercambiar el directorio de usuarios. Por ejemplo, esto se usará para auto-completar usuarios externos en el recurso compartido federado.", "+ Add trusted server" : "+ Agregar servidor de confianza", "Trusted server" : "Servidor de confianza", "Add" : "Agregar" -},"pluralForm" :"nplurals=2; plural=(n != 1);" +},"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" }
\ No newline at end of file diff --git a/apps/federation/l10n/es_HN.js b/apps/federation/l10n/es_HN.js index 728757e26b7..38d278ed2b9 100644 --- a/apps/federation/l10n/es_HN.js +++ b/apps/federation/l10n/es_HN.js @@ -7,9 +7,8 @@ OC.L10N.register( "Could not add server" : "No fue posible agregar el servidor", "Trusted servers" : "Servidores de confianza", "Federation" : "Federación", - "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "La federación te permite conectarte con otros servidores de confianza para intercambiar el directorio de usuarios. Por ejemplo, esto se usará para auto-completar usuarios externos en el recurso compartido federado.", "+ Add trusted server" : "+ Agregar servidor de confianza", "Trusted server" : "Servidor de confianza", "Add" : "Agregar" }, -"nplurals=2; plural=(n != 1);"); +"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); diff --git a/apps/federation/l10n/es_HN.json b/apps/federation/l10n/es_HN.json index a9a3523d001..0864dcbcee6 100644 --- a/apps/federation/l10n/es_HN.json +++ b/apps/federation/l10n/es_HN.json @@ -5,9 +5,8 @@ "Could not add server" : "No fue posible agregar el servidor", "Trusted servers" : "Servidores de confianza", "Federation" : "Federación", - "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "La federación te permite conectarte con otros servidores de confianza para intercambiar el directorio de usuarios. Por ejemplo, esto se usará para auto-completar usuarios externos en el recurso compartido federado.", "+ Add trusted server" : "+ Agregar servidor de confianza", "Trusted server" : "Servidor de confianza", "Add" : "Agregar" -},"pluralForm" :"nplurals=2; plural=(n != 1);" +},"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" }
\ No newline at end of file diff --git a/apps/federation/l10n/es_MX.js b/apps/federation/l10n/es_MX.js index 7e645d72136..298f0c5cca6 100644 --- a/apps/federation/l10n/es_MX.js +++ b/apps/federation/l10n/es_MX.js @@ -7,10 +7,11 @@ OC.L10N.register( "Could not add server" : "No fue posible agregar el servidor", "Trusted servers" : "Servidores de confianza", "Federation" : "Federación", - "Federation allows you to connect with other trusted servers to exchange the user directory." : "La Federación te permite conectarte con otros servidores de confianza para intercambiar el directorio de usuarios.", - "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "La federación te permite conectarte con otros servidores de confianza para intercambiar el directorio de usuarios. Por ejemplo, esto se usará para auto-completar usuarios externos en el recurso compartido federado.", + "Federation allows you to connect with other trusted servers to exchange the account directory." : "La Federación permite conectarse con otros servidores de confianza para intercambiar el directorio de usuarios.", + "Federation allows you to connect with other trusted servers to exchange the account directory. For example this will be used to auto-complete external accounts for federated sharing." : "La Federación permite conectarse con otros servidores de confianza para intercambiar el directorio de usuarios. Por ejemplo, esto se usará para autocompletar usuarios externos en el recurso compartido federado.", + "Federation allows you to connect with other trusted servers to exchange the account directory. For example this will be used to auto-complete external accounts for federated sharing. It is not necessary to add a server as trusted server in order to create a federated share." : "La Federación permite conectarse con otros servidores de confianza para intercambiar el directorio de usuarios. Por ejemplo, esto se usará para autocompletar usuarios externos en el recurso compartido federado. No es necesario añadir un servidor como servidor de confianza para crear un recurso compartido federado.", "+ Add trusted server" : "+ Agregar servidor de confianza", "Trusted server" : "Servidor de confianza", "Add" : "Agregar" }, -"nplurals=2; plural=(n != 1);"); +"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); diff --git a/apps/federation/l10n/es_MX.json b/apps/federation/l10n/es_MX.json index ecd37e6d182..8619bee4a09 100644 --- a/apps/federation/l10n/es_MX.json +++ b/apps/federation/l10n/es_MX.json @@ -5,10 +5,11 @@ "Could not add server" : "No fue posible agregar el servidor", "Trusted servers" : "Servidores de confianza", "Federation" : "Federación", - "Federation allows you to connect with other trusted servers to exchange the user directory." : "La Federación te permite conectarte con otros servidores de confianza para intercambiar el directorio de usuarios.", - "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "La federación te permite conectarte con otros servidores de confianza para intercambiar el directorio de usuarios. Por ejemplo, esto se usará para auto-completar usuarios externos en el recurso compartido federado.", + "Federation allows you to connect with other trusted servers to exchange the account directory." : "La Federación permite conectarse con otros servidores de confianza para intercambiar el directorio de usuarios.", + "Federation allows you to connect with other trusted servers to exchange the account directory. For example this will be used to auto-complete external accounts for federated sharing." : "La Federación permite conectarse con otros servidores de confianza para intercambiar el directorio de usuarios. Por ejemplo, esto se usará para autocompletar usuarios externos en el recurso compartido federado.", + "Federation allows you to connect with other trusted servers to exchange the account directory. For example this will be used to auto-complete external accounts for federated sharing. It is not necessary to add a server as trusted server in order to create a federated share." : "La Federación permite conectarse con otros servidores de confianza para intercambiar el directorio de usuarios. Por ejemplo, esto se usará para autocompletar usuarios externos en el recurso compartido federado. No es necesario añadir un servidor como servidor de confianza para crear un recurso compartido federado.", "+ Add trusted server" : "+ Agregar servidor de confianza", "Trusted server" : "Servidor de confianza", "Add" : "Agregar" -},"pluralForm" :"nplurals=2; plural=(n != 1);" +},"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" }
\ No newline at end of file diff --git a/apps/federation/l10n/es_NI.js b/apps/federation/l10n/es_NI.js index 728757e26b7..38d278ed2b9 100644 --- a/apps/federation/l10n/es_NI.js +++ b/apps/federation/l10n/es_NI.js @@ -7,9 +7,8 @@ OC.L10N.register( "Could not add server" : "No fue posible agregar el servidor", "Trusted servers" : "Servidores de confianza", "Federation" : "Federación", - "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "La federación te permite conectarte con otros servidores de confianza para intercambiar el directorio de usuarios. Por ejemplo, esto se usará para auto-completar usuarios externos en el recurso compartido federado.", "+ Add trusted server" : "+ Agregar servidor de confianza", "Trusted server" : "Servidor de confianza", "Add" : "Agregar" }, -"nplurals=2; plural=(n != 1);"); +"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); diff --git a/apps/federation/l10n/es_NI.json b/apps/federation/l10n/es_NI.json index a9a3523d001..0864dcbcee6 100644 --- a/apps/federation/l10n/es_NI.json +++ b/apps/federation/l10n/es_NI.json @@ -5,9 +5,8 @@ "Could not add server" : "No fue posible agregar el servidor", "Trusted servers" : "Servidores de confianza", "Federation" : "Federación", - "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "La federación te permite conectarte con otros servidores de confianza para intercambiar el directorio de usuarios. Por ejemplo, esto se usará para auto-completar usuarios externos en el recurso compartido federado.", "+ Add trusted server" : "+ Agregar servidor de confianza", "Trusted server" : "Servidor de confianza", "Add" : "Agregar" -},"pluralForm" :"nplurals=2; plural=(n != 1);" +},"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" }
\ No newline at end of file diff --git a/apps/federation/l10n/es_PA.js b/apps/federation/l10n/es_PA.js index 728757e26b7..38d278ed2b9 100644 --- a/apps/federation/l10n/es_PA.js +++ b/apps/federation/l10n/es_PA.js @@ -7,9 +7,8 @@ OC.L10N.register( "Could not add server" : "No fue posible agregar el servidor", "Trusted servers" : "Servidores de confianza", "Federation" : "Federación", - "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "La federación te permite conectarte con otros servidores de confianza para intercambiar el directorio de usuarios. Por ejemplo, esto se usará para auto-completar usuarios externos en el recurso compartido federado.", "+ Add trusted server" : "+ Agregar servidor de confianza", "Trusted server" : "Servidor de confianza", "Add" : "Agregar" }, -"nplurals=2; plural=(n != 1);"); +"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); diff --git a/apps/federation/l10n/es_PA.json b/apps/federation/l10n/es_PA.json index a9a3523d001..0864dcbcee6 100644 --- a/apps/federation/l10n/es_PA.json +++ b/apps/federation/l10n/es_PA.json @@ -5,9 +5,8 @@ "Could not add server" : "No fue posible agregar el servidor", "Trusted servers" : "Servidores de confianza", "Federation" : "Federación", - "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "La federación te permite conectarte con otros servidores de confianza para intercambiar el directorio de usuarios. Por ejemplo, esto se usará para auto-completar usuarios externos en el recurso compartido federado.", "+ Add trusted server" : "+ Agregar servidor de confianza", "Trusted server" : "Servidor de confianza", "Add" : "Agregar" -},"pluralForm" :"nplurals=2; plural=(n != 1);" +},"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" }
\ No newline at end of file diff --git a/apps/federation/l10n/es_PE.js b/apps/federation/l10n/es_PE.js index 728757e26b7..38d278ed2b9 100644 --- a/apps/federation/l10n/es_PE.js +++ b/apps/federation/l10n/es_PE.js @@ -7,9 +7,8 @@ OC.L10N.register( "Could not add server" : "No fue posible agregar el servidor", "Trusted servers" : "Servidores de confianza", "Federation" : "Federación", - "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "La federación te permite conectarte con otros servidores de confianza para intercambiar el directorio de usuarios. Por ejemplo, esto se usará para auto-completar usuarios externos en el recurso compartido federado.", "+ Add trusted server" : "+ Agregar servidor de confianza", "Trusted server" : "Servidor de confianza", "Add" : "Agregar" }, -"nplurals=2; plural=(n != 1);"); +"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); diff --git a/apps/federation/l10n/es_PE.json b/apps/federation/l10n/es_PE.json index a9a3523d001..0864dcbcee6 100644 --- a/apps/federation/l10n/es_PE.json +++ b/apps/federation/l10n/es_PE.json @@ -5,9 +5,8 @@ "Could not add server" : "No fue posible agregar el servidor", "Trusted servers" : "Servidores de confianza", "Federation" : "Federación", - "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "La federación te permite conectarte con otros servidores de confianza para intercambiar el directorio de usuarios. Por ejemplo, esto se usará para auto-completar usuarios externos en el recurso compartido federado.", "+ Add trusted server" : "+ Agregar servidor de confianza", "Trusted server" : "Servidor de confianza", "Add" : "Agregar" -},"pluralForm" :"nplurals=2; plural=(n != 1);" +},"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" }
\ No newline at end of file diff --git a/apps/federation/l10n/es_PR.js b/apps/federation/l10n/es_PR.js index 728757e26b7..38d278ed2b9 100644 --- a/apps/federation/l10n/es_PR.js +++ b/apps/federation/l10n/es_PR.js @@ -7,9 +7,8 @@ OC.L10N.register( "Could not add server" : "No fue posible agregar el servidor", "Trusted servers" : "Servidores de confianza", "Federation" : "Federación", - "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "La federación te permite conectarte con otros servidores de confianza para intercambiar el directorio de usuarios. Por ejemplo, esto se usará para auto-completar usuarios externos en el recurso compartido federado.", "+ Add trusted server" : "+ Agregar servidor de confianza", "Trusted server" : "Servidor de confianza", "Add" : "Agregar" }, -"nplurals=2; plural=(n != 1);"); +"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); diff --git a/apps/federation/l10n/es_PR.json b/apps/federation/l10n/es_PR.json index a9a3523d001..0864dcbcee6 100644 --- a/apps/federation/l10n/es_PR.json +++ b/apps/federation/l10n/es_PR.json @@ -5,9 +5,8 @@ "Could not add server" : "No fue posible agregar el servidor", "Trusted servers" : "Servidores de confianza", "Federation" : "Federación", - "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "La federación te permite conectarte con otros servidores de confianza para intercambiar el directorio de usuarios. Por ejemplo, esto se usará para auto-completar usuarios externos en el recurso compartido federado.", "+ Add trusted server" : "+ Agregar servidor de confianza", "Trusted server" : "Servidor de confianza", "Add" : "Agregar" -},"pluralForm" :"nplurals=2; plural=(n != 1);" +},"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" }
\ No newline at end of file diff --git a/apps/federation/l10n/es_PY.js b/apps/federation/l10n/es_PY.js index 728757e26b7..38d278ed2b9 100644 --- a/apps/federation/l10n/es_PY.js +++ b/apps/federation/l10n/es_PY.js @@ -7,9 +7,8 @@ OC.L10N.register( "Could not add server" : "No fue posible agregar el servidor", "Trusted servers" : "Servidores de confianza", "Federation" : "Federación", - "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "La federación te permite conectarte con otros servidores de confianza para intercambiar el directorio de usuarios. Por ejemplo, esto se usará para auto-completar usuarios externos en el recurso compartido federado.", "+ Add trusted server" : "+ Agregar servidor de confianza", "Trusted server" : "Servidor de confianza", "Add" : "Agregar" }, -"nplurals=2; plural=(n != 1);"); +"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); diff --git a/apps/federation/l10n/es_PY.json b/apps/federation/l10n/es_PY.json index a9a3523d001..0864dcbcee6 100644 --- a/apps/federation/l10n/es_PY.json +++ b/apps/federation/l10n/es_PY.json @@ -5,9 +5,8 @@ "Could not add server" : "No fue posible agregar el servidor", "Trusted servers" : "Servidores de confianza", "Federation" : "Federación", - "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "La federación te permite conectarte con otros servidores de confianza para intercambiar el directorio de usuarios. Por ejemplo, esto se usará para auto-completar usuarios externos en el recurso compartido federado.", "+ Add trusted server" : "+ Agregar servidor de confianza", "Trusted server" : "Servidor de confianza", "Add" : "Agregar" -},"pluralForm" :"nplurals=2; plural=(n != 1);" +},"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" }
\ No newline at end of file diff --git a/apps/federation/l10n/es_SV.js b/apps/federation/l10n/es_SV.js index 728757e26b7..38d278ed2b9 100644 --- a/apps/federation/l10n/es_SV.js +++ b/apps/federation/l10n/es_SV.js @@ -7,9 +7,8 @@ OC.L10N.register( "Could not add server" : "No fue posible agregar el servidor", "Trusted servers" : "Servidores de confianza", "Federation" : "Federación", - "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "La federación te permite conectarte con otros servidores de confianza para intercambiar el directorio de usuarios. Por ejemplo, esto se usará para auto-completar usuarios externos en el recurso compartido federado.", "+ Add trusted server" : "+ Agregar servidor de confianza", "Trusted server" : "Servidor de confianza", "Add" : "Agregar" }, -"nplurals=2; plural=(n != 1);"); +"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); diff --git a/apps/federation/l10n/es_SV.json b/apps/federation/l10n/es_SV.json index a9a3523d001..0864dcbcee6 100644 --- a/apps/federation/l10n/es_SV.json +++ b/apps/federation/l10n/es_SV.json @@ -5,9 +5,8 @@ "Could not add server" : "No fue posible agregar el servidor", "Trusted servers" : "Servidores de confianza", "Federation" : "Federación", - "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "La federación te permite conectarte con otros servidores de confianza para intercambiar el directorio de usuarios. Por ejemplo, esto se usará para auto-completar usuarios externos en el recurso compartido federado.", "+ Add trusted server" : "+ Agregar servidor de confianza", "Trusted server" : "Servidor de confianza", "Add" : "Agregar" -},"pluralForm" :"nplurals=2; plural=(n != 1);" +},"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" }
\ No newline at end of file diff --git a/apps/federation/l10n/es_UY.js b/apps/federation/l10n/es_UY.js index 728757e26b7..38d278ed2b9 100644 --- a/apps/federation/l10n/es_UY.js +++ b/apps/federation/l10n/es_UY.js @@ -7,9 +7,8 @@ OC.L10N.register( "Could not add server" : "No fue posible agregar el servidor", "Trusted servers" : "Servidores de confianza", "Federation" : "Federación", - "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "La federación te permite conectarte con otros servidores de confianza para intercambiar el directorio de usuarios. Por ejemplo, esto se usará para auto-completar usuarios externos en el recurso compartido federado.", "+ Add trusted server" : "+ Agregar servidor de confianza", "Trusted server" : "Servidor de confianza", "Add" : "Agregar" }, -"nplurals=2; plural=(n != 1);"); +"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); diff --git a/apps/federation/l10n/es_UY.json b/apps/federation/l10n/es_UY.json index a9a3523d001..0864dcbcee6 100644 --- a/apps/federation/l10n/es_UY.json +++ b/apps/federation/l10n/es_UY.json @@ -5,9 +5,8 @@ "Could not add server" : "No fue posible agregar el servidor", "Trusted servers" : "Servidores de confianza", "Federation" : "Federación", - "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "La federación te permite conectarte con otros servidores de confianza para intercambiar el directorio de usuarios. Por ejemplo, esto se usará para auto-completar usuarios externos en el recurso compartido federado.", "+ Add trusted server" : "+ Agregar servidor de confianza", "Trusted server" : "Servidor de confianza", "Add" : "Agregar" -},"pluralForm" :"nplurals=2; plural=(n != 1);" +},"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" }
\ No newline at end of file diff --git a/apps/federation/l10n/et_EE.js b/apps/federation/l10n/et_EE.js index 2f54768180a..55a6c763bd6 100644 --- a/apps/federation/l10n/et_EE.js +++ b/apps/federation/l10n/et_EE.js @@ -1,13 +1,19 @@ OC.L10N.register( "federation", { - "Added to the list of trusted servers" : "Usaldatud serverite nimekirja lisatud", + "Added to the list of trusted servers" : "Lisatud usaldatud serverite nimekirja", + "No server found with ID: %s" : "Ei leidnud serverit IDga: %s", + "Could not remove server" : "Ei saanud serverit eemaldada", "Server is already in the list of trusted servers." : "Server on juba usaldatud serverite nimekirjas.", - "No server to federate with found" : "Serverit millega liituda ei leitud", + "No server to federate with found" : "Ei leitud ühtegi serverit, millega liidenduda", "Could not add server" : "Serveri lisamine ebaõnnestus", "Trusted servers" : "Usaldatud serverid", - "Federation" : "Liit", - "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "Liitumine lubab sul ühenduse luua teiste usaldusväärsete serveritega, et kasutajaid jagada. Näiteks saab seda rakendada liitunud serverite väliste kasutajanimede automaatseks täitmiseks.", + "Federation" : "Liidendus", + "Federation allows you to connect with other trusted servers to exchange the account directory." : "Liitjagamine võimaldab teil kontokataloogi vahetamiseks luua ühenduse teiste usaldusväärsete serveritega.", + "Federation allows you to connect with other trusted servers to exchange the account directory. For example this will be used to auto-complete external accounts for federated sharing." : "Liitjagamine võimaldab kontokataloogi vahendamiseks luua ühenduse teiste usaldusväärsete serveritega. Näiteks kasutatakse seda väliste kontode automaatseks täitmiseks ühendatud jagamiseks.", + "External documentation for Federated Cloud Sharing" : "Väiline dokumentatsioon Liitjagamise Pilvjagamise kohta", + "Federation allows you to connect with other trusted servers to exchange the account directory. For example this will be used to auto-complete external accounts for federated sharing. It is not necessary to add a server as trusted server in order to create a federated share." : "Liitjagamine võimaldab kontokataloogi vahendamiseks luua ühenduse teiste usaldusväärsete serveritega. Näiteks kasutatakse seda väliste kontode automaatseks täitmiseks ühendatud jagamiseks. Liitjagamise loomiseks ei ole vaja serverit usaldusväärse serverina lisada.", + "Each server must validate the other. This process may require a few cron cycles." : "Iga server peab valideerima teise. See protsess võib võtta mitu cron tsüklit.", "+ Add trusted server" : "+ Lisa usaldatud server", "Trusted server" : "Usaldatud server", "Add" : "Lisa" diff --git a/apps/federation/l10n/et_EE.json b/apps/federation/l10n/et_EE.json index 710dcf12af5..1e9d045edff 100644 --- a/apps/federation/l10n/et_EE.json +++ b/apps/federation/l10n/et_EE.json @@ -1,11 +1,17 @@ { "translations": { - "Added to the list of trusted servers" : "Usaldatud serverite nimekirja lisatud", + "Added to the list of trusted servers" : "Lisatud usaldatud serverite nimekirja", + "No server found with ID: %s" : "Ei leidnud serverit IDga: %s", + "Could not remove server" : "Ei saanud serverit eemaldada", "Server is already in the list of trusted servers." : "Server on juba usaldatud serverite nimekirjas.", - "No server to federate with found" : "Serverit millega liituda ei leitud", + "No server to federate with found" : "Ei leitud ühtegi serverit, millega liidenduda", "Could not add server" : "Serveri lisamine ebaõnnestus", "Trusted servers" : "Usaldatud serverid", - "Federation" : "Liit", - "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "Liitumine lubab sul ühenduse luua teiste usaldusväärsete serveritega, et kasutajaid jagada. Näiteks saab seda rakendada liitunud serverite väliste kasutajanimede automaatseks täitmiseks.", + "Federation" : "Liidendus", + "Federation allows you to connect with other trusted servers to exchange the account directory." : "Liitjagamine võimaldab teil kontokataloogi vahetamiseks luua ühenduse teiste usaldusväärsete serveritega.", + "Federation allows you to connect with other trusted servers to exchange the account directory. For example this will be used to auto-complete external accounts for federated sharing." : "Liitjagamine võimaldab kontokataloogi vahendamiseks luua ühenduse teiste usaldusväärsete serveritega. Näiteks kasutatakse seda väliste kontode automaatseks täitmiseks ühendatud jagamiseks.", + "External documentation for Federated Cloud Sharing" : "Väiline dokumentatsioon Liitjagamise Pilvjagamise kohta", + "Federation allows you to connect with other trusted servers to exchange the account directory. For example this will be used to auto-complete external accounts for federated sharing. It is not necessary to add a server as trusted server in order to create a federated share." : "Liitjagamine võimaldab kontokataloogi vahendamiseks luua ühenduse teiste usaldusväärsete serveritega. Näiteks kasutatakse seda väliste kontode automaatseks täitmiseks ühendatud jagamiseks. Liitjagamise loomiseks ei ole vaja serverit usaldusväärse serverina lisada.", + "Each server must validate the other. This process may require a few cron cycles." : "Iga server peab valideerima teise. See protsess võib võtta mitu cron tsüklit.", "+ Add trusted server" : "+ Lisa usaldatud server", "Trusted server" : "Usaldatud server", "Add" : "Lisa" diff --git a/apps/federation/l10n/eu.js b/apps/federation/l10n/eu.js index 3b7e2056890..0a4ccf10760 100644 --- a/apps/federation/l10n/eu.js +++ b/apps/federation/l10n/eu.js @@ -2,15 +2,19 @@ OC.L10N.register( "federation", { "Added to the list of trusted servers" : "Zerbitzari fidagarrien zerrendara gehituta", - "Server is already in the list of trusted servers." : "Zerbitzaria fidagarrien zerrendan dago iada", - "No server to federate with found" : "Ez da federatzeko zerbitzaririk topatu", - "Could not add server" : "Ezin da zerbitzaria gehitu", + "No server found with ID: %s" : "Ez da zerbitzaririk aurkitu ID honekin: %s", + "Could not remove server" : "Ezin izan da zerbitzaria kendu", + "Server is already in the list of trusted servers." : "Zerbitzaria fidagarrien zerrendan dago jadanik", + "No server to federate with found" : "Ez da federatzeko zerbitzaririk aurkitu", + "Could not add server" : "Ezin izan da zerbitzaria gehitu", "Trusted servers" : "Zerbitzari fidagarriak", "Federation" : "Federazioa", - "Federation allows you to connect with other trusted servers to exchange the user directory." : "Federazioak fidagarriak diren beste zerbitzariekin erabiltzaile-direktorioa konektatzea ahalbidetzen dizu.", - "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "Federazioaren bidez fidagarriak diren zerbitzariekin erabiltzaileen direktorioa trukatzeko aukera dago. Adibidez, kanpo erabiltzaileak automatikoki betetzeko erabil daiteke, federatze partekatuan. ", - "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing. It is not necessary to add a server as trusted server in order to create a federated share." : "Federazioaren bidez fidagarriak diren zerbitzariekin erabiltzaile-direktorioa trukatzeko aukera dago. Adibidez, kanpo erabiltzaileak automatikoki betetzeko erabil daiteke, federatze partekatuan. Federatze partekatua egiteko ez da beharrezkoa zerbitzari bat gehitzea zerbitzari fidagarri gisa.", - "+ Add trusted server" : "+ Zerbitzari fidagarria gehitu", + "Federation allows you to connect with other trusted servers to exchange the account directory." : "Federazioak fidagarriak diren beste zerbitzariekin kontu-direktorioa konektatzea ahalbidetzen dizu.", + "Federation allows you to connect with other trusted servers to exchange the account directory. For example this will be used to auto-complete external accounts for federated sharing." : "Federazioaren bidez fidagarriak diren zerbitzariekin kontu-direktorioa trukatzeko aukera dago. Adibidez, kanpo erabiltzaileak automatikoki betetzeko erabil daiteke, federatze partekatuan. ", + "External documentation for Federated Cloud Sharing" : "Federatutako hodei partekatzerako kanpoko dokumentazioa", + "Federation allows you to connect with other trusted servers to exchange the account directory. For example this will be used to auto-complete external accounts for federated sharing. It is not necessary to add a server as trusted server in order to create a federated share." : "Federazioaren bidez fidagarriak diren zerbitzariekin kontu-direktorioa trukatzeko aukera dago. Adibidez, kanpo erabiltzaileak automatikoki betetzeko erabil daiteke, federatze partekatuan. Federatze partekatua egiteko ez da beharrezkoa zerbitzari bat gehitzea zerbitzari fidagarri gisa.", + "Each server must validate the other. This process may require a few cron cycles." : "Zerbitzari bakoitza bestea balioztatu behar du. Prozesu honek cron ziklo batzuk beharko ditu.", + "+ Add trusted server" : "+ Gehitu zerbitzari fidagarria", "Trusted server" : "Zerbitzari fidagarria", "Add" : "Gehitu" }, diff --git a/apps/federation/l10n/eu.json b/apps/federation/l10n/eu.json index 11c79df03c0..4f72bcabf30 100644 --- a/apps/federation/l10n/eu.json +++ b/apps/federation/l10n/eu.json @@ -1,14 +1,18 @@ { "translations": { "Added to the list of trusted servers" : "Zerbitzari fidagarrien zerrendara gehituta", - "Server is already in the list of trusted servers." : "Zerbitzaria fidagarrien zerrendan dago iada", - "No server to federate with found" : "Ez da federatzeko zerbitzaririk topatu", - "Could not add server" : "Ezin da zerbitzaria gehitu", + "No server found with ID: %s" : "Ez da zerbitzaririk aurkitu ID honekin: %s", + "Could not remove server" : "Ezin izan da zerbitzaria kendu", + "Server is already in the list of trusted servers." : "Zerbitzaria fidagarrien zerrendan dago jadanik", + "No server to federate with found" : "Ez da federatzeko zerbitzaririk aurkitu", + "Could not add server" : "Ezin izan da zerbitzaria gehitu", "Trusted servers" : "Zerbitzari fidagarriak", "Federation" : "Federazioa", - "Federation allows you to connect with other trusted servers to exchange the user directory." : "Federazioak fidagarriak diren beste zerbitzariekin erabiltzaile-direktorioa konektatzea ahalbidetzen dizu.", - "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "Federazioaren bidez fidagarriak diren zerbitzariekin erabiltzaileen direktorioa trukatzeko aukera dago. Adibidez, kanpo erabiltzaileak automatikoki betetzeko erabil daiteke, federatze partekatuan. ", - "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing. It is not necessary to add a server as trusted server in order to create a federated share." : "Federazioaren bidez fidagarriak diren zerbitzariekin erabiltzaile-direktorioa trukatzeko aukera dago. Adibidez, kanpo erabiltzaileak automatikoki betetzeko erabil daiteke, federatze partekatuan. Federatze partekatua egiteko ez da beharrezkoa zerbitzari bat gehitzea zerbitzari fidagarri gisa.", - "+ Add trusted server" : "+ Zerbitzari fidagarria gehitu", + "Federation allows you to connect with other trusted servers to exchange the account directory." : "Federazioak fidagarriak diren beste zerbitzariekin kontu-direktorioa konektatzea ahalbidetzen dizu.", + "Federation allows you to connect with other trusted servers to exchange the account directory. For example this will be used to auto-complete external accounts for federated sharing." : "Federazioaren bidez fidagarriak diren zerbitzariekin kontu-direktorioa trukatzeko aukera dago. Adibidez, kanpo erabiltzaileak automatikoki betetzeko erabil daiteke, federatze partekatuan. ", + "External documentation for Federated Cloud Sharing" : "Federatutako hodei partekatzerako kanpoko dokumentazioa", + "Federation allows you to connect with other trusted servers to exchange the account directory. For example this will be used to auto-complete external accounts for federated sharing. It is not necessary to add a server as trusted server in order to create a federated share." : "Federazioaren bidez fidagarriak diren zerbitzariekin kontu-direktorioa trukatzeko aukera dago. Adibidez, kanpo erabiltzaileak automatikoki betetzeko erabil daiteke, federatze partekatuan. Federatze partekatua egiteko ez da beharrezkoa zerbitzari bat gehitzea zerbitzari fidagarri gisa.", + "Each server must validate the other. This process may require a few cron cycles." : "Zerbitzari bakoitza bestea balioztatu behar du. Prozesu honek cron ziklo batzuk beharko ditu.", + "+ Add trusted server" : "+ Gehitu zerbitzari fidagarria", "Trusted server" : "Zerbitzari fidagarria", "Add" : "Gehitu" },"pluralForm" :"nplurals=2; plural=(n != 1);" diff --git a/apps/federation/l10n/fa.js b/apps/federation/l10n/fa.js index d1d2d3741b1..772c99c4c8b 100644 --- a/apps/federation/l10n/fa.js +++ b/apps/federation/l10n/fa.js @@ -3,9 +3,11 @@ OC.L10N.register( { "Added to the list of trusted servers" : "اضافه شده به لیست سرورهای مورد اعتماد", "Server is already in the list of trusted servers." : "سرور در حال حاضر در لیست سرورهای مورد اعتماد است.", + "No server to federate with found" : "هیچ سروری برای اتحاد یافت نشد", "Could not add server" : "سرور اضافه نشد", "Trusted servers" : "سرورهای قابل اعتماد", "Federation" : "Federation", + "+ Add trusted server" : "+ سرور قابل اعتماد را اضافه کنید", "Trusted server" : "سرور قابل اعتماد", "Add" : "افزودن" }, diff --git a/apps/federation/l10n/fa.json b/apps/federation/l10n/fa.json index 1b8e449d26f..af0586af402 100644 --- a/apps/federation/l10n/fa.json +++ b/apps/federation/l10n/fa.json @@ -1,9 +1,11 @@ { "translations": { "Added to the list of trusted servers" : "اضافه شده به لیست سرورهای مورد اعتماد", "Server is already in the list of trusted servers." : "سرور در حال حاضر در لیست سرورهای مورد اعتماد است.", + "No server to federate with found" : "هیچ سروری برای اتحاد یافت نشد", "Could not add server" : "سرور اضافه نشد", "Trusted servers" : "سرورهای قابل اعتماد", "Federation" : "Federation", + "+ Add trusted server" : "+ سرور قابل اعتماد را اضافه کنید", "Trusted server" : "سرور قابل اعتماد", "Add" : "افزودن" },"pluralForm" :"nplurals=2; plural=(n > 1);" diff --git a/apps/federation/l10n/fi.js b/apps/federation/l10n/fi.js index 10fcd35cfab..b85b5e9f3fb 100644 --- a/apps/federation/l10n/fi.js +++ b/apps/federation/l10n/fi.js @@ -7,8 +7,6 @@ OC.L10N.register( "Could not add server" : "Palvelimen lisääminen ei onnistunut", "Trusted servers" : "Luotetut palvelimet", "Federation" : "Federaatio", - "Federation allows you to connect with other trusted servers to exchange the user directory." : "Federaatio mahdollistaa yhdistämisen muihin luotettuihin palvelimiin ja siten käyttäjähakemiston vaihtamisen.", - "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "Federointi sallii sinun liittyä toisten luotettujen palvelimien käyttäjähakemistoihin. Sitä käytetään esimerkiksi ulkoisten käyttäjänimien automaattiseen täydentämiseen.", "+ Add trusted server" : "+ Lisää luotettu palvelin", "Trusted server" : "Luotettu palvelin", "Add" : "Lisää" diff --git a/apps/federation/l10n/fi.json b/apps/federation/l10n/fi.json index a05d1323d75..b1918f4d10d 100644 --- a/apps/federation/l10n/fi.json +++ b/apps/federation/l10n/fi.json @@ -5,8 +5,6 @@ "Could not add server" : "Palvelimen lisääminen ei onnistunut", "Trusted servers" : "Luotetut palvelimet", "Federation" : "Federaatio", - "Federation allows you to connect with other trusted servers to exchange the user directory." : "Federaatio mahdollistaa yhdistämisen muihin luotettuihin palvelimiin ja siten käyttäjähakemiston vaihtamisen.", - "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "Federointi sallii sinun liittyä toisten luotettujen palvelimien käyttäjähakemistoihin. Sitä käytetään esimerkiksi ulkoisten käyttäjänimien automaattiseen täydentämiseen.", "+ Add trusted server" : "+ Lisää luotettu palvelin", "Trusted server" : "Luotettu palvelin", "Add" : "Lisää" diff --git a/apps/federation/l10n/fr.js b/apps/federation/l10n/fr.js index 365a1dbc273..004a634bea8 100644 --- a/apps/federation/l10n/fr.js +++ b/apps/federation/l10n/fr.js @@ -2,16 +2,20 @@ OC.L10N.register( "federation", { "Added to the list of trusted servers" : "Ajouté à la liste des serveurs de confiance", + "No server found with ID: %s" : "Aucun serveur trouvé avec l'identifiant %s", + "Could not remove server" : "Impossible de supprimer le serveur", "Server is already in the list of trusted servers." : "Le serveur est déjà dans la liste des serveurs de confiance.", - "No server to federate with found" : "Aucun serveur avec lequel fédérer n'a été trouvé", - "Could not add server" : "Impossible d'ajouter le serveur", + "No server to federate with found" : "Aucun serveur avec lequel fédérer n’a été trouvé", + "Could not add server" : "Impossible d’ajouter le serveur", "Trusted servers" : "Serveurs de confiance", "Federation" : "Fédération", - "Federation allows you to connect with other trusted servers to exchange the user directory." : "Une fédération vous permet de vous connecter avec d'autres serveurs de confiance pour échanger la liste des utilisateurs.", - "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "Une fédération vous permet de vous connecter avec d'autres serveurs de confiance pour échanger la liste des utilisateurs. Par exemple, ce sera utilisé pour auto-compléter les utilisateurs externes lors du partage fédéré.", - "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing. It is not necessary to add a server as trusted server in order to create a federated share." : "Une fédération vous permet de vous connecter avec d'autres serveurs de confiance pour échanger la liste des utilisateurs. Par exemple, ce sera utilisé pour auto-compléter les utilisateurs externes lors du partage fédéré. Il n'est pas nécessaire d'ajouter un serveur comme serveur de confiance afin de créer un partage fédéré.", + "Federation allows you to connect with other trusted servers to exchange the account directory." : "Une fédération vous permet de vous connecter avec d'autres serveurs de confiance pour échanger la liste des comptes.", + "Federation allows you to connect with other trusted servers to exchange the account directory. For example this will be used to auto-complete external accounts for federated sharing." : "Une fédération vous permet de vous connecter avec d'autres serveurs de confiance pour échanger la liste des comptes. Par exemple, ce sera utilisé pour auto-compléter les comptes externes lors du partage fédéré.", + "External documentation for Federated Cloud Sharing" : "Documentation externe sur le partage de Cloud Fédéré", + "Federation allows you to connect with other trusted servers to exchange the account directory. For example this will be used to auto-complete external accounts for federated sharing. It is not necessary to add a server as trusted server in order to create a federated share." : "Une fédération vous permet de vous connecter avec d'autres serveurs de confiance pour échanger la liste des comptes. Par exemple, ce sera utilisé pour auto-compléter les comptes externes lors du partage fédéré. Il n'est pas nécessaire d'ajouter un serveur comme serveur de confiance afin de créer un partage fédéré.", + "Each server must validate the other. This process may require a few cron cycles." : "Chaque serveur doit valider l'autre. Ce processus peut prendre plusieurs cycles de tâches planifiées.", "+ Add trusted server" : "+ Ajouter un serveur de confiance", "Trusted server" : "Serveur de confiance", "Add" : "Ajouter" }, -"nplurals=2; plural=(n > 1);"); +"nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); diff --git a/apps/federation/l10n/fr.json b/apps/federation/l10n/fr.json index c100c46ee86..05a3828887f 100644 --- a/apps/federation/l10n/fr.json +++ b/apps/federation/l10n/fr.json @@ -1,15 +1,19 @@ { "translations": { "Added to the list of trusted servers" : "Ajouté à la liste des serveurs de confiance", + "No server found with ID: %s" : "Aucun serveur trouvé avec l'identifiant %s", + "Could not remove server" : "Impossible de supprimer le serveur", "Server is already in the list of trusted servers." : "Le serveur est déjà dans la liste des serveurs de confiance.", - "No server to federate with found" : "Aucun serveur avec lequel fédérer n'a été trouvé", - "Could not add server" : "Impossible d'ajouter le serveur", + "No server to federate with found" : "Aucun serveur avec lequel fédérer n’a été trouvé", + "Could not add server" : "Impossible d’ajouter le serveur", "Trusted servers" : "Serveurs de confiance", "Federation" : "Fédération", - "Federation allows you to connect with other trusted servers to exchange the user directory." : "Une fédération vous permet de vous connecter avec d'autres serveurs de confiance pour échanger la liste des utilisateurs.", - "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "Une fédération vous permet de vous connecter avec d'autres serveurs de confiance pour échanger la liste des utilisateurs. Par exemple, ce sera utilisé pour auto-compléter les utilisateurs externes lors du partage fédéré.", - "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing. It is not necessary to add a server as trusted server in order to create a federated share." : "Une fédération vous permet de vous connecter avec d'autres serveurs de confiance pour échanger la liste des utilisateurs. Par exemple, ce sera utilisé pour auto-compléter les utilisateurs externes lors du partage fédéré. Il n'est pas nécessaire d'ajouter un serveur comme serveur de confiance afin de créer un partage fédéré.", + "Federation allows you to connect with other trusted servers to exchange the account directory." : "Une fédération vous permet de vous connecter avec d'autres serveurs de confiance pour échanger la liste des comptes.", + "Federation allows you to connect with other trusted servers to exchange the account directory. For example this will be used to auto-complete external accounts for federated sharing." : "Une fédération vous permet de vous connecter avec d'autres serveurs de confiance pour échanger la liste des comptes. Par exemple, ce sera utilisé pour auto-compléter les comptes externes lors du partage fédéré.", + "External documentation for Federated Cloud Sharing" : "Documentation externe sur le partage de Cloud Fédéré", + "Federation allows you to connect with other trusted servers to exchange the account directory. For example this will be used to auto-complete external accounts for federated sharing. It is not necessary to add a server as trusted server in order to create a federated share." : "Une fédération vous permet de vous connecter avec d'autres serveurs de confiance pour échanger la liste des comptes. Par exemple, ce sera utilisé pour auto-compléter les comptes externes lors du partage fédéré. Il n'est pas nécessaire d'ajouter un serveur comme serveur de confiance afin de créer un partage fédéré.", + "Each server must validate the other. This process may require a few cron cycles." : "Chaque serveur doit valider l'autre. Ce processus peut prendre plusieurs cycles de tâches planifiées.", "+ Add trusted server" : "+ Ajouter un serveur de confiance", "Trusted server" : "Serveur de confiance", "Add" : "Ajouter" -},"pluralForm" :"nplurals=2; plural=(n > 1);" +},"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/federation/l10n/ga.js b/apps/federation/l10n/ga.js new file mode 100644 index 00000000000..46b73669caa --- /dev/null +++ b/apps/federation/l10n/ga.js @@ -0,0 +1,21 @@ +OC.L10N.register( + "federation", + { + "Added to the list of trusted servers" : "Curtha leis an liosta freastalaithe iontaofa", + "No server found with ID: %s" : "Níor aimsíodh aon fhreastalaí a bhfuil ID air: %s", + "Could not remove server" : "Níorbh fhéidir an freastalaí a bhaint", + "Server is already in the list of trusted servers." : "Tá an freastalaí ar liosta na bhfreastalaithe iontaofa cheana féin.", + "No server to federate with found" : "Níor aimsíodh aon fhreastalaí le cónascadh leis", + "Could not add server" : "Níorbh fhéidir an freastalaí a chur leis", + "Trusted servers" : "Freastalaithe iontaofa", + "Federation" : "Cónaidhm", + "Federation allows you to connect with other trusted servers to exchange the account directory." : "Ceadaíonn Cónaidhm duit nascadh le freastalaithe iontaofa eile chun an t-eolaire cuntais a mhalartú.", + "Federation allows you to connect with other trusted servers to exchange the account directory. For example this will be used to auto-complete external accounts for federated sharing." : "Ceadaíonn Cónaidhm duit nascadh le freastalaithe iontaofa eile chun an t-eolaire cuntais a mhalartú. Mar shampla, úsáidfear é seo chun cuntais sheachtracha a uathchríochnú le haghaidh comhroinnte cónasctha.", + "External documentation for Federated Cloud Sharing" : "Doiciméadú seachtrach maidir le Comhroinnt Néalríomhaireachta", + "Federation allows you to connect with other trusted servers to exchange the account directory. For example this will be used to auto-complete external accounts for federated sharing. It is not necessary to add a server as trusted server in order to create a federated share." : "Ceadaíonn Cónaidhm duit nascadh le freastalaithe iontaofa eile chun an t-eolaire cuntais a mhalartú. Mar shampla, úsáidfear é seo chun cuntais sheachtracha a uathchríochnú le haghaidh comhroinnte cónasctha. Ní gá freastalaí a chur leis mar fhreastalaí iontaofa chun sciar cónasctha a chruthú.", + "Each server must validate the other. This process may require a few cron cycles." : "Ní mór do gach freastalaí an ceann eile a bhailíochtú. D'fhéadfadh go mbeadh cúpla timthriall cron ag teastáil don phróiseas seo.", + "+ Add trusted server" : "+ Cuir freastalaí iontaofa leis", + "Trusted server" : "Freastalaí iontaofa", + "Add" : "Cuir" +}, +"nplurals=5; plural=(n==1 ? 0 : n==2 ? 1 : n<7 ? 2 : n<11 ? 3 : 4);"); diff --git a/apps/federation/l10n/ga.json b/apps/federation/l10n/ga.json new file mode 100644 index 00000000000..c706d6a54fd --- /dev/null +++ b/apps/federation/l10n/ga.json @@ -0,0 +1,19 @@ +{ "translations": { + "Added to the list of trusted servers" : "Curtha leis an liosta freastalaithe iontaofa", + "No server found with ID: %s" : "Níor aimsíodh aon fhreastalaí a bhfuil ID air: %s", + "Could not remove server" : "Níorbh fhéidir an freastalaí a bhaint", + "Server is already in the list of trusted servers." : "Tá an freastalaí ar liosta na bhfreastalaithe iontaofa cheana féin.", + "No server to federate with found" : "Níor aimsíodh aon fhreastalaí le cónascadh leis", + "Could not add server" : "Níorbh fhéidir an freastalaí a chur leis", + "Trusted servers" : "Freastalaithe iontaofa", + "Federation" : "Cónaidhm", + "Federation allows you to connect with other trusted servers to exchange the account directory." : "Ceadaíonn Cónaidhm duit nascadh le freastalaithe iontaofa eile chun an t-eolaire cuntais a mhalartú.", + "Federation allows you to connect with other trusted servers to exchange the account directory. For example this will be used to auto-complete external accounts for federated sharing." : "Ceadaíonn Cónaidhm duit nascadh le freastalaithe iontaofa eile chun an t-eolaire cuntais a mhalartú. Mar shampla, úsáidfear é seo chun cuntais sheachtracha a uathchríochnú le haghaidh comhroinnte cónasctha.", + "External documentation for Federated Cloud Sharing" : "Doiciméadú seachtrach maidir le Comhroinnt Néalríomhaireachta", + "Federation allows you to connect with other trusted servers to exchange the account directory. For example this will be used to auto-complete external accounts for federated sharing. It is not necessary to add a server as trusted server in order to create a federated share." : "Ceadaíonn Cónaidhm duit nascadh le freastalaithe iontaofa eile chun an t-eolaire cuntais a mhalartú. Mar shampla, úsáidfear é seo chun cuntais sheachtracha a uathchríochnú le haghaidh comhroinnte cónasctha. Ní gá freastalaí a chur leis mar fhreastalaí iontaofa chun sciar cónasctha a chruthú.", + "Each server must validate the other. This process may require a few cron cycles." : "Ní mór do gach freastalaí an ceann eile a bhailíochtú. D'fhéadfadh go mbeadh cúpla timthriall cron ag teastáil don phróiseas seo.", + "+ Add trusted server" : "+ Cuir freastalaí iontaofa leis", + "Trusted server" : "Freastalaí iontaofa", + "Add" : "Cuir" +},"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/federation/l10n/gl.js b/apps/federation/l10n/gl.js index 6dbb9bd033f..39cbf379c8d 100644 --- a/apps/federation/l10n/gl.js +++ b/apps/federation/l10n/gl.js @@ -2,14 +2,18 @@ OC.L10N.register( "federation", { "Added to the list of trusted servers" : "Engadido á lista de servidores de confianza", + "No server found with ID: %s" : "Non se atopou ningún servidor co ID: %s", + "Could not remove server" : "Non foi posíbel retirar o servidor", "Server is already in the list of trusted servers." : "O servidor xa está na lista de servidores de confianza.", "No server to federate with found" : "Non se atopou ningún servidor co que federarse", "Could not add server" : "Non foi posíbel engadir o servidor", "Trusted servers" : "Servidores de confianza", "Federation" : "Federación", - "Federation allows you to connect with other trusted servers to exchange the user directory." : "A federación permítelle conectarse con outros servidores de confianza para intercambiar directorios de usuario.", - "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "A federación permítelle conectarse con outros servidores de confianza para intercambiar directorios de usuario. Por exemplo, isto usarase para autocompletar a selección de usuarios externos ao compartir en federación. ", - "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing. It is not necessary to add a server as trusted server in order to create a federated share." : "A federación permítelle conectarse con outros servidores de confianza para intercambiar directorios de usuario. Por exemplo, isto usarase para autocompletar a selección de usuarios externos ao compartir en federación. Non é necesario engadir un servidor como servidor de confianza para poder crear unha compartición federada.", + "Federation allows you to connect with other trusted servers to exchange the account directory." : "A federación permítelle conectarse con outros servidores de confianza para intercambiar o directorio da conta.", + "Federation allows you to connect with other trusted servers to exchange the account directory. For example this will be used to auto-complete external accounts for federated sharing." : "A federación permítelle conectarse con outros servidores de confianza para intercambiar o directorio da conta. Por exemplo, isto empregarase para autocompletar con contas externas ao compartir en federación.", + "External documentation for Federated Cloud Sharing" : "Documentación externa para «Nube compartida federada»", + "Federation allows you to connect with other trusted servers to exchange the account directory. For example this will be used to auto-complete external accounts for federated sharing. It is not necessary to add a server as trusted server in order to create a federated share." : "A federación permítelle conectarse con outros servidores de confianza para intercambiar o directorio da conta. Por exemplo, isto empregarase para autocompletar con contas externas ao compartir en federación. Non é necesario engadir un servidor como servidor de confianza para poder crear unha compartición federada.", + "Each server must validate the other. This process may require a few cron cycles." : "Cada servidor debe validar ao outro. Este proceso pode requirir algúns ciclos de «cron».", "+ Add trusted server" : "+ Engadir servidor de confianza", "Trusted server" : "Servidor de confianza", "Add" : "Engadir" diff --git a/apps/federation/l10n/gl.json b/apps/federation/l10n/gl.json index 549172e90fb..f987bc282af 100644 --- a/apps/federation/l10n/gl.json +++ b/apps/federation/l10n/gl.json @@ -1,13 +1,17 @@ { "translations": { "Added to the list of trusted servers" : "Engadido á lista de servidores de confianza", + "No server found with ID: %s" : "Non se atopou ningún servidor co ID: %s", + "Could not remove server" : "Non foi posíbel retirar o servidor", "Server is already in the list of trusted servers." : "O servidor xa está na lista de servidores de confianza.", "No server to federate with found" : "Non se atopou ningún servidor co que federarse", "Could not add server" : "Non foi posíbel engadir o servidor", "Trusted servers" : "Servidores de confianza", "Federation" : "Federación", - "Federation allows you to connect with other trusted servers to exchange the user directory." : "A federación permítelle conectarse con outros servidores de confianza para intercambiar directorios de usuario.", - "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "A federación permítelle conectarse con outros servidores de confianza para intercambiar directorios de usuario. Por exemplo, isto usarase para autocompletar a selección de usuarios externos ao compartir en federación. ", - "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing. It is not necessary to add a server as trusted server in order to create a federated share." : "A federación permítelle conectarse con outros servidores de confianza para intercambiar directorios de usuario. Por exemplo, isto usarase para autocompletar a selección de usuarios externos ao compartir en federación. Non é necesario engadir un servidor como servidor de confianza para poder crear unha compartición federada.", + "Federation allows you to connect with other trusted servers to exchange the account directory." : "A federación permítelle conectarse con outros servidores de confianza para intercambiar o directorio da conta.", + "Federation allows you to connect with other trusted servers to exchange the account directory. For example this will be used to auto-complete external accounts for federated sharing." : "A federación permítelle conectarse con outros servidores de confianza para intercambiar o directorio da conta. Por exemplo, isto empregarase para autocompletar con contas externas ao compartir en federación.", + "External documentation for Federated Cloud Sharing" : "Documentación externa para «Nube compartida federada»", + "Federation allows you to connect with other trusted servers to exchange the account directory. For example this will be used to auto-complete external accounts for federated sharing. It is not necessary to add a server as trusted server in order to create a federated share." : "A federación permítelle conectarse con outros servidores de confianza para intercambiar o directorio da conta. Por exemplo, isto empregarase para autocompletar con contas externas ao compartir en federación. Non é necesario engadir un servidor como servidor de confianza para poder crear unha compartición federada.", + "Each server must validate the other. This process may require a few cron cycles." : "Cada servidor debe validar ao outro. Este proceso pode requirir algúns ciclos de «cron».", "+ Add trusted server" : "+ Engadir servidor de confianza", "Trusted server" : "Servidor de confianza", "Add" : "Engadir" diff --git a/apps/federation/l10n/he.js b/apps/federation/l10n/he.js index a7fdbe956a8..24284abb963 100644 --- a/apps/federation/l10n/he.js +++ b/apps/federation/l10n/he.js @@ -7,10 +7,8 @@ OC.L10N.register( "Could not add server" : "לא ניתן היה להוסיף שרת", "Trusted servers" : "שרתים מהימנים", "Federation" : "איגוד", - "Federation allows you to connect with other trusted servers to exchange the user directory." : "איגוד מאפשר לך להתחבר לשרתים מהימנים אחרים כדי להחליף ביניהם את ספריית המשתמש.", - "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "איגוד מאפשר לך להתחבר לשרתים מהימנים אחרים כדי להחליף ביניהם את ספריית המשתמש. למשל: ייעשה שימוש באיגוד לטובת השלמה אוטומטית של משתמשים חיצוניים לשיתוף מאוגד.", "+ Add trusted server" : "+ הוספת שרת מהימן", "Trusted server" : "שרת מהימן", "Add" : "הוספה" }, -"nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n == 2 && n % 1 == 0) ? 1: (n % 10 == 0 && n % 1 == 0 && n > 10) ? 2 : 3;"); +"nplurals=3; plural=(n == 1 && n % 1 == 0) ? 0 : (n == 2 && n % 1 == 0) ? 1: 2;"); diff --git a/apps/federation/l10n/he.json b/apps/federation/l10n/he.json index 898c5d32a3a..23f108dbad3 100644 --- a/apps/federation/l10n/he.json +++ b/apps/federation/l10n/he.json @@ -5,10 +5,8 @@ "Could not add server" : "לא ניתן היה להוסיף שרת", "Trusted servers" : "שרתים מהימנים", "Federation" : "איגוד", - "Federation allows you to connect with other trusted servers to exchange the user directory." : "איגוד מאפשר לך להתחבר לשרתים מהימנים אחרים כדי להחליף ביניהם את ספריית המשתמש.", - "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "איגוד מאפשר לך להתחבר לשרתים מהימנים אחרים כדי להחליף ביניהם את ספריית המשתמש. למשל: ייעשה שימוש באיגוד לטובת השלמה אוטומטית של משתמשים חיצוניים לשיתוף מאוגד.", "+ Add trusted server" : "+ הוספת שרת מהימן", "Trusted server" : "שרת מהימן", "Add" : "הוספה" -},"pluralForm" :"nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n == 2 && n % 1 == 0) ? 1: (n % 10 == 0 && n % 1 == 0 && n > 10) ? 2 : 3;" +},"pluralForm" :"nplurals=3; plural=(n == 1 && n % 1 == 0) ? 0 : (n == 2 && n % 1 == 0) ? 1: 2;" }
\ No newline at end of file diff --git a/apps/federation/l10n/hr.js b/apps/federation/l10n/hr.js index 20b3c3f8cae..37224c9e6d8 100644 --- a/apps/federation/l10n/hr.js +++ b/apps/federation/l10n/hr.js @@ -7,9 +7,6 @@ OC.L10N.register( "Could not add server" : "Poslužitelj nije dodan", "Trusted servers" : "Pouzdani poslužitelji", "Federation" : "Udruženje", - "Federation allows you to connect with other trusted servers to exchange the user directory." : "Udruženje vam omogućuje povezivanje s drugim pouzdanim poslužiteljima i razmjenu korisničkih imenika.", - "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "Udruženje vam omogućuje povezivanje s drugim pouzdanim poslužiteljima i razmjenu korisničkih imenika. Primjerice, može se koristiti za automatsko dovršavanje imena vanjskih korisnika za udruženo dijeljenje.", - "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing. It is not necessary to add a server as trusted server in order to create a federated share." : "Udruženje vam omogućuje povezivanje s drugim pouzdanim poslužiteljima i razmjenu korisničkih imenika. Primjerice, može se upotrijebiti za automatsko dovršavanje imena vanjskih korisnika za udruženo dijeljenje. Za stvaranje udruženog dijeljenja nije potrebno dodati poslužitelj kao pouzdani poslužitelj.", "+ Add trusted server" : "+ Dodaj pouzdani poslužitelj", "Trusted server" : "Pouzdan poslužitelj", "Add" : "Dodaj" diff --git a/apps/federation/l10n/hr.json b/apps/federation/l10n/hr.json index d68feffcec4..dd413c764b8 100644 --- a/apps/federation/l10n/hr.json +++ b/apps/federation/l10n/hr.json @@ -5,9 +5,6 @@ "Could not add server" : "Poslužitelj nije dodan", "Trusted servers" : "Pouzdani poslužitelji", "Federation" : "Udruženje", - "Federation allows you to connect with other trusted servers to exchange the user directory." : "Udruženje vam omogućuje povezivanje s drugim pouzdanim poslužiteljima i razmjenu korisničkih imenika.", - "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "Udruženje vam omogućuje povezivanje s drugim pouzdanim poslužiteljima i razmjenu korisničkih imenika. Primjerice, može se koristiti za automatsko dovršavanje imena vanjskih korisnika za udruženo dijeljenje.", - "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing. It is not necessary to add a server as trusted server in order to create a federated share." : "Udruženje vam omogućuje povezivanje s drugim pouzdanim poslužiteljima i razmjenu korisničkih imenika. Primjerice, može se upotrijebiti za automatsko dovršavanje imena vanjskih korisnika za udruženo dijeljenje. Za stvaranje udruženog dijeljenja nije potrebno dodati poslužitelj kao pouzdani poslužitelj.", "+ Add trusted server" : "+ Dodaj pouzdani poslužitelj", "Trusted server" : "Pouzdan poslužitelj", "Add" : "Dodaj" diff --git a/apps/federation/l10n/hu.js b/apps/federation/l10n/hu.js index 2607894556a..953cd963196 100644 --- a/apps/federation/l10n/hu.js +++ b/apps/federation/l10n/hu.js @@ -2,14 +2,18 @@ OC.L10N.register( "federation", { "Added to the list of trusted servers" : "Hozzáadva a megbízható kiszolgálók listájához", + "No server found with ID: %s" : "Nem található kiszolgáló az azonosítóval: %s", + "Could not remove server" : "Nem sikerült a kiszolgáló eltávolítása", "Server is already in the list of trusted servers." : "A kiszolgáló már szerepel a megbízható kiszolgálók között.", "No server to federate with found" : "Nem található olyan kiszolgáló, amellyel föderálni lehetne", "Could not add server" : "A kiszolgáló nem adható hozzá", "Trusted servers" : "Megbízható kiszolgálók", "Federation" : "Föderáció", - "Federation allows you to connect with other trusted servers to exchange the user directory." : "A föderáció lehetővé teszi a más megbízható kiszolgálókhoz kapcsolódást, hogy a kiszolgálók felhasználójegyzéket cserélhessenek.", - "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "A föderáció lehetővé teszi a más megbízható kiszolgálókhoz kapcsolódást, hogy a kiszolgálók felhasználójegyzéket cseréljenek. Például ennek segítségével lesznek automatikusan kiegészítve a külső felhasználók a föderált megosztásnál.", - "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing. It is not necessary to add a server as trusted server in order to create a federated share." : "A föderáció lehetővé teszi a más megbízható kiszolgálókhoz kapcsolódást, hogy a kiszolgálók felhasználójegyzéket cseréljenek. Például ennek segítségével lesznek automatikusan kiegészítve a külső felhasználók a föderált megosztásnál. Nem szükséges egy kiszolgálót megbízhatóként hozzáadni ahhoz, hogy föderált megosztást hozzon létre.", + "Federation allows you to connect with other trusted servers to exchange the account directory." : "A föderáció lehetővé teszi a más megbízható kiszolgálókhoz kapcsolódást, hogy a kiszolgálók fiókjegyzéket cserélhessenek.", + "Federation allows you to connect with other trusted servers to exchange the account directory. For example this will be used to auto-complete external accounts for federated sharing." : "A föderáció lehetővé teszi a más megbízható kiszolgálókhoz kapcsolódást, hogy a kiszolgálók fiókjegyzéket cseréljenek. Például ennek segítségével lesznek automatikusan kiegészítve a külső fiókok a föderált megosztásnál.", + "External documentation for Federated Cloud Sharing" : "Külső dokumentáció a föderált felhőmegosztáshoz", + "Federation allows you to connect with other trusted servers to exchange the account directory. For example this will be used to auto-complete external accounts for federated sharing. It is not necessary to add a server as trusted server in order to create a federated share." : "A föderáció lehetővé teszi a más megbízható kiszolgálókhoz kapcsolódást, hogy a kiszolgálók fiókjegyzéket cseréljenek. Például ennek segítségével lesznek automatikusan kiegészítve a külső fiókok a föderált megosztásnál. Nem szükséges egy kiszolgálót megbízhatóként hozzáadni ahhoz, hogy föderált megosztást hozzon létre.", + "Each server must validate the other. This process may require a few cron cycles." : "Minden kiszolgálónak ellenőriznie kell a másikat. Ez a folyat néhány cron ciklust vehet igénybe.", "+ Add trusted server" : "+ Megbízható kiszolgáló hozzáadása", "Trusted server" : "Megbízható kiszolgáló", "Add" : "Hozzáadás" diff --git a/apps/federation/l10n/hu.json b/apps/federation/l10n/hu.json index b87603f3d83..d10201e424c 100644 --- a/apps/federation/l10n/hu.json +++ b/apps/federation/l10n/hu.json @@ -1,13 +1,17 @@ { "translations": { "Added to the list of trusted servers" : "Hozzáadva a megbízható kiszolgálók listájához", + "No server found with ID: %s" : "Nem található kiszolgáló az azonosítóval: %s", + "Could not remove server" : "Nem sikerült a kiszolgáló eltávolítása", "Server is already in the list of trusted servers." : "A kiszolgáló már szerepel a megbízható kiszolgálók között.", "No server to federate with found" : "Nem található olyan kiszolgáló, amellyel föderálni lehetne", "Could not add server" : "A kiszolgáló nem adható hozzá", "Trusted servers" : "Megbízható kiszolgálók", "Federation" : "Föderáció", - "Federation allows you to connect with other trusted servers to exchange the user directory." : "A föderáció lehetővé teszi a más megbízható kiszolgálókhoz kapcsolódást, hogy a kiszolgálók felhasználójegyzéket cserélhessenek.", - "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "A föderáció lehetővé teszi a más megbízható kiszolgálókhoz kapcsolódást, hogy a kiszolgálók felhasználójegyzéket cseréljenek. Például ennek segítségével lesznek automatikusan kiegészítve a külső felhasználók a föderált megosztásnál.", - "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing. It is not necessary to add a server as trusted server in order to create a federated share." : "A föderáció lehetővé teszi a más megbízható kiszolgálókhoz kapcsolódást, hogy a kiszolgálók felhasználójegyzéket cseréljenek. Például ennek segítségével lesznek automatikusan kiegészítve a külső felhasználók a föderált megosztásnál. Nem szükséges egy kiszolgálót megbízhatóként hozzáadni ahhoz, hogy föderált megosztást hozzon létre.", + "Federation allows you to connect with other trusted servers to exchange the account directory." : "A föderáció lehetővé teszi a más megbízható kiszolgálókhoz kapcsolódást, hogy a kiszolgálók fiókjegyzéket cserélhessenek.", + "Federation allows you to connect with other trusted servers to exchange the account directory. For example this will be used to auto-complete external accounts for federated sharing." : "A föderáció lehetővé teszi a más megbízható kiszolgálókhoz kapcsolódást, hogy a kiszolgálók fiókjegyzéket cseréljenek. Például ennek segítségével lesznek automatikusan kiegészítve a külső fiókok a föderált megosztásnál.", + "External documentation for Federated Cloud Sharing" : "Külső dokumentáció a föderált felhőmegosztáshoz", + "Federation allows you to connect with other trusted servers to exchange the account directory. For example this will be used to auto-complete external accounts for federated sharing. It is not necessary to add a server as trusted server in order to create a federated share." : "A föderáció lehetővé teszi a más megbízható kiszolgálókhoz kapcsolódást, hogy a kiszolgálók fiókjegyzéket cseréljenek. Például ennek segítségével lesznek automatikusan kiegészítve a külső fiókok a föderált megosztásnál. Nem szükséges egy kiszolgálót megbízhatóként hozzáadni ahhoz, hogy föderált megosztást hozzon létre.", + "Each server must validate the other. This process may require a few cron cycles." : "Minden kiszolgálónak ellenőriznie kell a másikat. Ez a folyat néhány cron ciklust vehet igénybe.", "+ Add trusted server" : "+ Megbízható kiszolgáló hozzáadása", "Trusted server" : "Megbízható kiszolgáló", "Add" : "Hozzáadás" diff --git a/apps/federation/l10n/ia.js b/apps/federation/l10n/ia.js index c4f1a3cf3f9..3ce43455dc5 100644 --- a/apps/federation/l10n/ia.js +++ b/apps/federation/l10n/ia.js @@ -7,7 +7,6 @@ OC.L10N.register( "Could not add server" : "Impossibile adder le servitor", "Trusted servers" : "Servitores fiduciari", "Federation" : "Federation", - "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "Le federation permitte te connecter con altere servitores fiduciari pro excambiar le directorio del usator. Per exemplo, iste attributo essera usate pro completar automaticamente usatores externe pro le compartimento federate.", "+ Add trusted server" : "+ Adder servitor fiduciari", "Trusted server" : "Servitor fiduciari", "Add" : "Adder" diff --git a/apps/federation/l10n/ia.json b/apps/federation/l10n/ia.json index 9f9dbe7ed32..19f8dc1732b 100644 --- a/apps/federation/l10n/ia.json +++ b/apps/federation/l10n/ia.json @@ -5,7 +5,6 @@ "Could not add server" : "Impossibile adder le servitor", "Trusted servers" : "Servitores fiduciari", "Federation" : "Federation", - "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "Le federation permitte te connecter con altere servitores fiduciari pro excambiar le directorio del usator. Per exemplo, iste attributo essera usate pro completar automaticamente usatores externe pro le compartimento federate.", "+ Add trusted server" : "+ Adder servitor fiduciari", "Trusted server" : "Servitor fiduciari", "Add" : "Adder" diff --git a/apps/federation/l10n/id.js b/apps/federation/l10n/id.js index ea2f6b09418..1b9c6a1071e 100644 --- a/apps/federation/l10n/id.js +++ b/apps/federation/l10n/id.js @@ -7,7 +7,6 @@ OC.L10N.register( "Could not add server" : "Tidak dapat menambahkan server", "Trusted servers" : "Server terpercaya", "Federation" : "Federasi", - "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "Federasi memungkinkan Anda untuk terhubung dengan server lainnya yang terpercaya untuk menukar direktori pengguna. Contohnya, ini akan digunakan untuk pengisian-otomatis untuk pengguna eksternal untuk pembagian terfederasi.", "+ Add trusted server" : "+ Tambah server terpercaya", "Trusted server" : "Server terpercaya", "Add" : "Tambah" diff --git a/apps/federation/l10n/id.json b/apps/federation/l10n/id.json index 297fb460114..49154b367e1 100644 --- a/apps/federation/l10n/id.json +++ b/apps/federation/l10n/id.json @@ -5,7 +5,6 @@ "Could not add server" : "Tidak dapat menambahkan server", "Trusted servers" : "Server terpercaya", "Federation" : "Federasi", - "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "Federasi memungkinkan Anda untuk terhubung dengan server lainnya yang terpercaya untuk menukar direktori pengguna. Contohnya, ini akan digunakan untuk pengisian-otomatis untuk pengguna eksternal untuk pembagian terfederasi.", "+ Add trusted server" : "+ Tambah server terpercaya", "Trusted server" : "Server terpercaya", "Add" : "Tambah" diff --git a/apps/federation/l10n/is.js b/apps/federation/l10n/is.js index 0d82d95ab22..9e8cedcf9cc 100644 --- a/apps/federation/l10n/is.js +++ b/apps/federation/l10n/is.js @@ -2,14 +2,18 @@ OC.L10N.register( "federation", { "Added to the list of trusted servers" : "Bætt á lista yfir treysta þjóna", + "No server found with ID: %s" : "Enginn þjónn fannst með auðkennið: %s", + "Could not remove server" : "Gat ekki fjarlægt netþjón", "Server is already in the list of trusted servers." : "Þjónninn er nú þegar á listanum yfir treysta þjóna.", "No server to federate with found" : "Enginn þjónn sem hæfur er til skýjasambands fannst", "Could not add server" : "Gat ekki bætt við þjóni", "Trusted servers" : "Treystir þjónar", "Federation" : "Deilt milli þjóna", - "Federation allows you to connect with other trusted servers to exchange the user directory." : "Þjónasamband (federation) gerir þér kleift að tengjast öðrum treystum skýjum til að skiptast á notendaskrám.", - "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "Þjónasamband (federation) gerir þér kleift að tengjast öðrum treystum skýjum til að skiptast á notendaskrám. Þetta er til dæmis notað til að sjálfklára nöfn ytri notenda við deilingu sambandssameigna.", - "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing. It is not necessary to add a server as trusted server in order to create a federated share." : "Þjónasamband (federation) gerir þér kleift að tengjast öðrum treystum skýjum til að skiptast á notendaskrám. Þetta er til dæmis notað til að sjálfklára nöfn ytri notenda við deilingu sambandssameigna. Ekki er nauðsynlegt að bæta netþjóni við sem treystum netþjóni til að útbúa sambandssameign (federated share).", + "Federation allows you to connect with other trusted servers to exchange the account directory." : "Þjónasamband (federation) gerir þér kleift að tengjast öðrum treystum skýjum til að skiptast á aðgangaskrám.", + "Federation allows you to connect with other trusted servers to exchange the account directory. For example this will be used to auto-complete external accounts for federated sharing." : "Þjónasamband (federation) gerir þér kleift að tengjast öðrum treystum skýjum til að skiptast á aðgangaskrám. Þetta er til dæmis notað til að sjálfklára nöfn ytri notendaaðganga við deilingu sambandssameigna.", + "External documentation for Federated Cloud Sharing" : "Utanaðkomandi leiðbeiningar fyrir skýjasambandsdeilingu (Federated Cloud Sharing)", + "Federation allows you to connect with other trusted servers to exchange the account directory. For example this will be used to auto-complete external accounts for federated sharing. It is not necessary to add a server as trusted server in order to create a federated share." : "Þjónasamband (federation) gerir þér kleift að tengjast öðrum treystum skýjum til að skiptast á aðgangaskrám. Þetta er til dæmis notað til að sjálfklára nöfn ytri notendaaðganga við deilingu sambandssameigna. Ekki er nauðsynlegt að bæta netþjóni við sem treystum netþjóni til að útbúa sambandssameign (federated share).", + "Each server must validate the other. This process may require a few cron cycles." : "Hver þjónn þarf að sanngilda hina. Þetta gæti krafist nokkurra umferða cron-verka.", "+ Add trusted server" : "+ Bæta við treystum þjóni", "Trusted server" : "Treystur þjónn", "Add" : "Bæta við" diff --git a/apps/federation/l10n/is.json b/apps/federation/l10n/is.json index 7a5b2ecc224..185d287f410 100644 --- a/apps/federation/l10n/is.json +++ b/apps/federation/l10n/is.json @@ -1,13 +1,17 @@ { "translations": { "Added to the list of trusted servers" : "Bætt á lista yfir treysta þjóna", + "No server found with ID: %s" : "Enginn þjónn fannst með auðkennið: %s", + "Could not remove server" : "Gat ekki fjarlægt netþjón", "Server is already in the list of trusted servers." : "Þjónninn er nú þegar á listanum yfir treysta þjóna.", "No server to federate with found" : "Enginn þjónn sem hæfur er til skýjasambands fannst", "Could not add server" : "Gat ekki bætt við þjóni", "Trusted servers" : "Treystir þjónar", "Federation" : "Deilt milli þjóna", - "Federation allows you to connect with other trusted servers to exchange the user directory." : "Þjónasamband (federation) gerir þér kleift að tengjast öðrum treystum skýjum til að skiptast á notendaskrám.", - "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "Þjónasamband (federation) gerir þér kleift að tengjast öðrum treystum skýjum til að skiptast á notendaskrám. Þetta er til dæmis notað til að sjálfklára nöfn ytri notenda við deilingu sambandssameigna.", - "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing. It is not necessary to add a server as trusted server in order to create a federated share." : "Þjónasamband (federation) gerir þér kleift að tengjast öðrum treystum skýjum til að skiptast á notendaskrám. Þetta er til dæmis notað til að sjálfklára nöfn ytri notenda við deilingu sambandssameigna. Ekki er nauðsynlegt að bæta netþjóni við sem treystum netþjóni til að útbúa sambandssameign (federated share).", + "Federation allows you to connect with other trusted servers to exchange the account directory." : "Þjónasamband (federation) gerir þér kleift að tengjast öðrum treystum skýjum til að skiptast á aðgangaskrám.", + "Federation allows you to connect with other trusted servers to exchange the account directory. For example this will be used to auto-complete external accounts for federated sharing." : "Þjónasamband (federation) gerir þér kleift að tengjast öðrum treystum skýjum til að skiptast á aðgangaskrám. Þetta er til dæmis notað til að sjálfklára nöfn ytri notendaaðganga við deilingu sambandssameigna.", + "External documentation for Federated Cloud Sharing" : "Utanaðkomandi leiðbeiningar fyrir skýjasambandsdeilingu (Federated Cloud Sharing)", + "Federation allows you to connect with other trusted servers to exchange the account directory. For example this will be used to auto-complete external accounts for federated sharing. It is not necessary to add a server as trusted server in order to create a federated share." : "Þjónasamband (federation) gerir þér kleift að tengjast öðrum treystum skýjum til að skiptast á aðgangaskrám. Þetta er til dæmis notað til að sjálfklára nöfn ytri notendaaðganga við deilingu sambandssameigna. Ekki er nauðsynlegt að bæta netþjóni við sem treystum netþjóni til að útbúa sambandssameign (federated share).", + "Each server must validate the other. This process may require a few cron cycles." : "Hver þjónn þarf að sanngilda hina. Þetta gæti krafist nokkurra umferða cron-verka.", "+ Add trusted server" : "+ Bæta við treystum þjóni", "Trusted server" : "Treystur þjónn", "Add" : "Bæta við" diff --git a/apps/federation/l10n/it.js b/apps/federation/l10n/it.js index ae16ec23e54..496caa51883 100644 --- a/apps/federation/l10n/it.js +++ b/apps/federation/l10n/it.js @@ -2,16 +2,20 @@ OC.L10N.register( "federation", { "Added to the list of trusted servers" : "Aggiunto all'elenco dei server affidabili", + "No server found with ID: %s" : "Nessun server trovato con il seguete ID: %s", + "Could not remove server" : "Impossibile rimuovere il server", "Server is already in the list of trusted servers." : "Il server è già nell'elenco dei server affidabili.", "No server to federate with found" : "Non ho trovato alcun server per la federazione", "Could not add server" : "Impossibile aggiungere il server", "Trusted servers" : "Server affidabili", "Federation" : "Federazione", - "Federation allows you to connect with other trusted servers to exchange the user directory." : "La federazione consente di connettersi ad altri server affidabili per scambiare la cartella utente.", - "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "La federazione consente di connettersi ad altri server affidabili per accedere alla cartella utente. Ad esempio, può essere utilizzata per il completamento automatico di utenti esterni per la condivisione federata.", - "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing. It is not necessary to add a server as trusted server in order to create a federated share." : "La federazione ti consente di connetterti ad altri server affidabili per accedere alla cartella utente. Ad esempio, può essere utilizzata per il completamento automatico di utenti esterni per la condivisione federata. Non è necessario aggiungere un server come affidabile per creare una condivisione federata.", + "Federation allows you to connect with other trusted servers to exchange the account directory." : "La federazione consente di connettersi ad altri server attendibili per scambiare la directory degli account.", + "Federation allows you to connect with other trusted servers to exchange the account directory. For example this will be used to auto-complete external accounts for federated sharing." : "La federazione consente di connettersi ad altri server attendibili per scambiare la directory degli account. Ad esempio, questo verrà utilizzato per completare automaticamente gli account esterni per la condivisione federata.", + "External documentation for Federated Cloud Sharing" : "Documentazione esterna per la Condivisione Federata", + "Federation allows you to connect with other trusted servers to exchange the account directory. For example this will be used to auto-complete external accounts for federated sharing. It is not necessary to add a server as trusted server in order to create a federated share." : "La federazione consente di connettersi ad altri server attendibili per scambiare la directory degli account. Ad esempio, questo verrà utilizzato per completare automaticamente gli account esterni per la condivisione federata. Non è necessario aggiungere un server come server attendibile per creare una condivisione federata.", + "Each server must validate the other. This process may require a few cron cycles." : "Ogni server deve validare gli altri. Questa operazione può richiedere qualche ciclo cron.", "+ Add trusted server" : "+ Aggiungi server affidabile", "Trusted server" : "Server affidabile", "Add" : "Aggiungi" }, -"nplurals=2; plural=(n != 1);"); +"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); diff --git a/apps/federation/l10n/it.json b/apps/federation/l10n/it.json index 825ee3a24dd..be2f780b633 100644 --- a/apps/federation/l10n/it.json +++ b/apps/federation/l10n/it.json @@ -1,15 +1,19 @@ { "translations": { "Added to the list of trusted servers" : "Aggiunto all'elenco dei server affidabili", + "No server found with ID: %s" : "Nessun server trovato con il seguete ID: %s", + "Could not remove server" : "Impossibile rimuovere il server", "Server is already in the list of trusted servers." : "Il server è già nell'elenco dei server affidabili.", "No server to federate with found" : "Non ho trovato alcun server per la federazione", "Could not add server" : "Impossibile aggiungere il server", "Trusted servers" : "Server affidabili", "Federation" : "Federazione", - "Federation allows you to connect with other trusted servers to exchange the user directory." : "La federazione consente di connettersi ad altri server affidabili per scambiare la cartella utente.", - "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "La federazione consente di connettersi ad altri server affidabili per accedere alla cartella utente. Ad esempio, può essere utilizzata per il completamento automatico di utenti esterni per la condivisione federata.", - "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing. It is not necessary to add a server as trusted server in order to create a federated share." : "La federazione ti consente di connetterti ad altri server affidabili per accedere alla cartella utente. Ad esempio, può essere utilizzata per il completamento automatico di utenti esterni per la condivisione federata. Non è necessario aggiungere un server come affidabile per creare una condivisione federata.", + "Federation allows you to connect with other trusted servers to exchange the account directory." : "La federazione consente di connettersi ad altri server attendibili per scambiare la directory degli account.", + "Federation allows you to connect with other trusted servers to exchange the account directory. For example this will be used to auto-complete external accounts for federated sharing." : "La federazione consente di connettersi ad altri server attendibili per scambiare la directory degli account. Ad esempio, questo verrà utilizzato per completare automaticamente gli account esterni per la condivisione federata.", + "External documentation for Federated Cloud Sharing" : "Documentazione esterna per la Condivisione Federata", + "Federation allows you to connect with other trusted servers to exchange the account directory. For example this will be used to auto-complete external accounts for federated sharing. It is not necessary to add a server as trusted server in order to create a federated share." : "La federazione consente di connettersi ad altri server attendibili per scambiare la directory degli account. Ad esempio, questo verrà utilizzato per completare automaticamente gli account esterni per la condivisione federata. Non è necessario aggiungere un server come server attendibile per creare una condivisione federata.", + "Each server must validate the other. This process may require a few cron cycles." : "Ogni server deve validare gli altri. Questa operazione può richiedere qualche ciclo cron.", "+ Add trusted server" : "+ Aggiungi server affidabile", "Trusted server" : "Server affidabile", "Add" : "Aggiungi" -},"pluralForm" :"nplurals=2; plural=(n != 1);" +},"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" }
\ No newline at end of file diff --git a/apps/federation/l10n/ja.js b/apps/federation/l10n/ja.js index 50340b670c6..c292c8ce531 100644 --- a/apps/federation/l10n/ja.js +++ b/apps/federation/l10n/ja.js @@ -2,14 +2,18 @@ OC.L10N.register( "federation", { "Added to the list of trusted servers" : "信頼済サーバーとしてリストに登録済", + "No server found with ID: %s" : "IDを持つサーバーが見つかりません: %s", + "Could not remove server" : "サーバーを削除できませんでした", "Server is already in the list of trusted servers." : "信頼済サーバーとしてすでに登録されています。", "No server to federate with found" : "Nextcloud連携サーバーはありません。", "Could not add server" : "サーバーを追加できませんでした", "Trusted servers" : "信頼済サーバー", "Federation" : "連携", - "Federation allows you to connect with other trusted servers to exchange the user directory." : "フェデレーションを使用すると、信頼できる他のサーバーと接続してユーザーディレクトリを交換できます。", - "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "連携では他の信頼済サーバーとユーザーリストをやり取りすること許可します。例えば、連携共有時で他のサーバーのユーザーのIDを自動補完します。", - "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing. It is not necessary to add a server as trusted server in order to create a federated share." : "Nextcloud連携では、他の信頼できるサーバーと接続して、ユーザーリストをやりとりすることができます。例えば、これにより他のサーバーのユーザーが連携共有の時に自動的に補完されます。フェデレーション共有を行うときには、信頼できるサーバーとして追加する必要はありません。", + "Federation allows you to connect with other trusted servers to exchange the account directory." : "フェデレーションは、信頼できる他のサーバーと接続し、アカウントリストを交換することを可能にします。", + "Federation allows you to connect with other trusted servers to exchange the account directory. For example this will be used to auto-complete external accounts for federated sharing." : "フェデレーションでは他の信頼済サーバーとアカウントリストをやり取りすること許可します。例えば、フェデレーション共有時に他のサーバーのアカウントIDを自動補完します。", + "External documentation for Federated Cloud Sharing" : "Federated Cloud Sharingの外部ドキュメント", + "Federation allows you to connect with other trusted servers to exchange the account directory. For example this will be used to auto-complete external accounts for federated sharing. It is not necessary to add a server as trusted server in order to create a federated share." : "Nextcloud連携では、他の信頼できるサーバーと接続して、アカウントリストをやりとりすることができます。例えば、これにより他のサーバーのアカウントがフェデレーション共有の時に自動的に補完されます。フェデレーション共有を行うときには、信頼できるサーバーとして追加する必要はありません。", + "Each server must validate the other. This process may require a few cron cycles." : "各サーバーは他のサーバーを検証しなければならない。このプロセスには数サイクルのcronが必要です。", "+ Add trusted server" : "+ 信頼済サーバーに追加", "Trusted server" : "信頼済サーバー", "Add" : "追加" diff --git a/apps/federation/l10n/ja.json b/apps/federation/l10n/ja.json index 9064dc39bf4..e890f99daa8 100644 --- a/apps/federation/l10n/ja.json +++ b/apps/federation/l10n/ja.json @@ -1,13 +1,17 @@ { "translations": { "Added to the list of trusted servers" : "信頼済サーバーとしてリストに登録済", + "No server found with ID: %s" : "IDを持つサーバーが見つかりません: %s", + "Could not remove server" : "サーバーを削除できませんでした", "Server is already in the list of trusted servers." : "信頼済サーバーとしてすでに登録されています。", "No server to federate with found" : "Nextcloud連携サーバーはありません。", "Could not add server" : "サーバーを追加できませんでした", "Trusted servers" : "信頼済サーバー", "Federation" : "連携", - "Federation allows you to connect with other trusted servers to exchange the user directory." : "フェデレーションを使用すると、信頼できる他のサーバーと接続してユーザーディレクトリを交換できます。", - "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "連携では他の信頼済サーバーとユーザーリストをやり取りすること許可します。例えば、連携共有時で他のサーバーのユーザーのIDを自動補完します。", - "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing. It is not necessary to add a server as trusted server in order to create a federated share." : "Nextcloud連携では、他の信頼できるサーバーと接続して、ユーザーリストをやりとりすることができます。例えば、これにより他のサーバーのユーザーが連携共有の時に自動的に補完されます。フェデレーション共有を行うときには、信頼できるサーバーとして追加する必要はありません。", + "Federation allows you to connect with other trusted servers to exchange the account directory." : "フェデレーションは、信頼できる他のサーバーと接続し、アカウントリストを交換することを可能にします。", + "Federation allows you to connect with other trusted servers to exchange the account directory. For example this will be used to auto-complete external accounts for federated sharing." : "フェデレーションでは他の信頼済サーバーとアカウントリストをやり取りすること許可します。例えば、フェデレーション共有時に他のサーバーのアカウントIDを自動補完します。", + "External documentation for Federated Cloud Sharing" : "Federated Cloud Sharingの外部ドキュメント", + "Federation allows you to connect with other trusted servers to exchange the account directory. For example this will be used to auto-complete external accounts for federated sharing. It is not necessary to add a server as trusted server in order to create a federated share." : "Nextcloud連携では、他の信頼できるサーバーと接続して、アカウントリストをやりとりすることができます。例えば、これにより他のサーバーのアカウントがフェデレーション共有の時に自動的に補完されます。フェデレーション共有を行うときには、信頼できるサーバーとして追加する必要はありません。", + "Each server must validate the other. This process may require a few cron cycles." : "各サーバーは他のサーバーを検証しなければならない。このプロセスには数サイクルのcronが必要です。", "+ Add trusted server" : "+ 信頼済サーバーに追加", "Trusted server" : "信頼済サーバー", "Add" : "追加" diff --git a/apps/federation/l10n/ka.js b/apps/federation/l10n/ka.js new file mode 100644 index 00000000000..23f2d17e924 --- /dev/null +++ b/apps/federation/l10n/ka.js @@ -0,0 +1,14 @@ +OC.L10N.register( + "federation", + { + "Added to the list of trusted servers" : "Added to the list of trusted servers", + "Server is already in the list of trusted servers." : "Server is already in the list of trusted servers.", + "No server to federate with found" : "No server to federate with found", + "Could not add server" : "Could not add server", + "Trusted servers" : "Trusted servers", + "Federation" : "Federation", + "+ Add trusted server" : "+ Add trusted server", + "Trusted server" : "Trusted server", + "Add" : "Add" +}, +"nplurals=2; plural=(n!=1);"); diff --git a/apps/federation/l10n/ka.json b/apps/federation/l10n/ka.json new file mode 100644 index 00000000000..44363176fef --- /dev/null +++ b/apps/federation/l10n/ka.json @@ -0,0 +1,12 @@ +{ "translations": { + "Added to the list of trusted servers" : "Added to the list of trusted servers", + "Server is already in the list of trusted servers." : "Server is already in the list of trusted servers.", + "No server to federate with found" : "No server to federate with found", + "Could not add server" : "Could not add server", + "Trusted servers" : "Trusted servers", + "Federation" : "Federation", + "+ Add trusted server" : "+ Add trusted server", + "Trusted server" : "Trusted server", + "Add" : "Add" +},"pluralForm" :"nplurals=2; plural=(n!=1);" +}
\ No newline at end of file diff --git a/apps/federation/l10n/ka_GE.js b/apps/federation/l10n/ka_GE.js index 8ece86f6cbb..52a41211fe8 100644 --- a/apps/federation/l10n/ka_GE.js +++ b/apps/federation/l10n/ka_GE.js @@ -7,7 +7,6 @@ OC.L10N.register( "Could not add server" : "სერვერის დამატება ვერ მოხერხდა", "Trusted servers" : "სანდო სერვერები", "Federation" : "ფედერაცია", - "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "ფედერალიზაცია იძლევა საშუალებას დაუკავშირდეთ სხვა დაცულ სერვერებს და გაცვალოთ მომხმარებლის დირექტორია. მაგალითისთვის ეს გამოყენებულ იქნება, რომ მოხდეს ექსტერნალური მომხმარებლების ფედერალური გაზიარებისთვის ავტო-დასრულება.", "+ Add trusted server" : "+ სანდო სერვერის დამატება", "Trusted server" : "სანდო სერვერი", "Add" : "დამატება" diff --git a/apps/federation/l10n/ka_GE.json b/apps/federation/l10n/ka_GE.json index dc4422c073e..40e307ce59f 100644 --- a/apps/federation/l10n/ka_GE.json +++ b/apps/federation/l10n/ka_GE.json @@ -5,7 +5,6 @@ "Could not add server" : "სერვერის დამატება ვერ მოხერხდა", "Trusted servers" : "სანდო სერვერები", "Federation" : "ფედერაცია", - "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "ფედერალიზაცია იძლევა საშუალებას დაუკავშირდეთ სხვა დაცულ სერვერებს და გაცვალოთ მომხმარებლის დირექტორია. მაგალითისთვის ეს გამოყენებულ იქნება, რომ მოხდეს ექსტერნალური მომხმარებლების ფედერალური გაზიარებისთვის ავტო-დასრულება.", "+ Add trusted server" : "+ სანდო სერვერის დამატება", "Trusted server" : "სანდო სერვერი", "Add" : "დამატება" diff --git a/apps/federation/l10n/ko.js b/apps/federation/l10n/ko.js index cdc908645e0..f6f49d9b79c 100644 --- a/apps/federation/l10n/ko.js +++ b/apps/federation/l10n/ko.js @@ -7,8 +7,9 @@ OC.L10N.register( "Could not add server" : "서버를 추가할 수 없음", "Trusted servers" : "신뢰할 수 있는 서버", "Federation" : "연합", - "Federation allows you to connect with other trusted servers to exchange the user directory." : "서버 연합을 통해서 다른 신뢰할 수 있는 서버와 사용자 디렉터리를 교환할 수 있습니다.", - "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "서버 연합을 통해서 다른 신뢰할 수 있는 서버와 사용자 디렉터리를 교환할 수 있습니다. 이 기능의 사용 예시로 연합 공유 시 외부 사용자를 자동 완성하는 데 사용할 수 있습니다.", + "Federation allows you to connect with other trusted servers to exchange the account directory." : "서버 연합을 통해서 다른 신뢰할 수 있는 서버와 계정 디렉토리를 교환할 수 있습니다.", + "Federation allows you to connect with other trusted servers to exchange the account directory. For example this will be used to auto-complete external accounts for federated sharing." : "서버 연합을 통해서 다른 신뢰할 수 있는 서버와 계정 디렉토리를 교환할 수 있습니다. 예를 들어, 연합 공유 시 외부 계정을 자동 완성하는 데 사용할 수 있습니다.", + "Federation allows you to connect with other trusted servers to exchange the account directory. For example this will be used to auto-complete external accounts for federated sharing. It is not necessary to add a server as trusted server in order to create a federated share." : "서버 연합을 통해서 다른 신뢰할 수 있는 서버와 계정의 디렉토리를 교환할 수 있습니다. 예를 들어, 연합 공유시 외부 계정을 자동 완성하는 데에 사용될 수 있습니다. 연합 공유를 생성하기 위해 특정 서버를 신뢰할 수 있는 서버에 반드시 추가할 필요는 없습니다.", "+ Add trusted server" : "+ 신뢰할 수 있는 서버 추가", "Trusted server" : "신뢰할 수 있는 서버", "Add" : "추가" diff --git a/apps/federation/l10n/ko.json b/apps/federation/l10n/ko.json index 12b26566120..9f09dfb80b9 100644 --- a/apps/federation/l10n/ko.json +++ b/apps/federation/l10n/ko.json @@ -5,8 +5,9 @@ "Could not add server" : "서버를 추가할 수 없음", "Trusted servers" : "신뢰할 수 있는 서버", "Federation" : "연합", - "Federation allows you to connect with other trusted servers to exchange the user directory." : "서버 연합을 통해서 다른 신뢰할 수 있는 서버와 사용자 디렉터리를 교환할 수 있습니다.", - "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "서버 연합을 통해서 다른 신뢰할 수 있는 서버와 사용자 디렉터리를 교환할 수 있습니다. 이 기능의 사용 예시로 연합 공유 시 외부 사용자를 자동 완성하는 데 사용할 수 있습니다.", + "Federation allows you to connect with other trusted servers to exchange the account directory." : "서버 연합을 통해서 다른 신뢰할 수 있는 서버와 계정 디렉토리를 교환할 수 있습니다.", + "Federation allows you to connect with other trusted servers to exchange the account directory. For example this will be used to auto-complete external accounts for federated sharing." : "서버 연합을 통해서 다른 신뢰할 수 있는 서버와 계정 디렉토리를 교환할 수 있습니다. 예를 들어, 연합 공유 시 외부 계정을 자동 완성하는 데 사용할 수 있습니다.", + "Federation allows you to connect with other trusted servers to exchange the account directory. For example this will be used to auto-complete external accounts for federated sharing. It is not necessary to add a server as trusted server in order to create a federated share." : "서버 연합을 통해서 다른 신뢰할 수 있는 서버와 계정의 디렉토리를 교환할 수 있습니다. 예를 들어, 연합 공유시 외부 계정을 자동 완성하는 데에 사용될 수 있습니다. 연합 공유를 생성하기 위해 특정 서버를 신뢰할 수 있는 서버에 반드시 추가할 필요는 없습니다.", "+ Add trusted server" : "+ 신뢰할 수 있는 서버 추가", "Trusted server" : "신뢰할 수 있는 서버", "Add" : "추가" diff --git a/apps/federation/l10n/lb.js b/apps/federation/l10n/lb.js deleted file mode 100644 index df0f6d5d07a..00000000000 --- a/apps/federation/l10n/lb.js +++ /dev/null @@ -1,15 +0,0 @@ -OC.L10N.register( - "federation", - { - "Server added to the list of trusted ownClouds" : "De Server gouf op d'Lëscht vun den zouverlässegen ownClouds gesat.", - "Server is already in the list of trusted servers." : "De Server ass schonn op der Lëscht vun den zouverlässegen Serveren.", - "No ownCloud server found" : "Keen ownCloud Server fonnt", - "Could not add server" : "De Server konnt net derbäi gesat ginn", - "Federation" : "Federatioun", - "ownCloud Federation allows you to connect with other trusted ownClouds to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "D'ownCloud Federatioun erlaabt der fir dech mat aneren zouverlässegen ownClouds ze verbannen an d'Benotzer Verzeechnes auszetauschen. Zum Beispill gëtt dëst hei benotzt fir extern Benotzer automatesch fir federatiivt Deelen ze vervollstännegen.", - "Add server automatically once a federated share was created successfully" : "Setz de Server automatesch derbäi soubal e federativen Undeel erfollegräich erstallt gouf", - "Trusted ownCloud Servers" : "Zouverlässeg ownCloud Serveren", - "+ Add ownCloud server" : "+ ownCloud Server derbäi setzen", - "ownCloud Server" : "ownCloud Server" -}, -"nplurals=2; plural=(n != 1);"); diff --git a/apps/federation/l10n/lb.json b/apps/federation/l10n/lb.json deleted file mode 100644 index 03179a4b8ee..00000000000 --- a/apps/federation/l10n/lb.json +++ /dev/null @@ -1,13 +0,0 @@ -{ "translations": { - "Server added to the list of trusted ownClouds" : "De Server gouf op d'Lëscht vun den zouverlässegen ownClouds gesat.", - "Server is already in the list of trusted servers." : "De Server ass schonn op der Lëscht vun den zouverlässegen Serveren.", - "No ownCloud server found" : "Keen ownCloud Server fonnt", - "Could not add server" : "De Server konnt net derbäi gesat ginn", - "Federation" : "Federatioun", - "ownCloud Federation allows you to connect with other trusted ownClouds to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "D'ownCloud Federatioun erlaabt der fir dech mat aneren zouverlässegen ownClouds ze verbannen an d'Benotzer Verzeechnes auszetauschen. Zum Beispill gëtt dëst hei benotzt fir extern Benotzer automatesch fir federatiivt Deelen ze vervollstännegen.", - "Add server automatically once a federated share was created successfully" : "Setz de Server automatesch derbäi soubal e federativen Undeel erfollegräich erstallt gouf", - "Trusted ownCloud Servers" : "Zouverlässeg ownCloud Serveren", - "+ Add ownCloud server" : "+ ownCloud Server derbäi setzen", - "ownCloud Server" : "ownCloud Server" -},"pluralForm" :"nplurals=2; plural=(n != 1);" -}
\ No newline at end of file diff --git a/apps/federation/l10n/lt_LT.js b/apps/federation/l10n/lt_LT.js index 350dd1ef65b..8efd7d1b04e 100644 --- a/apps/federation/l10n/lt_LT.js +++ b/apps/federation/l10n/lt_LT.js @@ -2,14 +2,13 @@ OC.L10N.register( "federation", { "Added to the list of trusted servers" : "Pridėtas į patikimų serverių sąrašą", + "No server found with ID: %s" : "Nerasta jokio serverio, kurio ID: %s", + "Could not remove server" : "Nepavyko pašalinti serverio", "Server is already in the list of trusted servers." : "Serveris jau yra patikimų serverių sąraše.", "No server to federate with found" : "Nerasta jokio serverio, su kuriuo jungtis į federaciją", "Could not add server" : "Nepavyko pridėti serverio", "Trusted servers" : "Patikimi serveriai", "Federation" : "Federacija", - "Federation allows you to connect with other trusted servers to exchange the user directory." : "Federacija jums leidžia prisijungti prie kitų patikimų serverių, siekiant keistis naudotojo katalogu.", - "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "Federacija leidžia jums prisijungti prie kitų patikimų serverių, siekiant keistis naudotojo katalogu. Pavyzdžiui, tai bus naudojama, kad būtų automatiškai užbaigti išoriniai federacinio bendrinimo naudotojų vardai.", - "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing. It is not necessary to add a server as trusted server in order to create a federated share." : "Gederacijos paslauga suteikia galimybę prisijungti prie kitų patikimų serverių, kad būtų galima keistis naudotojų katalogu. Pavyzdžiui, tai bus naudojama, kad būtų automatiškai užbaigti išoriniai federacinio bendrinimo naudotojų vardai.", "+ Add trusted server" : "+ Pridėti patikimą serverį", "Trusted server" : "Patikimas serveris", "Add" : "Pridėti" diff --git a/apps/federation/l10n/lt_LT.json b/apps/federation/l10n/lt_LT.json index 1443b59ddbe..63c0ed5bab5 100644 --- a/apps/federation/l10n/lt_LT.json +++ b/apps/federation/l10n/lt_LT.json @@ -1,13 +1,12 @@ { "translations": { "Added to the list of trusted servers" : "Pridėtas į patikimų serverių sąrašą", + "No server found with ID: %s" : "Nerasta jokio serverio, kurio ID: %s", + "Could not remove server" : "Nepavyko pašalinti serverio", "Server is already in the list of trusted servers." : "Serveris jau yra patikimų serverių sąraše.", "No server to federate with found" : "Nerasta jokio serverio, su kuriuo jungtis į federaciją", "Could not add server" : "Nepavyko pridėti serverio", "Trusted servers" : "Patikimi serveriai", "Federation" : "Federacija", - "Federation allows you to connect with other trusted servers to exchange the user directory." : "Federacija jums leidžia prisijungti prie kitų patikimų serverių, siekiant keistis naudotojo katalogu.", - "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "Federacija leidžia jums prisijungti prie kitų patikimų serverių, siekiant keistis naudotojo katalogu. Pavyzdžiui, tai bus naudojama, kad būtų automatiškai užbaigti išoriniai federacinio bendrinimo naudotojų vardai.", - "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing. It is not necessary to add a server as trusted server in order to create a federated share." : "Gederacijos paslauga suteikia galimybę prisijungti prie kitų patikimų serverių, kad būtų galima keistis naudotojų katalogu. Pavyzdžiui, tai bus naudojama, kad būtų automatiškai užbaigti išoriniai federacinio bendrinimo naudotojų vardai.", "+ Add trusted server" : "+ Pridėti patikimą serverį", "Trusted server" : "Patikimas serveris", "Add" : "Pridėti" diff --git a/apps/federation/l10n/lv.js b/apps/federation/l10n/lv.js index ec51328181e..1eab9f26ad7 100644 --- a/apps/federation/l10n/lv.js +++ b/apps/federation/l10n/lv.js @@ -7,8 +7,6 @@ OC.L10N.register( "Could not add server" : "Nevarēja pievienot serveri", "Trusted servers" : "Uzticami serveri", "Federation" : "Federācija", - "Federation allows you to connect with other trusted servers to exchange the user directory." : "Federācija ļauj jums sazināties ar citiem uzticamiem serveriem, lai apmainītos ar lietotāju direktoriju.", - "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "Federācija ļauj savienot ar citiem uzticamiem serveriem ar Exchange lietotāja direktoriju. Piemēram, tas tiks izmantots, lai automātiski pieslēgtu ārējiem lietotājiem integrēto koplietošanu.", "+ Add trusted server" : "+ pievietot uzticamiem serveriem", "Trusted server" : "Uzticams serveris", "Add" : "Pievienot" diff --git a/apps/federation/l10n/lv.json b/apps/federation/l10n/lv.json index 5d01129cc1c..9a05e6903a2 100644 --- a/apps/federation/l10n/lv.json +++ b/apps/federation/l10n/lv.json @@ -5,8 +5,6 @@ "Could not add server" : "Nevarēja pievienot serveri", "Trusted servers" : "Uzticami serveri", "Federation" : "Federācija", - "Federation allows you to connect with other trusted servers to exchange the user directory." : "Federācija ļauj jums sazināties ar citiem uzticamiem serveriem, lai apmainītos ar lietotāju direktoriju.", - "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "Federācija ļauj savienot ar citiem uzticamiem serveriem ar Exchange lietotāja direktoriju. Piemēram, tas tiks izmantots, lai automātiski pieslēgtu ārējiem lietotājiem integrēto koplietošanu.", "+ Add trusted server" : "+ pievietot uzticamiem serveriem", "Trusted server" : "Uzticams serveris", "Add" : "Pievienot" diff --git a/apps/federation/l10n/mk.js b/apps/federation/l10n/mk.js index 20892afa1f5..f193b2ce08a 100644 --- a/apps/federation/l10n/mk.js +++ b/apps/federation/l10n/mk.js @@ -7,9 +7,6 @@ OC.L10N.register( "Could not add server" : "Неможе да се додаде серверот", "Trusted servers" : "Доверливи сервери", "Federation" : "Федерација", - "Federation allows you to connect with other trusted servers to exchange the user directory." : "Федерацијата ви овозможува да се поврзете со други доверливи сервери и размена на корисничките директориуми.", - "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "Федерацијата ви овозможува да се поврзете со други доверливи сервери и размена на корисничките директориуми. Како пример ова ќе биде искористено и како автоматско комплетирање на корисничкото име при споделување во федерацијата.", - "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing. It is not necessary to add a server as trusted server in order to create a federated share." : "Федерацијата ви овозможува да се поврзете со други доверливи сервери и размена на корисничките директориуми. Како пример ова ќе биде искористено и како автоматско комплетирање на корисничкото име при споделување во федерацијата. Не е потребно да се додаде како веродостоен сервер за да се креира федерално споделување.", "+ Add trusted server" : "+ Додади доверлив сервер", "Trusted server" : "Доверлив сервер", "Add" : "Додади" diff --git a/apps/federation/l10n/mk.json b/apps/federation/l10n/mk.json index a95783ac58d..0efc8eedc98 100644 --- a/apps/federation/l10n/mk.json +++ b/apps/federation/l10n/mk.json @@ -5,9 +5,6 @@ "Could not add server" : "Неможе да се додаде серверот", "Trusted servers" : "Доверливи сервери", "Federation" : "Федерација", - "Federation allows you to connect with other trusted servers to exchange the user directory." : "Федерацијата ви овозможува да се поврзете со други доверливи сервери и размена на корисничките директориуми.", - "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "Федерацијата ви овозможува да се поврзете со други доверливи сервери и размена на корисничките директориуми. Како пример ова ќе биде искористено и како автоматско комплетирање на корисничкото име при споделување во федерацијата.", - "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing. It is not necessary to add a server as trusted server in order to create a federated share." : "Федерацијата ви овозможува да се поврзете со други доверливи сервери и размена на корисничките директориуми. Како пример ова ќе биде искористено и како автоматско комплетирање на корисничкото име при споделување во федерацијата. Не е потребно да се додаде како веродостоен сервер за да се креира федерално споделување.", "+ Add trusted server" : "+ Додади доверлив сервер", "Trusted server" : "Доверлив сервер", "Add" : "Додади" diff --git a/apps/federation/l10n/mn.js b/apps/federation/l10n/mn.js index c18fdf1b669..f342839fc78 100644 --- a/apps/federation/l10n/mn.js +++ b/apps/federation/l10n/mn.js @@ -7,7 +7,6 @@ OC.L10N.register( "Could not add server" : " сервер нэмж чадаагүй ", "Trusted servers" : "найдвартай сервер", "Federation" : "холбоо", - "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "Холбоо нь хэрэглэгчийн санг солилцох бусад найдвартай серверүүд уруу холбогдох боломжийг олгоно. Жишээ нь үүнийг холбооны хуваарилалт авто бүрэн гадны хэрэглэгчдэд ашиглаж болно", "+ Add trusted server" : "+ найдвартай сервер нэмэх", "Trusted server" : "найдвартай сервер", "Add" : "нэмэх" diff --git a/apps/federation/l10n/mn.json b/apps/federation/l10n/mn.json index 9163b0b2b91..1b2131e55e1 100644 --- a/apps/federation/l10n/mn.json +++ b/apps/federation/l10n/mn.json @@ -5,7 +5,6 @@ "Could not add server" : " сервер нэмж чадаагүй ", "Trusted servers" : "найдвартай сервер", "Federation" : "холбоо", - "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "Холбоо нь хэрэглэгчийн санг солилцох бусад найдвартай серверүүд уруу холбогдох боломжийг олгоно. Жишээ нь үүнийг холбооны хуваарилалт авто бүрэн гадны хэрэглэгчдэд ашиглаж болно", "+ Add trusted server" : "+ найдвартай сервер нэмэх", "Trusted server" : "найдвартай сервер", "Add" : "нэмэх" diff --git a/apps/federation/l10n/nb.js b/apps/federation/l10n/nb.js index 6abfca61db7..f918b42b539 100644 --- a/apps/federation/l10n/nb.js +++ b/apps/federation/l10n/nb.js @@ -2,14 +2,16 @@ OC.L10N.register( "federation", { "Added to the list of trusted servers" : "Lagt til i listen over klarerte servere", + "No server found with ID: %s" : "Kunne ikke finne tjener med ID: %s", + "Could not remove server" : "Kunne ikke fjerne tjener", "Server is already in the list of trusted servers." : "Serveren er allerede i listen av klarerte servere.", "No server to federate with found" : "Ingen server å sammenknytte med ble funnet", "Could not add server" : "Kunne ikke legge til server", "Trusted servers" : "Klarerte servere", "Federation" : "Sammenknytting", - "Federation allows you to connect with other trusted servers to exchange the user directory." : "Sammenknytting lar deg tilkoble andre servere du er stoler på for å utveksle brukerinformasjon.", - "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "Sammenknytting tillater deg å koble sammen andre betrodde servere for utveksling av brukermapper. For eksempel vil det bli brukt for autofullføring av eksterne brukere for sammenknyttet deling.", - "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing. It is not necessary to add a server as trusted server in order to create a federated share." : "Sammenknytting tillater deg å koble sammen andre betrodde servere for utveksling av brukermapper. For eksempel vil det bli brukt for autofullføring av eksterne brukere for sammenknyttet deling. Det er ikke nødvendig å legge til en server som pålitelig server for å opprette en forent deling.", + "Federation allows you to connect with other trusted servers to exchange the account directory." : "Sammenknytting lar deg koble til andre klarerte servere for å utveksle kontokatalogen.", + "Federation allows you to connect with other trusted servers to exchange the account directory. For example this will be used to auto-complete external accounts for federated sharing." : "Sammenknytting lar deg koble til andre klarerte servere for å utveksle kontokatalogen. Dette brukes for eksempel til å automatisk fullføre eksterne kontoer for deling i organisasjonsnettverk.", + "Federation allows you to connect with other trusted servers to exchange the account directory. For example this will be used to auto-complete external accounts for federated sharing. It is not necessary to add a server as trusted server in order to create a federated share." : "Sammenknytting lar deg koble til andre klarerte servere for å utveksle kontokatalogen. Dette brukes for eksempel til å automatisk fullføre eksterne kontoer for deling i organisasjonsnettverk. Det er ikke nødvendig å legge til en server som klarert server for å opprette en delt delt ressurs i forbund.", "+ Add trusted server" : "+ Legg til klarert server", "Trusted server" : "Klarert server", "Add" : "Legg til" diff --git a/apps/federation/l10n/nb.json b/apps/federation/l10n/nb.json index e301b002026..672035bdccc 100644 --- a/apps/federation/l10n/nb.json +++ b/apps/federation/l10n/nb.json @@ -1,13 +1,15 @@ { "translations": { "Added to the list of trusted servers" : "Lagt til i listen over klarerte servere", + "No server found with ID: %s" : "Kunne ikke finne tjener med ID: %s", + "Could not remove server" : "Kunne ikke fjerne tjener", "Server is already in the list of trusted servers." : "Serveren er allerede i listen av klarerte servere.", "No server to federate with found" : "Ingen server å sammenknytte med ble funnet", "Could not add server" : "Kunne ikke legge til server", "Trusted servers" : "Klarerte servere", "Federation" : "Sammenknytting", - "Federation allows you to connect with other trusted servers to exchange the user directory." : "Sammenknytting lar deg tilkoble andre servere du er stoler på for å utveksle brukerinformasjon.", - "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "Sammenknytting tillater deg å koble sammen andre betrodde servere for utveksling av brukermapper. For eksempel vil det bli brukt for autofullføring av eksterne brukere for sammenknyttet deling.", - "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing. It is not necessary to add a server as trusted server in order to create a federated share." : "Sammenknytting tillater deg å koble sammen andre betrodde servere for utveksling av brukermapper. For eksempel vil det bli brukt for autofullføring av eksterne brukere for sammenknyttet deling. Det er ikke nødvendig å legge til en server som pålitelig server for å opprette en forent deling.", + "Federation allows you to connect with other trusted servers to exchange the account directory." : "Sammenknytting lar deg koble til andre klarerte servere for å utveksle kontokatalogen.", + "Federation allows you to connect with other trusted servers to exchange the account directory. For example this will be used to auto-complete external accounts for federated sharing." : "Sammenknytting lar deg koble til andre klarerte servere for å utveksle kontokatalogen. Dette brukes for eksempel til å automatisk fullføre eksterne kontoer for deling i organisasjonsnettverk.", + "Federation allows you to connect with other trusted servers to exchange the account directory. For example this will be used to auto-complete external accounts for federated sharing. It is not necessary to add a server as trusted server in order to create a federated share." : "Sammenknytting lar deg koble til andre klarerte servere for å utveksle kontokatalogen. Dette brukes for eksempel til å automatisk fullføre eksterne kontoer for deling i organisasjonsnettverk. Det er ikke nødvendig å legge til en server som klarert server for å opprette en delt delt ressurs i forbund.", "+ Add trusted server" : "+ Legg til klarert server", "Trusted server" : "Klarert server", "Add" : "Legg til" diff --git a/apps/federation/l10n/nl.js b/apps/federation/l10n/nl.js index a333f911b21..4633804db82 100644 --- a/apps/federation/l10n/nl.js +++ b/apps/federation/l10n/nl.js @@ -2,14 +2,18 @@ OC.L10N.register( "federation", { "Added to the list of trusted servers" : "Toegevoegd aan de lijst met vertrouwde servers", + "No server found with ID: %s" : "Geen server gevonden met ID: %s", + "Could not remove server" : "Kon server niet verwijderen", "Server is already in the list of trusted servers." : "Server bestaat reeds in de lijst van vertrouwde servers.", "No server to federate with found" : "Geen server gevonden om mee te federeren", "Could not add server" : "Kon server niet toevoegen", "Trusted servers" : "Vertrouwde servers", "Federation" : "Federatie", - "Federation allows you to connect with other trusted servers to exchange the user directory." : "Federatie maakt het mogelijk om te verbinden met andere vertrouwde servers om de gebuikersadministratie te delen.", - "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "Federatie maakt het mogelijk om te verbinden met vertrouwde servers en de gebuikersadministratie te delen. Zo kun je automatisch externe gebruikers toevoegen voor federatief delen.", - "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing. It is not necessary to add a server as trusted server in order to create a federated share." : "Met Federatie kunt u verbinding maken met andere vertrouwde servers om de gebruikersdirectory uit te wisselen. Dit wordt bijvoorbeeld gebruikt om externe gebruikers automatisch aan te vullen voor federatief delen. Het is niet nodig om een server als vertrouwde server toe te voegen om een federatieve share te maken.", + "Federation allows you to connect with other trusted servers to exchange the account directory." : "Met Federatie kun je verbinding maken met andere vertrouwde servers om de accountmap uit te wisselen.", + "Federation allows you to connect with other trusted servers to exchange the account directory. For example this will be used to auto-complete external accounts for federated sharing." : "Federatie stelt je in staat om verbinding te maken met andere vertrouwde servers om de accountdirectory uit te wisselen. Dit zal bijvoorbeeld worden gebruikt om externe accounts automatisch aan te vullen voor gefedereerd delen.", + "External documentation for Federated Cloud Sharing" : "Externe documentatie voor Federated Cloud Sharing", + "Federation allows you to connect with other trusted servers to exchange the account directory. For example this will be used to auto-complete external accounts for federated sharing. It is not necessary to add a server as trusted server in order to create a federated share." : "Federatie stelt je in staat om verbinding te maken met andere vertrouwde servers om de accountdirectory uit te wisselen. Dit zal bijvoorbeeld worden gebruikt om externe accounts automatisch aan te vullen voor gefedereerd delen. Het is niet nodig om een server als vertrouwde server toe te voegen om een gefedereerde share te maken.", + "Each server must validate the other. This process may require a few cron cycles." : "Elke server moet de andere valideren. Dit proces kan enkele croncycli duren.", "+ Add trusted server" : "+ Toevoegen vertrouwde server", "Trusted server" : "Vertrouwde server", "Add" : "Toevoegen" diff --git a/apps/federation/l10n/nl.json b/apps/federation/l10n/nl.json index 711cb78e661..e217a0b03d3 100644 --- a/apps/federation/l10n/nl.json +++ b/apps/federation/l10n/nl.json @@ -1,13 +1,17 @@ { "translations": { "Added to the list of trusted servers" : "Toegevoegd aan de lijst met vertrouwde servers", + "No server found with ID: %s" : "Geen server gevonden met ID: %s", + "Could not remove server" : "Kon server niet verwijderen", "Server is already in the list of trusted servers." : "Server bestaat reeds in de lijst van vertrouwde servers.", "No server to federate with found" : "Geen server gevonden om mee te federeren", "Could not add server" : "Kon server niet toevoegen", "Trusted servers" : "Vertrouwde servers", "Federation" : "Federatie", - "Federation allows you to connect with other trusted servers to exchange the user directory." : "Federatie maakt het mogelijk om te verbinden met andere vertrouwde servers om de gebuikersadministratie te delen.", - "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "Federatie maakt het mogelijk om te verbinden met vertrouwde servers en de gebuikersadministratie te delen. Zo kun je automatisch externe gebruikers toevoegen voor federatief delen.", - "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing. It is not necessary to add a server as trusted server in order to create a federated share." : "Met Federatie kunt u verbinding maken met andere vertrouwde servers om de gebruikersdirectory uit te wisselen. Dit wordt bijvoorbeeld gebruikt om externe gebruikers automatisch aan te vullen voor federatief delen. Het is niet nodig om een server als vertrouwde server toe te voegen om een federatieve share te maken.", + "Federation allows you to connect with other trusted servers to exchange the account directory." : "Met Federatie kun je verbinding maken met andere vertrouwde servers om de accountmap uit te wisselen.", + "Federation allows you to connect with other trusted servers to exchange the account directory. For example this will be used to auto-complete external accounts for federated sharing." : "Federatie stelt je in staat om verbinding te maken met andere vertrouwde servers om de accountdirectory uit te wisselen. Dit zal bijvoorbeeld worden gebruikt om externe accounts automatisch aan te vullen voor gefedereerd delen.", + "External documentation for Federated Cloud Sharing" : "Externe documentatie voor Federated Cloud Sharing", + "Federation allows you to connect with other trusted servers to exchange the account directory. For example this will be used to auto-complete external accounts for federated sharing. It is not necessary to add a server as trusted server in order to create a federated share." : "Federatie stelt je in staat om verbinding te maken met andere vertrouwde servers om de accountdirectory uit te wisselen. Dit zal bijvoorbeeld worden gebruikt om externe accounts automatisch aan te vullen voor gefedereerd delen. Het is niet nodig om een server als vertrouwde server toe te voegen om een gefedereerde share te maken.", + "Each server must validate the other. This process may require a few cron cycles." : "Elke server moet de andere valideren. Dit proces kan enkele croncycli duren.", "+ Add trusted server" : "+ Toevoegen vertrouwde server", "Trusted server" : "Vertrouwde server", "Add" : "Toevoegen" diff --git a/apps/federation/l10n/oc.js b/apps/federation/l10n/oc.js deleted file mode 100644 index d65cc9bdef8..00000000000 --- a/apps/federation/l10n/oc.js +++ /dev/null @@ -1,9 +0,0 @@ -OC.L10N.register( - "federation", - { - "No ownCloud server found" : "Cap de servidor ownCloud pas trobat", - "Could not add server" : "Impossible d'apondre un servidor", - "Federation" : "Federacion", - "ownCloud Server" : "Servidor ownCloud" -}, -"nplurals=2; plural=(n > 1);"); diff --git a/apps/federation/l10n/oc.json b/apps/federation/l10n/oc.json deleted file mode 100644 index 809a86fcaa8..00000000000 --- a/apps/federation/l10n/oc.json +++ /dev/null @@ -1,7 +0,0 @@ -{ "translations": { - "No ownCloud server found" : "Cap de servidor ownCloud pas trobat", - "Could not add server" : "Impossible d'apondre un servidor", - "Federation" : "Federacion", - "ownCloud Server" : "Servidor ownCloud" -},"pluralForm" :"nplurals=2; plural=(n > 1);" -}
\ No newline at end of file diff --git a/apps/federation/l10n/pl.js b/apps/federation/l10n/pl.js index dafef0e2858..75e12a8fec4 100644 --- a/apps/federation/l10n/pl.js +++ b/apps/federation/l10n/pl.js @@ -2,14 +2,18 @@ OC.L10N.register( "federation", { "Added to the list of trusted servers" : "Dodano do listy zaufanych serwerów.", + "No server found with ID: %s" : "Nie znaleziono serwera o ID: %s", + "Could not remove server" : "Nie można usunąć serwera", "Server is already in the list of trusted servers." : "Serwer znajduje się już na liście zaufanych serwerów.", "No server to federate with found" : "Nie znaleziono federacyjnego serwera", "Could not add server" : "Nie można dodać serwera", "Trusted servers" : "Zaufane serwery", "Federation" : "Federacja", - "Federation allows you to connect with other trusted servers to exchange the user directory." : "Federacja umożliwia łączenie się z innymi zaufanymi serwerami w celu wymiany katalogu użytkownika.", - "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "Federacja umożliwia łączenie się z innymi zaufanymi serwerami w celu wymiany katalogu użytkownika. Na przykład zostanie to użyte do automatycznego uzupełniania dla zewnętrznych użytkowników przy udostępnianiu federacyjnym.", - "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing. It is not necessary to add a server as trusted server in order to create a federated share." : "Federacja umożliwia łączenie się z innymi zaufanymi serwerami w celu wymiany katalogu użytkownika. Na przykład zostanie to użyte do automatycznego uzupełniania dla zewnętrznych użytkowników przy udostępnianiu federacyjnym. Nie jest konieczne dodawanie serwera jako serwera zaufanego w celu utworzenia udostępnienia federacyjnego.", + "Federation allows you to connect with other trusted servers to exchange the account directory." : "Federacja umożliwia łączenie się z innymi zaufanymi serwerami w celu wymiany katalogu kont.", + "Federation allows you to connect with other trusted servers to exchange the account directory. For example this will be used to auto-complete external accounts for federated sharing." : "Federacja umożliwia łączenie się z innymi zaufanymi serwerami w celu wymiany katalogu kont. Na przykład będzie to używane do automatycznego uzupełniania kont zewnętrznych na potrzeby udostępniania federacyjnego.", + "External documentation for Federated Cloud Sharing" : "Dokumentacja zewnętrzna dla usługi Udostępnienia Chmury Federacyjnej", + "Federation allows you to connect with other trusted servers to exchange the account directory. For example this will be used to auto-complete external accounts for federated sharing. It is not necessary to add a server as trusted server in order to create a federated share." : "Federacja umożliwia łączenie się z innymi zaufanymi serwerami w celu wymiany katalogu kont. Na przykład zostanie to użyte do automatycznego uzupełniania dla zewnętrznych kont przy udostępnianiu federacyjnym. Nie jest konieczne dodawanie serwera jako serwera zaufanego w celu utworzenia udostępnienia federacyjnego.", + "Each server must validate the other. This process may require a few cron cycles." : "Każdy serwer musi zweryfikować inny serwer. Ten proces może wymagać kilku cykli cron.", "+ Add trusted server" : "+ Dodaj zaufany serwer", "Trusted server" : "Zaufany serwer", "Add" : "Dodaj" diff --git a/apps/federation/l10n/pl.json b/apps/federation/l10n/pl.json index 37233abdd1b..bf54f1fc437 100644 --- a/apps/federation/l10n/pl.json +++ b/apps/federation/l10n/pl.json @@ -1,13 +1,17 @@ { "translations": { "Added to the list of trusted servers" : "Dodano do listy zaufanych serwerów.", + "No server found with ID: %s" : "Nie znaleziono serwera o ID: %s", + "Could not remove server" : "Nie można usunąć serwera", "Server is already in the list of trusted servers." : "Serwer znajduje się już na liście zaufanych serwerów.", "No server to federate with found" : "Nie znaleziono federacyjnego serwera", "Could not add server" : "Nie można dodać serwera", "Trusted servers" : "Zaufane serwery", "Federation" : "Federacja", - "Federation allows you to connect with other trusted servers to exchange the user directory." : "Federacja umożliwia łączenie się z innymi zaufanymi serwerami w celu wymiany katalogu użytkownika.", - "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "Federacja umożliwia łączenie się z innymi zaufanymi serwerami w celu wymiany katalogu użytkownika. Na przykład zostanie to użyte do automatycznego uzupełniania dla zewnętrznych użytkowników przy udostępnianiu federacyjnym.", - "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing. It is not necessary to add a server as trusted server in order to create a federated share." : "Federacja umożliwia łączenie się z innymi zaufanymi serwerami w celu wymiany katalogu użytkownika. Na przykład zostanie to użyte do automatycznego uzupełniania dla zewnętrznych użytkowników przy udostępnianiu federacyjnym. Nie jest konieczne dodawanie serwera jako serwera zaufanego w celu utworzenia udostępnienia federacyjnego.", + "Federation allows you to connect with other trusted servers to exchange the account directory." : "Federacja umożliwia łączenie się z innymi zaufanymi serwerami w celu wymiany katalogu kont.", + "Federation allows you to connect with other trusted servers to exchange the account directory. For example this will be used to auto-complete external accounts for federated sharing." : "Federacja umożliwia łączenie się z innymi zaufanymi serwerami w celu wymiany katalogu kont. Na przykład będzie to używane do automatycznego uzupełniania kont zewnętrznych na potrzeby udostępniania federacyjnego.", + "External documentation for Federated Cloud Sharing" : "Dokumentacja zewnętrzna dla usługi Udostępnienia Chmury Federacyjnej", + "Federation allows you to connect with other trusted servers to exchange the account directory. For example this will be used to auto-complete external accounts for federated sharing. It is not necessary to add a server as trusted server in order to create a federated share." : "Federacja umożliwia łączenie się z innymi zaufanymi serwerami w celu wymiany katalogu kont. Na przykład zostanie to użyte do automatycznego uzupełniania dla zewnętrznych kont przy udostępnianiu federacyjnym. Nie jest konieczne dodawanie serwera jako serwera zaufanego w celu utworzenia udostępnienia federacyjnego.", + "Each server must validate the other. This process may require a few cron cycles." : "Każdy serwer musi zweryfikować inny serwer. Ten proces może wymagać kilku cykli cron.", "+ Add trusted server" : "+ Dodaj zaufany serwer", "Trusted server" : "Zaufany serwer", "Add" : "Dodaj" diff --git a/apps/federation/l10n/pt_BR.js b/apps/federation/l10n/pt_BR.js index 1c2d83f8907..9423314eeef 100644 --- a/apps/federation/l10n/pt_BR.js +++ b/apps/federation/l10n/pt_BR.js @@ -2,16 +2,20 @@ OC.L10N.register( "federation", { "Added to the list of trusted servers" : "Adicionado à lista de servidores confiáveis.", + "No server found with ID: %s" : "Nenhum servidor encontrado com o ID: %s", + "Could not remove server" : "Não foi possível remover o servidor", "Server is already in the list of trusted servers." : "O servidor já está na lista de servidores confiáveis.", "No server to federate with found" : "Nenhum servidor encontrado para federar", "Could not add server" : "Não foi possível adicionar servidor", "Trusted servers" : "Servidores confiáveis", "Federation" : "Federação", - "Federation allows you to connect with other trusted servers to exchange the user directory." : "A federação permite que você se conecte a outros servidores confiáveis para trocar o diretório do usuário.", - "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "Federação permite que você conecte com outros servidores confiáveis para trocar o diretório do usuário. Por exemplo, este atributo será usado para completar automaticamente usuários externos para compartilhamento federado.", - "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing. It is not necessary to add a server as trusted server in order to create a federated share." : "A federação permite que você se conecte com outros servidores confiáveis para trocar o diretório do usuário. Isso é usado, por exemplo, para auto-completar automaticamente usuários externos para compartilhamento federado. Não é necessário adicionar um servidor como servidor confiável para criar um compartilhamento federado.", + "Federation allows you to connect with other trusted servers to exchange the account directory." : "A federação permite que você se conecte a outros servidores confiáveis para trocar o diretório de contas.", + "Federation allows you to connect with other trusted servers to exchange the account directory. For example this will be used to auto-complete external accounts for federated sharing." : "A federação permite que você se conecte a outros servidores confiáveis para trocar o diretório de contas. Por exemplo, isso será usado para preencher automaticamente contas externas para compartilhamento federado.", + "External documentation for Federated Cloud Sharing" : "Documentação externa para Compartilhamento de Nuvem Federada", + "Federation allows you to connect with other trusted servers to exchange the account directory. For example this will be used to auto-complete external accounts for federated sharing. It is not necessary to add a server as trusted server in order to create a federated share." : "A federação permite que você se conecte a outros servidores confiáveis para trocar o diretório de contas. Por exemplo, isso será usado para preencher automaticamente contas externas para compartilhamento federado. Não é necessário adicionar um servidor como servidor confiável para criar um compartilhamento federado.", + "Each server must validate the other. This process may require a few cron cycles." : "Cada servidor deve validar o outro. Esse processo pode exigir alguns ciclos de cron.", "+ Add trusted server" : "+Adicionar servidores confiáveis", "Trusted server" : "Servidores confiáveis", "Add" : "Adicionar" }, -"nplurals=2; plural=(n > 1);"); +"nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); diff --git a/apps/federation/l10n/pt_BR.json b/apps/federation/l10n/pt_BR.json index 88fb65e7232..712e1f33687 100644 --- a/apps/federation/l10n/pt_BR.json +++ b/apps/federation/l10n/pt_BR.json @@ -1,15 +1,19 @@ { "translations": { "Added to the list of trusted servers" : "Adicionado à lista de servidores confiáveis.", + "No server found with ID: %s" : "Nenhum servidor encontrado com o ID: %s", + "Could not remove server" : "Não foi possível remover o servidor", "Server is already in the list of trusted servers." : "O servidor já está na lista de servidores confiáveis.", "No server to federate with found" : "Nenhum servidor encontrado para federar", "Could not add server" : "Não foi possível adicionar servidor", "Trusted servers" : "Servidores confiáveis", "Federation" : "Federação", - "Federation allows you to connect with other trusted servers to exchange the user directory." : "A federação permite que você se conecte a outros servidores confiáveis para trocar o diretório do usuário.", - "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "Federação permite que você conecte com outros servidores confiáveis para trocar o diretório do usuário. Por exemplo, este atributo será usado para completar automaticamente usuários externos para compartilhamento federado.", - "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing. It is not necessary to add a server as trusted server in order to create a federated share." : "A federação permite que você se conecte com outros servidores confiáveis para trocar o diretório do usuário. Isso é usado, por exemplo, para auto-completar automaticamente usuários externos para compartilhamento federado. Não é necessário adicionar um servidor como servidor confiável para criar um compartilhamento federado.", + "Federation allows you to connect with other trusted servers to exchange the account directory." : "A federação permite que você se conecte a outros servidores confiáveis para trocar o diretório de contas.", + "Federation allows you to connect with other trusted servers to exchange the account directory. For example this will be used to auto-complete external accounts for federated sharing." : "A federação permite que você se conecte a outros servidores confiáveis para trocar o diretório de contas. Por exemplo, isso será usado para preencher automaticamente contas externas para compartilhamento federado.", + "External documentation for Federated Cloud Sharing" : "Documentação externa para Compartilhamento de Nuvem Federada", + "Federation allows you to connect with other trusted servers to exchange the account directory. For example this will be used to auto-complete external accounts for federated sharing. It is not necessary to add a server as trusted server in order to create a federated share." : "A federação permite que você se conecte a outros servidores confiáveis para trocar o diretório de contas. Por exemplo, isso será usado para preencher automaticamente contas externas para compartilhamento federado. Não é necessário adicionar um servidor como servidor confiável para criar um compartilhamento federado.", + "Each server must validate the other. This process may require a few cron cycles." : "Cada servidor deve validar o outro. Esse processo pode exigir alguns ciclos de cron.", "+ Add trusted server" : "+Adicionar servidores confiáveis", "Trusted server" : "Servidores confiáveis", "Add" : "Adicionar" -},"pluralForm" :"nplurals=2; plural=(n > 1);" +},"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/federation/l10n/pt_PT.js b/apps/federation/l10n/pt_PT.js index d7881430b89..a9c5b3e0af5 100644 --- a/apps/federation/l10n/pt_PT.js +++ b/apps/federation/l10n/pt_PT.js @@ -7,10 +7,8 @@ OC.L10N.register( "Could not add server" : "Não foi possível adicionar servidor", "Trusted servers" : "Servidores confiáveis", "Federation" : "Federação", - "Federation allows you to connect with other trusted servers to exchange the user directory." : "Federação permite-o conectar-se a outros servidores confiáveis para troca de diretoria de utilizador.", - "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "Federação permite-o conectar-se a outros servidores confiáveis para trocar a diretoria de utilizador. Por exemplo, isto será usado para completar automaticamente utilizadores externos para partilhada federada.", "+ Add trusted server" : "+ Adicionar servidor confiável", "Trusted server" : "Servidor confiável", "Add" : "Adicionar" }, -"nplurals=2; plural=(n != 1);"); +"nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); diff --git a/apps/federation/l10n/pt_PT.json b/apps/federation/l10n/pt_PT.json index c77d3311ab2..bec9eea1089 100644 --- a/apps/federation/l10n/pt_PT.json +++ b/apps/federation/l10n/pt_PT.json @@ -5,10 +5,8 @@ "Could not add server" : "Não foi possível adicionar servidor", "Trusted servers" : "Servidores confiáveis", "Federation" : "Federação", - "Federation allows you to connect with other trusted servers to exchange the user directory." : "Federação permite-o conectar-se a outros servidores confiáveis para troca de diretoria de utilizador.", - "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "Federação permite-o conectar-se a outros servidores confiáveis para trocar a diretoria de utilizador. Por exemplo, isto será usado para completar automaticamente utilizadores externos para partilhada federada.", "+ Add trusted server" : "+ Adicionar servidor confiável", "Trusted server" : "Servidor confiável", "Add" : "Adicionar" -},"pluralForm" :"nplurals=2; plural=(n != 1);" +},"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/federation/l10n/ro.js b/apps/federation/l10n/ro.js deleted file mode 100644 index 19f37f329a1..00000000000 --- a/apps/federation/l10n/ro.js +++ /dev/null @@ -1,15 +0,0 @@ -OC.L10N.register( - "federation", - { - "Server added to the list of trusted ownClouds" : "Server adăugat la lista serverelor ownCloud de încredere", - "Server is already in the list of trusted servers." : "Serverul este deja pe lista celor de încredere.", - "No ownCloud server found" : "Nu s-a găsit niciun server ownCloud", - "Could not add server" : "Nu s-a putut adăuga serverul", - "Federation" : "Federare", - "ownCloud Federation allows you to connect with other trusted ownClouds to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "Federarea ownCloud îți permite să te conectezi la alte servere ownCloud de încredere pentru a partaja baza de utilizatori. De exemplu, va permite completarea automată a numelor utilizatorilor externi pentru partajarea federată.", - "Add server automatically once a federated share was created successfully" : "Adaugă serverul automat odată ce elementul partajat federat a fost creat cu succes", - "Trusted ownCloud Servers" : "Servere ownCloud de încredere", - "+ Add ownCloud server" : "+ Adaugă server ownCloud", - "ownCloud Server" : "Server ownCloud" -}, -"nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?2:1));"); diff --git a/apps/federation/l10n/ro.json b/apps/federation/l10n/ro.json deleted file mode 100644 index 0acb4ebd962..00000000000 --- a/apps/federation/l10n/ro.json +++ /dev/null @@ -1,13 +0,0 @@ -{ "translations": { - "Server added to the list of trusted ownClouds" : "Server adăugat la lista serverelor ownCloud de încredere", - "Server is already in the list of trusted servers." : "Serverul este deja pe lista celor de încredere.", - "No ownCloud server found" : "Nu s-a găsit niciun server ownCloud", - "Could not add server" : "Nu s-a putut adăuga serverul", - "Federation" : "Federare", - "ownCloud Federation allows you to connect with other trusted ownClouds to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "Federarea ownCloud îți permite să te conectezi la alte servere ownCloud de încredere pentru a partaja baza de utilizatori. De exemplu, va permite completarea automată a numelor utilizatorilor externi pentru partajarea federată.", - "Add server automatically once a federated share was created successfully" : "Adaugă serverul automat odată ce elementul partajat federat a fost creat cu succes", - "Trusted ownCloud Servers" : "Servere ownCloud de încredere", - "+ Add ownCloud server" : "+ Adaugă server ownCloud", - "ownCloud Server" : "Server ownCloud" -},"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/federation/l10n/ru.js b/apps/federation/l10n/ru.js index caec38e8982..662a92f413e 100644 --- a/apps/federation/l10n/ru.js +++ b/apps/federation/l10n/ru.js @@ -2,14 +2,18 @@ OC.L10N.register( "federation", { "Added to the list of trusted servers" : "Добавлено в список доверенных серверов", + "No server found with ID: %s" : "Сервер с идентификатором не найден: %s", + "Could not remove server" : "Не удалось удалить сервер", "Server is already in the list of trusted servers." : "Сервер уже есть в списке доверенных серверов.", "No server to federate with found" : "Сервер для объединения не найден", "Could not add server" : "Не удалось добавить сервер", "Trusted servers" : "Доверенные серверы", "Federation" : "Федерация", - "Federation allows you to connect with other trusted servers to exchange the user directory." : "Федерация позволяет подключаться к другим доверенным серверам для обмена каталогами пользователей.", - "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "Федерация серверов позволит Вам подключиться к другим доверенным серверам для обмена каталогами пользователей. Это будет использовано, например, для автодополнения имён пользователей при открытии федеративного общего доступа.", - "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing. It is not necessary to add a server as trusted server in order to create a federated share." : "Федерация позволяет подключаться к другим доверенным серверам для обмена каталогом пользователей. Например, это будет использоваться для автоматического заполнения внешних пользователей для федеративного общего доступа. Нет необходимости добавлять сервер в качестве доверенного сервера для создания федеративного общего ресурса.", + "Federation allows you to connect with other trusted servers to exchange the account directory." : "Федерация позволяет вам подключаться к другим доверенным серверам для обмена каталогом учетных записей.", + "Federation allows you to connect with other trusted servers to exchange the account directory. For example this will be used to auto-complete external accounts for federated sharing." : "Федерация позволяет вам подключаться к другим доверенным серверам для обмена каталогом учетных записей. Например, это будет использоваться для автоматического заполнения внешних учетных записей для федеративного общего доступа.", + "External documentation for Federated Cloud Sharing" : "Внешняя документация для федеративного облачного обмена", + "Federation allows you to connect with other trusted servers to exchange the account directory. For example this will be used to auto-complete external accounts for federated sharing. It is not necessary to add a server as trusted server in order to create a federated share." : "Федерация позволяет вам подключаться к другим доверенным серверам для обмена каталогом учетных записей. Например, это будет использоваться для автоматического заполнения внешних учетных записей для федеративного общего доступа. Для создания федеративного общего ресурса нет необходимости добавлять сервер в качестве доверенного.", + "Each server must validate the other. This process may require a few cron cycles." : "Каждый сервер должен проверить другой. Этот процесс может потребовать нескольких циклов cron.", "+ Add trusted server" : "+ Добавить доверенный сервер", "Trusted server" : "Доверенный сервер", "Add" : "Добавить" diff --git a/apps/federation/l10n/ru.json b/apps/federation/l10n/ru.json index 730de7207cf..f8d8ea90f5b 100644 --- a/apps/federation/l10n/ru.json +++ b/apps/federation/l10n/ru.json @@ -1,13 +1,17 @@ { "translations": { "Added to the list of trusted servers" : "Добавлено в список доверенных серверов", + "No server found with ID: %s" : "Сервер с идентификатором не найден: %s", + "Could not remove server" : "Не удалось удалить сервер", "Server is already in the list of trusted servers." : "Сервер уже есть в списке доверенных серверов.", "No server to federate with found" : "Сервер для объединения не найден", "Could not add server" : "Не удалось добавить сервер", "Trusted servers" : "Доверенные серверы", "Federation" : "Федерация", - "Federation allows you to connect with other trusted servers to exchange the user directory." : "Федерация позволяет подключаться к другим доверенным серверам для обмена каталогами пользователей.", - "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "Федерация серверов позволит Вам подключиться к другим доверенным серверам для обмена каталогами пользователей. Это будет использовано, например, для автодополнения имён пользователей при открытии федеративного общего доступа.", - "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing. It is not necessary to add a server as trusted server in order to create a federated share." : "Федерация позволяет подключаться к другим доверенным серверам для обмена каталогом пользователей. Например, это будет использоваться для автоматического заполнения внешних пользователей для федеративного общего доступа. Нет необходимости добавлять сервер в качестве доверенного сервера для создания федеративного общего ресурса.", + "Federation allows you to connect with other trusted servers to exchange the account directory." : "Федерация позволяет вам подключаться к другим доверенным серверам для обмена каталогом учетных записей.", + "Federation allows you to connect with other trusted servers to exchange the account directory. For example this will be used to auto-complete external accounts for federated sharing." : "Федерация позволяет вам подключаться к другим доверенным серверам для обмена каталогом учетных записей. Например, это будет использоваться для автоматического заполнения внешних учетных записей для федеративного общего доступа.", + "External documentation for Federated Cloud Sharing" : "Внешняя документация для федеративного облачного обмена", + "Federation allows you to connect with other trusted servers to exchange the account directory. For example this will be used to auto-complete external accounts for federated sharing. It is not necessary to add a server as trusted server in order to create a federated share." : "Федерация позволяет вам подключаться к другим доверенным серверам для обмена каталогом учетных записей. Например, это будет использоваться для автоматического заполнения внешних учетных записей для федеративного общего доступа. Для создания федеративного общего ресурса нет необходимости добавлять сервер в качестве доверенного.", + "Each server must validate the other. This process may require a few cron cycles." : "Каждый сервер должен проверить другой. Этот процесс может потребовать нескольких циклов cron.", "+ Add trusted server" : "+ Добавить доверенный сервер", "Trusted server" : "Доверенный сервер", "Add" : "Добавить" diff --git a/apps/federation/l10n/sc.js b/apps/federation/l10n/sc.js index 54c00f6c8f9..122860c98fc 100644 --- a/apps/federation/l10n/sc.js +++ b/apps/federation/l10n/sc.js @@ -7,9 +7,6 @@ OC.L10N.register( "Could not add server" : "No at fatu a agiùnghere su serbidore", "Trusted servers" : "Serbidores seguros", "Federation" : "Federatzione", - "Federation allows you to connect with other trusted servers to exchange the user directory." : "Sa federatzione cunsentit de si collegare a àteros serbidores seguros pro iscambiare sa cartella utente.", - "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "Sa federatzione permitit de si collegare a àteros serbidores seguros pro intrare in sa cartella utente. Pro esèmpiu, si podet impreare pro su cumpletamentu automàticu de utèntzias esternas pro cumpartziduras federadas.", - "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing. It is not necessary to add a server as trusted server in order to create a federated share." : "Sa federatzione permitit de si collegare a àteros serbidores seguros pro iscambiare sa cartella utente. Pro esèmpiu s'at a impreare pro su cumpletamentu automàticu de utèntzias esternas pro cumpartziduras federadas. Non serbit a agiùnghere unu serbidore comente seguru pro creare una cumpartzidura federada.", "+ Add trusted server" : "+ Agiunghe serbidore seguru", "Trusted server" : "Serbidore seguru", "Add" : "Agiunghe" diff --git a/apps/federation/l10n/sc.json b/apps/federation/l10n/sc.json index 647daadd186..d666d8e5bab 100644 --- a/apps/federation/l10n/sc.json +++ b/apps/federation/l10n/sc.json @@ -5,9 +5,6 @@ "Could not add server" : "No at fatu a agiùnghere su serbidore", "Trusted servers" : "Serbidores seguros", "Federation" : "Federatzione", - "Federation allows you to connect with other trusted servers to exchange the user directory." : "Sa federatzione cunsentit de si collegare a àteros serbidores seguros pro iscambiare sa cartella utente.", - "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "Sa federatzione permitit de si collegare a àteros serbidores seguros pro intrare in sa cartella utente. Pro esèmpiu, si podet impreare pro su cumpletamentu automàticu de utèntzias esternas pro cumpartziduras federadas.", - "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing. It is not necessary to add a server as trusted server in order to create a federated share." : "Sa federatzione permitit de si collegare a àteros serbidores seguros pro iscambiare sa cartella utente. Pro esèmpiu s'at a impreare pro su cumpletamentu automàticu de utèntzias esternas pro cumpartziduras federadas. Non serbit a agiùnghere unu serbidore comente seguru pro creare una cumpartzidura federada.", "+ Add trusted server" : "+ Agiunghe serbidore seguru", "Trusted server" : "Serbidore seguru", "Add" : "Agiunghe" diff --git a/apps/federation/l10n/sk.js b/apps/federation/l10n/sk.js index 2688d8972f2..222d89da7c7 100644 --- a/apps/federation/l10n/sk.js +++ b/apps/federation/l10n/sk.js @@ -2,14 +2,18 @@ OC.L10N.register( "federation", { "Added to the list of trusted servers" : "Pridané do zoznamu dôveryhodných serverov", + "No server found with ID: %s" : "Nenašiel sa žiadny server s ID: %s", + "Could not remove server" : "Nepodarilo sa odstrániť server", "Server is already in the list of trusted servers." : "Server sa už nachádza v zozname dôveryhodných serverov", "No server to federate with found" : "Server pre združenie sa nenašiel", "Could not add server" : "Nebolo možné pridať server", "Trusted servers" : "Dôveryhodné servery", "Federation" : "Združovanie", - "Federation allows you to connect with other trusted servers to exchange the user directory." : "Združovanie vám umožňuje sa pripojiť k iným dôveryhodným serverom za účelom výmeny adresára používateľov.", - "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "Združovanie vám umožňuje sa pripojiť k iným dôveryhodným serverom za účelom výmeny adresára používateľov. Používa sa to napr. pre automatické doplňovanie používateľov pri združenom zdieľaní.", - "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing. It is not necessary to add a server as trusted server in order to create a federated share." : "Združovanie vám umožňuje sa pripojiť k iným dôveryhodným serverom za účelom výmeny adresára používateľov. Používa sa to napr. pre automatické doplňovanie používateľov pri združenom zdieľaní. Na vytvorenie zdieľaného adresára nie je potrebné pridať server ako dôveryhodný server.", + "Federation allows you to connect with other trusted servers to exchange the account directory." : "Združovanie vám umožňuje sa pripojiť k iným dôveryhodným serverom za účelom výmeny účtov.", + "Federation allows you to connect with other trusted servers to exchange the account directory. For example this will be used to auto-complete external accounts for federated sharing." : "Združovanie vám umožňuje sa pripojiť k iným dôveryhodným serverom za účelom výmeny účtov. Používa sa to napr. pre automatické doplňovanie externých účtov pri združenom zdieľaní.", + "External documentation for Federated Cloud Sharing" : "Externá dokumentácia pre Federatívne zdieľanie v cloude", + "Federation allows you to connect with other trusted servers to exchange the account directory. For example this will be used to auto-complete external accounts for federated sharing. It is not necessary to add a server as trusted server in order to create a federated share." : "Združovanie vám umožňuje sa pripojiť k iným dôveryhodným serverom za účelom výmeny zoznamu užívateľov. Používa sa to napr. pre automatické doplňovanie externých účtov pri združenom zdieľaní. Na vytvorenie združeného zdieľaného adresára nie je potrebné pridať server ako dôveryhodný server.", + "Each server must validate the other. This process may require a few cron cycles." : "Každý server musí overiť ostatné. Tento proces môže vyžadovať pár cyklov v crone.", "+ Add trusted server" : "Pridať dôveryhodný server", "Trusted server" : "Dôveryhodný server", "Add" : "Pridať" diff --git a/apps/federation/l10n/sk.json b/apps/federation/l10n/sk.json index 4f27444b8c9..ed4f4d1d75c 100644 --- a/apps/federation/l10n/sk.json +++ b/apps/federation/l10n/sk.json @@ -1,13 +1,17 @@ { "translations": { "Added to the list of trusted servers" : "Pridané do zoznamu dôveryhodných serverov", + "No server found with ID: %s" : "Nenašiel sa žiadny server s ID: %s", + "Could not remove server" : "Nepodarilo sa odstrániť server", "Server is already in the list of trusted servers." : "Server sa už nachádza v zozname dôveryhodných serverov", "No server to federate with found" : "Server pre združenie sa nenašiel", "Could not add server" : "Nebolo možné pridať server", "Trusted servers" : "Dôveryhodné servery", "Federation" : "Združovanie", - "Federation allows you to connect with other trusted servers to exchange the user directory." : "Združovanie vám umožňuje sa pripojiť k iným dôveryhodným serverom za účelom výmeny adresára používateľov.", - "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "Združovanie vám umožňuje sa pripojiť k iným dôveryhodným serverom za účelom výmeny adresára používateľov. Používa sa to napr. pre automatické doplňovanie používateľov pri združenom zdieľaní.", - "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing. It is not necessary to add a server as trusted server in order to create a federated share." : "Združovanie vám umožňuje sa pripojiť k iným dôveryhodným serverom za účelom výmeny adresára používateľov. Používa sa to napr. pre automatické doplňovanie používateľov pri združenom zdieľaní. Na vytvorenie zdieľaného adresára nie je potrebné pridať server ako dôveryhodný server.", + "Federation allows you to connect with other trusted servers to exchange the account directory." : "Združovanie vám umožňuje sa pripojiť k iným dôveryhodným serverom za účelom výmeny účtov.", + "Federation allows you to connect with other trusted servers to exchange the account directory. For example this will be used to auto-complete external accounts for federated sharing." : "Združovanie vám umožňuje sa pripojiť k iným dôveryhodným serverom za účelom výmeny účtov. Používa sa to napr. pre automatické doplňovanie externých účtov pri združenom zdieľaní.", + "External documentation for Federated Cloud Sharing" : "Externá dokumentácia pre Federatívne zdieľanie v cloude", + "Federation allows you to connect with other trusted servers to exchange the account directory. For example this will be used to auto-complete external accounts for federated sharing. It is not necessary to add a server as trusted server in order to create a federated share." : "Združovanie vám umožňuje sa pripojiť k iným dôveryhodným serverom za účelom výmeny zoznamu užívateľov. Používa sa to napr. pre automatické doplňovanie externých účtov pri združenom zdieľaní. Na vytvorenie združeného zdieľaného adresára nie je potrebné pridať server ako dôveryhodný server.", + "Each server must validate the other. This process may require a few cron cycles." : "Každý server musí overiť ostatné. Tento proces môže vyžadovať pár cyklov v crone.", "+ Add trusted server" : "Pridať dôveryhodný server", "Trusted server" : "Dôveryhodný server", "Add" : "Pridať" diff --git a/apps/federation/l10n/sl.js b/apps/federation/l10n/sl.js index 2d61fc20155..d93005e5df8 100644 --- a/apps/federation/l10n/sl.js +++ b/apps/federation/l10n/sl.js @@ -7,9 +7,9 @@ OC.L10N.register( "Could not add server" : "Strežnika ni mogoče dodati.", "Trusted servers" : "Varni strežniki", "Federation" : "Zvezni oblaki", - "Federation allows you to connect with other trusted servers to exchange the user directory." : "Zvezni oblak omogoča povezovanje zunanjih strežnikov v skupen oblak in izmenjavo datotek in map uporabnikov različnih sistemov.", - "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "Zvezni oblak omogoča povezovanje z drugimi varnimi strežniki in izmenjavo datotek in map uporabnikov v enotnem oblaku. Možnost omogoča na primer samodejno dopolnjevanje tudi imen uporabnikov na drugih, zunanjih strežnikih.", - "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing. It is not necessary to add a server as trusted server in order to create a federated share." : "Zvezni oblak omogoča povezovanje z drugimi varnimi strežniki in izmenjavo datotek in map uporabnikov v enotnem oblaku. Možnost omogoča na primer samodejno dopolnjevanje tudi imen uporabnikov na drugih, zunanjih strežnikih. Zunanjih strežnikov ni nujno dodati kot zaupanja vredne, da lahko ustvarite povezave.", + "Federation allows you to connect with other trusted servers to exchange the account directory." : "Zvezni oblak omogoča povezovanje zunanjih strežnikov v skupen oblak in izmenjavo datotek in map uporabnikov različnih sistemov.", + "Federation allows you to connect with other trusted servers to exchange the account directory. For example this will be used to auto-complete external accounts for federated sharing." : "Zvezni oblak omogoča povezovanje z drugimi varnimi strežniki in izmenjavo datotek in map računov v enotnem oblaku. Možnost omogoča na primer samodejno dopolnjevanje tudi računov na drugih, zunanjih strežnikih.", + "Federation allows you to connect with other trusted servers to exchange the account directory. For example this will be used to auto-complete external accounts for federated sharing. It is not necessary to add a server as trusted server in order to create a federated share." : "Zvezni oblak omogoča povezovanje z drugimi varnimi strežniki in izmenjavo datotek in map računov v enotnem oblaku. Možnost omogoča na primer samodejno dopolnjevanje tudi imen računov na drugih, zunanjih strežnikih. Zunanjih strežnikov ni nujno dodati kot zaupanja vredne, da lahko ustvarite povezave.", "+ Add trusted server" : "+ Dodaj varen strežnik", "Trusted server" : "Varen strežnik", "Add" : "Dodaj" diff --git a/apps/federation/l10n/sl.json b/apps/federation/l10n/sl.json index cf4d8a4a9c3..a864b1159bd 100644 --- a/apps/federation/l10n/sl.json +++ b/apps/federation/l10n/sl.json @@ -5,9 +5,9 @@ "Could not add server" : "Strežnika ni mogoče dodati.", "Trusted servers" : "Varni strežniki", "Federation" : "Zvezni oblaki", - "Federation allows you to connect with other trusted servers to exchange the user directory." : "Zvezni oblak omogoča povezovanje zunanjih strežnikov v skupen oblak in izmenjavo datotek in map uporabnikov različnih sistemov.", - "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "Zvezni oblak omogoča povezovanje z drugimi varnimi strežniki in izmenjavo datotek in map uporabnikov v enotnem oblaku. Možnost omogoča na primer samodejno dopolnjevanje tudi imen uporabnikov na drugih, zunanjih strežnikih.", - "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing. It is not necessary to add a server as trusted server in order to create a federated share." : "Zvezni oblak omogoča povezovanje z drugimi varnimi strežniki in izmenjavo datotek in map uporabnikov v enotnem oblaku. Možnost omogoča na primer samodejno dopolnjevanje tudi imen uporabnikov na drugih, zunanjih strežnikih. Zunanjih strežnikov ni nujno dodati kot zaupanja vredne, da lahko ustvarite povezave.", + "Federation allows you to connect with other trusted servers to exchange the account directory." : "Zvezni oblak omogoča povezovanje zunanjih strežnikov v skupen oblak in izmenjavo datotek in map uporabnikov različnih sistemov.", + "Federation allows you to connect with other trusted servers to exchange the account directory. For example this will be used to auto-complete external accounts for federated sharing." : "Zvezni oblak omogoča povezovanje z drugimi varnimi strežniki in izmenjavo datotek in map računov v enotnem oblaku. Možnost omogoča na primer samodejno dopolnjevanje tudi računov na drugih, zunanjih strežnikih.", + "Federation allows you to connect with other trusted servers to exchange the account directory. For example this will be used to auto-complete external accounts for federated sharing. It is not necessary to add a server as trusted server in order to create a federated share." : "Zvezni oblak omogoča povezovanje z drugimi varnimi strežniki in izmenjavo datotek in map računov v enotnem oblaku. Možnost omogoča na primer samodejno dopolnjevanje tudi imen računov na drugih, zunanjih strežnikih. Zunanjih strežnikov ni nujno dodati kot zaupanja vredne, da lahko ustvarite povezave.", "+ Add trusted server" : "+ Dodaj varen strežnik", "Trusted server" : "Varen strežnik", "Add" : "Dodaj" diff --git a/apps/federation/l10n/sq.js b/apps/federation/l10n/sq.js index 13861f4fe70..cf7edac45cc 100644 --- a/apps/federation/l10n/sq.js +++ b/apps/federation/l10n/sq.js @@ -7,7 +7,6 @@ OC.L10N.register( "Could not add server" : "Server-i s’u shtua dot", "Trusted servers" : "Servera të besuar", "Federation" : "Federim", - "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "Federimi ju lejon të lidheni me server-a të tjerë për të shkëmbyer direktorinë e përdoruesit. Për shembull, kjo mund të përdoret për të parapërgatitur vendet e punës për përdorues të jashtëm në shpërndarjen e federuar.", "+ Add trusted server" : "+ Shto server-a të besuar", "Trusted server" : "Server i besuar", "Add" : "Shto" diff --git a/apps/federation/l10n/sq.json b/apps/federation/l10n/sq.json index c247f862742..ee5c9fc0e40 100644 --- a/apps/federation/l10n/sq.json +++ b/apps/federation/l10n/sq.json @@ -5,7 +5,6 @@ "Could not add server" : "Server-i s’u shtua dot", "Trusted servers" : "Servera të besuar", "Federation" : "Federim", - "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "Federimi ju lejon të lidheni me server-a të tjerë për të shkëmbyer direktorinë e përdoruesit. Për shembull, kjo mund të përdoret për të parapërgatitur vendet e punës për përdorues të jashtëm në shpërndarjen e federuar.", "+ Add trusted server" : "+ Shto server-a të besuar", "Trusted server" : "Server i besuar", "Add" : "Shto" diff --git a/apps/federation/l10n/sr.js b/apps/federation/l10n/sr.js index 648429f5b99..c50566e97d4 100644 --- a/apps/federation/l10n/sr.js +++ b/apps/federation/l10n/sr.js @@ -2,14 +2,18 @@ OC.L10N.register( "federation", { "Added to the list of trusted servers" : "Додат на листу сервера од поверења", + "No server found with ID: %s" : "Није пронађен сервер са ID: %s", + "Could not remove server" : "Сервер није могао да се уклони", "Server is already in the list of trusted servers." : "Сервер је већ на списку сервера од поверења.", "No server to federate with found" : "Није нађен сервер за здруживање", "Could not add server" : "Неуспело додавање сервера", "Trusted servers" : "Сервери од поверења", "Federation" : "Здруживање", - "Federation allows you to connect with other trusted servers to exchange the user directory." : "Здруживање омогућава да се повежете са другим серверима од поверења и да размењујете корисничке директоријуме.", - "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "Здруживање омогућава да се повежете са другим серверима од поверења и да мењате корисничке директоријуме.", - "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing. It is not necessary to add a server as trusted server in order to create a federated share." : "Здруживање омогућава да се повежете са другим серверима од поверења и да мењате корисничке директоријуме. На пример, федерација ће се користити за налажење спољних корисника код креирања здруженог дељења. Није потребно додати сервер као сервер од поверења да бисте направили здружено дељење.", + "Federation allows you to connect with other trusted servers to exchange the account directory." : "Федерисање вам омогућава да се повежете са другим серверима којима се верује и да размењујете директоријум налога.", + "Federation allows you to connect with other trusted servers to exchange the account directory. For example this will be used to auto-complete external accounts for federated sharing." : "Федерисање вам омогућава да се повежете са другим серверима којима се верује и да размењујете директоријум налога. На пример, ово ће се користити за аутоматско довршавање спољних налога када се врши федерисано дељење.", + "External documentation for Federated Cloud Sharing" : "Спољна документација за Здружено дељење у облаку", + "Federation allows you to connect with other trusted servers to exchange the account directory. For example this will be used to auto-complete external accounts for federated sharing. It is not necessary to add a server as trusted server in order to create a federated share." : "Федерисање вам омогућава да се повежете са другим серверима којима се верује и да размењујете директоријум налога. На пример, ово ће се користити за аутоматско довршавање спољних налога када се врши федерисано дељење. Да би се креирало федерисано дељење, нема потребе да се сервер дода као сервер којем се верује.", + "Each server must validate the other. This process may require a few cron cycles." : "Сваки сервер мора да потврди остале. За овај процес може бити потребно неколико cron циклуса.", "+ Add trusted server" : "+ Додај сервер од поверења", "Trusted server" : "Сервер од поверења", "Add" : "Додај" diff --git a/apps/federation/l10n/sr.json b/apps/federation/l10n/sr.json index cca0954a630..329c7f1df41 100644 --- a/apps/federation/l10n/sr.json +++ b/apps/federation/l10n/sr.json @@ -1,13 +1,17 @@ { "translations": { "Added to the list of trusted servers" : "Додат на листу сервера од поверења", + "No server found with ID: %s" : "Није пронађен сервер са ID: %s", + "Could not remove server" : "Сервер није могао да се уклони", "Server is already in the list of trusted servers." : "Сервер је већ на списку сервера од поверења.", "No server to federate with found" : "Није нађен сервер за здруживање", "Could not add server" : "Неуспело додавање сервера", "Trusted servers" : "Сервери од поверења", "Federation" : "Здруживање", - "Federation allows you to connect with other trusted servers to exchange the user directory." : "Здруживање омогућава да се повежете са другим серверима од поверења и да размењујете корисничке директоријуме.", - "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "Здруживање омогућава да се повежете са другим серверима од поверења и да мењате корисничке директоријуме.", - "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing. It is not necessary to add a server as trusted server in order to create a federated share." : "Здруживање омогућава да се повежете са другим серверима од поверења и да мењате корисничке директоријуме. На пример, федерација ће се користити за налажење спољних корисника код креирања здруженог дељења. Није потребно додати сервер као сервер од поверења да бисте направили здружено дељење.", + "Federation allows you to connect with other trusted servers to exchange the account directory." : "Федерисање вам омогућава да се повежете са другим серверима којима се верује и да размењујете директоријум налога.", + "Federation allows you to connect with other trusted servers to exchange the account directory. For example this will be used to auto-complete external accounts for federated sharing." : "Федерисање вам омогућава да се повежете са другим серверима којима се верује и да размењујете директоријум налога. На пример, ово ће се користити за аутоматско довршавање спољних налога када се врши федерисано дељење.", + "External documentation for Federated Cloud Sharing" : "Спољна документација за Здружено дељење у облаку", + "Federation allows you to connect with other trusted servers to exchange the account directory. For example this will be used to auto-complete external accounts for federated sharing. It is not necessary to add a server as trusted server in order to create a federated share." : "Федерисање вам омогућава да се повежете са другим серверима којима се верује и да размењујете директоријум налога. На пример, ово ће се користити за аутоматско довршавање спољних налога када се врши федерисано дељење. Да би се креирало федерисано дељење, нема потребе да се сервер дода као сервер којем се верује.", + "Each server must validate the other. This process may require a few cron cycles." : "Сваки сервер мора да потврди остале. За овај процес може бити потребно неколико cron циклуса.", "+ Add trusted server" : "+ Додај сервер од поверења", "Trusted server" : "Сервер од поверења", "Add" : "Додај" diff --git a/apps/federation/l10n/sv.js b/apps/federation/l10n/sv.js index dca2b3e79d0..ae2ff0bdb4c 100644 --- a/apps/federation/l10n/sv.js +++ b/apps/federation/l10n/sv.js @@ -2,13 +2,18 @@ OC.L10N.register( "federation", { "Added to the list of trusted servers" : "Tillagd i listan med betrodda servrar", + "No server found with ID: %s" : "Ingen server hittades med ID: %s", + "Could not remove server" : "Kunde inte ta bort server", "Server is already in the list of trusted servers." : "Servern finns redan i listan", "No server to federate with found" : "Ingen server att federera med hittades", "Could not add server" : "Kunde inte lägga till server", "Trusted servers" : "Betrodda servrar", "Federation" : "Federation", - "Federation allows you to connect with other trusted servers to exchange the user directory." : "Federation låter dig ansluta med andra betrodda servrar för att utbyta användarkatalogen.", - "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "Federation låter dig ansluta till andra betrodda servrar för att utbyta användarinformation. Till exempel kommer detta användas för att auto-komplettera externa användare för federerad delning.", + "Federation allows you to connect with other trusted servers to exchange the account directory." : "Federation låter dig ansluta med andra betrodda servrar för att utbyta användarkatalogen.", + "Federation allows you to connect with other trusted servers to exchange the account directory. For example this will be used to auto-complete external accounts for federated sharing." : "Federation låter dig ansluta till andra betrodda servrar för att utbyta användarkatalogen. Till exempel kommer detta användas för att auto-komplettera externa konton för federerad delning.", + "External documentation for Federated Cloud Sharing" : "Extern dokumentation för Federerad molndelning", + "Federation allows you to connect with other trusted servers to exchange the account directory. For example this will be used to auto-complete external accounts for federated sharing. It is not necessary to add a server as trusted server in order to create a federated share." : "Federation låter dig ansluta till andra betrodda servrar för att utbyta användarkatalogen. Till exempel kommer detta användas för att auto-komplettera externa användare för federerad delning. Det är inte nödvändigt att lägga till en server som betrodd för att skapa en federerad delning.", + "Each server must validate the other. This process may require a few cron cycles." : "Varje server måste validera den andra. Denna process kan kräva några cron-cykler.", "+ Add trusted server" : "+ Lägg till betrodd server", "Trusted server" : "Betrodd server", "Add" : "Lägg till" diff --git a/apps/federation/l10n/sv.json b/apps/federation/l10n/sv.json index e3265e71d57..78448971d78 100644 --- a/apps/federation/l10n/sv.json +++ b/apps/federation/l10n/sv.json @@ -1,12 +1,17 @@ { "translations": { "Added to the list of trusted servers" : "Tillagd i listan med betrodda servrar", + "No server found with ID: %s" : "Ingen server hittades med ID: %s", + "Could not remove server" : "Kunde inte ta bort server", "Server is already in the list of trusted servers." : "Servern finns redan i listan", "No server to federate with found" : "Ingen server att federera med hittades", "Could not add server" : "Kunde inte lägga till server", "Trusted servers" : "Betrodda servrar", "Federation" : "Federation", - "Federation allows you to connect with other trusted servers to exchange the user directory." : "Federation låter dig ansluta med andra betrodda servrar för att utbyta användarkatalogen.", - "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "Federation låter dig ansluta till andra betrodda servrar för att utbyta användarinformation. Till exempel kommer detta användas för att auto-komplettera externa användare för federerad delning.", + "Federation allows you to connect with other trusted servers to exchange the account directory." : "Federation låter dig ansluta med andra betrodda servrar för att utbyta användarkatalogen.", + "Federation allows you to connect with other trusted servers to exchange the account directory. For example this will be used to auto-complete external accounts for federated sharing." : "Federation låter dig ansluta till andra betrodda servrar för att utbyta användarkatalogen. Till exempel kommer detta användas för att auto-komplettera externa konton för federerad delning.", + "External documentation for Federated Cloud Sharing" : "Extern dokumentation för Federerad molndelning", + "Federation allows you to connect with other trusted servers to exchange the account directory. For example this will be used to auto-complete external accounts for federated sharing. It is not necessary to add a server as trusted server in order to create a federated share." : "Federation låter dig ansluta till andra betrodda servrar för att utbyta användarkatalogen. Till exempel kommer detta användas för att auto-komplettera externa användare för federerad delning. Det är inte nödvändigt att lägga till en server som betrodd för att skapa en federerad delning.", + "Each server must validate the other. This process may require a few cron cycles." : "Varje server måste validera den andra. Denna process kan kräva några cron-cykler.", "+ Add trusted server" : "+ Lägg till betrodd server", "Trusted server" : "Betrodd server", "Add" : "Lägg till" diff --git a/apps/federation/l10n/sw.js b/apps/federation/l10n/sw.js new file mode 100644 index 00000000000..4c09b59af82 --- /dev/null +++ b/apps/federation/l10n/sw.js @@ -0,0 +1,21 @@ +OC.L10N.register( + "federation", + { + "Added to the list of trusted servers" : " Imeongezwa kwenye orodha ya seva zinazoaminika", + "No server found with ID: %s" : "Hakuna seva iliyopatikana na kitambulisho: %s", + "Could not remove server" : "Isingeweza kuondoa seva", + "Server is already in the list of trusted servers." : "Seva tayari iko kwenye orodha ya seva zinazoaminika.", + "No server to federate with found" : "Hakuna seva ya kushirikiana na, iliyopatikana", + "Could not add server" : "Isingeweza kuongeza seva", + "Trusted servers" : "Seva zinazoaminiwa", + "Federation" : "Shirikisho", + "Federation allows you to connect with other trusted servers to exchange the account directory." : "Shirikisho hukuruhusu kuunganishwa na seva zingine zinazoaminika ili kubadilishana saraka ya akaunti.", + "Federation allows you to connect with other trusted servers to exchange the account directory. For example this will be used to auto-complete external accounts for federated sharing." : "Shirikisho hukuruhusu kuunganishwa na seva zingine zinazoaminika ili kubadilishana saraka ya akaunti. Kwa mfano hii itatumika kukamilisha kiotomatiki akaunti za nje kwa ushiriki wa shirikisho.", + "External documentation for Federated Cloud Sharing" : "Hati za nje za Ushirikiano wa Nextcloud Ulioshirikishwa", + "Federation allows you to connect with other trusted servers to exchange the account directory. For example this will be used to auto-complete external accounts for federated sharing. It is not necessary to add a server as trusted server in order to create a federated share." : "Shirikisho hukuruhusu kuunganishwa na seva zingine zinazoaminika ili kubadilishana saraka ya akaunti. Kwa mfano hii itatumika kukamilisha kiotomatiki akaunti za nje kwa kushiriki kwa shirikisho. Sio lazima kuongeza seva kama seva inayoaminika ili kuunda sehemu iliyoshirikishwa.", + "Each server must validate the other. This process may require a few cron cycles." : " Kila seva lazima ithibitishe nyingine. Mchakato huu unaweza kuhitaji mizunguko michache ya cron.", + "+ Add trusted server" : "+ ongeza seva inayoaminiwa", + "Trusted server" : "Seva inayoaminiwa", + "Add" : "Ongeza" +}, +"nplurals=2; plural=(n != 1);"); diff --git a/apps/federation/l10n/sw.json b/apps/federation/l10n/sw.json new file mode 100644 index 00000000000..6f9abc85cbc --- /dev/null +++ b/apps/federation/l10n/sw.json @@ -0,0 +1,19 @@ +{ "translations": { + "Added to the list of trusted servers" : " Imeongezwa kwenye orodha ya seva zinazoaminika", + "No server found with ID: %s" : "Hakuna seva iliyopatikana na kitambulisho: %s", + "Could not remove server" : "Isingeweza kuondoa seva", + "Server is already in the list of trusted servers." : "Seva tayari iko kwenye orodha ya seva zinazoaminika.", + "No server to federate with found" : "Hakuna seva ya kushirikiana na, iliyopatikana", + "Could not add server" : "Isingeweza kuongeza seva", + "Trusted servers" : "Seva zinazoaminiwa", + "Federation" : "Shirikisho", + "Federation allows you to connect with other trusted servers to exchange the account directory." : "Shirikisho hukuruhusu kuunganishwa na seva zingine zinazoaminika ili kubadilishana saraka ya akaunti.", + "Federation allows you to connect with other trusted servers to exchange the account directory. For example this will be used to auto-complete external accounts for federated sharing." : "Shirikisho hukuruhusu kuunganishwa na seva zingine zinazoaminika ili kubadilishana saraka ya akaunti. Kwa mfano hii itatumika kukamilisha kiotomatiki akaunti za nje kwa ushiriki wa shirikisho.", + "External documentation for Federated Cloud Sharing" : "Hati za nje za Ushirikiano wa Nextcloud Ulioshirikishwa", + "Federation allows you to connect with other trusted servers to exchange the account directory. For example this will be used to auto-complete external accounts for federated sharing. It is not necessary to add a server as trusted server in order to create a federated share." : "Shirikisho hukuruhusu kuunganishwa na seva zingine zinazoaminika ili kubadilishana saraka ya akaunti. Kwa mfano hii itatumika kukamilisha kiotomatiki akaunti za nje kwa kushiriki kwa shirikisho. Sio lazima kuongeza seva kama seva inayoaminika ili kuunda sehemu iliyoshirikishwa.", + "Each server must validate the other. This process may require a few cron cycles." : " Kila seva lazima ithibitishe nyingine. Mchakato huu unaweza kuhitaji mizunguko michache ya cron.", + "+ Add trusted server" : "+ ongeza seva inayoaminiwa", + "Trusted server" : "Seva inayoaminiwa", + "Add" : "Ongeza" +},"pluralForm" :"nplurals=2; plural=(n != 1);" +}
\ No newline at end of file diff --git a/apps/federation/l10n/tr.js b/apps/federation/l10n/tr.js index 9047e660bd3..e8a0f31fe2b 100644 --- a/apps/federation/l10n/tr.js +++ b/apps/federation/l10n/tr.js @@ -2,15 +2,19 @@ OC.L10N.register( "federation", { "Added to the list of trusted servers" : "Güvenilen sunucular listesine eklendi", + "No server found with ID: %s" : "Şu kimlikle bir sunucu bulunamadı: %s", + "Could not remove server" : "Sunucu kaldırılamadı", "Server is already in the list of trusted servers." : "Sunucu zaten güvenilen sunucu listesine eklenmiş.", "No server to federate with found" : "Birleştirilecek bir sunucu bulunamadı", "Could not add server" : "Sunucu eklenemedi", "Trusted servers" : "Güvenilen sunucular", "Federation" : "Birleşim", - "Federation allows you to connect with other trusted servers to exchange the user directory." : "Birleşim, diğer güvenilir sunucularla bağlantı kurarak kullanıcı dizininin paylaşılmasını sağlar.", - "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "Birleşik çalışma, diğer güvenilir sunucularla dosya/klasör paylaşımı yapılmasını sağlar. Örneğin, bu işlem birleşik paylaşım için dış kullanıcıların otomatik olarak tamamlanmasını sağlar.", - "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing. It is not necessary to add a server as trusted server in order to create a federated share." : "Birleşik çalışma, diğer güvenilir sunucularla dosya/klasör paylaşımı yapılmasını sağlar. Örneğin, bu işlem birleşik paylaşım için dış kullanıcıların otomatik olarak tamamlanmasını sağlar. Bir birleşik çalışma oluşturmak için güvenilir bir sunucu eklenmesi gerekmez.", - "+ Add trusted server" : "+ Güvenilir sunucu ekle", + "Federation allows you to connect with other trusted servers to exchange the account directory." : "Birleşim, diğer güvenilen sunucularla bağlantı kurarak hesap dizininin paylaşılmasını sağlar.", + "Federation allows you to connect with other trusted servers to exchange the account directory. For example this will be used to auto-complete external accounts for federated sharing." : "Birleşik çalışma, diğer güvenilen sunucularla hesap dizininin paylaşılmasını sağlar. Örneğin, bu işlem birleşik paylaşım için dış hesapların otomatik olarak tamamlanmasını sağlar.", + "External documentation for Federated Cloud Sharing" : "Birleşik bulut paylaşımı belgeleri", + "Federation allows you to connect with other trusted servers to exchange the account directory. For example this will be used to auto-complete external accounts for federated sharing. It is not necessary to add a server as trusted server in order to create a federated share." : "Birleşik çalışma, diğer güvenilen sunucularla hesap dizininin paylaşılmasını sağlar. Örneğin, bu işlem birleşik paylaşım için dış hesapların otomatik olarak tamamlanmasını sağlar. Bir birleşik çalışma oluşturmak için bir güvenilen sunucu eklenmesi gerekmez.", + "Each server must validate the other. This process may require a few cron cycles." : "Her sunucunun diğerini doğrulaması gerekir. Bu işlemin tamamlanması için birkaç zamanlanmış görev döngüsünün geçilmesi gerekebilir.", + "+ Add trusted server" : "+ Güvenilen sunucu ekle", "Trusted server" : "Güvenilen sunucu", "Add" : "Ekle" }, diff --git a/apps/federation/l10n/tr.json b/apps/federation/l10n/tr.json index c9b689dbb55..c0ed4ea0d74 100644 --- a/apps/federation/l10n/tr.json +++ b/apps/federation/l10n/tr.json @@ -1,14 +1,18 @@ { "translations": { "Added to the list of trusted servers" : "Güvenilen sunucular listesine eklendi", + "No server found with ID: %s" : "Şu kimlikle bir sunucu bulunamadı: %s", + "Could not remove server" : "Sunucu kaldırılamadı", "Server is already in the list of trusted servers." : "Sunucu zaten güvenilen sunucu listesine eklenmiş.", "No server to federate with found" : "Birleştirilecek bir sunucu bulunamadı", "Could not add server" : "Sunucu eklenemedi", "Trusted servers" : "Güvenilen sunucular", "Federation" : "Birleşim", - "Federation allows you to connect with other trusted servers to exchange the user directory." : "Birleşim, diğer güvenilir sunucularla bağlantı kurarak kullanıcı dizininin paylaşılmasını sağlar.", - "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "Birleşik çalışma, diğer güvenilir sunucularla dosya/klasör paylaşımı yapılmasını sağlar. Örneğin, bu işlem birleşik paylaşım için dış kullanıcıların otomatik olarak tamamlanmasını sağlar.", - "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing. It is not necessary to add a server as trusted server in order to create a federated share." : "Birleşik çalışma, diğer güvenilir sunucularla dosya/klasör paylaşımı yapılmasını sağlar. Örneğin, bu işlem birleşik paylaşım için dış kullanıcıların otomatik olarak tamamlanmasını sağlar. Bir birleşik çalışma oluşturmak için güvenilir bir sunucu eklenmesi gerekmez.", - "+ Add trusted server" : "+ Güvenilir sunucu ekle", + "Federation allows you to connect with other trusted servers to exchange the account directory." : "Birleşim, diğer güvenilen sunucularla bağlantı kurarak hesap dizininin paylaşılmasını sağlar.", + "Federation allows you to connect with other trusted servers to exchange the account directory. For example this will be used to auto-complete external accounts for federated sharing." : "Birleşik çalışma, diğer güvenilen sunucularla hesap dizininin paylaşılmasını sağlar. Örneğin, bu işlem birleşik paylaşım için dış hesapların otomatik olarak tamamlanmasını sağlar.", + "External documentation for Federated Cloud Sharing" : "Birleşik bulut paylaşımı belgeleri", + "Federation allows you to connect with other trusted servers to exchange the account directory. For example this will be used to auto-complete external accounts for federated sharing. It is not necessary to add a server as trusted server in order to create a federated share." : "Birleşik çalışma, diğer güvenilen sunucularla hesap dizininin paylaşılmasını sağlar. Örneğin, bu işlem birleşik paylaşım için dış hesapların otomatik olarak tamamlanmasını sağlar. Bir birleşik çalışma oluşturmak için bir güvenilen sunucu eklenmesi gerekmez.", + "Each server must validate the other. This process may require a few cron cycles." : "Her sunucunun diğerini doğrulaması gerekir. Bu işlemin tamamlanması için birkaç zamanlanmış görev döngüsünün geçilmesi gerekebilir.", + "+ Add trusted server" : "+ Güvenilen sunucu ekle", "Trusted server" : "Güvenilen sunucu", "Add" : "Ekle" },"pluralForm" :"nplurals=2; plural=(n > 1);" diff --git a/apps/federation/l10n/ug.js b/apps/federation/l10n/ug.js new file mode 100644 index 00000000000..eee95bdf3c8 --- /dev/null +++ b/apps/federation/l10n/ug.js @@ -0,0 +1,17 @@ +OC.L10N.register( + "federation", + { + "Added to the list of trusted servers" : "ئىشەنچلىك مۇلازىمېتىرلار تىزىملىكىگە قوشۇلدى", + "Server is already in the list of trusted servers." : "مۇلازىمېتىر ئاللىقاچان ئىشەنچلىك مۇلازىمېتىرلار تىزىملىكىدە.", + "No server to federate with found" : "تېپىلغان مۇلازىمېتىر يوق", + "Could not add server" : "مۇلازىمېتىرنى قوشالمىدى", + "Trusted servers" : "ئىشەنچلىك مۇلازىمېتىرلار", + "Federation" : "فېدېراتسىيە", + "Federation allows you to connect with other trusted servers to exchange the account directory." : "فېدېراتسىيە ھېسابات مۇندەرىجىسىنى ئالماشتۇرۇش ئۈچۈن باشقا ئىشەنچلىك مۇلازىمېتىرلار بىلەن ئۇلىنالايسىز.", + "Federation allows you to connect with other trusted servers to exchange the account directory. For example this will be used to auto-complete external accounts for federated sharing." : "فېدېراتسىيە ھېسابات مۇندەرىجىسىنى ئالماشتۇرۇش ئۈچۈن باشقا ئىشەنچلىك مۇلازىمېتىرلار بىلەن ئۇلىنالايسىز. مەسىلەن ، فېدېراتسىيە ئورتاقلىشىش ئۈچۈن تاشقى ھېساباتلارنى ئاپتوماتىك تاماملاشقا ئىشلىتىلىدۇ.", + "Federation allows you to connect with other trusted servers to exchange the account directory. For example this will be used to auto-complete external accounts for federated sharing. It is not necessary to add a server as trusted server in order to create a federated share." : "فېدېراتسىيە ھېسابات مۇندەرىجىسىنى ئالماشتۇرۇش ئۈچۈن باشقا ئىشەنچلىك مۇلازىمېتىرلار بىلەن ئۇلىنالايسىز. مەسىلەن ، فېدېراتسىيە ئورتاقلىشىش ئۈچۈن تاشقى ھېساباتلارنى ئاپتوماتىك تاماملاشقا ئىشلىتىلىدۇ. فېدېراتىپ ئورتاقلىشىش ئۈچۈن مۇلازىمېتىرنى ئىشەنچلىك مۇلازىمېتىر قىلىپ قوشۇشنىڭ ھاجىتى يوق.", + "+ Add trusted server" : "+ ئىشەنچلىك مۇلازىمېتىر قوشۇڭ", + "Trusted server" : "ئىشەنچلىك مۇلازىمېتىر", + "Add" : "قوش" +}, +"nplurals=2; plural=(n != 1);"); diff --git a/apps/federation/l10n/ug.json b/apps/federation/l10n/ug.json new file mode 100644 index 00000000000..796bdc4394b --- /dev/null +++ b/apps/federation/l10n/ug.json @@ -0,0 +1,15 @@ +{ "translations": { + "Added to the list of trusted servers" : "ئىشەنچلىك مۇلازىمېتىرلار تىزىملىكىگە قوشۇلدى", + "Server is already in the list of trusted servers." : "مۇلازىمېتىر ئاللىقاچان ئىشەنچلىك مۇلازىمېتىرلار تىزىملىكىدە.", + "No server to federate with found" : "تېپىلغان مۇلازىمېتىر يوق", + "Could not add server" : "مۇلازىمېتىرنى قوشالمىدى", + "Trusted servers" : "ئىشەنچلىك مۇلازىمېتىرلار", + "Federation" : "فېدېراتسىيە", + "Federation allows you to connect with other trusted servers to exchange the account directory." : "فېدېراتسىيە ھېسابات مۇندەرىجىسىنى ئالماشتۇرۇش ئۈچۈن باشقا ئىشەنچلىك مۇلازىمېتىرلار بىلەن ئۇلىنالايسىز.", + "Federation allows you to connect with other trusted servers to exchange the account directory. For example this will be used to auto-complete external accounts for federated sharing." : "فېدېراتسىيە ھېسابات مۇندەرىجىسىنى ئالماشتۇرۇش ئۈچۈن باشقا ئىشەنچلىك مۇلازىمېتىرلار بىلەن ئۇلىنالايسىز. مەسىلەن ، فېدېراتسىيە ئورتاقلىشىش ئۈچۈن تاشقى ھېساباتلارنى ئاپتوماتىك تاماملاشقا ئىشلىتىلىدۇ.", + "Federation allows you to connect with other trusted servers to exchange the account directory. For example this will be used to auto-complete external accounts for federated sharing. It is not necessary to add a server as trusted server in order to create a federated share." : "فېدېراتسىيە ھېسابات مۇندەرىجىسىنى ئالماشتۇرۇش ئۈچۈن باشقا ئىشەنچلىك مۇلازىمېتىرلار بىلەن ئۇلىنالايسىز. مەسىلەن ، فېدېراتسىيە ئورتاقلىشىش ئۈچۈن تاشقى ھېساباتلارنى ئاپتوماتىك تاماملاشقا ئىشلىتىلىدۇ. فېدېراتىپ ئورتاقلىشىش ئۈچۈن مۇلازىمېتىرنى ئىشەنچلىك مۇلازىمېتىر قىلىپ قوشۇشنىڭ ھاجىتى يوق.", + "+ Add trusted server" : "+ ئىشەنچلىك مۇلازىمېتىر قوشۇڭ", + "Trusted server" : "ئىشەنچلىك مۇلازىمېتىر", + "Add" : "قوش" +},"pluralForm" :"nplurals=2; plural=(n != 1);" +}
\ No newline at end of file diff --git a/apps/federation/l10n/uk.js b/apps/federation/l10n/uk.js index 5a0f6e16b9c..adcd2ee732b 100644 --- a/apps/federation/l10n/uk.js +++ b/apps/federation/l10n/uk.js @@ -2,13 +2,18 @@ OC.L10N.register( "federation", { "Added to the list of trusted servers" : "Сервер додано до списку довірених серверів", + "No server found with ID: %s" : "Не знайдено сервер з ідентифікатором: %s", + "Could not remove server" : "Не вдалося видалити сервер", "Server is already in the list of trusted servers." : "Сервер вже знаходиться в переліку довірених серверів", "No server to federate with found" : "Не знайдено жодного сервера для об'єднання", "Could not add server" : "Не вдалося додати сервер", "Trusted servers" : "Довірені сервера", "Federation" : "Об'єднання", - "Federation allows you to connect with other trusted servers to exchange the user directory." : "Об'єднання дає вам можливість встановити зв'язок з іншими довіреними серверами для обміну користувацькими каталогами.", - "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "Об'єднання дає вам можливість встановити зв'язок з іншими довіреними серверами для обміну користувацькими каталогами. Наприклад це може бути використане для авто-доповнення зовнішнім користувачам для об'єднаних поширень.", + "Federation allows you to connect with other trusted servers to exchange the account directory." : "Об'єднання хмар дозволяє з'єднуватися з іншими довіреними серверами й обмінюватися обліковими даними користувачів.", + "Federation allows you to connect with other trusted servers to exchange the account directory. For example this will be used to auto-complete external accounts for federated sharing." : "Об'єднання хмар дозволяє з'єднуватися з іншими довіреними серверами й обмінюватися обліковими даними користувачів. Так, це може бути корисно для автоматичної підстановки зовнішніх користувачів під час надання у спільний доступ ресурсів об'єднаних хмар.", + "External documentation for Federated Cloud Sharing" : "Документація з надання доступу у об'єднаних хмарах", + "Federation allows you to connect with other trusted servers to exchange the account directory. For example this will be used to auto-complete external accounts for federated sharing. It is not necessary to add a server as trusted server in order to create a federated share." : "Об'єднання хмар дозволяє з'єднуватися з іншими довіреними серверами й обмінюватися обліковими даними користувачів. Так, це може бути корисно для автоматичної підстановки зовнішніх користувачів під час надання у спільний доступ ресурсів об'єднаних хмар. Необов'язково додавати сервер яко довірений для створення спільного ресурсу між об'єднаними хмарами.", + "Each server must validate the other. This process may require a few cron cycles." : "Кожен сервер має підтвердити один одного. Цей процес може вимагати кількох циклів виконання cron.", "+ Add trusted server" : "Додати довірений сервер", "Trusted server" : "Довірений сервер", "Add" : "Додати" diff --git a/apps/federation/l10n/uk.json b/apps/federation/l10n/uk.json index 37d3841a28c..97e4915bdf7 100644 --- a/apps/federation/l10n/uk.json +++ b/apps/federation/l10n/uk.json @@ -1,12 +1,17 @@ { "translations": { "Added to the list of trusted servers" : "Сервер додано до списку довірених серверів", + "No server found with ID: %s" : "Не знайдено сервер з ідентифікатором: %s", + "Could not remove server" : "Не вдалося видалити сервер", "Server is already in the list of trusted servers." : "Сервер вже знаходиться в переліку довірених серверів", "No server to federate with found" : "Не знайдено жодного сервера для об'єднання", "Could not add server" : "Не вдалося додати сервер", "Trusted servers" : "Довірені сервера", "Federation" : "Об'єднання", - "Federation allows you to connect with other trusted servers to exchange the user directory." : "Об'єднання дає вам можливість встановити зв'язок з іншими довіреними серверами для обміну користувацькими каталогами.", - "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "Об'єднання дає вам можливість встановити зв'язок з іншими довіреними серверами для обміну користувацькими каталогами. Наприклад це може бути використане для авто-доповнення зовнішнім користувачам для об'єднаних поширень.", + "Federation allows you to connect with other trusted servers to exchange the account directory." : "Об'єднання хмар дозволяє з'єднуватися з іншими довіреними серверами й обмінюватися обліковими даними користувачів.", + "Federation allows you to connect with other trusted servers to exchange the account directory. For example this will be used to auto-complete external accounts for federated sharing." : "Об'єднання хмар дозволяє з'єднуватися з іншими довіреними серверами й обмінюватися обліковими даними користувачів. Так, це може бути корисно для автоматичної підстановки зовнішніх користувачів під час надання у спільний доступ ресурсів об'єднаних хмар.", + "External documentation for Federated Cloud Sharing" : "Документація з надання доступу у об'єднаних хмарах", + "Federation allows you to connect with other trusted servers to exchange the account directory. For example this will be used to auto-complete external accounts for federated sharing. It is not necessary to add a server as trusted server in order to create a federated share." : "Об'єднання хмар дозволяє з'єднуватися з іншими довіреними серверами й обмінюватися обліковими даними користувачів. Так, це може бути корисно для автоматичної підстановки зовнішніх користувачів під час надання у спільний доступ ресурсів об'єднаних хмар. Необов'язково додавати сервер яко довірений для створення спільного ресурсу між об'єднаними хмарами.", + "Each server must validate the other. This process may require a few cron cycles." : "Кожен сервер має підтвердити один одного. Цей процес може вимагати кількох циклів виконання cron.", "+ Add trusted server" : "Додати довірений сервер", "Trusted server" : "Довірений сервер", "Add" : "Додати" diff --git a/apps/federation/l10n/vi.js b/apps/federation/l10n/vi.js index f32fdf4334c..6e3ccfb1243 100644 --- a/apps/federation/l10n/vi.js +++ b/apps/federation/l10n/vi.js @@ -7,8 +7,6 @@ OC.L10N.register( "Could not add server" : "Không thể thêm máy chủ", "Trusted servers" : "Các máy chủ được tin tưởng", "Federation" : "Kết nối Liên Bang ", - "Federation allows you to connect with other trusted servers to exchange the user directory." : "Kết nối Liên Bang cho phép bạn có thể kết nối với các máy chủ được tin tưởng khác để trao đổi chỉ mục người dùng", - "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "Kết nối Liên Bang cho phép bạn kết nối với các máy chủ tin tưởng khác để trao đổi chỉ mục người dùng. Lấy ví dụ, kết nối này sẽ được dùng để tự-động-điền các người dùng bên ngoài cho các chia sẻ Liên Bang.", "+ Add trusted server" : "+ Thêm máy chủ được tin cậy", "Trusted server" : "Máy chủ được tin cậy", "Add" : "Thêm" diff --git a/apps/federation/l10n/vi.json b/apps/federation/l10n/vi.json index 2e3160eb2fe..e4fb729c7b5 100644 --- a/apps/federation/l10n/vi.json +++ b/apps/federation/l10n/vi.json @@ -5,8 +5,6 @@ "Could not add server" : "Không thể thêm máy chủ", "Trusted servers" : "Các máy chủ được tin tưởng", "Federation" : "Kết nối Liên Bang ", - "Federation allows you to connect with other trusted servers to exchange the user directory." : "Kết nối Liên Bang cho phép bạn có thể kết nối với các máy chủ được tin tưởng khác để trao đổi chỉ mục người dùng", - "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "Kết nối Liên Bang cho phép bạn kết nối với các máy chủ tin tưởng khác để trao đổi chỉ mục người dùng. Lấy ví dụ, kết nối này sẽ được dùng để tự-động-điền các người dùng bên ngoài cho các chia sẻ Liên Bang.", "+ Add trusted server" : "+ Thêm máy chủ được tin cậy", "Trusted server" : "Máy chủ được tin cậy", "Add" : "Thêm" diff --git a/apps/federation/l10n/zh_CN.js b/apps/federation/l10n/zh_CN.js index 32f1bd1a34d..ac6b51d5659 100644 --- a/apps/federation/l10n/zh_CN.js +++ b/apps/federation/l10n/zh_CN.js @@ -2,14 +2,18 @@ OC.L10N.register( "federation", { "Added to the list of trusted servers" : "添加到受信任服务器列表中", + "No server found with ID: %s" : "未找到此 ID 的服务器:%s", + "Could not remove server" : "无法移除服务器", "Server is already in the list of trusted servers." : "服务器已在受信任服务器列表中。", "No server to federate with found" : "没有找到联合云服务器", "Could not add server" : "无法添加服务器", "Trusted servers" : "受信任服务器", "Federation" : "联合云", - "Federation allows you to connect with other trusted servers to exchange the user directory." : "联合云功能允许您连接其他受信任服务器以交换用户目录。", - "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "联合云功能允许您与其他受信任的服务器连接并交换用户目录。 例如,这将用于自动完成外部用户组成共享联合。", - "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing. It is not necessary to add a server as trusted server in order to create a federated share." : "联合云(Federation)应用允许您连接其他受信任的服务器以交换用户目录。例如,这将用于自动完成外部用户的联合共享。无需将服务器添加为受信任服务器即可创建联合共享。", + "Federation allows you to connect with other trusted servers to exchange the account directory." : "联合允许您与其他受信任的服务器连接以交换账号目录。", + "Federation allows you to connect with other trusted servers to exchange the account directory. For example this will be used to auto-complete external accounts for federated sharing." : "联合云允许您与其他受信任的服务器连接以交换帐户目录。例如,这将用于自动完成联合云共享的外部帐户。", + "External documentation for Federated Cloud Sharing" : "联合云共享的外部文档", + "Federation allows you to connect with other trusted servers to exchange the account directory. For example this will be used to auto-complete external accounts for federated sharing. It is not necessary to add a server as trusted server in order to create a federated share." : "联合允许您与其他受信任的服务器连接以交换账号目录。例如,这将用于自动完成联合共享的外部账号。无需将服务器添加为受信任的服务器即可创建联合共享。", + "Each server must validate the other. This process may require a few cron cycles." : "每个服务器都必须验证其他服务器,此过程可能需要几个 cron 周期。", "+ Add trusted server" : "+ 添加受信任服务器", "Trusted server" : "受信任服务器", "Add" : "添加" diff --git a/apps/federation/l10n/zh_CN.json b/apps/federation/l10n/zh_CN.json index b41a4849508..8c53944acbf 100644 --- a/apps/federation/l10n/zh_CN.json +++ b/apps/federation/l10n/zh_CN.json @@ -1,13 +1,17 @@ { "translations": { "Added to the list of trusted servers" : "添加到受信任服务器列表中", + "No server found with ID: %s" : "未找到此 ID 的服务器:%s", + "Could not remove server" : "无法移除服务器", "Server is already in the list of trusted servers." : "服务器已在受信任服务器列表中。", "No server to federate with found" : "没有找到联合云服务器", "Could not add server" : "无法添加服务器", "Trusted servers" : "受信任服务器", "Federation" : "联合云", - "Federation allows you to connect with other trusted servers to exchange the user directory." : "联合云功能允许您连接其他受信任服务器以交换用户目录。", - "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "联合云功能允许您与其他受信任的服务器连接并交换用户目录。 例如,这将用于自动完成外部用户组成共享联合。", - "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing. It is not necessary to add a server as trusted server in order to create a federated share." : "联合云(Federation)应用允许您连接其他受信任的服务器以交换用户目录。例如,这将用于自动完成外部用户的联合共享。无需将服务器添加为受信任服务器即可创建联合共享。", + "Federation allows you to connect with other trusted servers to exchange the account directory." : "联合允许您与其他受信任的服务器连接以交换账号目录。", + "Federation allows you to connect with other trusted servers to exchange the account directory. For example this will be used to auto-complete external accounts for federated sharing." : "联合云允许您与其他受信任的服务器连接以交换帐户目录。例如,这将用于自动完成联合云共享的外部帐户。", + "External documentation for Federated Cloud Sharing" : "联合云共享的外部文档", + "Federation allows you to connect with other trusted servers to exchange the account directory. For example this will be used to auto-complete external accounts for federated sharing. It is not necessary to add a server as trusted server in order to create a federated share." : "联合允许您与其他受信任的服务器连接以交换账号目录。例如,这将用于自动完成联合共享的外部账号。无需将服务器添加为受信任的服务器即可创建联合共享。", + "Each server must validate the other. This process may require a few cron cycles." : "每个服务器都必须验证其他服务器,此过程可能需要几个 cron 周期。", "+ Add trusted server" : "+ 添加受信任服务器", "Trusted server" : "受信任服务器", "Add" : "添加" diff --git a/apps/federation/l10n/zh_HK.js b/apps/federation/l10n/zh_HK.js index 5f3197944cf..573672c5211 100644 --- a/apps/federation/l10n/zh_HK.js +++ b/apps/federation/l10n/zh_HK.js @@ -2,14 +2,18 @@ OC.L10N.register( "federation", { "Added to the list of trusted servers" : "已加入信任伺服器清單", + "No server found with ID: %s" : "沒有找到此 ID 的伺服器:%s", + "Could not remove server" : "無法移除伺服器", "Server is already in the list of trusted servers." : "伺服器已經在信任清單內", "No server to federate with found" : "沒有找到可結盟的伺服器", "Could not add server" : "無法加入伺服器", "Trusted servers" : "信任的伺服器", "Federation" : "聯盟", - "Federation allows you to connect with other trusted servers to exchange the user directory." : "聯盟功能允許您與信任的伺服器連結,交換用戶列表。", - "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "聯盟功能允許您與信任的伺服器連結,交換用戶列表。舉例來說,與其他雲端聯盟的用戶分享檔案時,有了這一份列表,就可以在輸入框搜尋他們的用戶名稱。", - "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing. It is not necessary to add a server as trusted server in order to create a federated share." : "聯盟功能允許您與信任的伺服器連結,交換用戶列表。舉例來說,與其他雲端聯盟的用戶分享檔案時,有了這一份列表,就可以在輸入框搜尋他們的用戶名稱。不必將伺服器新增為受信任的伺服器就可以建立聯盟分享。", + "Federation allows you to connect with other trusted servers to exchange the account directory." : "聯盟功能允許您與信任的伺服器連結,交換帳戶目錄。", + "Federation allows you to connect with other trusted servers to exchange the account directory. For example this will be used to auto-complete external accounts for federated sharing." : "聯盟功能允許您與信任的伺服器連結,交換帳戶目錄。舉例來說,與其他雲端聯盟的帳戶分享檔案時,有了這一份列表,就可以在輸入框搜尋他們的帳戶名稱。", + "External documentation for Federated Cloud Sharing" : "聯邦雲共享(Federated Cloud Sharing)的外部說明書", + "Federation allows you to connect with other trusted servers to exchange the account directory. For example this will be used to auto-complete external accounts for federated sharing. It is not necessary to add a server as trusted server in order to create a federated share." : "聯盟功能允許您與信任的伺服器連結,交換帳戶目錄。舉例來說,與其他雲端聯盟的用戶分享檔案時,有了這一份目錄,就可以在輸入框搜尋他們的帳戶名稱。不必將伺服器新增為受信任的伺服器就可以建立聯盟分享。", + "Each server must validate the other. This process may require a few cron cycles." : "每個伺服器必須彼此驗證。此過程可能需要幾個 cron 周期。", "+ Add trusted server" : "+ 加入信任的伺服器", "Trusted server" : "信任的伺服器", "Add" : "新增" diff --git a/apps/federation/l10n/zh_HK.json b/apps/federation/l10n/zh_HK.json index 76ebea5be9a..42b53588880 100644 --- a/apps/federation/l10n/zh_HK.json +++ b/apps/federation/l10n/zh_HK.json @@ -1,13 +1,17 @@ { "translations": { "Added to the list of trusted servers" : "已加入信任伺服器清單", + "No server found with ID: %s" : "沒有找到此 ID 的伺服器:%s", + "Could not remove server" : "無法移除伺服器", "Server is already in the list of trusted servers." : "伺服器已經在信任清單內", "No server to federate with found" : "沒有找到可結盟的伺服器", "Could not add server" : "無法加入伺服器", "Trusted servers" : "信任的伺服器", "Federation" : "聯盟", - "Federation allows you to connect with other trusted servers to exchange the user directory." : "聯盟功能允許您與信任的伺服器連結,交換用戶列表。", - "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "聯盟功能允許您與信任的伺服器連結,交換用戶列表。舉例來說,與其他雲端聯盟的用戶分享檔案時,有了這一份列表,就可以在輸入框搜尋他們的用戶名稱。", - "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing. It is not necessary to add a server as trusted server in order to create a federated share." : "聯盟功能允許您與信任的伺服器連結,交換用戶列表。舉例來說,與其他雲端聯盟的用戶分享檔案時,有了這一份列表,就可以在輸入框搜尋他們的用戶名稱。不必將伺服器新增為受信任的伺服器就可以建立聯盟分享。", + "Federation allows you to connect with other trusted servers to exchange the account directory." : "聯盟功能允許您與信任的伺服器連結,交換帳戶目錄。", + "Federation allows you to connect with other trusted servers to exchange the account directory. For example this will be used to auto-complete external accounts for federated sharing." : "聯盟功能允許您與信任的伺服器連結,交換帳戶目錄。舉例來說,與其他雲端聯盟的帳戶分享檔案時,有了這一份列表,就可以在輸入框搜尋他們的帳戶名稱。", + "External documentation for Federated Cloud Sharing" : "聯邦雲共享(Federated Cloud Sharing)的外部說明書", + "Federation allows you to connect with other trusted servers to exchange the account directory. For example this will be used to auto-complete external accounts for federated sharing. It is not necessary to add a server as trusted server in order to create a federated share." : "聯盟功能允許您與信任的伺服器連結,交換帳戶目錄。舉例來說,與其他雲端聯盟的用戶分享檔案時,有了這一份目錄,就可以在輸入框搜尋他們的帳戶名稱。不必將伺服器新增為受信任的伺服器就可以建立聯盟分享。", + "Each server must validate the other. This process may require a few cron cycles." : "每個伺服器必須彼此驗證。此過程可能需要幾個 cron 周期。", "+ Add trusted server" : "+ 加入信任的伺服器", "Trusted server" : "信任的伺服器", "Add" : "新增" diff --git a/apps/federation/l10n/zh_TW.js b/apps/federation/l10n/zh_TW.js index 33e05118871..567713c353f 100644 --- a/apps/federation/l10n/zh_TW.js +++ b/apps/federation/l10n/zh_TW.js @@ -2,14 +2,18 @@ OC.L10N.register( "federation", { "Added to the list of trusted servers" : "已加入信任伺服器清單", - "Server is already in the list of trusted servers." : "伺服器已經在信任清單內", - "No server to federate with found" : "沒有找到可聯盟的伺服器", + "No server found with ID: %s" : "沒有找到此 ID 的伺服器:%s", + "Could not remove server" : "無法移除伺服器", + "Server is already in the list of trusted servers." : "伺服器已在信任清單內。", + "No server to federate with found" : "沒有找到可聯邦的伺服器", "Could not add server" : "無法新增伺服器", "Trusted servers" : "信任的伺服器", - "Federation" : "聯盟", - "Federation allows you to connect with other trusted servers to exchange the user directory." : "聯盟功能允許您與信任的伺服器連結,交換使用者列表。", - "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "聯盟功能允許您與信任的伺服器連結,交換使用者列表。舉例來說,與其他雲端聯盟的使用者分享檔案時,有了這一份列表,就可以在輸入框搜尋他們的使用者名稱。", - "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing. It is not necessary to add a server as trusted server in order to create a federated share." : "聯盟功能允許您與信任的伺服器連結,交換使用者列表。舉例來說,與其他雲端聯盟的使用者分享檔案時,有了這一份列表,就可以在輸入框搜尋他們的使用者名稱。不必將伺服器新增為受信任的伺服器就可以建立聯盟分享。", + "Federation" : "聯邦", + "Federation allows you to connect with other trusted servers to exchange the account directory." : "聯盟功能允許您與信任的伺服器連結,交換帳號列表。", + "Federation allows you to connect with other trusted servers to exchange the account directory. For example this will be used to auto-complete external accounts for federated sharing." : "聯盟功能允許您與信任的伺服器連結,交換帳號列表。舉例來說,與其他雲端聯盟的使用者分享檔案時,有了這一份列表,就可以在輸入框搜尋他們的帳號名稱。", + "External documentation for Federated Cloud Sharing" : "聯邦雲端分享的外部文件", + "Federation allows you to connect with other trusted servers to exchange the account directory. For example this will be used to auto-complete external accounts for federated sharing. It is not necessary to add a server as trusted server in order to create a federated share." : "聯盟功能允許您與信任的伺服器連結,交換使用者列表。舉例來說,與其他雲端聯盟的帳號分享檔案時,有了這一份列表,就可以在輸入框搜尋他們的帳號名稱。不必將伺服器新增為受信任的伺服器就可以建立聯盟分享。", + "Each server must validate the other. This process may require a few cron cycles." : "每個伺服器都必須驗證其他伺服器。這個過程可能需要幾個 cron 循環。", "+ Add trusted server" : "+ 新增信任的伺服器", "Trusted server" : "信任的伺服器", "Add" : "新增" diff --git a/apps/federation/l10n/zh_TW.json b/apps/federation/l10n/zh_TW.json index 07bc649d4e6..e74ac19f36f 100644 --- a/apps/federation/l10n/zh_TW.json +++ b/apps/federation/l10n/zh_TW.json @@ -1,13 +1,17 @@ { "translations": { "Added to the list of trusted servers" : "已加入信任伺服器清單", - "Server is already in the list of trusted servers." : "伺服器已經在信任清單內", - "No server to federate with found" : "沒有找到可聯盟的伺服器", + "No server found with ID: %s" : "沒有找到此 ID 的伺服器:%s", + "Could not remove server" : "無法移除伺服器", + "Server is already in the list of trusted servers." : "伺服器已在信任清單內。", + "No server to federate with found" : "沒有找到可聯邦的伺服器", "Could not add server" : "無法新增伺服器", "Trusted servers" : "信任的伺服器", - "Federation" : "聯盟", - "Federation allows you to connect with other trusted servers to exchange the user directory." : "聯盟功能允許您與信任的伺服器連結,交換使用者列表。", - "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "聯盟功能允許您與信任的伺服器連結,交換使用者列表。舉例來說,與其他雲端聯盟的使用者分享檔案時,有了這一份列表,就可以在輸入框搜尋他們的使用者名稱。", - "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing. It is not necessary to add a server as trusted server in order to create a federated share." : "聯盟功能允許您與信任的伺服器連結,交換使用者列表。舉例來說,與其他雲端聯盟的使用者分享檔案時,有了這一份列表,就可以在輸入框搜尋他們的使用者名稱。不必將伺服器新增為受信任的伺服器就可以建立聯盟分享。", + "Federation" : "聯邦", + "Federation allows you to connect with other trusted servers to exchange the account directory." : "聯盟功能允許您與信任的伺服器連結,交換帳號列表。", + "Federation allows you to connect with other trusted servers to exchange the account directory. For example this will be used to auto-complete external accounts for federated sharing." : "聯盟功能允許您與信任的伺服器連結,交換帳號列表。舉例來說,與其他雲端聯盟的使用者分享檔案時,有了這一份列表,就可以在輸入框搜尋他們的帳號名稱。", + "External documentation for Federated Cloud Sharing" : "聯邦雲端分享的外部文件", + "Federation allows you to connect with other trusted servers to exchange the account directory. For example this will be used to auto-complete external accounts for federated sharing. It is not necessary to add a server as trusted server in order to create a federated share." : "聯盟功能允許您與信任的伺服器連結,交換使用者列表。舉例來說,與其他雲端聯盟的帳號分享檔案時,有了這一份列表,就可以在輸入框搜尋他們的帳號名稱。不必將伺服器新增為受信任的伺服器就可以建立聯盟分享。", + "Each server must validate the other. This process may require a few cron cycles." : "每個伺服器都必須驗證其他伺服器。這個過程可能需要幾個 cron 循環。", "+ Add trusted server" : "+ 新增信任的伺服器", "Trusted server" : "信任的伺服器", "Add" : "新增" diff --git a/apps/federation/lib/AppInfo/Application.php b/apps/federation/lib/AppInfo/Application.php index d564fb4a20b..358e3f68d50 100644 --- a/apps/federation/lib/AppInfo/Application.php +++ b/apps/federation/lib/AppInfo/Application.php @@ -1,32 +1,14 @@ <?php + /** - * @copyright Copyright (c) 2016, ownCloud, Inc. - * - * @author Björn Schießle <bjoern@schiessle.org> - * @author Joas Schilling <coding@schilljs.com> - * @author Morris Jobke <hey@morrisjobke.de> - * @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: 2016-2024 Nextcloud GmbH and Nextcloud contributors + * SPDX-FileCopyrightText: 2016 ownCloud, Inc. + * SPDX-License-Identifier: AGPL-3.0-only */ namespace OCA\Federation\AppInfo; use OCA\DAV\Events\SabrePluginAuthInitEvent; use OCA\Federation\Listener\SabrePluginAuthInitListener; -use OCA\Federation\Middleware\AddServerMiddleware; use OCP\AppFramework\App; use OCP\AppFramework\Bootstrap\IBootContext; use OCP\AppFramework\Bootstrap\IBootstrap; @@ -42,8 +24,6 @@ class Application extends App implements IBootstrap { } public function register(IRegistrationContext $context): void { - $context->registerMiddleware(AddServerMiddleware::class); - $context->registerEventListener(SabrePluginAuthInitEvent::class, SabrePluginAuthInitListener::class); } diff --git a/apps/federation/lib/BackgroundJob/GetSharedSecret.php b/apps/federation/lib/BackgroundJob/GetSharedSecret.php index 5379a837151..dc57db9fd62 100644 --- a/apps/federation/lib/BackgroundJob/GetSharedSecret.php +++ b/apps/federation/lib/BackgroundJob/GetSharedSecret.php @@ -1,31 +1,9 @@ <?php + /** - * @copyright Copyright (c) 2016, ownCloud, Inc. - * - * @author Arthur Schiwon <blizzz@arthur-schiwon.de> - * @author Bjoern Schiessle <bjoern@schiessle.org> - * @author Björn Schießle <bjoern@schiessle.org> - * @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 Robin Appelman <robin@icewind.nl> - * @author Roeland Jago Douma <roeland@famdouma.nl> - * - * @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\Federation\BackgroundJob; @@ -39,85 +17,47 @@ use OCP\BackgroundJob\Job; use OCP\Http\Client\IClient; use OCP\Http\Client\IClientService; use OCP\Http\Client\IResponse; -use OCP\ILogger; +use OCP\IConfig; use OCP\IURLGenerator; use OCP\OCS\IDiscoveryService; +use Psr\Log\LoggerInterface; /** * Class GetSharedSecret * - * request shared secret from remote Nextcloud + * Request shared secret from remote Nextcloud * * @package OCA\Federation\Backgroundjob */ class GetSharedSecret extends Job { + private IClient $httpClient; + protected bool $retainJob = false; + private string $defaultEndPoint = '/ocs/v2.php/apps/federation/api/v1/shared-secret'; + /** 30 day = 2592000sec */ + private int $maxLifespan = 2592000; - /** @var IClient */ - private $httpClient; - - /** @var IJobList */ - private $jobList; - - /** @var IURLGenerator */ - private $urlGenerator; - - /** @var TrustedServers */ - private $trustedServers; - - /** @var IDiscoveryService */ - private $ocsDiscoveryService; - - /** @var ILogger */ - private $logger; - - /** @var bool */ - protected $retainJob = false; - - private $defaultEndPoint = '/ocs/v2.php/apps/federation/api/v1/shared-secret'; - - /** @var int 30 day = 2592000sec */ - private $maxLifespan = 2592000; - - /** - * RequestSharedSecret constructor. - * - * @param IClientService $httpClientService - * @param IURLGenerator $urlGenerator - * @param IJobList $jobList - * @param TrustedServers $trustedServers - * @param ILogger $logger - * @param IDiscoveryService $ocsDiscoveryService - * @param ITimeFactory $timeFactory - */ public function __construct( IClientService $httpClientService, - IURLGenerator $urlGenerator, - IJobList $jobList, - TrustedServers $trustedServers, - ILogger $logger, - IDiscoveryService $ocsDiscoveryService, - ITimeFactory $timeFactory + private IURLGenerator $urlGenerator, + private IJobList $jobList, + private TrustedServers $trustedServers, + private LoggerInterface $logger, + private IDiscoveryService $ocsDiscoveryService, + ITimeFactory $timeFactory, + private IConfig $config, ) { parent::__construct($timeFactory); - $this->logger = $logger; $this->httpClient = $httpClientService->newClient(); - $this->jobList = $jobList; - $this->urlGenerator = $urlGenerator; - $this->ocsDiscoveryService = $ocsDiscoveryService; - $this->trustedServers = $trustedServers; } /** - * run the job, then remove it from the joblist - * - * @param IJobList $jobList - * @param ILogger|null $logger + * Run the job, then remove it from the joblist */ - public function execute(IJobList $jobList, ILogger $logger = null) { + public function start(IJobList $jobList): void { $target = $this->argument['url']; // only execute if target is still in the list of trusted domains if ($this->trustedServers->isTrustedServer($target)) { - $this->parentExecute($jobList, $logger); + $this->parentStart($jobList); } $jobList->remove($this, $this->argument); @@ -127,14 +67,8 @@ class GetSharedSecret extends Job { } } - /** - * call execute() method of parent - * - * @param IJobList $jobList - * @param ILogger $logger - */ - protected function parentExecute($jobList, $logger = null) { - parent::execute($jobList, $logger); + protected function parentStart(IJobList $jobList): void { + parent::start($jobList); } protected function run($argument) { @@ -148,13 +82,14 @@ class GetSharedSecret extends Job { // kill job after 30 days of trying $deadline = $currentTime - $this->maxLifespan; if ($created < $deadline) { + $this->logger->warning("The job to get the shared secret job is too old and gets stopped now without retention. Setting server status of '{$target}' to failure."); $this->retainJob = false; - $this->trustedServers->setServerStatus($target,TrustedServers::STATUS_FAILURE); + $this->trustedServers->setServerStatus($target, TrustedServers::STATUS_FAILURE); return; } $endPoints = $this->ocsDiscoveryService->discover($target, 'FEDERATED_SHARING'); - $endPoint = isset($endPoints['shared-secret']) ? $endPoints['shared-secret'] : $this->defaultEndPoint; + $endPoint = $endPoints['shared-secret'] ?? $this->defaultEndPoint; // make sure that we have a well formatted url $url = rtrim($target, '/') . '/' . trim($endPoint, '/'); @@ -164,14 +99,14 @@ class GetSharedSecret extends Job { $result = $this->httpClient->get( $url, [ - 'query' => - [ - 'url' => $source, - 'token' => $token, - 'format' => 'json', - ], + 'query' => [ + 'url' => $source, + 'token' => $token, + 'format' => 'json', + ], 'timeout' => 3, 'connect_timeout' => 3, + 'verify' => !$this->config->getSystemValue('sharing.federation.allowSelfSignedCertificates', false), ] ); @@ -179,20 +114,20 @@ class GetSharedSecret extends Job { } catch (ClientException $e) { $status = $e->getCode(); if ($status === Http::STATUS_FORBIDDEN) { - $this->logger->info($target . ' refused to exchange a shared secret with you.', ['app' => 'federation']); + $this->logger->info($target . ' refused to exchange a shared secret with you.'); } else { - $this->logger->info($target . ' responded with a ' . $status . ' containing: ' . $e->getMessage(), ['app' => 'federation']); + $this->logger->info($target . ' responded with a ' . $status . ' containing: ' . $e->getMessage()); } } catch (RequestException $e) { $status = -1; // There is no status code if we could not connect - $this->logger->logException($e, [ - 'message' => 'Could not connect to ' . $target, - 'level' => ILogger::INFO, - 'app' => 'federation', + $this->logger->info('Could not connect to ' . $target, [ + 'exception' => $e, ]); } catch (\Throwable $e) { $status = Http::STATUS_INTERNAL_SERVER_ERROR; - $this->logger->logException($e, ['app' => 'federation']); + $this->logger->error($e->getMessage(), [ + 'exception' => $e, + ]); } // if we received a unexpected response we try again later @@ -208,13 +143,12 @@ class GetSharedSecret extends Job { $result = json_decode($body, true); if (isset($result['ocs']['data']['sharedSecret'])) { $this->trustedServers->addSharedSecret( - $target, - $result['ocs']['data']['sharedSecret'] + $target, + $result['ocs']['data']['sharedSecret'] ); } else { $this->logger->error( - 'remote server "' . $target . '"" does not return a valid shared secret. Received data: ' . $body, - ['app' => 'federation'] + 'remote server "' . $target . '"" does not return a valid shared secret. Received data: ' . $body ); $this->trustedServers->setServerStatus($target, TrustedServers::STATUS_FAILURE); } @@ -222,13 +156,13 @@ class GetSharedSecret extends Job { } /** - * re-add background job + * Re-add background job * * @param array $argument */ - protected function reAddJob(array $argument) { + protected function reAddJob(array $argument): void { $url = $argument['url']; - $created = isset($argument['created']) ? (int)$argument['created'] : $this->time->getTime(); + $created = $argument['created'] ?? $this->time->getTime(); $token = $argument['token']; $this->jobList->add( GetSharedSecret::class, diff --git a/apps/federation/lib/BackgroundJob/RequestSharedSecret.php b/apps/federation/lib/BackgroundJob/RequestSharedSecret.php index 2080418af61..4d57d1f6aef 100644 --- a/apps/federation/lib/BackgroundJob/RequestSharedSecret.php +++ b/apps/federation/lib/BackgroundJob/RequestSharedSecret.php @@ -1,30 +1,11 @@ <?php + +declare(strict_types=1); + /** - * @copyright Copyright (c) 2016, ownCloud, Inc. - * - * @author Bjoern Schiessle <bjoern@schiessle.org> - * @author Björn Schießle <bjoern@schiessle.org> - * @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 Robin Appelman <robin@icewind.nl> - * @author Roeland Jago Douma <roeland@famdouma.nl> - * - * @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\Federation\BackgroundJob; @@ -37,9 +18,10 @@ use OCP\BackgroundJob\IJobList; use OCP\BackgroundJob\Job; use OCP\Http\Client\IClient; use OCP\Http\Client\IClientService; -use OCP\ILogger; +use OCP\IConfig; use OCP\IURLGenerator; use OCP\OCS\IDiscoveryService; +use Psr\Log\LoggerInterface; /** * Class RequestSharedSecret @@ -49,74 +31,38 @@ use OCP\OCS\IDiscoveryService; * @package OCA\Federation\Backgroundjob */ class RequestSharedSecret extends Job { + private IClient $httpClient; - /** @var IClient */ - private $httpClient; - - /** @var IJobList */ - private $jobList; - - /** @var IURLGenerator */ - private $urlGenerator; - - /** @var TrustedServers */ - private $trustedServers; + protected bool $retainJob = false; - /** @var IDiscoveryService */ - private $ocsDiscoveryService; + private string $defaultEndPoint = '/ocs/v2.php/apps/federation/api/v1/request-shared-secret'; - /** @var ILogger */ - private $logger; + /** @var int 30 day = 2592000sec */ + private int $maxLifespan = 2592000; - /** @var bool */ - protected $retainJob = false; - - private $defaultEndPoint = '/ocs/v2.php/apps/federation/api/v1/request-shared-secret'; - - /** @var int 30 day = 2592000sec */ - private $maxLifespan = 2592000; - - /** - * RequestSharedSecret constructor. - * - * @param IClientService $httpClientService - * @param IURLGenerator $urlGenerator - * @param IJobList $jobList - * @param TrustedServers $trustedServers - * @param IDiscoveryService $ocsDiscoveryService - * @param ILogger $logger - * @param ITimeFactory $timeFactory - */ public function __construct( IClientService $httpClientService, - IURLGenerator $urlGenerator, - IJobList $jobList, - TrustedServers $trustedServers, - IDiscoveryService $ocsDiscoveryService, - ILogger $logger, - ITimeFactory $timeFactory + private IURLGenerator $urlGenerator, + private IJobList $jobList, + private TrustedServers $trustedServers, + private IDiscoveryService $ocsDiscoveryService, + private LoggerInterface $logger, + ITimeFactory $timeFactory, + private IConfig $config, ) { parent::__construct($timeFactory); $this->httpClient = $httpClientService->newClient(); - $this->jobList = $jobList; - $this->urlGenerator = $urlGenerator; - $this->logger = $logger; - $this->ocsDiscoveryService = $ocsDiscoveryService; - $this->trustedServers = $trustedServers; } /** * run the job, then remove it from the joblist - * - * @param IJobList $jobList - * @param ILogger|null $logger */ - public function execute(IJobList $jobList, ILogger $logger = null) { + public function start(IJobList $jobList): void { $target = $this->argument['url']; // only execute if target is still in the list of trusted domains if ($this->trustedServers->isTrustedServer($target)) { - $this->parentExecute($jobList, $logger); + $this->parentStart($jobList); } $jobList->remove($this, $this->argument); @@ -127,15 +73,17 @@ class RequestSharedSecret extends Job { } /** - * call execute() method of parent - * - * @param IJobList $jobList - * @param ILogger $logger + * Call start() method of parent + * Useful for unit tests */ - protected function parentExecute($jobList, $logger) { - parent::execute($jobList, $logger); + protected function parentStart(IJobList $jobList): void { + parent::start($jobList); } + /** + * @param array $argument + * @return void + */ protected function run($argument) { $target = $argument['url']; $created = isset($argument['created']) ? (int)$argument['created'] : $this->time->getTime(); @@ -147,15 +95,16 @@ class RequestSharedSecret extends Job { // kill job after 30 days of trying $deadline = $currentTime - $this->maxLifespan; if ($created < $deadline) { + $this->logger->warning("The job to request the shared secret job is too old and gets stopped now without retention. Setting server status of '{$target}' to failure."); $this->retainJob = false; $this->trustedServers->setServerStatus($target, TrustedServers::STATUS_FAILURE); return; } $endPoints = $this->ocsDiscoveryService->discover($target, 'FEDERATED_SHARING'); - $endPoint = isset($endPoints['shared-secret']) ? $endPoints['shared-secret'] : $this->defaultEndPoint; + $endPoint = $endPoints['shared-secret'] ?? $this->defaultEndPoint; - // make sure that we have a well formated url + // make sure that we have a well formatted url $url = rtrim($target, '/') . '/' . trim($endPoint, '/'); try { @@ -169,6 +118,7 @@ class RequestSharedSecret extends Job { ], 'timeout' => 3, 'connect_timeout' => 3, + 'verify' => !$this->config->getSystemValue('sharing.federation.allowSelfSignedCertificates', false), ] ); @@ -176,22 +126,22 @@ class RequestSharedSecret extends Job { } catch (ClientException $e) { $status = $e->getCode(); if ($status === Http::STATUS_FORBIDDEN) { - $this->logger->info($target . ' refused to ask for a shared secret.', ['app' => 'federation']); + $this->logger->info($target . ' refused to ask for a shared secret.'); } else { - $this->logger->info($target . ' responded with a ' . $status . ' containing: ' . $e->getMessage(), ['app' => 'federation']); + $this->logger->info($target . ' responded with a ' . $status . ' containing: ' . $e->getMessage()); } } catch (RequestException $e) { $status = -1; // There is no status code if we could not connect - $this->logger->info('Could not connect to ' . $target, ['app' => 'federation']); + $this->logger->info('Could not connect to ' . $target); } catch (\Throwable $e) { $status = Http::STATUS_INTERNAL_SERVER_ERROR; - $this->logger->logException($e, ['app' => 'federation']); + $this->logger->error($e->getMessage(), ['exception' => $e]); } // if we received a unexpected response we try again later if ( $status !== Http::STATUS_OK - && $status !== Http::STATUS_FORBIDDEN + && ($status !== Http::STATUS_FORBIDDEN || $this->getAttempt($argument) < 5) ) { $this->retainJob = true; } @@ -199,21 +149,25 @@ class RequestSharedSecret extends Job { /** * re-add background job - * - * @param array $argument */ - protected function reAddJob(array $argument) { + protected function reAddJob(array $argument): void { $url = $argument['url']; $created = isset($argument['created']) ? (int)$argument['created'] : $this->time->getTime(); $token = $argument['token']; + $attempt = $this->getAttempt($argument) + 1; $this->jobList->add( RequestSharedSecret::class, [ 'url' => $url, 'token' => $token, - 'created' => $created + 'created' => $created, + 'attempt' => $attempt ] ); } + + protected function getAttempt(array $argument): int { + return $argument['attempt'] ?? 0; + } } diff --git a/apps/federation/lib/Command/SyncFederationAddressBooks.php b/apps/federation/lib/Command/SyncFederationAddressBooks.php index 045c3c72009..36cb99473f7 100644 --- a/apps/federation/lib/Command/SyncFederationAddressBooks.php +++ b/apps/federation/lib/Command/SyncFederationAddressBooks.php @@ -1,46 +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 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: 2017-2024 Nextcloud GmbH and Nextcloud contributors + * SPDX-FileCopyrightText: 2016 ownCloud, Inc. + * SPDX-License-Identifier: AGPL-3.0-only */ namespace OCA\Federation\Command; +use OCA\Federation\SyncFederationAddressBooks as SyncService; use Symfony\Component\Console\Command\Command; use Symfony\Component\Console\Helper\ProgressBar; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Output\OutputInterface; class SyncFederationAddressBooks extends Command { - - /** @var \OCA\Federation\SyncFederationAddressBooks */ - private $syncService; - - /** - * @param \OCA\Federation\SyncFederationAddressBooks $syncService - */ - public function __construct(\OCA\Federation\SyncFederationAddressBooks $syncService) { + public function __construct( + private SyncService $syncService, + ) { parent::__construct(); - - $this->syncService = $syncService; } protected function configure() { @@ -49,15 +26,10 @@ class SyncFederationAddressBooks extends Command { ->setDescription('Synchronizes addressbooks of all federated clouds'); } - /** - * @param InputInterface $input - * @param OutputInterface $output - * @return int - */ protected function execute(InputInterface $input, OutputInterface $output): int { $progress = new ProgressBar($output); $progress->start(); - $this->syncService->syncThemAll(function ($url, $ex) use ($progress, $output) { + $this->syncService->syncThemAll(function ($url, $ex) use ($progress, $output): void { if ($ex instanceof \Exception) { $output->writeln("Error while syncing $url : " . $ex->getMessage()); } else { diff --git a/apps/federation/lib/Controller/OCSAuthAPIController.php b/apps/federation/lib/Controller/OCSAuthAPIController.php index dd9b94d0027..16b401be251 100644 --- a/apps/federation/lib/Controller/OCSAuthAPIController.php +++ b/apps/federation/lib/Controller/OCSAuthAPIController.php @@ -1,43 +1,28 @@ <?php + /** - * @copyright Copyright (c) 2016, ownCloud, Inc. - * - * @author Bjoern Schiessle <bjoern@schiessle.org> - * @author Björn Schießle <bjoern@schiessle.org> - * @author Christoph Wurst <christoph@winzerhof-wurst.at> - * @author Lukas Reschke <lukas@statuscode.ch> - * @author Morris Jobke <hey@morrisjobke.de> - * @author Robin Appelman <robin@icewind.nl> - * @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: 2016-2024 Nextcloud GmbH and Nextcloud contributors + * SPDX-FileCopyrightText: 2016 ownCloud, Inc. + * SPDX-License-Identifier: AGPL-3.0-only */ namespace OCA\Federation\Controller; use OCA\Federation\DbHandler; use OCA\Federation\TrustedServers; use OCP\AppFramework\Http; +use OCP\AppFramework\Http\Attribute\BruteForceProtection; +use OCP\AppFramework\Http\Attribute\NoCSRFRequired; +use OCP\AppFramework\Http\Attribute\OpenAPI; +use OCP\AppFramework\Http\Attribute\PublicPage; +use OCP\AppFramework\Http\DataResponse; use OCP\AppFramework\OCS\OCSForbiddenException; use OCP\AppFramework\OCSController; use OCP\AppFramework\Utility\ITimeFactory; use OCP\BackgroundJob\IJobList; -use OCP\ILogger; use OCP\IRequest; +use OCP\Security\Bruteforce\IThrottler; use OCP\Security\ISecureRandom; +use Psr\Log\LoggerInterface; /** * Class OCSAuthAPI @@ -46,103 +31,74 @@ use OCP\Security\ISecureRandom; * * @package OCA\Federation\Controller */ +#[OpenAPI(scope: OpenAPI::SCOPE_FEDERATION)] class OCSAuthAPIController extends OCSController { - - /** @var ISecureRandom */ - private $secureRandom; - - /** @var IJobList */ - private $jobList; - - /** @var TrustedServers */ - private $trustedServers; - - /** @var DbHandler */ - private $dbHandler; - - /** @var ILogger */ - private $logger; - - /** @var ITimeFactory */ - private $timeFactory; - - /** - * OCSAuthAPI constructor. - * - * @param string $appName - * @param IRequest $request - * @param ISecureRandom $secureRandom - * @param IJobList $jobList - * @param TrustedServers $trustedServers - * @param DbHandler $dbHandler - * @param ILogger $logger - * @param ITimeFactory $timeFactory - */ public function __construct( - $appName, + string $appName, IRequest $request, - ISecureRandom $secureRandom, - IJobList $jobList, - TrustedServers $trustedServers, - DbHandler $dbHandler, - ILogger $logger, - ITimeFactory $timeFactory + private ISecureRandom $secureRandom, + private IJobList $jobList, + private TrustedServers $trustedServers, + private DbHandler $dbHandler, + private LoggerInterface $logger, + private ITimeFactory $timeFactory, + private IThrottler $throttler, ) { parent::__construct($appName, $request); - - $this->secureRandom = $secureRandom; - $this->jobList = $jobList; - $this->trustedServers = $trustedServers; - $this->dbHandler = $dbHandler; - $this->logger = $logger; - $this->timeFactory = $timeFactory; } /** - * @NoCSRFRequired - * @PublicPage + * Request received to ask remote server for a shared secret, for legacy end-points * - * request received to ask remote server for a shared secret, for legacy end-points + * @param string $url URL of the server + * @param string $token Token of the server + * @return DataResponse<Http::STATUS_OK, list<empty>, array{}> + * @throws OCSForbiddenException Requesting shared secret is not allowed * - * @param string $url - * @param string $token - * @return Http\DataResponse - * @throws OCSForbiddenException + * 200: Shared secret requested successfully */ - public function requestSharedSecretLegacy($url, $token) { + #[NoCSRFRequired] + #[PublicPage] + #[BruteForceProtection(action: 'federationSharedSecret')] + public function requestSharedSecretLegacy(string $url, string $token): DataResponse { return $this->requestSharedSecret($url, $token); } /** - * @NoCSRFRequired - * @PublicPage + * Create shared secret and return it, for legacy end-points * - * create shared secret and return it, for legacy end-points + * @param string $url URL of the server + * @param string $token Token of the server + * @return DataResponse<Http::STATUS_OK, array{sharedSecret: string}, array{}> + * @throws OCSForbiddenException Getting shared secret is not allowed * - * @param string $url - * @param string $token - * @return Http\DataResponse - * @throws OCSForbiddenException + * 200: Shared secret returned */ - public function getSharedSecretLegacy($url, $token) { + #[NoCSRFRequired] + #[PublicPage] + #[BruteForceProtection(action: 'federationSharedSecret')] + public function getSharedSecretLegacy(string $url, string $token): DataResponse { return $this->getSharedSecret($url, $token); } /** - * @NoCSRFRequired - * @PublicPage + * Request received to ask remote server for a shared secret * - * request received to ask remote server for a shared secret + * @param string $url URL of the server + * @param string $token Token of the server + * @return DataResponse<Http::STATUS_OK, list<empty>, array{}> + * @throws OCSForbiddenException Requesting shared secret is not allowed * - * @param string $url - * @param string $token - * @return Http\DataResponse - * @throws OCSForbiddenException + * 200: Shared secret requested successfully */ - public function requestSharedSecret($url, $token) { + #[NoCSRFRequired] + #[PublicPage] + #[BruteForceProtection(action: 'federationSharedSecret')] + public function requestSharedSecret(string $url, string $token): DataResponse { if ($this->trustedServers->isTrustedServer($url) === false) { - $this->logger->error('remote server not trusted (' . $url . ') while requesting shared secret', ['app' => 'federation']); + $this->throttler->registerAttempt('federationSharedSecret', $this->request->getRemoteAddress()); + $this->logger->error('remote server not trusted (' . $url . ') while requesting shared secret'); throw new OCSForbiddenException(); } @@ -151,8 +107,7 @@ class OCSAuthAPIController extends OCSController { $localToken = $this->dbHandler->getToken($url); if (strcmp($localToken, $token) > 0) { $this->logger->info( - 'remote server (' . $url . ') presented lower token. We will initiate the exchange of the shared secret.', - ['app' => 'federation'] + 'remote server (' . $url . ') presented lower token. We will initiate the exchange of the shared secret.' ); throw new OCSForbiddenException(); } @@ -166,31 +121,34 @@ class OCSAuthAPIController extends OCSController { ] ); - return new Http\DataResponse(); + return new DataResponse(); } /** - * @NoCSRFRequired - * @PublicPage + * Create shared secret and return it * - * create shared secret and return it + * @param string $url URL of the server + * @param string $token Token of the server + * @return DataResponse<Http::STATUS_OK, array{sharedSecret: string}, array{}> + * @throws OCSForbiddenException Getting shared secret is not allowed * - * @param string $url - * @param string $token - * @return Http\DataResponse - * @throws OCSForbiddenException + * 200: Shared secret returned */ - public function getSharedSecret($url, $token) { + #[NoCSRFRequired] + #[PublicPage] + #[BruteForceProtection(action: 'federationSharedSecret')] + public function getSharedSecret(string $url, string $token): DataResponse { if ($this->trustedServers->isTrustedServer($url) === false) { - $this->logger->error('remote server not trusted (' . $url . ') while getting shared secret', ['app' => 'federation']); + $this->throttler->registerAttempt('federationSharedSecret', $this->request->getRemoteAddress()); + $this->logger->error('remote server not trusted (' . $url . ') while getting shared secret'); throw new OCSForbiddenException(); } if ($this->isValidToken($url, $token) === false) { + $this->throttler->registerAttempt('federationSharedSecret', $this->request->getRemoteAddress()); $expectedToken = $this->dbHandler->getToken($url); $this->logger->error( - 'remote server (' . $url . ') didn\'t send a valid token (got "' . $token . '" but expected "'. $expectedToken . '") while getting shared secret', - ['app' => 'federation'] + 'remote server (' . $url . ') didn\'t send a valid token (got "' . $token . '" but expected "' . $expectedToken . '") while getting shared secret' ); throw new OCSForbiddenException(); } @@ -199,12 +157,12 @@ class OCSAuthAPIController extends OCSController { $this->trustedServers->addSharedSecret($url, $sharedSecret); - return new Http\DataResponse([ + return new DataResponse([ 'sharedSecret' => $sharedSecret ]); } - protected function isValidToken($url, $token) { + protected function isValidToken(string $url, string $token): bool { $storedToken = $this->dbHandler->getToken($url); return hash_equals($storedToken, $token); } diff --git a/apps/federation/lib/Controller/SettingsController.php b/apps/federation/lib/Controller/SettingsController.php index c60a7d31d7c..27341eba815 100644 --- a/apps/federation/lib/Controller/SettingsController.php +++ b/apps/federation/lib/Controller/SettingsController.php @@ -1,114 +1,125 @@ <?php + /** - * @copyright Copyright (c) 2016, ownCloud, Inc. - * - * @author Bjoern Schiessle <bjoern@schiessle.org> - * @author Björn Schießle <bjoern@schiessle.org> - * @author Morris Jobke <hey@morrisjobke.de> - * - * @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\Federation\Controller; +use OCA\Federation\Settings\Admin; use OCA\Federation\TrustedServers; -use OCP\AppFramework\Controller; +use OCP\AppFramework\Http; +use OCP\AppFramework\Http\Attribute\ApiRoute; +use OCP\AppFramework\Http\Attribute\AuthorizedAdminSetting; use OCP\AppFramework\Http\DataResponse; -use OCP\HintException; +use OCP\AppFramework\OCS\OCSException; +use OCP\AppFramework\OCS\OCSNotFoundException; +use OCP\AppFramework\OCSController; use OCP\IL10N; use OCP\IRequest; +use Psr\Log\LoggerInterface; -class SettingsController extends Controller { - - /** @var IL10N */ - private $l; +class SettingsController extends OCSController { + public function __construct( + string $AppName, + IRequest $request, + private IL10N $l, + private TrustedServers $trustedServers, + private LoggerInterface $logger, + ) { + parent::__construct($AppName, $request); + } - /** @var TrustedServers */ - private $trustedServers; /** - * @param string $AppName - * @param IRequest $request - * @param IL10N $l10n - * @param TrustedServers $trustedServers + * Add server to the list of trusted Nextcloud servers + * + * @param string $url The URL of the server to add + * @return DataResponse<Http::STATUS_OK, array{id: int, message: string, url: string}, array{}>|DataResponse<Http::STATUS_NOT_FOUND|Http::STATUS_CONFLICT, array{message: string}, array{}> + * + * 200: Server added successfully + * 404: Server not found at the given URL + * 409: Server is already in the list of trusted servers */ - public function __construct($AppName, - IRequest $request, - IL10N $l10n, - TrustedServers $trustedServers - ) { - parent::__construct($AppName, $request); - $this->l = $l10n; - $this->trustedServers = $trustedServers; - } + #[AuthorizedAdminSetting(settings: Admin::class)] + #[ApiRoute(verb: 'POST', url: '/trusted-servers')] + public function addServer(string $url): DataResponse { + $this->checkServer(trim($url)); + // Add the server to the list of trusted servers, all is well + $id = $this->trustedServers->addServer(trim($url)); + return new DataResponse([ + 'url' => $url, + 'id' => $id, + 'message' => $this->l->t('Added to the list of trusted servers') + ]); + } /** - * Add server to the list of trusted Nextclouds. + * Add server to the list of trusted Nextcloud servers + * + * @param int $id The ID of the trusted server to remove + * @return DataResponse<Http::STATUS_OK, array{id: int}, array{}>|DataResponse<Http::STATUS_NOT_FOUND, array{message: string}, array{}> * - * @AuthorizedAdminSetting(settings=OCA\Federation\Settings\Admin) - * @param string $url - * @return DataResponse - * @throws HintException + * 200: Server removed successfully + * 404: Server not found at the given ID */ - public function addServer($url) { - $this->checkServer($url); - $id = $this->trustedServers->addServer($url); + #[AuthorizedAdminSetting(settings: Admin::class)] + #[ApiRoute(verb: 'DELETE', url: '/trusted-servers/{id}', requirements: ['id' => '\d+'])] + public function removeServer(int $id): DataResponse { + try { + $this->trustedServers->getServer($id); + } catch (\Exception $e) { + throw new OCSNotFoundException($this->l->t('No server found with ID: %s', [$id])); + } - return new DataResponse( - [ - 'url' => $url, - 'id' => $id, - 'message' => $this->l->t('Added to the list of trusted servers') - ] - ); + try { + $this->trustedServers->removeServer($id); + return new DataResponse(['id' => $id]); + } catch (\Exception $e) { + $this->logger->error($e->getMessage(), ['e' => $e]); + throw new OCSException($this->l->t('Could not remove server'), Http::STATUS_INTERNAL_SERVER_ERROR); + } } /** - * Add server to the list of trusted Nextclouds. + * List all trusted servers + * + * @return DataResponse<Http::STATUS_OK, list<array{id: int, status: int, url: string}>, array{}> * - * @AuthorizedAdminSetting(settings=OCA\Federation\Settings\Admin) - * @param int $id - * @return DataResponse + * 200: List of trusted servers */ - public function removeServer($id) { - $this->trustedServers->removeServer($id); - return new DataResponse(); + #[AuthorizedAdminSetting(settings: Admin::class)] + #[ApiRoute(verb: 'GET', url: '/trusted-servers')] + public function getServers(): DataResponse { + $servers = $this->trustedServers->getServers(); + + // obfuscate the shared secret + $servers = array_map(function ($server) { + return [ + 'url' => $server['url'], + 'id' => $server['id'], + 'status' => $server['status'], + ]; + }, $servers); + + // return the list of trusted servers + return new DataResponse($servers); } + /** * Check if the server should be added to the list of trusted servers or not. - * - * @AuthorizedAdminSetting(settings=OCA\Federation\Settings\Admin) - * @param string $url - * @return bool - * @throws HintException */ - protected function checkServer($url) { + #[AuthorizedAdminSetting(settings: Admin::class)] + protected function checkServer(string $url): void { if ($this->trustedServers->isTrustedServer($url) === true) { - $message = 'Server is already in the list of trusted servers.'; - $hint = $this->l->t('Server is already in the list of trusted servers.'); - throw new HintException($message, $hint); + throw new OCSException($this->l->t('Server is already in the list of trusted servers.'), Http::STATUS_CONFLICT); } - if ($this->trustedServers->isOwnCloudServer($url) === false) { - $message = 'No server to federate with found'; - $hint = $this->l->t('No server to federate with found'); - throw new HintException($message, $hint); + if ($this->trustedServers->isNextcloudServer($url) === false) { + throw new OCSNotFoundException($this->l->t('No server to federate with found')); } - - return true; } } diff --git a/apps/federation/lib/DAV/FedAuth.php b/apps/federation/lib/DAV/FedAuth.php index 003bd6d2485..45bf422c104 100644 --- a/apps/federation/lib/DAV/FedAuth.php +++ b/apps/federation/lib/DAV/FedAuth.php @@ -1,48 +1,32 @@ <?php + /** - * @copyright Copyright (c) 2016, ownCloud, Inc. - * - * @author Joas Schilling <coding@schilljs.com> - * @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: 2016-2024 Nextcloud GmbH and Nextcloud contributors + * SPDX-FileCopyrightText: 2016 ownCloud, Inc. + * SPDX-License-Identifier: AGPL-3.0-only */ namespace OCA\Federation\DAV; use OCA\Federation\DbHandler; +use OCP\Defaults; use Sabre\DAV\Auth\Backend\AbstractBasic; use Sabre\HTTP\RequestInterface; use Sabre\HTTP\ResponseInterface; class FedAuth extends AbstractBasic { - /** @var DbHandler */ - private $db; - /** * FedAuth constructor. * * @param DbHandler $db */ - public function __construct(DbHandler $db) { - $this->db = $db; + public function __construct( + private DbHandler $db, + ) { $this->principalPrefix = 'principals/system/'; // setup realm - $defaults = new \OCP\Defaults(); + $defaults = new Defaults(); $this->realm = $defaults->getName(); } diff --git a/apps/federation/lib/DbHandler.php b/apps/federation/lib/DbHandler.php index 1dd0d1fc1c4..877663b058a 100644 --- a/apps/federation/lib/DbHandler.php +++ b/apps/federation/lib/DbHandler.php @@ -1,33 +1,15 @@ <?php + /** - * @copyright Copyright (c) 2016, ownCloud, Inc. - * - * @author Björn Schießle <bjoern@schiessle.org> - * @author Christoph Wurst <christoph@winzerhof-wurst.at> - * @author Joas Schilling <coding@schilljs.com> - * @author Morris Jobke <hey@morrisjobke.de> - * @author Robin Appelman <robin@icewind.nl> - * @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: 2016-2024 Nextcloud GmbH and Nextcloud contributors* + * SPDX-FileCopyrightText: 2016 ownCloud, Inc. + * SPDX-License-Identifier: AGPL-3.0-only */ namespace OCA\Federation; use OC\Files\Filesystem; +use OCP\DB\Exception as DBException; +use OCP\DB\QueryBuilder\IQueryBuilder; use OCP\HintException; use OCP\IDBConnection; use OCP\IL10N; @@ -35,56 +17,40 @@ use OCP\IL10N; /** * Class DbHandler * - * handles all database calls for the federation app + * Handles all database calls for the federation app + * + * @todo Port to QBMapper * * @group DB * @package OCA\Federation */ class DbHandler { + private string $dbTable = 'trusted_servers'; - /** @var IDBConnection */ - private $connection; - - /** @var IL10N */ - private $IL10N; - - /** @var string */ - private $dbTable = 'trusted_servers'; - - /** - * @param IDBConnection $connection - * @param IL10N $il10n - */ public function __construct( - IDBConnection $connection, - IL10N $il10n + private IDBConnection $connection, + private IL10N $IL10N, ) { - $this->connection = $connection; - $this->IL10N = $il10n; } /** - * add server to the list of trusted servers + * Add server to the list of trusted servers * - * @param string $url - * @return int * @throws HintException */ - public function addServer($url) { + public function addServer(string $url): int { $hash = $this->hash($url); $url = rtrim($url, '/'); $query = $this->connection->getQueryBuilder(); $query->insert($this->dbTable) - ->values( - [ - 'url' => $query->createParameter('url'), - 'url_hash' => $query->createParameter('url_hash'), - ] - ) + ->values([ + 'url' => $query->createParameter('url'), + 'url_hash' => $query->createParameter('url_hash'), + ]) ->setParameter('url', $url) ->setParameter('url_hash', $hash); - $result = $query->execute(); + $result = $query->executeStatement(); if ($result) { return $query->getLastInsertId(); @@ -93,35 +59,33 @@ class DbHandler { $message = 'Internal failure, Could not add trusted server: ' . $url; $message_t = $this->IL10N->t('Could not add server'); throw new HintException($message, $message_t); + return -1; } /** - * remove server from the list of trusted servers - * - * @param int $id + * Remove server from the list of trusted servers */ - public function removeServer($id) { + public function removeServer(int $id): void { $query = $this->connection->getQueryBuilder(); $query->delete($this->dbTable) ->where($query->expr()->eq('id', $query->createParameter('id'))) ->setParameter('id', $id); - $query->execute(); + $query->executeStatement(); } /** - * get trusted server with given ID + * Get trusted server with given ID * - * @param int $id - * @return array + * @return array{id: int, url: string, url_hash: string, token: ?string, shared_secret: ?string, status: int, sync_token: ?string} * @throws \Exception */ - public function getServerById($id) { + public function getServerById(int $id): array { $query = $this->connection->getQueryBuilder(); $query->select('*')->from($this->dbTable) ->where($query->expr()->eq('id', $query->createParameter('id'))) - ->setParameter('id', $id); + ->setParameter('id', $id, IQueryBuilder::PARAM_INT); - $qResult = $query->execute(); + $qResult = $query->executeQuery(); $result = $qResult->fetchAll(); $qResult->closeCursor(); @@ -133,34 +97,32 @@ class DbHandler { } /** - * get all trusted servers + * Get all trusted servers * - * @return array + * @return list<array{id: int, url: string, url_hash: string, shared_secret: ?string, status: int, sync_token: ?string}> + * @throws DBException */ - public function getAllServer() { + public function getAllServer(): array { $query = $this->connection->getQueryBuilder(); $query->select(['url', 'url_hash', 'id', 'status', 'shared_secret', 'sync_token']) ->from($this->dbTable); - $statement = $query->execute(); + $statement = $query->executeQuery(); $result = $statement->fetchAll(); $statement->closeCursor(); return $result; } /** - * check if server already exists in the database table - * - * @param string $url - * @return bool + * Check if server already exists in the database table */ - public function serverExists($url) { + public function serverExists(string $url): bool { $hash = $this->hash($url); $query = $this->connection->getQueryBuilder(); $query->select('url') ->from($this->dbTable) ->where($query->expr()->eq('url_hash', $query->createParameter('url_hash'))) ->setParameter('url_hash', $hash); - $statement = $query->execute(); + $statement = $query->executeQuery(); $result = $statement->fetchAll(); $statement->closeCursor(); @@ -168,12 +130,9 @@ class DbHandler { } /** - * write token to database. Token is used to exchange the secret - * - * @param string $url - * @param string $token + * Write token to database. Token is used to exchange the secret */ - public function addToken($url, $token) { + public function addToken(string $url, string $token): void { $hash = $this->hash($url); $query = $this->connection->getQueryBuilder(); $query->update($this->dbTable) @@ -181,24 +140,21 @@ class DbHandler { ->where($query->expr()->eq('url_hash', $query->createParameter('url_hash'))) ->setParameter('url_hash', $hash) ->setParameter('token', $token); - $query->execute(); + $query->executeStatement(); } /** - * get token stored in database - * - * @param string $url - * @return string + * Get token stored in database * @throws \Exception */ - public function getToken($url) { + public function getToken(string $url): string { $hash = $this->hash($url); $query = $this->connection->getQueryBuilder(); $query->select('token')->from($this->dbTable) ->where($query->expr()->eq('url_hash', $query->createParameter('url_hash'))) ->setParameter('url_hash', $hash); - $statement = $query->execute(); + $statement = $query->executeQuery(); $result = $statement->fetch(); $statement->closeCursor(); @@ -210,12 +166,9 @@ class DbHandler { } /** - * add shared Secret to database - * - * @param string $url - * @param string $sharedSecret + * Add shared Secret to database */ - public function addSharedSecret($url, $sharedSecret) { + public function addSharedSecret(string $url, string $sharedSecret): void { $hash = $this->hash($url); $query = $this->connection->getQueryBuilder(); $query->update($this->dbTable) @@ -223,84 +176,68 @@ class DbHandler { ->where($query->expr()->eq('url_hash', $query->createParameter('url_hash'))) ->setParameter('url_hash', $hash) ->setParameter('sharedSecret', $sharedSecret); - $query->execute(); + $query->executeStatement(); } /** - * get shared secret from database - * - * @param string $url - * @return string + * Get shared secret from database */ - public function getSharedSecret($url) { + public function getSharedSecret(string $url): string { $hash = $this->hash($url); $query = $this->connection->getQueryBuilder(); $query->select('shared_secret')->from($this->dbTable) ->where($query->expr()->eq('url_hash', $query->createParameter('url_hash'))) ->setParameter('url_hash', $hash); - $statement = $query->execute(); + $statement = $query->executeQuery(); $result = $statement->fetch(); $statement->closeCursor(); - return $result['shared_secret']; + return (string)$result['shared_secret']; } /** - * set server status - * - * @param string $url - * @param int $status - * @param string|null $token + * Set server status */ - public function setServerStatus($url, $status, $token = null) { + public function setServerStatus(string $url, int $status, ?string $token = null): void { $hash = $this->hash($url); $query = $this->connection->getQueryBuilder(); $query->update($this->dbTable) - ->set('status', $query->createNamedParameter($status)) - ->where($query->expr()->eq('url_hash', $query->createNamedParameter($hash))); + ->set('status', $query->createNamedParameter($status)) + ->where($query->expr()->eq('url_hash', $query->createNamedParameter($hash))); if (!is_null($token)) { $query->set('sync_token', $query->createNamedParameter($token)); } - $query->execute(); + $query->executeStatement(); } /** - * get server status - * - * @param string $url - * @return int + * Get server status */ - public function getServerStatus($url) { + public function getServerStatus(string $url): int { $hash = $this->hash($url); $query = $this->connection->getQueryBuilder(); $query->select('status')->from($this->dbTable) - ->where($query->expr()->eq('url_hash', $query->createParameter('url_hash'))) - ->setParameter('url_hash', $hash); + ->where($query->expr()->eq('url_hash', $query->createParameter('url_hash'))) + ->setParameter('url_hash', $hash); - $statement = $query->execute(); + $statement = $query->executeQuery(); $result = $statement->fetch(); $statement->closeCursor(); return (int)$result['status']; } /** - * create hash from URL - * - * @param string $url - * @return string + * Create hash from URL */ - protected function hash($url) { + protected function hash(string $url): string { $normalized = $this->normalizeUrl($url); return sha1($normalized); } /** - * normalize URL, used to create the sha1 hash - * - * @param string $url - * @return string + * Normalize URL, used to create the sha1 hash */ - protected function normalizeUrl($url) { + protected function normalizeUrl(string $url): string { $normalized = $url; if (strpos($url, 'https://') === 0) { @@ -315,20 +252,15 @@ class DbHandler { return $normalized; } - /** - * @param $username - * @param $password - * @return bool - */ - public function auth($username, $password) { + public function auth(string $username, string $password): bool { if ($username !== 'system') { return false; } $query = $this->connection->getQueryBuilder(); $query->select('url')->from($this->dbTable) - ->where($query->expr()->eq('shared_secret', $query->createNamedParameter($password))); + ->where($query->expr()->eq('shared_secret', $query->createNamedParameter($password))); - $statement = $query->execute(); + $statement = $query->executeQuery(); $result = $statement->fetch(); $statement->closeCursor(); return !empty($result); diff --git a/apps/federation/lib/Listener/SabrePluginAuthInitListener.php b/apps/federation/lib/Listener/SabrePluginAuthInitListener.php index f176f21506a..514a893fb39 100644 --- a/apps/federation/lib/Listener/SabrePluginAuthInitListener.php +++ b/apps/federation/lib/Listener/SabrePluginAuthInitListener.php @@ -3,25 +3,8 @@ declare(strict_types=1); /** - * @copyright Copyright (c) 2020, Morris Jobke <hey@morrisjobke.de> - * - * @author Morris Jobke <hey@morrisjobke.de> - * - * @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\Federation\Listener; @@ -33,13 +16,12 @@ use Sabre\DAV\Auth\Plugin; /** * @since 20.0.0 + * @template-implements IEventListener<SabrePluginAuthInitEvent> */ class SabrePluginAuthInitListener implements IEventListener { - /** @var FedAuth */ - private $fedAuth; - - public function __construct(FedAuth $fedAuth) { - $this->fedAuth = $fedAuth; + public function __construct( + private FedAuth $fedAuth, + ) { } public function handle(Event $event): void { diff --git a/apps/federation/lib/Middleware/AddServerMiddleware.php b/apps/federation/lib/Middleware/AddServerMiddleware.php deleted file mode 100644 index de6f7786679..00000000000 --- a/apps/federation/lib/Middleware/AddServerMiddleware.php +++ /dev/null @@ -1,90 +0,0 @@ -<?php -/** - * @copyright Copyright (c) 2016, ownCloud, Inc. - * - * @author Arthur Schiwon <blizzz@arthur-schiwon.de> - * @author Bjoern Schiessle <bjoern@schiessle.org> - * @author Björn Schießle <bjoern@schiessle.org> - * @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> - * - * @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/> - * - */ -namespace OCA\Federation\Middleware; - -use OCA\Federation\Controller\SettingsController; -use OCP\AppFramework\Controller; -use OCP\AppFramework\Http; -use OCP\AppFramework\Http\JSONResponse; -use OCP\AppFramework\Middleware; -use OCP\HintException; -use OCP\IL10N; -use OCP\ILogger; - -class AddServerMiddleware extends Middleware { - - /** @var string */ - protected $appName; - - /** @var IL10N */ - protected $l; - - /** @var ILogger */ - protected $logger; - - /** - * @param string $appName - * @param IL10N $l - * @param ILogger $logger - */ - public function __construct($appName, IL10N $l, ILogger $logger) { - $this->appName = $appName; - $this->l = $l; - $this->logger = $logger; - } - - /** - * Log error message and return a response which can be displayed to the user - * - * @param Controller $controller - * @param string $methodName - * @param \Exception $exception - * @return JSONResponse - * @throws \Exception - */ - public function afterException($controller, $methodName, \Exception $exception) { - if (($controller instanceof SettingsController) === false) { - throw $exception; - } - $this->logger->logException($exception, [ - 'level' => ILogger::ERROR, - 'app' => $this->appName, - ]); - if ($exception instanceof HintException) { - $message = $exception->getHint(); - } else { - $message = $exception->getMessage(); - } - - return new JSONResponse( - ['message' => $message], - Http::STATUS_BAD_REQUEST - ); - } -} diff --git a/apps/federation/lib/Migration/Version1010Date20200630191302.php b/apps/federation/lib/Migration/Version1010Date20200630191302.php index c98d7da137a..c1a7c38cfc7 100644 --- a/apps/federation/lib/Migration/Version1010Date20200630191302.php +++ b/apps/federation/lib/Migration/Version1010Date20200630191302.php @@ -3,32 +3,14 @@ declare(strict_types=1); /** - * @copyright Copyright (c) 2020 Joas Schilling <coding@schilljs.com> - * - * @author Christoph Wurst <christoph@winzerhof-wurst.at> - * @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\Federation\Migration; use Closure; -use OCP\DB\Types; use OCP\DB\ISchemaWrapper; +use OCP\DB\Types; use OCP\Migration\IOutput; use OCP\Migration\SimpleMigrationStep; diff --git a/apps/federation/lib/Settings/Admin.php b/apps/federation/lib/Settings/Admin.php index 7d4e51a124c..5cf5346bb85 100644 --- a/apps/federation/lib/Settings/Admin.php +++ b/apps/federation/lib/Settings/Admin.php @@ -1,24 +1,8 @@ <?php + /** - * @copyright Copyright (c) 2016 Arthur Schiwon <blizzz@arthur-schiwon.de> - * - * @author Arthur Schiwon <blizzz@arthur-schiwon.de> - * - * @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\Federation\Settings; @@ -28,22 +12,10 @@ use OCP\IL10N; use OCP\Settings\IDelegatedSettings; class Admin implements IDelegatedSettings { - - /** @var TrustedServers */ - private $trustedServers; - - /** @var IL10N */ - private $l; - - /** - * Admin constructor. - * - * @param TrustedServers $trustedServers - * @param IL10N $l - */ - public function __construct(TrustedServers $trustedServers, IL10N $l) { - $this->trustedServers = $trustedServers; - $this->l = $l; + public function __construct( + private TrustedServers $trustedServers, + private IL10N $l, + ) { } /** @@ -66,8 +38,8 @@ class Admin implements IDelegatedSettings { /** * @return int whether the form should be rather on the top or bottom of - * the admin section. The forms are arranged in ascending order of the - * priority values. It is required to return a value between 0 and 100. + * the admin section. The forms are arranged in ascending order of the + * priority values. It is required to return a value between 0 and 100. * * E.g.: 70 */ @@ -76,7 +48,7 @@ class Admin implements IDelegatedSettings { } public function getName(): ?string { - return $this->l->t("Trusted servers"); + return $this->l->t('Trusted servers'); } public function getAuthorizedAppConfig(): array { diff --git a/apps/federation/lib/SyncFederationAddressBooks.php b/apps/federation/lib/SyncFederationAddressBooks.php index ace5c07065a..d11f92b76ef 100644 --- a/apps/federation/lib/SyncFederationAddressBooks.php +++ b/apps/federation/lib/SyncFederationAddressBooks.php @@ -1,27 +1,9 @@ <?php + /** - * @copyright Copyright (c) 2016, ownCloud, Inc. - * - * @author Bjoern Schiessle <bjoern@schiessle.org> - * @author Björn Schießle <bjoern@schiessle.org> - * @author Christoph Wurst <christoph@winzerhof-wurst.at> - * @author Lukas Reschke <lukas@statuscode.ch> - * @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: 2017-2024 Nextcloud GmbH and Nextcloud contributors + * SPDX-FileCopyrightText: 2016 ownCloud, Inc. + * SPDX-License-Identifier: AGPL-3.0-only */ namespace OCA\Federation; @@ -29,29 +11,17 @@ use OC\OCS\DiscoveryService; use OCA\DAV\CardDAV\SyncService; use OCP\AppFramework\Http; use OCP\OCS\IDiscoveryService; +use Psr\Log\LoggerInterface; class SyncFederationAddressBooks { + private DiscoveryService $ocsDiscoveryService; - /** @var DbHandler */ - protected $dbHandler; - - /** @var SyncService */ - private $syncService; - - /** @var DiscoveryService */ - private $ocsDiscoveryService; - - /** - * @param DbHandler $dbHandler - * @param SyncService $syncService - * @param IDiscoveryService $ocsDiscoveryService - */ - public function __construct(DbHandler $dbHandler, - SyncService $syncService, - IDiscoveryService $ocsDiscoveryService + public function __construct( + protected DbHandler $dbHandler, + private SyncService $syncService, + IDiscoveryService $ocsDiscoveryService, + private LoggerInterface $logger, ) { - $this->syncService = $syncService; - $this->dbHandler = $dbHandler; $this->ocsDiscoveryService = $ocsDiscoveryService; } @@ -64,28 +34,58 @@ class SyncFederationAddressBooks { $url = $trustedServer['url']; $callback($url, null); $sharedSecret = $trustedServer['shared_secret']; - $syncToken = $trustedServer['sync_token']; + $oldSyncToken = $trustedServer['sync_token']; $endPoints = $this->ocsDiscoveryService->discover($url, 'FEDERATED_SHARING'); - $cardDavUser = isset($endPoints['carddav-user']) ? $endPoints['carddav-user'] : 'system'; + $cardDavUser = $endPoints['carddav-user'] ?? 'system'; $addressBookUrl = isset($endPoints['system-address-book']) ? trim($endPoints['system-address-book'], '/') : 'remote.php/dav/addressbooks/system/system/system'; if (is_null($sharedSecret)) { + $this->logger->debug("Shared secret for $url is null"); continue; } $targetBookId = $trustedServer['url_hash']; - $targetPrincipal = "principals/system/system"; + $targetPrincipal = 'principals/system/system'; $targetBookProperties = [ '{DAV:}displayname' => $url ]; + try { - $newToken = $this->syncService->syncRemoteAddressBook($url, $cardDavUser, $addressBookUrl, $sharedSecret, $syncToken, $targetBookId, $targetPrincipal, $targetBookProperties); - if ($newToken !== $syncToken) { - $this->dbHandler->setServerStatus($url, TrustedServers::STATUS_OK, $newToken); + $syncToken = $oldSyncToken; + + do { + [$syncToken, $truncated] = $this->syncService->syncRemoteAddressBook( + $url, + $cardDavUser, + $addressBookUrl, + $sharedSecret, + $syncToken, + $targetBookId, + $targetPrincipal, + $targetBookProperties + ); + } while ($truncated); + + if ($syncToken !== $oldSyncToken) { + $this->dbHandler->setServerStatus($url, TrustedServers::STATUS_OK, $syncToken); + } else { + $this->logger->debug("Sync Token for $url unchanged from previous sync"); + // The server status might have been changed to a failure status in previous runs. + if ($this->dbHandler->getServerStatus($url) !== TrustedServers::STATUS_OK) { + $this->dbHandler->setServerStatus($url, TrustedServers::STATUS_OK); + } } } catch (\Exception $ex) { if ($ex->getCode() === Http::STATUS_UNAUTHORIZED) { $this->dbHandler->setServerStatus($url, TrustedServers::STATUS_ACCESS_REVOKED); + $this->logger->error("Server sync for $url failed because of revoked access.", [ + 'exception' => $ex, + ]); + } else { + $this->dbHandler->setServerStatus($url, TrustedServers::STATUS_FAILURE); + $this->logger->error("Server sync for $url failed.", [ + 'exception' => $ex, + ]); } $callback($url, $ex); } diff --git a/apps/federation/lib/SyncJob.php b/apps/federation/lib/SyncJob.php index f16d08a80d8..b802dfa9308 100644 --- a/apps/federation/lib/SyncJob.php +++ b/apps/federation/lib/SyncJob.php @@ -1,59 +1,33 @@ <?php + /** - * @copyright Copyright (c) 2016, ownCloud, Inc. - * - * @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> - * @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: 2017-2024 Nextcloud GmbH and Nextcloud contributors + * SPDX-FileCopyrightText: 2016 ownCloud, Inc. + * SPDX-License-Identifier: AGPL-3.0-only */ namespace OCA\Federation; -use OC\BackgroundJob\TimedJob; -use OCP\ILogger; +use OCP\AppFramework\Utility\ITimeFactory; +use OCP\BackgroundJob\TimedJob; +use Psr\Log\LoggerInterface; class SyncJob extends TimedJob { - - /** @var SyncFederationAddressBooks */ - protected $syncService; - - /** @var ILogger */ - protected $logger; - - /** - * @param SyncFederationAddressBooks $syncService - * @param ILogger $logger - */ - public function __construct(SyncFederationAddressBooks $syncService, ILogger $logger) { + public function __construct( + protected SyncFederationAddressBooks $syncService, + protected LoggerInterface $logger, + ITimeFactory $timeFactory, + ) { + parent::__construct($timeFactory); // Run once a day $this->setInterval(24 * 60 * 60); - $this->syncService = $syncService; - $this->logger = $logger; + $this->setTimeSensitivity(self::TIME_INSENSITIVE); } protected function run($argument) { - $this->syncService->syncThemAll(function ($url, $ex) { + $this->syncService->syncThemAll(function ($url, $ex): void { if ($ex instanceof \Exception) { - $this->logger->logException($ex, [ - 'message' => "Error while syncing $url.", - 'level' => ILogger::INFO, - 'app' => 'fed-sync', + $this->logger->error("Error while syncing $url.", [ + 'exception' => $ex, ]); } }); diff --git a/apps/federation/lib/TrustedServers.php b/apps/federation/lib/TrustedServers.php index 57b9a505499..3d15cfac448 100644 --- a/apps/federation/lib/TrustedServers.php +++ b/apps/federation/lib/TrustedServers.php @@ -1,29 +1,9 @@ <?php + /** - * @copyright Copyright (c) 2016, ownCloud, Inc. - * - * @author Arthur Schiwon <blizzz@arthur-schiwon.de> - * @author Bjoern Schiessle <bjoern@schiessle.org> - * @author Björn Schießle <bjoern@schiessle.org> - * @author Christoph Wurst <christoph@winzerhof-wurst.at> - * @author Morris Jobke <hey@morrisjobke.de> - * @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: 2016-2024 Nextcloud GmbH and Nextcloud contributors + * SPDX-FileCopyrightText: 2016 ownCloud, Inc. + * SPDX-License-Identifier: AGPL-3.0-only */ namespace OCA\Federation; @@ -31,13 +11,14 @@ use OCA\Federation\BackgroundJob\RequestSharedSecret; use OCP\AppFramework\Http; use OCP\AppFramework\Utility\ITimeFactory; use OCP\BackgroundJob\IJobList; +use OCP\DB\Exception; +use OCP\EventDispatcher\IEventDispatcher; +use OCP\Federation\Events\TrustedServerRemovedEvent; use OCP\HintException; use OCP\Http\Client\IClientService; use OCP\IConfig; -use OCP\ILogger; use OCP\Security\ISecureRandom; -use Symfony\Component\EventDispatcher\EventDispatcherInterface; -use Symfony\Component\EventDispatcher\GenericEvent; +use Psr\Log\LoggerInterface; class TrustedServers { @@ -50,67 +31,25 @@ class TrustedServers { /** remote server revoked access */ public const STATUS_ACCESS_REVOKED = 4; - /** @var dbHandler */ - private $dbHandler; - - /** @var IClientService */ - private $httpClientService; - - /** @var ILogger */ - private $logger; - - /** @var IJobList */ - private $jobList; - - /** @var ISecureRandom */ - private $secureRandom; - - /** @var IConfig */ - private $config; - - /** @var EventDispatcherInterface */ - private $dispatcher; - - /** @var ITimeFactory */ - private $timeFactory; + /** @var list<array{id: int, url: string, url_hash: string, shared_secret: ?string, status: int, sync_token: ?string}>|null */ + private ?array $trustedServersCache = null; - /** - * @param DbHandler $dbHandler - * @param IClientService $httpClientService - * @param ILogger $logger - * @param IJobList $jobList - * @param ISecureRandom $secureRandom - * @param IConfig $config - * @param EventDispatcherInterface $dispatcher - * @param ITimeFactory $timeFactory - */ public function __construct( - DbHandler $dbHandler, - IClientService $httpClientService, - ILogger $logger, - IJobList $jobList, - ISecureRandom $secureRandom, - IConfig $config, - EventDispatcherInterface $dispatcher, - ITimeFactory $timeFactory + private DbHandler $dbHandler, + private IClientService $httpClientService, + private LoggerInterface $logger, + private IJobList $jobList, + private ISecureRandom $secureRandom, + private IConfig $config, + private IEventDispatcher $dispatcher, + private ITimeFactory $timeFactory, ) { - $this->dbHandler = $dbHandler; - $this->httpClientService = $httpClientService; - $this->logger = $logger; - $this->jobList = $jobList; - $this->secureRandom = $secureRandom; - $this->config = $config; - $this->dispatcher = $dispatcher; - $this->timeFactory = $timeFactory; } /** - * add server to the list of trusted servers - * - * @param $url - * @return int server id + * Add server to the list of trusted servers */ - public function addServer($url) { + public function addServer(string $url): int { $url = $this->updateProtocol($url); $result = $this->dbHandler->addServer($url); if ($result) { @@ -130,82 +69,88 @@ class TrustedServers { } /** - * get shared secret for the given server - * - * @param string $url - * @return string + * Get shared secret for the given server */ - public function getSharedSecret($url) { + public function getSharedSecret(string $url): string { return $this->dbHandler->getSharedSecret($url); } /** - * add shared secret for the given server - * - * @param string $url - * @param $sharedSecret + * Add shared secret for the given server */ - public function addSharedSecret($url, $sharedSecret) { + public function addSharedSecret(string $url, string $sharedSecret): void { $this->dbHandler->addSharedSecret($url, $sharedSecret); } /** - * remove server from the list of trusted servers - * - * @param int $id + * Remove server from the list of trusted servers */ - public function removeServer($id) { + public function removeServer(int $id): void { $server = $this->dbHandler->getServerById($id); $this->dbHandler->removeServer($id); - $event = new GenericEvent($server['url_hash']); - $this->dispatcher->dispatch('OCP\Federation\TrustedServerEvent::remove', $event); + $this->dispatcher->dispatchTyped(new TrustedServerRemovedEvent($server['url_hash'])); + } /** - * get all trusted servers + * Get all trusted servers * - * @return array + * @return list<array{id: int, url: string, url_hash: string, shared_secret: ?string, status: int, sync_token: ?string}> + * @throws \Exception */ - public function getServers() { - return $this->dbHandler->getAllServer(); + public function getServers(): ?array { + if ($this->trustedServersCache === null) { + $this->trustedServersCache = $this->dbHandler->getAllServer(); + } + return $this->trustedServersCache; } /** - * check if given server is a trusted Nextcloud server + * Get a trusted server * - * @param string $url - * @return bool + * @return array{id: int, url: string, url_hash: string, shared_secret: ?string, status: int, sync_token: ?string} + * @throws Exception + */ + public function getServer(int $id): ?array { + if ($this->trustedServersCache === null) { + $this->trustedServersCache = $this->dbHandler->getAllServer(); + } + + foreach ($this->trustedServersCache as $server) { + if ($server['id'] === $id) { + return $server; + } + } + + throw new \Exception('No server found with ID: ' . $id); + } + + /** + * Check if given server is a trusted Nextcloud server */ - public function isTrustedServer($url) { + public function isTrustedServer(string $url): bool { return $this->dbHandler->serverExists($url); } /** - * set server status - * - * @param string $url - * @param int $status + * Set server status */ - public function setServerStatus($url, $status) { + public function setServerStatus(string $url, int $status): void { $this->dbHandler->setServerStatus($url, $status); } /** - * @param string $url - * @return int + * Get server status */ - public function getServerStatus($url) { + public function getServerStatus(string $url): int { return $this->dbHandler->getServerStatus($url); } /** - * check if URL point to a ownCloud/Nextcloud server - * - * @param string $url - * @return bool + * Check if URL point to a ownCloud/Nextcloud server */ - public function isOwnCloudServer($url) { - $isValidOwnCloud = false; + public function isNextcloudServer(string $url): bool { + $isValidNextcloud = false; $client = $this->httpClientService->newClient(); try { $result = $client->get( @@ -213,31 +158,31 @@ class TrustedServers { [ 'timeout' => 3, 'connect_timeout' => 3, + 'verify' => !$this->config->getSystemValue('sharing.federation.allowSelfSignedCertificates', false), ] ); if ($result->getStatusCode() === Http::STATUS_OK) { - $isValidOwnCloud = $this->checkOwnCloudVersion($result->getBody()); + $body = $result->getBody(); + if (is_resource($body)) { + $body = stream_get_contents($body) ?: ''; + } + $isValidNextcloud = $this->checkNextcloudVersion($body); } } catch (\Exception $e) { - \OC::$server->getLogger()->logException($e, [ - 'message' => 'No Nextcloud server.', - 'level' => ILogger::DEBUG, - 'app' => 'federation', + $this->logger->error('No Nextcloud server.', [ + 'exception' => $e, ]); return false; } - return $isValidOwnCloud; + return $isValidNextcloud; } /** - * check if ownCloud version is >= 9.0 - * - * @param $status - * @return bool + * Check if ownCloud/Nextcloud version is >= 9.0 * @throws HintException */ - protected function checkOwnCloudVersion($status) { + protected function checkNextcloudVersion(string $status): bool { $decoded = json_decode($status, true); if (!empty($decoded) && isset($decoded['version'])) { if (!version_compare($decoded['version'], '9.0.0', '>=')) { @@ -249,12 +194,9 @@ class TrustedServers { } /** - * check if the URL contain a protocol, if not add https - * - * @param string $url - * @return string + * Check if the URL contain a protocol, if not add https */ - protected function updateProtocol($url) { + protected function updateProtocol(string $url): string { if ( strpos($url, 'https://') === 0 || strpos($url, 'http://') === 0 diff --git a/apps/federation/openapi-administration.json b/apps/federation/openapi-administration.json new file mode 100644 index 00000000000..060e0826593 --- /dev/null +++ b/apps/federation/openapi-administration.json @@ -0,0 +1,431 @@ +{ + "openapi": "3.0.3", + "info": { + "title": "federation-administration", + "version": "0.0.1", + "description": "Federation allows you to connect with other trusted servers to exchange the account directory.", + "license": { + "name": "agpl" + } + }, + "components": { + "securitySchemes": { + "basic_auth": { + "type": "http", + "scheme": "basic" + }, + "bearer_auth": { + "type": "http", + "scheme": "bearer" + } + }, + "schemas": { + "OCSMeta": { + "type": "object", + "required": [ + "status", + "statuscode" + ], + "properties": { + "status": { + "type": "string" + }, + "statuscode": { + "type": "integer" + }, + "message": { + "type": "string" + }, + "totalitems": { + "type": "string" + }, + "itemsperpage": { + "type": "string" + } + } + } + } + }, + "paths": { + "/ocs/v2.php/apps/federation/trusted-servers": { + "post": { + "operationId": "settings-add-server", + "summary": "Add server to the list of trusted Nextcloud servers", + "description": "This endpoint requires admin access", + "tags": [ + "settings" + ], + "security": [ + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "url" + ], + "properties": { + "url": { + "type": "string", + "description": "The URL of the server to add" + } + } + } + } + } + }, + "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": "Server added successfully", + "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": [ + "id", + "message", + "url" + ], + "properties": { + "id": { + "type": "integer", + "format": "int64" + }, + "message": { + "type": "string" + }, + "url": { + "type": "string" + } + } + } + } + } + } + } + } + } + }, + "404": { + "description": "Server not found at the given URL", + "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": [ + "message" + ], + "properties": { + "message": { + "type": "string" + } + } + } + } + } + } + } + } + } + }, + "409": { + "description": "Server is already in the list of trusted servers", + "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": [ + "message" + ], + "properties": { + "message": { + "type": "string" + } + } + } + } + } + } + } + } + } + } + } + }, + "get": { + "operationId": "settings-get-servers", + "summary": "List all trusted servers", + "description": "This endpoint requires admin access", + "tags": [ + "settings" + ], + "security": [ + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "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": "List of trusted servers", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "array", + "items": { + "type": "object", + "required": [ + "id", + "status", + "url" + ], + "properties": { + "id": { + "type": "integer", + "format": "int64" + }, + "status": { + "type": "integer", + "format": "int64" + }, + "url": { + "type": "string" + } + } + } + } + } + } + } + } + } + } + } + } + } + }, + "/ocs/v2.php/apps/federation/trusted-servers/{id}": { + "delete": { + "operationId": "settings-remove-server", + "summary": "Add server to the list of trusted Nextcloud servers", + "description": "This endpoint requires admin access", + "tags": [ + "settings" + ], + "security": [ + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "parameters": [ + { + "name": "id", + "in": "path", + "description": "The ID of the trusted server to remove", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "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": "Server removed successfully", + "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": [ + "id" + ], + "properties": { + "id": { + "type": "integer", + "format": "int64" + } + } + } + } + } + } + } + } + } + }, + "404": { + "description": "Server not found at the given ID", + "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": [ + "message" + ], + "properties": { + "message": { + "type": "string" + } + } + } + } + } + } + } + } + } + } + } + } + } + }, + "tags": [ + { + "name": "ocs_authapi", + "description": "Class OCSAuthAPI OCS API end-points to exchange shared secret between two connected Nextclouds" + } + ] +} diff --git a/apps/federation/openapi-administration.json.license b/apps/federation/openapi-administration.json.license new file mode 100644 index 00000000000..5dcb9c9e84b --- /dev/null +++ b/apps/federation/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/federation/openapi-federation.json b/apps/federation/openapi-federation.json new file mode 100644 index 00000000000..beb66fcfcd6 --- /dev/null +++ b/apps/federation/openapi-federation.json @@ -0,0 +1,511 @@ +{ + "openapi": "3.0.3", + "info": { + "title": "federation-federation", + "version": "0.0.1", + "description": "Federation allows you to connect with other trusted servers to exchange the account directory.", + "license": { + "name": "agpl" + } + }, + "components": { + "securitySchemes": { + "basic_auth": { + "type": "http", + "scheme": "basic" + }, + "bearer_auth": { + "type": "http", + "scheme": "bearer" + } + }, + "schemas": { + "OCSMeta": { + "type": "object", + "required": [ + "status", + "statuscode" + ], + "properties": { + "status": { + "type": "string" + }, + "statuscode": { + "type": "integer" + }, + "message": { + "type": "string" + }, + "totalitems": { + "type": "string" + }, + "itemsperpage": { + "type": "string" + } + } + } + } + }, + "paths": { + "/ocs/v2.php/apps/federation/api/v1/shared-secret": { + "get": { + "operationId": "ocs_authapi-get-shared-secret-legacy", + "summary": "Create shared secret and return it, for legacy end-points", + "tags": [ + "ocs_authapi" + ], + "security": [ + {}, + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "parameters": [ + { + "name": "url", + "in": "query", + "description": "URL of the server", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "token", + "in": "query", + "description": "Token of the server", + "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": "Shared secret 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": [ + "sharedSecret" + ], + "properties": { + "sharedSecret": { + "type": "string" + } + } + } + } + } + } + } + } + } + }, + "403": { + "description": "Getting shared secret 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": {} + } + } + } + } + } + } + } + } + } + }, + "/ocs/v2.php/apps/federation/api/v1/request-shared-secret": { + "post": { + "operationId": "ocs_authapi-request-shared-secret-legacy", + "summary": "Request received to ask remote server for a shared secret, for legacy end-points", + "tags": [ + "ocs_authapi" + ], + "security": [ + {}, + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "url", + "token" + ], + "properties": { + "url": { + "type": "string", + "description": "URL of the server" + }, + "token": { + "type": "string", + "description": "Token of the server" + } + } + } + } + } + }, + "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": "Shared secret requested 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": "Requesting shared secret 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": {} + } + } + } + } + } + } + } + } + } + }, + "/ocs/v2.php/cloud/shared-secret": { + "get": { + "operationId": "ocs_authapi-get-shared-secret", + "summary": "Create shared secret and return it", + "tags": [ + "ocs_authapi" + ], + "security": [ + {}, + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "parameters": [ + { + "name": "url", + "in": "query", + "description": "URL of the server", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "token", + "in": "query", + "description": "Token of the server", + "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": "Shared secret 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": [ + "sharedSecret" + ], + "properties": { + "sharedSecret": { + "type": "string" + } + } + } + } + } + } + } + } + } + }, + "403": { + "description": "Getting shared secret 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": {} + } + } + } + } + } + } + } + } + }, + "post": { + "operationId": "ocs_authapi-request-shared-secret", + "summary": "Request received to ask remote server for a shared secret", + "tags": [ + "ocs_authapi" + ], + "security": [ + {}, + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "url", + "token" + ], + "properties": { + "url": { + "type": "string", + "description": "URL of the server" + }, + "token": { + "type": "string", + "description": "Token of the server" + } + } + } + } + } + }, + "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": "Shared secret requested 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": "Requesting shared secret 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": {} + } + } + } + } + } + } + } + } + } + } + }, + "tags": [ + { + "name": "ocs_authapi", + "description": "Class OCSAuthAPI OCS API end-points to exchange shared secret between two connected Nextclouds" + } + ] +} diff --git a/apps/federation/openapi-federation.json.license b/apps/federation/openapi-federation.json.license new file mode 100644 index 00000000000..5dcb9c9e84b --- /dev/null +++ b/apps/federation/openapi-federation.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/federation/openapi-full.json b/apps/federation/openapi-full.json new file mode 100644 index 00000000000..c9a9e3ccf81 --- /dev/null +++ b/apps/federation/openapi-full.json @@ -0,0 +1,885 @@ +{ + "openapi": "3.0.3", + "info": { + "title": "federation-full", + "version": "0.0.1", + "description": "Federation allows you to connect with other trusted servers to exchange the account directory.", + "license": { + "name": "agpl" + } + }, + "components": { + "securitySchemes": { + "basic_auth": { + "type": "http", + "scheme": "basic" + }, + "bearer_auth": { + "type": "http", + "scheme": "bearer" + } + }, + "schemas": { + "OCSMeta": { + "type": "object", + "required": [ + "status", + "statuscode" + ], + "properties": { + "status": { + "type": "string" + }, + "statuscode": { + "type": "integer" + }, + "message": { + "type": "string" + }, + "totalitems": { + "type": "string" + }, + "itemsperpage": { + "type": "string" + } + } + } + } + }, + "paths": { + "/ocs/v2.php/apps/federation/api/v1/shared-secret": { + "get": { + "operationId": "ocs_authapi-get-shared-secret-legacy", + "summary": "Create shared secret and return it, for legacy end-points", + "tags": [ + "ocs_authapi" + ], + "security": [ + {}, + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "parameters": [ + { + "name": "url", + "in": "query", + "description": "URL of the server", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "token", + "in": "query", + "description": "Token of the server", + "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": "Shared secret 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": [ + "sharedSecret" + ], + "properties": { + "sharedSecret": { + "type": "string" + } + } + } + } + } + } + } + } + } + }, + "403": { + "description": "Getting shared secret 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": {} + } + } + } + } + } + } + } + } + } + }, + "/ocs/v2.php/apps/federation/api/v1/request-shared-secret": { + "post": { + "operationId": "ocs_authapi-request-shared-secret-legacy", + "summary": "Request received to ask remote server for a shared secret, for legacy end-points", + "tags": [ + "ocs_authapi" + ], + "security": [ + {}, + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "url", + "token" + ], + "properties": { + "url": { + "type": "string", + "description": "URL of the server" + }, + "token": { + "type": "string", + "description": "Token of the server" + } + } + } + } + } + }, + "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": "Shared secret requested 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": "Requesting shared secret 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": {} + } + } + } + } + } + } + } + } + } + }, + "/ocs/v2.php/cloud/shared-secret": { + "get": { + "operationId": "ocs_authapi-get-shared-secret", + "summary": "Create shared secret and return it", + "tags": [ + "ocs_authapi" + ], + "security": [ + {}, + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "parameters": [ + { + "name": "url", + "in": "query", + "description": "URL of the server", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "token", + "in": "query", + "description": "Token of the server", + "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": "Shared secret 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": [ + "sharedSecret" + ], + "properties": { + "sharedSecret": { + "type": "string" + } + } + } + } + } + } + } + } + } + }, + "403": { + "description": "Getting shared secret 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": {} + } + } + } + } + } + } + } + } + }, + "post": { + "operationId": "ocs_authapi-request-shared-secret", + "summary": "Request received to ask remote server for a shared secret", + "tags": [ + "ocs_authapi" + ], + "security": [ + {}, + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "url", + "token" + ], + "properties": { + "url": { + "type": "string", + "description": "URL of the server" + }, + "token": { + "type": "string", + "description": "Token of the server" + } + } + } + } + } + }, + "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": "Shared secret requested 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": "Requesting shared secret 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": {} + } + } + } + } + } + } + } + } + } + }, + "/ocs/v2.php/apps/federation/trusted-servers": { + "post": { + "operationId": "settings-add-server", + "summary": "Add server to the list of trusted Nextcloud servers", + "description": "This endpoint requires admin access", + "tags": [ + "settings" + ], + "security": [ + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "url" + ], + "properties": { + "url": { + "type": "string", + "description": "The URL of the server to add" + } + } + } + } + } + }, + "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": "Server added successfully", + "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": [ + "id", + "message", + "url" + ], + "properties": { + "id": { + "type": "integer", + "format": "int64" + }, + "message": { + "type": "string" + }, + "url": { + "type": "string" + } + } + } + } + } + } + } + } + } + }, + "404": { + "description": "Server not found at the given URL", + "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": [ + "message" + ], + "properties": { + "message": { + "type": "string" + } + } + } + } + } + } + } + } + } + }, + "409": { + "description": "Server is already in the list of trusted servers", + "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": [ + "message" + ], + "properties": { + "message": { + "type": "string" + } + } + } + } + } + } + } + } + } + } + } + }, + "get": { + "operationId": "settings-get-servers", + "summary": "List all trusted servers", + "description": "This endpoint requires admin access", + "tags": [ + "settings" + ], + "security": [ + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "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": "List of trusted servers", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "array", + "items": { + "type": "object", + "required": [ + "id", + "status", + "url" + ], + "properties": { + "id": { + "type": "integer", + "format": "int64" + }, + "status": { + "type": "integer", + "format": "int64" + }, + "url": { + "type": "string" + } + } + } + } + } + } + } + } + } + } + } + } + } + }, + "/ocs/v2.php/apps/federation/trusted-servers/{id}": { + "delete": { + "operationId": "settings-remove-server", + "summary": "Add server to the list of trusted Nextcloud servers", + "description": "This endpoint requires admin access", + "tags": [ + "settings" + ], + "security": [ + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "parameters": [ + { + "name": "id", + "in": "path", + "description": "The ID of the trusted server to remove", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "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": "Server removed successfully", + "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": [ + "id" + ], + "properties": { + "id": { + "type": "integer", + "format": "int64" + } + } + } + } + } + } + } + } + } + }, + "404": { + "description": "Server not found at the given ID", + "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": [ + "message" + ], + "properties": { + "message": { + "type": "string" + } + } + } + } + } + } + } + } + } + } + } + } + } + }, + "tags": [ + { + "name": "ocs_authapi", + "description": "Class OCSAuthAPI OCS API end-points to exchange shared secret between two connected Nextclouds" + } + ] +} diff --git a/apps/federation/openapi-full.json.license b/apps/federation/openapi-full.json.license new file mode 100644 index 00000000000..5dcb9c9e84b --- /dev/null +++ b/apps/federation/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/federation/templates/settings-admin.php b/apps/federation/templates/settings-admin.php index 3fa7a02a02e..857a8b23e37 100644 --- a/apps/federation/templates/settings-admin.php +++ b/apps/federation/templates/settings-admin.php @@ -1,14 +1,34 @@ <?php -/** @var array $_ */ +/** + * SPDX-FileCopyrightText: 2016-2024 Nextcloud GmbH and Nextcloud contributors + * SPDX-FileCopyrightText: 2015-2016 ownCloud, Inc. + * SPDX-License-Identifier: AGPL-3.0-only + */ + use OCA\Federation\TrustedServers; +use OCP\IL10N; +use OCP\IURLGenerator; +use OCP\Server; +use OCP\Util; + +/** @var IL10N $l */ + +Util::addScript('federation', 'settings-admin'); +Util::addStyle('federation', 'settings-admin'); -/** @var \OCP\IL10N $l */ -script('federation', 'settings-admin'); -style('federation', 'settings-admin') +$urlGenerator = Server::get(IURLGenerator::class); +$documentationLink = $urlGenerator->linkToDocs('admin-sharing-federated') . '#configuring-trusted-nextcloud-servers'; +$documentationLabel = $l->t('External documentation for Federated Cloud Sharing'); ?> <div id="ocFederationSettings" class="section"> - <h2><?php p($l->t('Trusted servers')); ?></h2> - <p class="settings-hint"><?php p($l->t('Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing. It is not necessary to add a server as trusted server in order to create a federated share.')); ?></p> + <h2> + <?php p($l->t('Trusted servers')); ?> + <a target="_blank" rel="noreferrer noopener" class="icon-info" + title="<?php p($documentationLabel);?>" + href="<?php p($documentationLink); ?>"></a> + </h2> + <p class="settings-hint"><?php p($l->t('Federation allows you to connect with other trusted servers to exchange the account directory. For example this will be used to auto-complete external accounts for federated sharing. It is not necessary to add a server as trusted server in order to create a federated share.')); ?></p> + <p class="settings-hint"><?php p($l->t('Each server must validate the other. This process may require a few cron cycles.')); ?></p> <ul id="listOfTrustedServers"> <?php foreach ($_['trustedServers'] as $trustedServer) { ?> @@ -17,8 +37,8 @@ style('federation', 'settings-admin') <span class="status success"></span> <?php } elseif ( - (int)$trustedServer['status'] === TrustedServers::STATUS_PENDING || - (int)$trustedServer['status'] === TrustedServers::STATUS_ACCESS_REVOKED + (int)$trustedServer['status'] === TrustedServers::STATUS_PENDING + || (int)$trustedServer['status'] === TrustedServers::STATUS_ACCESS_REVOKED ) { ?> <span class="status indeterminate"></span> <?php } else {?> @@ -29,11 +49,16 @@ style('federation', 'settings-admin') </li> <?php } ?> </ul> - <p id="ocFederationAddServer"> - <button id="ocFederationAddServerButton" class=""><?php p($l->t('+ Add trusted server')); ?></button> - <input id="serverUrl" class="hidden" type="text" value="" placeholder="<?php p($l->t('Trusted server')); ?>" name="server_url"/> - <button id="ocFederationSubmit" class="hidden"><?php p($l->t('Add')); ?></button> - <span class="msg"></span> - </p> + <div id="ocFederationAddServer"> + <button id="ocFederationAddServerButton"><?php p($l->t('+ Add trusted server')); ?></button> + <div class="serverUrl hidden"> + <div class="serverUrl-block"> + <label for="serverUrl"><?php p($l->t('Trusted server')); ?></label> + <input id="serverUrl" type="text" value="" placeholder="<?php p($l->t('Trusted server')); ?>" name="server_url"/> + <button id="ocFederationSubmit" class="hidden"><?php p($l->t('Add')); ?></button> + </div> + <span class="msg"></span> + </div> + </div> </div> diff --git a/apps/federation/tests/BackgroundJob/GetSharedSecretTest.php b/apps/federation/tests/BackgroundJob/GetSharedSecretTest.php index baefa86aeda..943bdf352de 100644 --- a/apps/federation/tests/BackgroundJob/GetSharedSecretTest.php +++ b/apps/federation/tests/BackgroundJob/GetSharedSecretTest.php @@ -1,28 +1,10 @@ <?php + +declare(strict_types=1); /** - * @copyright Copyright (c) 2016, ownCloud, Inc. - * - * @author Bjoern Schiessle <bjoern@schiessle.org> - * @author Björn Schießle <bjoern@schiessle.org> - * @author Joas Schilling <coding@schilljs.com> - * @author Morris Jobke <hey@morrisjobke.de> - * @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: 2016-2024 Nextcloud GmbH and Nextcloud contributors + * SPDX-FileCopyrightText: 2016 ownCloud, Inc. + * SPDX-License-Identifier: AGPL-3.0-only */ namespace OCA\Federation\Tests\BackgroundJob; @@ -36,9 +18,11 @@ use OCP\BackgroundJob\IJobList; use OCP\Http\Client\IClient; use OCP\Http\Client\IClientService; use OCP\Http\Client\IResponse; -use OCP\ILogger; +use OCP\IConfig; use OCP\IURLGenerator; use OCP\OCS\IDiscoveryService; +use PHPUnit\Framework\MockObject\MockObject; +use Psr\Log\LoggerInterface; /** * Class GetSharedSecretTest @@ -49,35 +33,18 @@ use OCP\OCS\IDiscoveryService; */ class GetSharedSecretTest extends TestCase { - /** @var \PHPUnit\Framework\MockObject\MockObject|IClient */ - private $httpClient; - - /** @var \PHPUnit\Framework\MockObject\MockObject|IClientService */ - private $httpClientService; - - /** @var \PHPUnit\Framework\MockObject\MockObject|IJobList */ - private $jobList; - - /** @var \PHPUnit\Framework\MockObject\MockObject|IURLGenerator */ - private $urlGenerator; - - /** @var \PHPUnit\Framework\MockObject\MockObject|TrustedServers */ - private $trustedServers; - - /** @var \PHPUnit\Framework\MockObject\MockObject|ILogger */ - private $logger; - - /** @var \PHPUnit\Framework\MockObject\MockObject|IResponse */ - private $response; - - /** @var \PHPUnit\Framework\MockObject\MockObject|IDiscoveryService */ - private $discoverService; - - /** @var \PHPUnit\Framework\MockObject\MockObject|ITimeFactory */ - private $timeFactory; + private MockObject&IClient $httpClient; + private MockObject&IClientService $httpClientService; + private MockObject&IJobList $jobList; + private MockObject&IURLGenerator $urlGenerator; + private MockObject&TrustedServers $trustedServers; + private MockObject&LoggerInterface $logger; + private MockObject&IResponse $response; + private MockObject&IDiscoveryService $discoverService; + private MockObject&ITimeFactory $timeFactory; + private MockObject&IConfig $config; - /** @var GetSharedSecret */ - private $getSharedSecret; + private GetSharedSecret $getSharedSecret; protected function setUp(): void { parent::setUp(); @@ -88,10 +55,11 @@ class GetSharedSecretTest extends TestCase { $this->urlGenerator = $this->getMockBuilder(IURLGenerator::class)->getMock(); $this->trustedServers = $this->getMockBuilder(TrustedServers::class) ->disableOriginalConstructor()->getMock(); - $this->logger = $this->getMockBuilder(ILogger::class)->getMock(); + $this->logger = $this->getMockBuilder(LoggerInterface::class)->getMock(); $this->response = $this->getMockBuilder(IResponse::class)->getMock(); $this->discoverService = $this->getMockBuilder(IDiscoveryService::class)->getMock(); $this->timeFactory = $this->createMock(ITimeFactory::class); + $this->config = $this->createMock(IConfig::class); $this->discoverService->expects($this->any())->method('discover')->willReturn([]); $this->httpClientService->expects($this->any())->method('newClient')->willReturn($this->httpClient); @@ -103,19 +71,15 @@ class GetSharedSecretTest extends TestCase { $this->trustedServers, $this->logger, $this->discoverService, - $this->timeFactory + $this->timeFactory, + $this->config, ); } - /** - * @dataProvider dataTestExecute - * - * @param bool $isTrustedServer - * @param bool $retainBackgroundJob - */ - public function testExecute($isTrustedServer, $retainBackgroundJob) { - /** @var GetSharedSecret |\PHPUnit\Framework\MockObject\MockObject $getSharedSecret */ - $getSharedSecret = $this->getMockBuilder('OCA\Federation\BackgroundJob\GetSharedSecret') + #[\PHPUnit\Framework\Attributes\DataProvider('dataTestExecute')] + public function testExecute(bool $isTrustedServer, bool $retainBackgroundJob): void { + /** @var GetSharedSecret&MockObject $getSharedSecret */ + $getSharedSecret = $this->getMockBuilder(GetSharedSecret::class) ->setConstructorArgs( [ $this->httpClientService, @@ -124,19 +88,22 @@ class GetSharedSecretTest extends TestCase { $this->trustedServers, $this->logger, $this->discoverService, - $this->timeFactory + $this->timeFactory, + $this->config, ] - )->setMethods(['parentExecute'])->getMock(); - $this->invokePrivate($getSharedSecret, 'argument', [['url' => 'url', 'token' => 'token']]); + ) + ->onlyMethods(['parentStart']) + ->getMock(); + self::invokePrivate($getSharedSecret, 'argument', [['url' => 'url', 'token' => 'token']]); $this->trustedServers->expects($this->once())->method('isTrustedServer') ->with('url')->willReturn($isTrustedServer); if ($isTrustedServer) { - $getSharedSecret->expects($this->once())->method('parentExecute'); + $getSharedSecret->expects($this->once())->method('parentStart'); } else { - $getSharedSecret->expects($this->never())->method('parentExecute'); + $getSharedSecret->expects($this->never())->method('parentStart'); } - $this->invokePrivate($getSharedSecret, 'retainJob', [$retainBackgroundJob]); + self::invokePrivate($getSharedSecret, 'retainJob', [$retainBackgroundJob]); $this->jobList->expects($this->once())->method('remove'); $this->timeFactory->method('getTime')->willReturn(42); @@ -156,10 +123,10 @@ class GetSharedSecretTest extends TestCase { $this->jobList->expects($this->never())->method('add'); } - $getSharedSecret->execute($this->jobList); + $getSharedSecret->start($this->jobList); } - public function dataTestExecute() { + public static function dataTestExecute(): array { return [ [true, true], [true, false], @@ -167,12 +134,8 @@ class GetSharedSecretTest extends TestCase { ]; } - /** - * @dataProvider dataTestRun - * - * @param int $statusCode - */ - public function testRun($statusCode) { + #[\PHPUnit\Framework\Attributes\DataProvider('dataTestRun')] + public function testRun(int $statusCode): void { $target = 'targetURL'; $source = 'sourceURL'; $token = 'token'; @@ -188,14 +151,14 @@ class GetSharedSecretTest extends TestCase { ->with( $target . '/ocs/v2.php/apps/federation/api/v1/shared-secret', [ - 'query' => - [ - 'url' => $source, - 'token' => $token, - 'format' => 'json', - ], + 'query' => [ + 'url' => $source, + 'token' => $token, + 'format' => 'json', + ], 'timeout' => 3, 'connect_timeout' => 3, + 'verify' => true, ] )->willReturn($this->response); @@ -211,18 +174,18 @@ class GetSharedSecretTest extends TestCase { $this->trustedServers->expects($this->never())->method('addSharedSecret'); } - $this->invokePrivate($this->getSharedSecret, 'run', [$argument]); + self::invokePrivate($this->getSharedSecret, 'run', [$argument]); if ( $statusCode !== Http::STATUS_OK && $statusCode !== Http::STATUS_FORBIDDEN ) { - $this->assertTrue($this->invokePrivate($this->getSharedSecret, 'retainJob')); + $this->assertTrue(self::invokePrivate($this->getSharedSecret, 'retainJob')); } else { - $this->assertFalse($this->invokePrivate($this->getSharedSecret, 'retainJob')); + $this->assertFalse(self::invokePrivate($this->getSharedSecret, 'retainJob')); } } - public function dataTestRun() { + public static function dataTestRun(): array { return [ [Http::STATUS_OK], [Http::STATUS_FORBIDDEN], @@ -230,7 +193,7 @@ class GetSharedSecretTest extends TestCase { ]; } - public function testRunExpired() { + public function testRunExpired(): void { $target = 'targetURL'; $source = 'sourceURL'; $token = 'token'; @@ -257,10 +220,10 @@ class GetSharedSecretTest extends TestCase { TrustedServers::STATUS_FAILURE ); - $this->invokePrivate($this->getSharedSecret, 'run', [$argument]); + self::invokePrivate($this->getSharedSecret, 'run', [$argument]); } - public function testRunConnectionError() { + public function testRunConnectionError(): void { $target = 'targetURL'; $source = 'sourceURL'; $token = 'token'; @@ -279,21 +242,21 @@ class GetSharedSecretTest extends TestCase { ->with( $target . '/ocs/v2.php/apps/federation/api/v1/shared-secret', [ - 'query' => - [ - 'url' => $source, - 'token' => $token, - 'format' => 'json', - ], + 'query' => [ + 'url' => $source, + 'token' => $token, + 'format' => 'json', + ], 'timeout' => 3, 'connect_timeout' => 3, + 'verify' => true, ] )->willThrowException($this->createMock(ConnectException::class)); $this->trustedServers->expects($this->never())->method('addSharedSecret'); - $this->invokePrivate($this->getSharedSecret, 'run', [$argument]); + self::invokePrivate($this->getSharedSecret, 'run', [$argument]); - $this->assertTrue($this->invokePrivate($this->getSharedSecret, 'retainJob')); + $this->assertTrue(self::invokePrivate($this->getSharedSecret, 'retainJob')); } } diff --git a/apps/federation/tests/BackgroundJob/RequestSharedSecretTest.php b/apps/federation/tests/BackgroundJob/RequestSharedSecretTest.php index d013ad221bc..6ef579c7483 100644 --- a/apps/federation/tests/BackgroundJob/RequestSharedSecretTest.php +++ b/apps/federation/tests/BackgroundJob/RequestSharedSecretTest.php @@ -1,27 +1,10 @@ <?php + +declare(strict_types=1); /** - * @copyright Copyright (c) 2016, ownCloud, Inc. - * - * @author Bjoern Schiessle <bjoern@schiessle.org> - * @author Björn Schießle <bjoern@schiessle.org> - * @author Joas Schilling <coding@schilljs.com> - * @author Morris Jobke <hey@morrisjobke.de> - * @author Roeland Jago Douma <roeland@famdouma.nl> - * - * @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\Federation\Tests\BackgroundJob; @@ -34,56 +17,39 @@ use OCP\BackgroundJob\IJobList; use OCP\Http\Client\IClient; use OCP\Http\Client\IClientService; use OCP\Http\Client\IResponse; -use OCP\ILogger; +use OCP\IConfig; use OCP\IURLGenerator; use OCP\OCS\IDiscoveryService; +use PHPUnit\Framework\MockObject\MockObject; +use Psr\Log\LoggerInterface; use Test\TestCase; class RequestSharedSecretTest extends TestCase { - - /** @var \PHPUnit\Framework\MockObject\MockObject|IClientService */ - private $httpClientService; - - /** @var \PHPUnit\Framework\MockObject\MockObject|IClient */ - private $httpClient; - - /** @var \PHPUnit\Framework\MockObject\MockObject|IJobList */ - private $jobList; - - /** @var \PHPUnit\Framework\MockObject\MockObject|IURLGenerator */ - private $urlGenerator; - - /** @var \PHPUnit\Framework\MockObject\MockObject|TrustedServers */ - private $trustedServers; - - /** @var \PHPUnit\Framework\MockObject\MockObject|IResponse */ - private $response; - - /** @var \PHPUnit\Framework\MockObject\MockObject|IDiscoveryService */ - private $discoveryService; - - /** @var \PHPUnit\Framework\MockObject\MockObject|ILogger */ - private $logger; - - /** @var \PHPUnit\Framework\MockObject\MockObject|ITimeFactory */ - private $timeFactory; - - /** @var RequestSharedSecret */ - private $requestSharedSecret; + private IClientService&MockObject $httpClientService; + private IClient&MockObject $httpClient; + private IJobList&MockObject $jobList; + private IURLGenerator&MockObject $urlGenerator; + private TrustedServers&MockObject $trustedServers; + private IResponse&MockObject $response; + private IDiscoveryService&MockObject $discoveryService; + private LoggerInterface&MockObject $logger; + private ITimeFactory&MockObject $timeFactory; + private IConfig&MockObject $config; + private RequestSharedSecret $requestSharedSecret; protected function setUp(): void { parent::setUp(); $this->httpClientService = $this->createMock(IClientService::class); - $this->httpClient = $this->getMockBuilder(IClient::class)->getMock(); - $this->jobList = $this->getMockBuilder(IJobList::class)->getMock(); - $this->urlGenerator = $this->getMockBuilder(IURLGenerator::class)->getMock(); - $this->trustedServers = $this->getMockBuilder(TrustedServers::class) - ->disableOriginalConstructor()->getMock(); - $this->response = $this->getMockBuilder(IResponse::class)->getMock(); - $this->discoveryService = $this->getMockBuilder(IDiscoveryService::class)->getMock(); - $this->logger = $this->createMock(ILogger::class); + $this->httpClient = $this->createMock(IClient::class); + $this->jobList = $this->createMock(IJobList::class); + $this->urlGenerator = $this->createMock(IURLGenerator::class); + $this->trustedServers = $this->createMock(TrustedServers::class); + $this->response = $this->createMock(IResponse::class); + $this->discoveryService = $this->createMock(IDiscoveryService::class); + $this->logger = $this->createMock(LoggerInterface::class); $this->timeFactory = $this->createMock(ITimeFactory::class); + $this->config = $this->createMock(IConfig::class); $this->discoveryService->expects($this->any())->method('discover')->willReturn([]); $this->httpClientService->expects($this->any())->method('newClient')->willReturn($this->httpClient); @@ -95,19 +61,15 @@ class RequestSharedSecretTest extends TestCase { $this->trustedServers, $this->discoveryService, $this->logger, - $this->timeFactory + $this->timeFactory, + $this->config, ); } - /** - * @dataProvider dataTestExecute - * - * @param bool $isTrustedServer - * @param bool $retainBackgroundJob - */ - public function testExecute($isTrustedServer, $retainBackgroundJob) { - /** @var RequestSharedSecret |\PHPUnit\Framework\MockObject\MockObject $requestSharedSecret */ - $requestSharedSecret = $this->getMockBuilder('OCA\Federation\BackgroundJob\RequestSharedSecret') + #[\PHPUnit\Framework\Attributes\DataProvider('dataTestStart')] + public function testStart(bool $isTrustedServer, bool $retainBackgroundJob): void { + /** @var RequestSharedSecret&MockObject $requestSharedSecret */ + $requestSharedSecret = $this->getMockBuilder(RequestSharedSecret::class) ->setConstructorArgs( [ $this->httpClientService, @@ -116,19 +78,22 @@ class RequestSharedSecretTest extends TestCase { $this->trustedServers, $this->discoveryService, $this->logger, - $this->timeFactory + $this->timeFactory, + $this->config, ] - )->setMethods(['parentExecute'])->getMock(); - $this->invokePrivate($requestSharedSecret, 'argument', [['url' => 'url', 'token' => 'token']]); + ) + ->onlyMethods(['parentStart']) + ->getMock(); + self::invokePrivate($requestSharedSecret, 'argument', [['url' => 'url', 'token' => 'token']]); $this->trustedServers->expects($this->once())->method('isTrustedServer') ->with('url')->willReturn($isTrustedServer); if ($isTrustedServer) { - $requestSharedSecret->expects($this->once())->method('parentExecute'); + $requestSharedSecret->expects($this->once())->method('parentStart'); } else { - $requestSharedSecret->expects($this->never())->method('parentExecute'); + $requestSharedSecret->expects($this->never())->method('parentStart'); } - $this->invokePrivate($requestSharedSecret, 'retainJob', [$retainBackgroundJob]); + self::invokePrivate($requestSharedSecret, 'retainJob', [$retainBackgroundJob]); $this->jobList->expects($this->once())->method('remove'); $this->timeFactory->method('getTime')->willReturn(42); @@ -142,16 +107,17 @@ class RequestSharedSecretTest extends TestCase { 'url' => 'url', 'token' => 'token', 'created' => 42, + 'attempt' => 1, ] ); } else { $this->jobList->expects($this->never())->method('add'); } - $requestSharedSecret->execute($this->jobList); + $requestSharedSecret->start($this->jobList); } - public function dataTestExecute() { + public static function dataTestStart(): array { return [ [true, true], [true, false], @@ -159,17 +125,13 @@ class RequestSharedSecretTest extends TestCase { ]; } - /** - * @dataProvider dataTestRun - * - * @param int $statusCode - */ - public function testRun($statusCode) { + #[\PHPUnit\Framework\Attributes\DataProvider('dataTestRun')] + public function testRun(int $statusCode, int $attempt = 0): void { $target = 'targetURL'; $source = 'sourceURL'; $token = 'token'; - $argument = ['url' => $target, 'token' => $token]; + $argument = ['url' => $target, 'token' => $token, 'attempt' => $attempt]; $this->timeFactory->method('getTime')->willReturn(42); @@ -179,40 +141,41 @@ class RequestSharedSecretTest extends TestCase { ->with( $target . '/ocs/v2.php/apps/federation/api/v1/request-shared-secret', [ - 'body' => - [ - 'url' => $source, - 'token' => $token, - 'format' => 'json', - ], + 'body' => [ + 'url' => $source, + 'token' => $token, + 'format' => 'json', + ], 'timeout' => 3, 'connect_timeout' => 3, + 'verify' => true, ] )->willReturn($this->response); $this->response->expects($this->once())->method('getStatusCode') ->willReturn($statusCode); - $this->invokePrivate($this->requestSharedSecret, 'run', [$argument]); + self::invokePrivate($this->requestSharedSecret, 'run', [$argument]); if ( $statusCode !== Http::STATUS_OK - && $statusCode !== Http::STATUS_FORBIDDEN + && ($statusCode !== Http::STATUS_FORBIDDEN || $attempt < 5) ) { - $this->assertTrue($this->invokePrivate($this->requestSharedSecret, 'retainJob')); + $this->assertTrue(self::invokePrivate($this->requestSharedSecret, 'retainJob')); } else { - $this->assertFalse($this->invokePrivate($this->requestSharedSecret, 'retainJob')); + $this->assertFalse(self::invokePrivate($this->requestSharedSecret, 'retainJob')); } } - public function dataTestRun() { + public static function dataTestRun(): array { return [ [Http::STATUS_OK], + [Http::STATUS_FORBIDDEN, 5], [Http::STATUS_FORBIDDEN], [Http::STATUS_CONFLICT], ]; } - public function testRunExpired() { + public function testRunExpired(): void { $target = 'targetURL'; $source = 'sourceURL'; $token = 'token'; @@ -239,10 +202,10 @@ class RequestSharedSecretTest extends TestCase { TrustedServers::STATUS_FAILURE ); - $this->invokePrivate($this->requestSharedSecret, 'run', [$argument]); + self::invokePrivate($this->requestSharedSecret, 'run', [$argument]); } - public function testRunConnectionError() { + public function testRunConnectionError(): void { $target = 'targetURL'; $source = 'sourceURL'; $token = 'token'; @@ -263,18 +226,18 @@ class RequestSharedSecretTest extends TestCase { ->with( $target . '/ocs/v2.php/apps/federation/api/v1/request-shared-secret', [ - 'body' => - [ - 'url' => $source, - 'token' => $token, - 'format' => 'json', - ], + 'body' => [ + 'url' => $source, + 'token' => $token, + 'format' => 'json', + ], 'timeout' => 3, 'connect_timeout' => 3, + 'verify' => true, ] )->willThrowException($this->createMock(ConnectException::class)); - $this->invokePrivate($this->requestSharedSecret, 'run', [$argument]); - $this->assertTrue($this->invokePrivate($this->requestSharedSecret, 'retainJob')); + self::invokePrivate($this->requestSharedSecret, 'run', [$argument]); + $this->assertTrue(self::invokePrivate($this->requestSharedSecret, 'retainJob')); } } diff --git a/apps/federation/tests/Controller/OCSAuthAPIControllerTest.php b/apps/federation/tests/Controller/OCSAuthAPIControllerTest.php index f48c8352ae1..a054277c5cd 100644 --- a/apps/federation/tests/Controller/OCSAuthAPIControllerTest.php +++ b/apps/federation/tests/Controller/OCSAuthAPIControllerTest.php @@ -1,71 +1,40 @@ <?php + +declare(strict_types=1); /** - * @copyright Copyright (c) 2016, ownCloud, Inc. - * - * @author Bjoern Schiessle <bjoern@schiessle.org> - * @author Björn Schießle <bjoern@schiessle.org> - * @author Christoph Wurst <christoph@winzerhof-wurst.at> - * @author Morris Jobke <hey@morrisjobke.de> - * @author Robin Appelman <robin@icewind.nl> - * @author Roeland Jago Douma <roeland@famdouma.nl> - * - * @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\Federation\Tests\Controller; use OC\BackgroundJob\JobList; +use OCA\Federation\BackgroundJob\GetSharedSecret; use OCA\Federation\Controller\OCSAuthAPIController; use OCA\Federation\DbHandler; use OCA\Federation\TrustedServers; use OCP\AppFramework\OCS\OCSForbiddenException; use OCP\AppFramework\Utility\ITimeFactory; -use OCP\ILogger; use OCP\IRequest; +use OCP\Security\Bruteforce\IThrottler; use OCP\Security\ISecureRandom; +use PHPUnit\Framework\MockObject\MockObject; +use Psr\Log\LoggerInterface; use Test\TestCase; class OCSAuthAPIControllerTest extends TestCase { - - /** @var \PHPUnit\Framework\MockObject\MockObject|IRequest */ - private $request; - - /** @var \PHPUnit\Framework\MockObject\MockObject|ISecureRandom */ - private $secureRandom; - - /** @var \PHPUnit\Framework\MockObject\MockObject|JobList */ - private $jobList; - - /** @var \PHPUnit\Framework\MockObject\MockObject|TrustedServers */ - private $trustedServers; - - /** @var \PHPUnit\Framework\MockObject\MockObject|DbHandler */ - private $dbHandler; - - /** @var \PHPUnit\Framework\MockObject\MockObject|ILogger */ - private $logger; - - /** @var \PHPUnit\Framework\MockObject\MockObject|ITimeFactory */ - private $timeFactory; - - - /** @var OCSAuthAPIController */ - private $ocsAuthApi; + private IRequest&MockObject $request; + private ISecureRandom&MockObject $secureRandom; + private JobList&MockObject $jobList; + private TrustedServers&MockObject $trustedServers; + private DbHandler&MockObject $dbHandler; + private LoggerInterface&MockObject $logger; + private ITimeFactory&MockObject $timeFactory; + private IThrottler&MockObject $throttler; + private OCSAuthAPIController $ocsAuthApi; /** @var int simulated timestamp */ - private $currentTime = 1234567; + private int $currentTime = 1234567; protected function setUp(): void { parent::setUp(); @@ -75,9 +44,9 @@ class OCSAuthAPIControllerTest extends TestCase { $this->trustedServers = $this->createMock(TrustedServers::class); $this->dbHandler = $this->createMock(DbHandler::class); $this->jobList = $this->createMock(JobList::class); - $this->logger = $this->createMock(ILogger::class); + $this->logger = $this->createMock(LoggerInterface::class); $this->timeFactory = $this->createMock(ITimeFactory::class); - + $this->throttler = $this->createMock(IThrottler::class); $this->ocsAuthApi = new OCSAuthAPIController( 'federation', @@ -87,22 +56,16 @@ class OCSAuthAPIControllerTest extends TestCase { $this->trustedServers, $this->dbHandler, $this->logger, - $this->timeFactory + $this->timeFactory, + $this->throttler ); $this->timeFactory->method('getTime') ->willReturn($this->currentTime); } - /** - * @dataProvider dataTestRequestSharedSecret - * - * @param string $token - * @param string $localToken - * @param bool $isTrustedServer - * @param bool $ok - */ - public function testRequestSharedSecret($token, $localToken, $isTrustedServer, $ok) { + #[\PHPUnit\Framework\Attributes\DataProvider('dataTestRequestSharedSecret')] + public function testRequestSharedSecret(string $token, string $localToken, bool $isTrustedServer, bool $ok): void { $url = 'url'; $this->trustedServers @@ -113,12 +76,18 @@ class OCSAuthAPIControllerTest extends TestCase { if ($ok) { $this->jobList->expects($this->once())->method('add') - ->with('OCA\Federation\BackgroundJob\GetSharedSecret', ['url' => $url, 'token' => $token, 'created' => $this->currentTime]); + ->with(GetSharedSecret::class, ['url' => $url, 'token' => $token, 'created' => $this->currentTime]); } else { $this->jobList->expects($this->never())->method('add'); $this->jobList->expects($this->never())->method('remove'); + if (!$isTrustedServer) { + $this->throttler->expects($this->once()) + ->method('registerAttempt') + ->with('federationSharedSecret'); + } } + try { $this->ocsAuthApi->requestSharedSecret($url, $token); $this->assertTrue($ok); @@ -127,7 +96,7 @@ class OCSAuthAPIControllerTest extends TestCase { } } - public function dataTestRequestSharedSecret() { + public static function dataTestRequestSharedSecret(): array { return [ ['token2', 'token1', true, true], ['token1', 'token2', false, false], @@ -135,19 +104,13 @@ class OCSAuthAPIControllerTest extends TestCase { ]; } - /** - * @dataProvider dataTestGetSharedSecret - * - * @param bool $isTrustedServer - * @param bool $isValidToken - * @param bool $ok - */ - public function testGetSharedSecret($isTrustedServer, $isValidToken, $ok) { + #[\PHPUnit\Framework\Attributes\DataProvider('dataTestGetSharedSecret')] + public function testGetSharedSecret(bool $isTrustedServer, bool $isValidToken, bool $ok): void { $url = 'url'; $token = 'token'; - /** @var OCSAuthAPIController | \PHPUnit\Framework\MockObject\MockObject $ocsAuthApi */ - $ocsAuthApi = $this->getMockBuilder('OCA\Federation\Controller\OCSAuthAPIController') + /** @var OCSAuthAPIController&MockObject $ocsAuthApi */ + $ocsAuthApi = $this->getMockBuilder(OCSAuthAPIController::class) ->setConstructorArgs( [ 'federation', @@ -157,9 +120,12 @@ class OCSAuthAPIControllerTest extends TestCase { $this->trustedServers, $this->dbHandler, $this->logger, - $this->timeFactory + $this->timeFactory, + $this->throttler ] - )->setMethods(['isValidToken'])->getMock(); + ) + ->onlyMethods(['isValidToken']) + ->getMock(); $this->trustedServers ->expects($this->any()) @@ -171,10 +137,13 @@ class OCSAuthAPIControllerTest extends TestCase { $this->secureRandom->expects($this->once())->method('generate')->with(32) ->willReturn('secret'); $this->trustedServers->expects($this->once()) - ->method('addSharedSecret')->willReturn($url, 'secret'); + ->method('addSharedSecret')->with($url, 'secret'); } else { $this->secureRandom->expects($this->never())->method('generate'); $this->trustedServers->expects($this->never())->method('addSharedSecret'); + $this->throttler->expects($this->once()) + ->method('registerAttempt') + ->with('federationSharedSecret'); } try { @@ -187,7 +156,7 @@ class OCSAuthAPIControllerTest extends TestCase { } } - public function dataTestGetSharedSecret() { + public static function dataTestGetSharedSecret(): array { return [ [true, true, true], [false, true, false], diff --git a/apps/federation/tests/Controller/SettingsControllerTest.php b/apps/federation/tests/Controller/SettingsControllerTest.php index 856dcaa533f..b0a7a5e30c9 100644 --- a/apps/federation/tests/Controller/SettingsControllerTest.php +++ b/apps/federation/tests/Controller/SettingsControllerTest.php @@ -1,66 +1,50 @@ <?php + +declare(strict_types=1); /** - * @copyright Copyright (c) 2016, ownCloud, Inc. - * - * @author Björn Schießle <bjoern@schiessle.org> - * @author Morris Jobke <hey@morrisjobke.de> - * @author Roeland Jago Douma <roeland@famdouma.nl> - * - * @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\Federation\Tests\Controller; use OCA\Federation\Controller\SettingsController; use OCA\Federation\TrustedServers; use OCP\AppFramework\Http\DataResponse; +use OCP\AppFramework\OCS\OCSException; +use OCP\AppFramework\OCS\OCSNotFoundException; use OCP\IL10N; use OCP\IRequest; +use PHPUnit\Framework\MockObject\MockObject; +use Psr\Log\LoggerInterface; use Test\TestCase; class SettingsControllerTest extends TestCase { + private SettingsController $controller; - /** @var SettingsController */ - private $controller; - - /** @var \PHPUnit\Framework\MockObject\MockObject | \OCP\IRequest */ - private $request; - - /** @var \PHPUnit\Framework\MockObject\MockObject | \OCP\IL10N */ - private $l10n; - - /** @var \PHPUnit\Framework\MockObject\MockObject | \OCA\Federation\TrustedServers */ - private $trustedServers; + private IRequest&MockObject $request; + private IL10N&MockObject $l10n; + private TrustedServers&MockObject $trustedServers; + private LoggerInterface&MockObject $logger; protected function setUp(): void { parent::setUp(); - $this->request = $this->getMockBuilder(IRequest::class)->getMock(); - $this->l10n = $this->getMockBuilder(IL10N::class)->getMock(); - $this->trustedServers = $this->getMockBuilder(TrustedServers::class) - ->disableOriginalConstructor()->getMock(); + $this->request = $this->createMock(IRequest::class); + $this->l10n = $this->createMock(IL10N::class); + $this->trustedServers = $this->createMock(TrustedServers::class); + $this->logger = $this->createMock(LoggerInterface::class); $this->controller = new SettingsController( 'SettingsControllerTest', $this->request, $this->l10n, - $this->trustedServers + $this->trustedServers, + $this->logger, ); } - public function testAddServer() { + public function testAddServer(): void { $this->trustedServers ->expects($this->once()) ->method('isTrustedServer') @@ -68,12 +52,12 @@ class SettingsControllerTest extends TestCase { ->willReturn(false); $this->trustedServers ->expects($this->once()) - ->method('isOwnCloudServer') + ->method('isNextcloudServer') ->with('url') ->willReturn(true); $result = $this->controller->addServer('url'); - $this->assertTrue($result instanceof DataResponse); + $this->assertInstanceOf(DataResponse::class, $result); $data = $result->getData(); $this->assertSame(200, $result->getStatus()); @@ -81,15 +65,8 @@ class SettingsControllerTest extends TestCase { $this->assertArrayHasKey('id', $data); } - /** - * @dataProvider checkServerFails - * - * @param bool $isTrustedServer - * @param bool $isOwnCloud - */ - public function testAddServerFail($isTrustedServer, $isOwnCloud) { - $this->expectException(\OCP\HintException::class); - + #[\PHPUnit\Framework\Attributes\DataProvider('checkServerFails')] + public function testAddServerFail(bool $isTrustedServer, bool $isNextcloud): void { $this->trustedServers ->expects($this->any()) ->method('isTrustedServer') @@ -97,22 +74,29 @@ class SettingsControllerTest extends TestCase { ->willReturn($isTrustedServer); $this->trustedServers ->expects($this->any()) - ->method('isOwnCloudServer') + ->method('isNextcloudServer') ->with('url') - ->willReturn($isOwnCloud); + ->willReturn($isNextcloud); + + if ($isTrustedServer) { + $this->expectException(OCSException::class); + } else { + $this->expectException(OCSNotFoundException::class); + } $this->controller->addServer('url'); } - public function testRemoveServer() { - $this->trustedServers->expects($this->once())->method('removeServer') - ->with('url'); - $result = $this->controller->removeServer('url'); + public function testRemoveServer(): void { + $this->trustedServers->expects($this->once()) + ->method('removeServer') + ->with(1); + $result = $this->controller->removeServer(1); $this->assertTrue($result instanceof DataResponse); $this->assertSame(200, $result->getStatus()); } - public function testCheckServer() { + public function testCheckServer(): void { $this->trustedServers ->expects($this->once()) ->method('isTrustedServer') @@ -120,24 +104,17 @@ class SettingsControllerTest extends TestCase { ->willReturn(false); $this->trustedServers ->expects($this->once()) - ->method('isOwnCloudServer') + ->method('isNextcloudServer') ->with('url') ->willReturn(true); - $this->assertTrue( - $this->invokePrivate($this->controller, 'checkServer', ['url']) + $this->assertNull( + self::invokePrivate($this->controller, 'checkServer', ['url']) ); } - /** - * @dataProvider checkServerFails - * - * @param bool $isTrustedServer - * @param bool $isOwnCloud - */ - public function testCheckServerFail($isTrustedServer, $isOwnCloud) { - $this->expectException(\OCP\HintException::class); - + #[\PHPUnit\Framework\Attributes\DataProvider('checkServerFails')] + public function testCheckServerFail(bool $isTrustedServer, bool $isNextcloud): void { $this->trustedServers ->expects($this->any()) ->method('isTrustedServer') @@ -145,21 +122,22 @@ class SettingsControllerTest extends TestCase { ->willReturn($isTrustedServer); $this->trustedServers ->expects($this->any()) - ->method('isOwnCloudServer') + ->method('isNextcloudServer') ->with('url') - ->willReturn($isOwnCloud); + ->willReturn($isNextcloud); + + if ($isTrustedServer) { + $this->expectException(OCSException::class); + } else { + $this->expectException(OCSNotFoundException::class); + } $this->assertTrue( - $this->invokePrivate($this->controller, 'checkServer', ['url']) + self::invokePrivate($this->controller, 'checkServer', ['url']) ); } - /** - * data to simulate checkServer fails - * - * @return array - */ - public function checkServerFails() { + public static function checkServerFails(): array { return [ [true, true], [false, false] diff --git a/apps/federation/tests/DAV/FedAuthTest.php b/apps/federation/tests/DAV/FedAuthTest.php index 3a801766d85..c95d3852b48 100644 --- a/apps/federation/tests/DAV/FedAuthTest.php +++ b/apps/federation/tests/DAV/FedAuthTest.php @@ -1,50 +1,31 @@ <?php + +declare(strict_types=1); /** - * @copyright Copyright (c) 2016, ownCloud, Inc. - * - * @author Morris Jobke <hey@morrisjobke.de> - * @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\Federation\Tests\DAV; use OCA\Federation\DAV\FedAuth; use OCA\Federation\DbHandler; +use PHPUnit\Framework\MockObject\MockObject; use Test\TestCase; class FedAuthTest extends TestCase { - /** - * @dataProvider providesUser - * - * @param array $expected - * @param string $user - * @param string $password - */ - public function testFedAuth($expected, $user, $password) { - /** @var DbHandler | \PHPUnit\Framework\MockObject\MockObject $db */ - $db = $this->getMockBuilder('OCA\Federation\DbHandler')->disableOriginalConstructor()->getMock(); + #[\PHPUnit\Framework\Attributes\DataProvider('providesUser')] + public function testFedAuth(bool $expected, string $user, string $password): void { + /** @var DbHandler&MockObject $db */ + $db = $this->createMock(DbHandler::class); $db->method('auth')->willReturn(true); $auth = new FedAuth($db); - $result = $this->invokePrivate($auth, 'validateUserPass', [$user, $password]); + $result = self::invokePrivate($auth, 'validateUserPass', [$user, $password]); $this->assertEquals($expected, $result); } - public function providesUser() { + public static function providesUser(): array { return [ [true, 'system', '123456'] ]; diff --git a/apps/federation/tests/DbHandlerTest.php b/apps/federation/tests/DbHandlerTest.php index 56645b307d1..5452a48fc4a 100644 --- a/apps/federation/tests/DbHandlerTest.php +++ b/apps/federation/tests/DbHandlerTest.php @@ -1,28 +1,10 @@ <?php + +declare(strict_types=1); /** - * @copyright Copyright (c) 2016, ownCloud, Inc. - * - * @author Björn Schießle <bjoern@schiessle.org> - * @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> - * @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: 2016-2024 Nextcloud GmbH and Nextcloud contributors + * SPDX-FileCopyrightText: 2016 ownCloud, Inc. + * SPDX-License-Identifier: AGPL-3.0-only */ namespace OCA\Federation\Tests; @@ -30,30 +12,24 @@ use OCA\Federation\DbHandler; use OCA\Federation\TrustedServers; use OCP\IDBConnection; use OCP\IL10N; +use OCP\Server; +use PHPUnit\Framework\MockObject\MockObject; use Test\TestCase; /** * @group DB */ class DbHandlerTest extends TestCase { - - /** @var DbHandler */ - private $dbHandler; - - /** @var IL10N | \PHPUnit\Framework\MockObject\MockObject */ - private $il10n; - - /** @var IDBConnection */ - private $connection; - - /** @var string */ - private $dbTable = 'trusted_servers'; + private DbHandler $dbHandler; + private IL10N&MockObject $il10n; + private IDBConnection $connection; + private string $dbTable = 'trusted_servers'; protected function setUp(): void { parent::setUp(); - $this->connection = \OC::$server->getDatabaseConnection(); - $this->il10n = $this->getMockBuilder(IL10N::class)->getMock(); + $this->connection = Server::get(IDBConnection::class); + $this->il10n = $this->createMock(IL10N::class); $this->dbHandler = new DbHandler( $this->connection, @@ -62,26 +38,27 @@ class DbHandlerTest extends TestCase { $query = $this->connection->getQueryBuilder()->select('*')->from($this->dbTable); - $qResult = $query->execute(); + $qResult = $query->executeQuery(); $result = $qResult->fetchAll(); $qResult->closeCursor(); $this->assertEmpty($result, 'we need to start with a empty trusted_servers table'); } protected function tearDown(): void { - parent::tearDown(); $query = $this->connection->getQueryBuilder()->delete($this->dbTable); - $query->execute(); + $query->executeStatement() + ; + parent::tearDown(); } /** - * @dataProvider dataTestAddServer * * @param string $url passed to the method * @param string $expectedUrl the url we expect to be written to the db * @param string $expectedHash the hash value we expect to be written to the db */ - public function testAddServer($url, $expectedUrl, $expectedHash) { + #[\PHPUnit\Framework\Attributes\DataProvider('dataTestAddServer')] + public function testAddServer(string $url, string $expectedUrl, string $expectedHash): void { $id = $this->dbHandler->addServer($url); $query = $this->connection->getQueryBuilder()->select('*')->from($this->dbTable); @@ -89,14 +66,14 @@ class DbHandlerTest extends TestCase { $qResult = $query->execute(); $result = $qResult->fetchAll(); $qResult->closeCursor(); - $this->assertSame(1, count($result)); + $this->assertCount(1, $result); $this->assertSame($expectedUrl, $result[0]['url']); $this->assertSame($id, (int)$result[0]['id']); $this->assertSame($expectedHash, $result[0]['url_hash']); $this->assertSame(TrustedServers::STATUS_PENDING, (int)$result[0]['status']); } - public function dataTestAddServer() { + public static function dataTestAddServer(): array { return [ ['http://owncloud.org', 'http://owncloud.org', sha1('owncloud.org')], ['https://owncloud.org', 'https://owncloud.org', sha1('owncloud.org')], @@ -104,7 +81,7 @@ class DbHandlerTest extends TestCase { ]; } - public function testRemove() { + public function testRemove(): void { $id1 = $this->dbHandler->addServer('server1'); $id2 = $this->dbHandler->addServer('server2'); @@ -113,7 +90,7 @@ class DbHandlerTest extends TestCase { $qResult = $query->execute(); $result = $qResult->fetchAll(); $qResult->closeCursor(); - $this->assertSame(2, count($result)); + $this->assertCount(2, $result); $this->assertSame('server1', $result[0]['url']); $this->assertSame('server2', $result[1]['url']); $this->assertSame($id1, (int)$result[0]['id']); @@ -125,13 +102,13 @@ class DbHandlerTest extends TestCase { $qResult = $query->execute(); $result = $qResult->fetchAll(); $qResult->closeCursor(); - $this->assertSame(1, count($result)); + $this->assertCount(1, $result); $this->assertSame('server1', $result[0]['url']); $this->assertSame($id1, (int)$result[0]['id']); } - public function testGetServerById() { + public function testGetServerById(): void { $this->dbHandler->addServer('server1'); $id = $this->dbHandler->addServer('server2'); @@ -139,7 +116,7 @@ class DbHandlerTest extends TestCase { $this->assertSame('server2', $result['url']); } - public function testGetAll() { + public function testGetAll(): void { $id1 = $this->dbHandler->addServer('server1'); $id2 = $this->dbHandler->addServer('server2'); @@ -151,21 +128,15 @@ class DbHandlerTest extends TestCase { $this->assertSame($id2, (int)$result[1]['id']); } - /** - * @dataProvider dataTestServerExists - * - * @param string $serverInTable - * @param string $checkForServer - * @param bool $expected - */ - public function testServerExists($serverInTable, $checkForServer, $expected) { + #[\PHPUnit\Framework\Attributes\DataProvider('dataTestServerExists')] + public function testServerExists(string $serverInTable, string $checkForServer, bool $expected): void { $this->dbHandler->addServer($serverInTable); $this->assertSame($expected, $this->dbHandler->serverExists($checkForServer) ); } - public function dataTestServerExists() { + public static function dataTestServerExists(): array { return [ ['server1', 'server1', true], ['server1', 'http://server1', true], @@ -177,22 +148,22 @@ class DbHandlerTest extends TestCase { $this->dbHandler->addServer('server1'); $query = $this->connection->getQueryBuilder()->select('*')->from($this->dbTable); - $qResult = $query->execute(); + $qResult = $query->executeQuery(); $result = $qResult->fetchAll(); $qResult->closeCursor(); - $this->assertSame(1, count($result)); + $this->assertCount(1, $result); $this->assertSame(null, $result[0]['token']); $this->dbHandler->addToken('http://server1', 'token'); $query = $this->connection->getQueryBuilder()->select('*')->from($this->dbTable); - $qResult = $query->execute(); + $qResult = $query->executeQuery(); $result = $qResult->fetchAll(); $qResult->closeCursor(); - $this->assertSame(1, count($result)); + $this->assertCount(1, $result); $this->assertSame('token', $result[0]['token']); } - public function testGetToken() { + public function testGetToken(): void { $this->dbHandler->addServer('server1'); $this->dbHandler->addToken('http://server1', 'token'); $this->assertSame('token', @@ -207,7 +178,7 @@ class DbHandlerTest extends TestCase { $qResult = $query->execute(); $result = $qResult->fetchAll(); $qResult->closeCursor(); - $this->assertSame(1, count($result)); + $this->assertCount(1, $result); $this->assertSame(null, $result[0]['shared_secret']); $this->dbHandler->addSharedSecret('http://server1', 'secret'); $query = $this->connection->getQueryBuilder()->select('*')->from($this->dbTable); @@ -215,11 +186,11 @@ class DbHandlerTest extends TestCase { $qResult = $query->execute(); $result = $qResult->fetchAll(); $qResult->closeCursor(); - $this->assertSame(1, count($result)); + $this->assertCount(1, $result); $this->assertSame('secret', $result[0]['shared_secret']); } - public function testGetSharedSecret() { + public function testGetSharedSecret(): void { $this->dbHandler->addServer('server1'); $this->dbHandler->addSharedSecret('http://server1', 'secret'); $this->assertSame('secret', @@ -227,26 +198,26 @@ class DbHandlerTest extends TestCase { ); } - public function testSetServerStatus() { + public function testSetServerStatus(): void { $this->dbHandler->addServer('server1'); $query = $this->connection->getQueryBuilder()->select('*')->from($this->dbTable); - $qResult = $query->execute(); + $qResult = $query->executeQuery(); $result = $qResult->fetchAll(); $qResult->closeCursor(); - $this->assertSame(1, count($result)); + $this->assertCount(1, $result); $this->assertSame(TrustedServers::STATUS_PENDING, (int)$result[0]['status']); $this->dbHandler->setServerStatus('http://server1', TrustedServers::STATUS_OK); $query = $this->connection->getQueryBuilder()->select('*')->from($this->dbTable); - $qResult = $query->execute(); + $qResult = $query->executeQuery(); $result = $qResult->fetchAll(); $qResult->closeCursor(); - $this->assertSame(1, count($result)); + $this->assertCount(1, $result); $this->assertSame(TrustedServers::STATUS_OK, (int)$result[0]['status']); } - public function testGetServerStatus() { + public function testGetServerStatus(): void { $this->dbHandler->addServer('server1'); $this->dbHandler->setServerStatus('http://server1', TrustedServers::STATUS_OK); $this->assertSame(TrustedServers::STATUS_OK, @@ -261,19 +232,15 @@ class DbHandlerTest extends TestCase { /** * hash should always be computed with the normalized URL - * - * @dataProvider dataTestHash - * - * @param string $url - * @param string $expected */ - public function testHash($url, $expected) { + #[\PHPUnit\Framework\Attributes\DataProvider('dataTestHash')] + public function testHash(string $url, string $expected): void { $this->assertSame($expected, $this->invokePrivate($this->dbHandler, 'hash', [$url]) ); } - public function dataTestHash() { + public static function dataTestHash(): array { return [ ['server1', sha1('server1')], ['http://server1', sha1('server1')], @@ -282,19 +249,14 @@ class DbHandlerTest extends TestCase { ]; } - /** - * @dataProvider dataTestNormalizeUrl - * - * @param string $url - * @param string $expected - */ - public function testNormalizeUrl($url, $expected) { + #[\PHPUnit\Framework\Attributes\DataProvider('dataTestNormalizeUrl')] + public function testNormalizeUrl(string $url, string $expected): void { $this->assertSame($expected, $this->invokePrivate($this->dbHandler, 'normalizeUrl', [$url]) ); } - public function dataTestNormalizeUrl() { + public static function dataTestNormalizeUrl(): array { return [ ['owncloud.org', 'owncloud.org'], ['http://owncloud.org', 'owncloud.org'], @@ -304,10 +266,8 @@ class DbHandlerTest extends TestCase { ]; } - /** - * @dataProvider providesAuth - */ - public function testAuth($expectedResult, $user, $password) { + #[\PHPUnit\Framework\Attributes\DataProvider('providesAuth')] + public function testAuth(bool $expectedResult, string $user, string $password): void { if ($expectedResult) { $this->dbHandler->addServer('url1'); $this->dbHandler->addSharedSecret('url1', $password); @@ -316,7 +276,7 @@ class DbHandlerTest extends TestCase { $this->assertEquals($expectedResult, $result); } - public function providesAuth() { + public static function providesAuth(): array { return [ [false, 'foo', ''], [true, 'system', '123456789'], diff --git a/apps/federation/tests/Middleware/AddServerMiddlewareTest.php b/apps/federation/tests/Middleware/AddServerMiddlewareTest.php deleted file mode 100644 index c3370cdbe90..00000000000 --- a/apps/federation/tests/Middleware/AddServerMiddlewareTest.php +++ /dev/null @@ -1,101 +0,0 @@ -<?php -/** - * @copyright Copyright (c) 2016, ownCloud, Inc. - * - * @author Bjoern Schiessle <bjoern@schiessle.org> - * @author Björn Schießle <bjoern@schiessle.org> - * @author Christoph Wurst <christoph@winzerhof-wurst.at> - * @author Morris Jobke <hey@morrisjobke.de> - * @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/> - * - */ -namespace OCA\Federation\Tests\Middleware; - -use OCA\Federation\Controller\SettingsController; -use OCA\Federation\Middleware\AddServerMiddleware; -use OCP\AppFramework\Http; -use OCP\HintException; -use OCP\IL10N; -use OCP\ILogger; -use Test\TestCase; - -class AddServerMiddlewareTest extends TestCase { - - /** @var \PHPUnit\Framework\MockObject\MockObject | ILogger */ - private $logger; - - /** @var \PHPUnit\Framework\MockObject\MockObject | \OCP\IL10N */ - private $l10n; - - /** @var AddServerMiddleware */ - private $middleware; - - /** @var \PHPUnit\Framework\MockObject\MockObject | SettingsController */ - private $controller; - - protected function setUp(): void { - parent::setUp(); - - $this->logger = $this->getMockBuilder(ILogger::class)->getMock(); - $this->l10n = $this->getMockBuilder(IL10N::class)->getMock(); - $this->controller = $this->getMockBuilder(SettingsController::class) - ->disableOriginalConstructor()->getMock(); - - $this->middleware = new AddServerMiddleware( - 'AddServerMiddlewareTest', - $this->l10n, - $this->logger - ); - } - - /** - * @dataProvider dataTestAfterException - * - * @param \Exception $exception - * @param string $hint - */ - public function testAfterException($exception, $hint) { - $this->logger->expects($this->once())->method('logException'); - - $this->l10n->expects($this->any())->method('t') - ->willReturnCallback( - function ($message) { - return $message; - } - ); - - $result = $this->middleware->afterException($this->controller, 'method', $exception); - - $this->assertSame(Http::STATUS_BAD_REQUEST, - $result->getStatus() - ); - - $data = $result->getData(); - - $this->assertSame($hint, - $data['message'] - ); - } - - public function dataTestAfterException() { - return [ - [new HintException('message', 'hint'), 'hint'], - [new \Exception('message'), 'message'], - ]; - } -} diff --git a/apps/federation/tests/Settings/AdminTest.php b/apps/federation/tests/Settings/AdminTest.php index 3d124d5c65a..b879547a8cd 100644 --- a/apps/federation/tests/Settings/AdminTest.php +++ b/apps/federation/tests/Settings/AdminTest.php @@ -1,25 +1,9 @@ <?php + +declare(strict_types=1); /** - * @copyright Copyright (c) 2016 Lukas Reschke <lukas@statuscode.ch> - * - * @author Lukas Reschke <lukas@statuscode.ch> - * @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\Federation\Tests\Settings; @@ -27,24 +11,23 @@ use OCA\Federation\Settings\Admin; use OCA\Federation\TrustedServers; use OCP\AppFramework\Http\TemplateResponse; use OCP\IL10N; +use PHPUnit\Framework\MockObject\MockObject; use Test\TestCase; class AdminTest extends TestCase { - /** @var Admin */ - private $admin; - /** @var TrustedServers */ - private $trustedServers; + private TrustedServers&MockObject $trustedServers; + private Admin $admin; protected function setUp(): void { parent::setUp(); - $this->trustedServers = $this->getMockBuilder('\OCA\Federation\TrustedServers')->disableOriginalConstructor()->getMock(); + $this->trustedServers = $this->createMock(TrustedServers::class); $this->admin = new Admin( $this->trustedServers, $this->createMock(IL10N::class) ); } - public function testGetForm() { + public function testGetForm(): void { $this->trustedServers ->expects($this->once()) ->method('getServers') @@ -57,11 +40,11 @@ class AdminTest extends TestCase { $this->assertEquals($expected, $this->admin->getForm()); } - public function testGetSection() { + public function testGetSection(): void { $this->assertSame('sharing', $this->admin->getSection()); } - public function testGetPriority() { + public function testGetPriority(): void { $this->assertSame(30, $this->admin->getPriority()); } } diff --git a/apps/federation/tests/SyncFederationAddressbooksTest.php b/apps/federation/tests/SyncFederationAddressbooksTest.php index 36dd43e7cd2..ff03f5cf442 100644 --- a/apps/federation/tests/SyncFederationAddressbooksTest.php +++ b/apps/federation/tests/SyncFederationAddressbooksTest.php @@ -1,108 +1,108 @@ <?php + +declare(strict_types=1); /** - * @copyright Copyright (c) 2016, ownCloud, Inc. - * - * @author Bjoern Schiessle <bjoern@schiessle.org> - * @author Björn Schießle <bjoern@schiessle.org> - * @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> - * - * @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\Federation\Tests; use OC\OCS\DiscoveryService; +use OCA\DAV\CardDAV\SyncService; use OCA\Federation\DbHandler; use OCA\Federation\SyncFederationAddressBooks; +use OCA\Federation\TrustedServers; +use PHPUnit\Framework\MockObject\MockObject; +use Psr\Log\LoggerInterface; class SyncFederationAddressbooksTest extends \Test\TestCase { - - /** @var array */ - private $callBacks = []; - - /** @var \PHPUnit\Framework\MockObject\MockObject | DiscoveryService */ - private $discoveryService; + private array $callBacks = []; + private DiscoveryService&MockObject $discoveryService; + private LoggerInterface&MockObject $logger; protected function setUp(): void { parent::setUp(); - $this->discoveryService = $this->getMockBuilder(DiscoveryService::class) - ->disableOriginalConstructor()->getMock(); + $this->discoveryService = $this->createMock(DiscoveryService::class); $this->discoveryService->expects($this->any())->method('discover')->willReturn([]); + $this->logger = $this->createMock(LoggerInterface::class); } - public function testSync() { - /** @var DbHandler | \PHPUnit\Framework\MockObject\MockObject $dbHandler */ - $dbHandler = $this->getMockBuilder('OCA\Federation\DbHandler')-> - disableOriginalConstructor()-> - getMock(); - $dbHandler->method('getAllServer')-> - willReturn([ + public function testSync(): void { + /** @var DbHandler&MockObject $dbHandler */ + $dbHandler = $this->createMock(DbHandler::class); + $dbHandler->method('getAllServer') + ->willReturn([ [ - 'url' => 'https://cloud.drop.box', + 'url' => 'https://cloud.example.org', 'url_hash' => 'sha1', - 'shared_secret' => 'iloveowncloud', + 'shared_secret' => 'ilovenextcloud', 'sync_token' => '0' ] ]); - $dbHandler->expects($this->once())->method('setServerStatus')-> - with('https://cloud.drop.box', 1, '1'); - $syncService = $this->getMockBuilder('OCA\DAV\CardDAV\SyncService') - ->disableOriginalConstructor() - ->getMock(); + $dbHandler->expects($this->once())->method('setServerStatus') + ->with('https://cloud.example.org', 1, '1'); + $syncService = $this->createMock(SyncService::class); $syncService->expects($this->once())->method('syncRemoteAddressBook') - ->willReturn(1); + ->willReturn(['1', false]); - /** @var \OCA\DAV\CardDAV\SyncService $syncService */ - $s = new SyncFederationAddressBooks($dbHandler, $syncService, $this->discoveryService); - $s->syncThemAll(function ($url, $ex) { + /** @var SyncService $syncService */ + $s = new SyncFederationAddressBooks($dbHandler, $syncService, $this->discoveryService, $this->logger); + $s->syncThemAll(function ($url, $ex): void { $this->callBacks[] = [$url, $ex]; }); - $this->assertEquals(1, count($this->callBacks)); + $this->assertCount(1, $this->callBacks); } - public function testException() { - /** @var DbHandler | \PHPUnit\Framework\MockObject\MockObject $dbHandler */ - $dbHandler = $this->getMockBuilder('OCA\Federation\DbHandler')-> - disableOriginalConstructor()-> - getMock(); - $dbHandler->method('getAllServer')-> - willReturn([ - [ - 'url' => 'https://cloud.drop.box', - 'url_hash' => 'sha1', - 'shared_secret' => 'iloveowncloud', - 'sync_token' => '0' - ] - ]); - $syncService = $this->getMockBuilder('OCA\DAV\CardDAV\SyncService') - ->disableOriginalConstructor() - ->getMock(); + public function testException(): void { + /** @var DbHandler&MockObject $dbHandler */ + $dbHandler = $this->createMock(DbHandler::class); + $dbHandler->method('getAllServer') + ->willReturn([ + [ + 'url' => 'https://cloud.example.org', + 'url_hash' => 'sha1', + 'shared_secret' => 'ilovenextcloud', + 'sync_token' => '0' + ] + ]); + $syncService = $this->createMock(SyncService::class); $syncService->expects($this->once())->method('syncRemoteAddressBook') ->willThrowException(new \Exception('something did not work out')); - /** @var \OCA\DAV\CardDAV\SyncService $syncService */ - $s = new SyncFederationAddressBooks($dbHandler, $syncService, $this->discoveryService); - $s->syncThemAll(function ($url, $ex) { + /** @var SyncService $syncService */ + $s = new SyncFederationAddressBooks($dbHandler, $syncService, $this->discoveryService, $this->logger); + $s->syncThemAll(function ($url, $ex): void { + $this->callBacks[] = [$url, $ex]; + }); + $this->assertCount(2, $this->callBacks); + } + + public function testSuccessfulSyncWithoutChangesAfterFailure(): void { + /** @var DbHandler&MockObject $dbHandler */ + $dbHandler = $this->createMock(DbHandler::class); + $dbHandler->method('getAllServer') + ->willReturn([ + [ + 'url' => 'https://cloud.example.org', + 'url_hash' => 'sha1', + 'shared_secret' => 'ilovenextcloud', + 'sync_token' => '0' + ] + ]); + $dbHandler->method('getServerStatus')->willReturn(TrustedServers::STATUS_FAILURE); + $dbHandler->expects($this->once())->method('setServerStatus') + ->with('https://cloud.example.org', 1); + $syncService = $this->createMock(SyncService::class); + $syncService->expects($this->once())->method('syncRemoteAddressBook') + ->willReturn(['0', false]); + + /** @var SyncService $syncService */ + $s = new SyncFederationAddressBooks($dbHandler, $syncService, $this->discoveryService, $this->logger); + $s->syncThemAll(function ($url, $ex): void { $this->callBacks[] = [$url, $ex]; }); - $this->assertEquals(2, count($this->callBacks)); + $this->assertCount(1, $this->callBacks); } } diff --git a/apps/federation/tests/TrustedServersTest.php b/apps/federation/tests/TrustedServersTest.php index 3dd93a445cd..0c900f6edf7 100644 --- a/apps/federation/tests/TrustedServersTest.php +++ b/apps/federation/tests/TrustedServersTest.php @@ -1,94 +1,55 @@ <?php + +declare(strict_types=1); /** - * @copyright Copyright (c) 2016, ownCloud, Inc. - * - * @author Bjoern Schiessle <bjoern@schiessle.org> - * @author Björn Schießle <bjoern@schiessle.org> - * @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> - * @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: 2016-2024 Nextcloud GmbH and Nextcloud contributors + * SPDX-FileCopyrightText: 2016 ownCloud, Inc. + * SPDX-License-Identifier: AGPL-3.0-only */ namespace OCA\Federation\Tests; +use OCA\Federation\BackgroundJob\RequestSharedSecret; use OCA\Federation\DbHandler; use OCA\Federation\TrustedServers; use OCP\AppFramework\Utility\ITimeFactory; use OCP\BackgroundJob\IJobList; +use OCP\EventDispatcher\IEventDispatcher; +use OCP\Federation\Events\TrustedServerRemovedEvent; +use OCP\HintException; use OCP\Http\Client\IClient; use OCP\Http\Client\IClientService; use OCP\Http\Client\IResponse; use OCP\IConfig; -use OCP\ILogger; use OCP\Security\ISecureRandom; -use Symfony\Component\EventDispatcher\EventDispatcherInterface; +use PHPUnit\Framework\MockObject\MockObject; +use Psr\Log\LoggerInterface; use Test\TestCase; class TrustedServersTest extends TestCase { - - /** @var \PHPUnit\Framework\MockObject\MockObject | TrustedServers */ - private $trustedServers; - - /** @var \PHPUnit\Framework\MockObject\MockObject | DbHandler */ - private $dbHandler; - - /** @var \PHPUnit\Framework\MockObject\MockObject | IClientService */ - private $httpClientService; - - /** @var \PHPUnit\Framework\MockObject\MockObject | IClient */ - private $httpClient; - - /** @var \PHPUnit\Framework\MockObject\MockObject | IResponse */ - private $response; - - /** @var \PHPUnit\Framework\MockObject\MockObject | ILogger */ - private $logger; - - /** @var \PHPUnit\Framework\MockObject\MockObject | IJobList */ - private $jobList; - - /** @var \PHPUnit\Framework\MockObject\MockObject | ISecureRandom */ - private $secureRandom; - - /** @var \PHPUnit\Framework\MockObject\MockObject | IConfig */ - private $config; - - /** @var \PHPUnit\Framework\MockObject\MockObject | EventDispatcherInterface */ - private $dispatcher; - - /** @var \PHPUnit\Framework\MockObject\MockObject|ITimeFactory */ - private $timeFactory; + private TrustedServers $trustedServers; + private DbHandler&MockObject $dbHandler; + private IClientService&MockObject $httpClientService; + private IClient&MockObject $httpClient; + private IResponse&MockObject $response; + private LoggerInterface&MockObject $logger; + private IJobList&MockObject $jobList; + private ISecureRandom&MockObject $secureRandom; + private IConfig&MockObject $config; + private IEventDispatcher&MockObject $dispatcher; + private ITimeFactory&MockObject $timeFactory; protected function setUp(): void { parent::setUp(); - $this->dbHandler = $this->getMockBuilder(DbHandler::class) - ->disableOriginalConstructor()->getMock(); - $this->dispatcher = $this->getMockBuilder(EventDispatcherInterface::class) - ->disableOriginalConstructor()->getMock(); - $this->httpClientService = $this->getMockBuilder(IClientService::class)->getMock(); - $this->httpClient = $this->getMockBuilder(IClient::class)->getMock(); - $this->response = $this->getMockBuilder(IResponse::class)->getMock(); - $this->logger = $this->getMockBuilder(ILogger::class)->getMock(); - $this->jobList = $this->getMockBuilder(IJobList::class)->getMock(); - $this->secureRandom = $this->getMockBuilder(ISecureRandom::class)->getMock(); - $this->config = $this->getMockBuilder(IConfig::class)->getMock(); + $this->dbHandler = $this->createMock(DbHandler::class); + $this->dispatcher = $this->createMock(IEventDispatcher::class); + $this->httpClientService = $this->createMock(IClientService::class); + $this->httpClient = $this->createMock(IClient::class); + $this->response = $this->createMock(IResponse::class); + $this->logger = $this->createMock(LoggerInterface::class); + $this->jobList = $this->createMock(IJobList::class); + $this->secureRandom = $this->createMock(ISecureRandom::class); + $this->config = $this->createMock(IConfig::class); $this->timeFactory = $this->createMock(ITimeFactory::class); $this->trustedServers = new TrustedServers( @@ -103,14 +64,9 @@ class TrustedServersTest extends TestCase { ); } - /** - * @dataProvider dataTrueFalse - * - * @param bool $success - */ - public function testAddServer($success) { - /** @var \PHPUnit\Framework\MockObject\MockObject|TrustedServers $trustedServers */ - $trustedServers = $this->getMockBuilder('OCA\Federation\TrustedServers') + public function testAddServer(): void { + /** @var TrustedServers&MockObject $trustedServers */ + $trustedServers = $this->getMockBuilder(TrustedServers::class) ->setConstructorArgs( [ $this->dbHandler, @@ -123,71 +79,63 @@ class TrustedServersTest extends TestCase { $this->timeFactory ] ) - ->setMethods(['normalizeUrl', 'updateProtocol']) + ->onlyMethods(['updateProtocol']) ->getMock(); $trustedServers->expects($this->once())->method('updateProtocol') - ->with('url')->willReturn('https://url'); + ->with('url')->willReturn('https://url'); $this->timeFactory->method('getTime') ->willReturn(1234567); $this->dbHandler->expects($this->once())->method('addServer')->with('https://url') - ->willReturn($success); - - if ($success) { - $this->secureRandom->expects($this->once())->method('generate') - ->willReturn('token'); - $this->dbHandler->expects($this->once())->method('addToken')->with('https://url', 'token'); - $this->jobList->expects($this->once())->method('add') - ->with('OCA\Federation\BackgroundJob\RequestSharedSecret', - ['url' => 'https://url', 'token' => 'token', 'created' => 1234567]); - } else { - $this->jobList->expects($this->never())->method('add'); - } + ->willReturn(1); + + $this->secureRandom->expects($this->once())->method('generate') + ->willReturn('token'); + $this->dbHandler->expects($this->once())->method('addToken')->with('https://url', 'token'); + $this->jobList->expects($this->once())->method('add') + ->with(RequestSharedSecret::class, + ['url' => 'https://url', 'token' => 'token', 'created' => 1234567]); - $this->assertSame($success, + $this->assertSame( + 1, $trustedServers->addServer('url') ); } - public function dataTrueFalse() { - return [ - [true], - [false] - ]; - } - - public function testAddSharedSecret() { + public function testAddSharedSecret(): void { $this->dbHandler->expects($this->once())->method('addSharedSecret') ->with('url', 'secret'); $this->trustedServers->addSharedSecret('url', 'secret'); } - public function testGetSharedSecret() { - $this->dbHandler->expects($this->once())->method('getSharedSecret') - ->with('url')->willReturn(true); - $this->assertTrue( - $this->trustedServers->getSharedSecret('url') + public function testGetSharedSecret(): void { + $this->dbHandler->expects($this->once()) + ->method('getSharedSecret') + ->with('url') + ->willReturn('secret'); + $this->assertSame( + $this->trustedServers->getSharedSecret('url'), + 'secret' ); } - public function testRemoveServer() { + public function testRemoveServer(): void { $id = 42; $server = ['url_hash' => 'url_hash']; $this->dbHandler->expects($this->once())->method('removeServer')->with($id); $this->dbHandler->expects($this->once())->method('getServerById')->with($id) ->willReturn($server); - $this->dispatcher->expects($this->once())->method('dispatch') + $this->dispatcher->expects($this->once())->method('dispatchTyped') ->willReturnCallback( - function ($eventId, $event) { - $this->assertSame($eventId, 'OCP\Federation\TrustedServerEvent::remove'); - $this->assertInstanceOf('Symfony\Component\EventDispatcher\GenericEvent', $event); - /** @var \Symfony\Component\EventDispatcher\GenericEvent $event */ - $this->assertSame('url_hash', $event->getSubject()); + function ($event): void { + $this->assertSame(get_class($event), TrustedServerRemovedEvent::class); + /** @var \OCP\Federated\Events\TrustedServerRemovedEvent $event */ + $this->assertSame('url_hash', $event->getUrlHash()); } ); $this->trustedServers->removeServer($id); } - public function testGetServers() { + public function testGetServers(): void { $this->dbHandler->expects($this->once())->method('getAllServer')->willReturn(['servers']); $this->assertEquals( @@ -196,9 +144,68 @@ class TrustedServersTest extends TestCase { ); } + public static function dataTestGetServer() { + return [ + [ + 15, + [ + 'id' => 15, + 'otherData' => 'first server', + ] + ], + [ + 16, + [ + 'id' => 16, + 'otherData' => 'second server', + ] + ], + [ + 42, + [ + 'id' => 42, + 'otherData' => 'last server', + ] + ], + [ + 108, + null + ], + ]; + } + + #[\PHPUnit\Framework\Attributes\DataProvider('dataTestGetServer')] + public function testGetServer(int $id, ?array $expectedServer): void { + $servers = [ + [ + 'id' => 15, + 'otherData' => 'first server', + ], + [ + 'id' => 16, + 'otherData' => 'second server', + ], + [ + 'id' => 42, + 'otherData' => 'last server', + ], + ]; + $this->dbHandler->expects($this->once())->method('getAllServer')->willReturn($servers); + + if ($expectedServer === null) { + $this->expectException(\Exception::class); + $this->expectExceptionMessage('No server found with ID: ' . $id); + } + + $this->assertEquals( + $expectedServer, + $this->trustedServers->getServer($id) + ); + } - public function testIsTrustedServer() { - $this->dbHandler->expects($this->once())->method('serverExists')->with('url') + public function testIsTrustedServer(): void { + $this->dbHandler->expects($this->once()) + ->method('serverExists')->with('url') ->willReturn(true); $this->assertTrue( @@ -206,32 +213,27 @@ class TrustedServersTest extends TestCase { ); } - public function testSetServerStatus() { + public function testSetServerStatus(): void { $this->dbHandler->expects($this->once())->method('setServerStatus') - ->with('url', 'status'); - $this->trustedServers->setServerStatus('url', 'status'); + ->with('url', 1); + $this->trustedServers->setServerStatus('url', 1); } - public function testGetServerStatus() { + public function testGetServerStatus(): void { $this->dbHandler->expects($this->once())->method('getServerStatus') - ->with('url')->willReturn(true); - $this->assertTrue( - $this->trustedServers->getServerStatus('url') + ->with('url')->willReturn(1); + $this->assertSame( + $this->trustedServers->getServerStatus('url'), + 1 ); } - /** - * @dataProvider dataTestIsOwnCloudServer - * - * @param int $statusCode - * @param bool $isValidOwnCloudVersion - * @param bool $expected - */ - public function testIsOwnCloudServer($statusCode, $isValidOwnCloudVersion, $expected) { + #[\PHPUnit\Framework\Attributes\DataProvider('dataTestIsNextcloudServer')] + public function testIsNextcloudServer(int $statusCode, bool $isValidNextcloudVersion, bool $expected): void { $server = 'server1'; - /** @var \PHPUnit\Framework\MockObject\MockObject | TrustedServers $trustedServers */ - $trustedServers = $this->getMockBuilder('OCA\Federation\TrustedServers') + /** @var TrustedServers&MockObject $trustedServers */ + $trustedServers = $this->getMockBuilder(TrustedServers::class) ->setConstructorArgs( [ $this->dbHandler, @@ -244,7 +246,7 @@ class TrustedServersTest extends TestCase { $this->timeFactory ] ) - ->setMethods(['checkOwnCloudVersion']) + ->onlyMethods(['checkNextcloudVersion']) ->getMock(); $this->httpClientService->expects($this->once())->method('newClient') @@ -257,18 +259,20 @@ class TrustedServersTest extends TestCase { ->willReturn($statusCode); if ($statusCode === 200) { - $trustedServers->expects($this->once())->method('checkOwnCloudVersion') - ->willReturn($isValidOwnCloudVersion); + $this->response->expects($this->once())->method('getBody') + ->willReturn(''); + $trustedServers->expects($this->once())->method('checkNextcloudVersion') + ->willReturn($isValidNextcloudVersion); } else { - $trustedServers->expects($this->never())->method('checkOwnCloudVersion'); + $trustedServers->expects($this->never())->method('checkNextcloudVersion'); } $this->assertSame($expected, - $trustedServers->isOwnCloudServer($server) + $trustedServers->isNextcloudServer($server) ); } - public function dataTestIsOwnCloudServer() { + public static function dataTestIsNextcloudServer(): array { return [ [200, true, true], [200, false, false], @@ -276,65 +280,55 @@ class TrustedServersTest extends TestCase { ]; } - /** - * @expectedExceptionMessage simulated exception - */ - public function testIsOwnCloudServerFail() { + public function testIsNextcloudServerFail(): void { $server = 'server1'; - $this->httpClientService->expects($this->once())->method('newClient') + $this->httpClientService->expects($this->once()) + ->method('newClient') ->willReturn($this->httpClient); - $this->httpClient->expects($this->once())->method('get')->with($server . '/status.php') - ->willReturnCallback(function () { - throw new \Exception('simulated exception'); - }); + $this->httpClient->expects($this->once()) + ->method('get') + ->with($server . '/status.php') + ->willThrowException(new \Exception('simulated exception')); - $this->assertFalse($this->trustedServers->isOwnCloudServer($server)); + $this->assertFalse($this->trustedServers->isNextcloudServer($server)); } - /** - * @dataProvider dataTestCheckOwnCloudVersion - */ - public function testCheckOwnCloudVersion($status) { - $this->assertTrue($this->invokePrivate($this->trustedServers, 'checkOwnCloudVersion', [$status])); + #[\PHPUnit\Framework\Attributes\DataProvider('dataTestCheckNextcloudVersion')] + public function testCheckNextcloudVersion(string $status): void { + $this->assertTrue(self::invokePrivate($this->trustedServers, 'checkNextcloudVersion', [$status])); } - public function dataTestCheckOwnCloudVersion() { + public static function dataTestCheckNextcloudVersion(): array { return [ ['{"version":"9.0.0"}'], ['{"version":"9.1.0"}'] ]; } - /** - * @dataProvider dataTestCheckOwnCloudVersionTooLow - */ - public function testCheckOwnCloudVersionTooLow($status) { - $this->expectException(\OCP\HintException::class); + #[\PHPUnit\Framework\Attributes\DataProvider('dataTestCheckNextcloudVersionTooLow')] + public function testCheckNextcloudVersionTooLow(string $status): void { + $this->expectException(HintException::class); $this->expectExceptionMessage('Remote server version is too low. 9.0 is required.'); - $this->invokePrivate($this->trustedServers, 'checkOwnCloudVersion', [$status]); + self::invokePrivate($this->trustedServers, 'checkNextcloudVersion', [$status]); } - public function dataTestCheckOwnCloudVersionTooLow() { + public static function dataTestCheckNextcloudVersionTooLow(): array { return [ ['{"version":"8.2.3"}'], ]; } - /** - * @dataProvider dataTestUpdateProtocol - * @param string $url - * @param string $expected - */ - public function testUpdateProtocol($url, $expected) { + #[\PHPUnit\Framework\Attributes\DataProvider('dataTestUpdateProtocol')] + public function testUpdateProtocol(string $url, string $expected): void { $this->assertSame($expected, - $this->invokePrivate($this->trustedServers, 'updateProtocol', [$url]) + self::invokePrivate($this->trustedServers, 'updateProtocol', [$url]) ); } - public function dataTestUpdateProtocol() { + public static function dataTestUpdateProtocol(): array { return [ ['http://owncloud.org', 'http://owncloud.org'], ['https://owncloud.org', 'https://owncloud.org'], |