diff --git a/.htaccess b/.htaccess index 35c478860d51f2cee7b7d856c1578801f4fe4a8c..392b9b415595a35a65c483736fc09cd2962d9348 100644 --- a/.htaccess +++ b/.htaccess @@ -28,7 +28,7 @@ php_value mbstring.func_overload 0 php_value always_populate_raw_post_data -1 php_value default_charset 'UTF-8' - php_value output_buffering off + php_value output_buffering 0 SetEnv htaccessWorking true diff --git a/.mailmap b/.mailmap index a6cf996587c06f399f046641be690f06f98fd36b..95841a36353ae176b603f913476b8e9c26090bc8 100644 --- a/.mailmap +++ b/.mailmap @@ -304,7 +304,7 @@ Robin Appelman Robin Robin Appelman Robin Appelman Robin Appelman Robin Appelman Robin Appelman Robin Appelman -Robin McCorkell +Robin McCorkell Robin McCorkell Rodrigo Hjort Roeland Jago Douma rok diff --git a/.user.ini b/.user.ini index 66bf6484fe2446eb562db490beff4804db3d99b1..68ef3e8672ce47e58c77bc305c5a8b87b2bf4363 100644 --- a/.user.ini +++ b/.user.ini @@ -4,4 +4,4 @@ memory_limit=512M mbstring.func_overload=0 always_populate_raw_post_data=-1 default_charset='UTF-8' -output_buffering=off \ No newline at end of file +output_buffering=0 diff --git a/3rdparty b/3rdparty index b94f7d38f6e13825fd34c7113827d3c369a689ad..1914e923a4589e619b930e1ca587041d6fd3a1f3 160000 --- a/3rdparty +++ b/3rdparty @@ -1 +1 @@ -Subproject commit b94f7d38f6e13825fd34c7113827d3c369a689ad +Subproject commit 1914e923a4589e619b930e1ca587041d6fd3a1f3 diff --git a/README.md b/README.md index a705074d6bece64852ecc70e99431496f6857b9b..1085d516263920609d5bf341777940c84d6e8516 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,7 @@ Quality: - Scrutinizer: [![Scrutinizer Quality Score](https://scrutinizer-ci.com/g/owncloud/core/badges/quality-score.png?s=ce2f5ded03d4ac628e9ee5c767243fa7412e644f)](https://scrutinizer-ci.com/g/owncloud/core/) - CodeClimate: [![Code Climate](https://codeclimate.com/github/owncloud/core/badges/gpa.svg)](https://codeclimate.com/github/owncloud/core) -Depencencies: +Dependencies: [![Dependency Status](https://www.versioneye.com/user/projects/54f4a2384f3108959a000a16/badge.svg?style=flat)](https://www.versioneye.com/user/projects/54f4a2384f3108959a000a16) diff --git a/apps/encryption/appinfo/app.php b/apps/encryption/appinfo/app.php index 2eb12f638ed1cb38cab53761709045b34432f0e9..1f336c05a8c02d75b5ebdb72b890d5ae60d54ed1 100644 --- a/apps/encryption/appinfo/app.php +++ b/apps/encryption/appinfo/app.php @@ -2,7 +2,6 @@ /** * @author Björn Schießle * @author Clark Tomlinson - * @author Thomas Müller * * @copyright Copyright (c) 2015, ownCloud, Inc. * @license AGPL-3.0 diff --git a/apps/encryption/appinfo/application.php b/apps/encryption/appinfo/application.php index d4804394c5f13cbb2b80423411369a71ae7ca657..812f1042a8fcc1851e04e60d1c21f87df55f94ee 100644 --- a/apps/encryption/appinfo/application.php +++ b/apps/encryption/appinfo/application.php @@ -2,8 +2,6 @@ /** * @author Björn Schießle * @author Clark Tomlinson - * @author Lukas Reschke - * @author Morris Jobke * @author Thomas Müller * * @copyright Copyright (c) 2015, ownCloud, Inc. @@ -30,6 +28,8 @@ use OCA\Encryption\Controller\RecoveryController; use OCA\Encryption\Controller\SettingsController; use OCA\Encryption\Controller\StatusController; use OCA\Encryption\Crypto\Crypt; +use OCA\Encryption\Crypto\DecryptAll; +use OCA\Encryption\Crypto\EncryptAll; use OCA\Encryption\Crypto\Encryption; use OCA\Encryption\HookManager; use OCA\Encryption\Hooks\UserHooks; @@ -42,6 +42,7 @@ use OCP\App; use OCP\AppFramework\IAppContainer; use OCP\Encryption\IManager; use OCP\IConfig; +use Symfony\Component\Console\Helper\QuestionHelper; class Application extends \OCP\AppFramework\App { @@ -81,6 +82,7 @@ class Application extends \OCP\AppFramework\App { $hookManager->registerHook([ new UserHooks($container->query('KeyManager'), + $server->getUserManager(), $server->getLogger(), $container->query('UserSetup'), $server->getUserSession(), @@ -111,6 +113,9 @@ class Application extends \OCP\AppFramework\App { $container->query('Crypt'), $container->query('KeyManager'), $container->query('Util'), + $container->query('Session'), + $container->query('EncryptAll'), + $container->query('DecryptAll'), $container->getServer()->getLogger(), $container->getServer()->getL10N($container->getAppName()) ); @@ -195,7 +200,8 @@ class Application extends \OCP\AppFramework\App { $server->getUserSession(), $c->query('KeyManager'), $c->query('Crypt'), - $c->query('Session') + $c->query('Session'), + $server->getSession() ); }); @@ -221,6 +227,35 @@ class Application extends \OCP\AppFramework\App { $server->getUserManager()); }); + $container->registerService('EncryptAll', + function (IAppContainer $c) { + $server = $c->getServer(); + return new EncryptAll( + $c->query('UserSetup'), + $c->getServer()->getUserManager(), + new View(), + $c->query('KeyManager'), + $server->getConfig(), + $server->getMailer(), + $server->getL10N('encryption'), + new QuestionHelper(), + $server->getSecureRandom() + ); + } + ); + + $container->registerService('DecryptAll', + function (IAppContainer $c) { + return new DecryptAll( + $c->query('Util'), + $c->query('KeyManager'), + $c->query('Crypt'), + $c->query('Session'), + new QuestionHelper() + ); + } + ); + } public function registerSettings() { diff --git a/apps/encryption/appinfo/register_command.php b/apps/encryption/appinfo/register_command.php index 4fdf7ecec38dec3b5d41a5fd20a19ddf8bfbc21e..4987ef24d610c4973a1f96afea0a37b8f909ecb8 100644 --- a/apps/encryption/appinfo/register_command.php +++ b/apps/encryption/appinfo/register_command.php @@ -1,7 +1,6 @@ - * @author Morris Jobke * * @copyright Copyright (c) 2015, ownCloud, Inc. * @license AGPL-3.0 @@ -21,10 +20,17 @@ */ use OCA\Encryption\Command\MigrateKeys; +use Symfony\Component\Console\Helper\QuestionHelper; $userManager = OC::$server->getUserManager(); $view = new \OC\Files\View(); $config = \OC::$server->getConfig(); +$userSession = \OC::$server->getUserSession(); $connection = \OC::$server->getDatabaseConnection(); $logger = \OC::$server->getLogger(); +$questionHelper = new QuestionHelper(); +$crypt = new \OCA\Encryption\Crypto\Crypt($logger, $userSession, $config); +$util = new \OCA\Encryption\Util($view, $crypt, $logger, $userSession, $config, $userManager); + $application->add(new MigrateKeys($userManager, $view, $connection, $config, $logger)); +$application->add(new \OCA\Encryption\Command\EnableMasterKey($util, $config, $questionHelper)); diff --git a/apps/encryption/appinfo/routes.php b/apps/encryption/appinfo/routes.php index a73cc578437e7213972b033b43a553fdafcb5c2e..8fa163d0751b58e3f4f609ece38bf20a402c2620 100644 --- a/apps/encryption/appinfo/routes.php +++ b/apps/encryption/appinfo/routes.php @@ -2,8 +2,6 @@ /** * @author Björn Schießle * @author Clark Tomlinson - * @author Morris Jobke - * @author Thomas Müller * * @copyright Copyright (c) 2015, ownCloud, Inc. * @license AGPL-3.0 diff --git a/apps/encryption/command/enablemasterkey.php b/apps/encryption/command/enablemasterkey.php new file mode 100644 index 0000000000000000000000000000000000000000..f49579a3b81a45d191ce24a87e218fd7bce6eda2 --- /dev/null +++ b/apps/encryption/command/enablemasterkey.php @@ -0,0 +1,86 @@ + + * + * @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 + * + */ + + +namespace OCA\Encryption\Command; + + +use OCA\Encryption\Util; +use OCP\IConfig; +use Symfony\Component\Console\Command\Command; +use Symfony\Component\Console\Helper\QuestionHelper; +use Symfony\Component\Console\Input\InputInterface; +use Symfony\Component\Console\Output\OutputInterface; +use Symfony\Component\Console\Question\ConfirmationQuestion; + +class EnableMasterKey extends Command { + + /** @var Util */ + protected $util; + + /** @var IConfig */ + protected $config; + + /** @var QuestionHelper */ + protected $questionHelper; + + /** + * @param Util $util + * @param IConfig $config + * @param QuestionHelper $questionHelper + */ + public function __construct(Util $util, + IConfig $config, + QuestionHelper $questionHelper) { + + $this->util = $util; + $this->config = $config; + $this->questionHelper = $questionHelper; + parent::__construct(); + } + + protected function configure() { + $this + ->setName('encryption:enable-master-key') + ->setDescription('Enable the master key. Only available for fresh installations with no existing encrypted data! There is also no way to disable it again.'); + } + + protected function execute(InputInterface $input, OutputInterface $output) { + + $isAlreadyEnabled = $this->util->isMasterKeyEnabled(); + + if($isAlreadyEnabled) { + $output->writeln('Master key already enabled'); + } else { + $question = new ConfirmationQuestion( + 'Warning: Only available for fresh installations with no existing encrypted data! ' + . 'There is also no way to disable it again. Do you want to continue? (y/n) ', false); + if ($this->questionHelper->ask($input, $output, $question)) { + $this->config->setAppValue('encryption', 'useMasterKey', '1'); + $output->writeln('Master key successfully enabled.'); + } else { + $output->writeln('aborted.'); + } + } + + } + +} diff --git a/apps/encryption/command/migratekeys.php b/apps/encryption/command/migratekeys.php index 7e320102172a540bb016fba211e43f1819c12fb2..89e2aa0161077f2915af609fd7c3b025d9d15676 100644 --- a/apps/encryption/command/migratekeys.php +++ b/apps/encryption/command/migratekeys.php @@ -1,7 +1,6 @@ - * @author Morris Jobke * * @copyright Copyright (c) 2015, ownCloud, Inc. * @license AGPL-3.0 diff --git a/apps/encryption/controller/recoverycontroller.php b/apps/encryption/controller/recoverycontroller.php index a92c49f539f703ae5f7bd7011781c3a8b5d699a6..f1a2651443e0fd8e229cb9c0ecf6bb1cd80c0c7f 100644 --- a/apps/encryption/controller/recoverycontroller.php +++ b/apps/encryption/controller/recoverycontroller.php @@ -3,8 +3,6 @@ * @author Björn Schießle * @author Clark Tomlinson * @author Lukas Reschke - * @author Morris Jobke - * @author Thomas Müller * * @copyright Copyright (c) 2015, ownCloud, Inc. * @license AGPL-3.0 diff --git a/apps/encryption/controller/settingscontroller.php b/apps/encryption/controller/settingscontroller.php index 2a668f7cd4a8b9f70949a961a9fb70f469cc0e05..e5bb79a1d4068dede23b9e251bba277768988eec 100644 --- a/apps/encryption/controller/settingscontroller.php +++ b/apps/encryption/controller/settingscontroller.php @@ -2,7 +2,6 @@ /** * @author Björn Schießle * @author Joas Schilling - * @author Morris Jobke * * @copyright Copyright (c) 2015, ownCloud, Inc. * @license AGPL-3.0 @@ -31,6 +30,7 @@ use OCP\AppFramework\Http; use OCP\AppFramework\Http\DataResponse; use OCP\IL10N; use OCP\IRequest; +use OCP\ISession; use OCP\IUserManager; use OCP\IUserSession; @@ -54,6 +54,9 @@ class SettingsController extends Controller { /** @var Session */ private $session; + /** @var ISession */ + private $ocSession; + /** * @param string $AppName * @param IRequest $request @@ -63,6 +66,7 @@ class SettingsController extends Controller { * @param KeyManager $keyManager * @param Crypt $crypt * @param Session $session + * @param ISession $ocSession */ public function __construct($AppName, IRequest $request, @@ -71,7 +75,8 @@ class SettingsController extends Controller { IUserSession $userSession, KeyManager $keyManager, Crypt $crypt, - Session $session) { + Session $session, + ISession $ocSession) { parent::__construct($AppName, $request); $this->l = $l10n; $this->userSession = $userSession; @@ -79,6 +84,7 @@ class SettingsController extends Controller { $this->keyManager = $keyManager; $this->crypt = $crypt; $this->session = $session; + $this->ocSession = $ocSession; } @@ -97,6 +103,13 @@ class SettingsController extends Controller { //check if password is correct $passwordCorrect = $this->userManager->checkPassword($uid, $newPassword); + if ($passwordCorrect === false) { + // if check with uid fails we need to check the password with the login name + // e.g. in the ldap case. For local user we need to check the password with + // the uid because in this case the login name is case insensitive + $loginName = $this->ocSession->get('loginname'); + $passwordCorrect = $this->userManager->checkPassword($loginName, $newPassword); + } if ($passwordCorrect !== false) { $encryptedKey = $this->keyManager->getPrivateKey($uid); diff --git a/apps/encryption/controller/statuscontroller.php b/apps/encryption/controller/statuscontroller.php index f330f726c0b0db759e6419cb93c396cf45ec0c41..409fe1a258ba74ab9be348cb97b75f62393ada27 100644 --- a/apps/encryption/controller/statuscontroller.php +++ b/apps/encryption/controller/statuscontroller.php @@ -1,7 +1,6 @@ - * @author Morris Jobke * @author Thomas Müller * * @copyright Copyright (c) 2015, ownCloud, Inc. diff --git a/apps/encryption/hooks/contracts/ihook.php b/apps/encryption/hooks/contracts/ihook.php index 53217f8ac068de0f7fffe4339e783dadfdbfb6b3..d4f20700d781d405a74ccd2505e098eddb636ce8 100644 --- a/apps/encryption/hooks/contracts/ihook.php +++ b/apps/encryption/hooks/contracts/ihook.php @@ -1,8 +1,6 @@ - * @author Morris Jobke - * @author Thomas Müller * * @copyright Copyright (c) 2015, ownCloud, Inc. * @license AGPL-3.0 diff --git a/apps/encryption/hooks/userhooks.php b/apps/encryption/hooks/userhooks.php index 8b6f17bec6dccc0ff48828d97470790004364803..5bd5e39f3c580ec10a8e01a7870ee5f69eaf60a1 100644 --- a/apps/encryption/hooks/userhooks.php +++ b/apps/encryption/hooks/userhooks.php @@ -24,6 +24,7 @@ namespace OCA\Encryption\Hooks; +use OCP\IUserManager; use OCP\Util as OCUtil; use OCA\Encryption\Hooks\Contracts\IHook; use OCA\Encryption\KeyManager; @@ -41,6 +42,10 @@ class UserHooks implements IHook { * @var KeyManager */ private $keyManager; + /** + * @var IUserManager + */ + private $userManager; /** * @var ILogger */ @@ -74,6 +79,7 @@ class UserHooks implements IHook { * UserHooks constructor. * * @param KeyManager $keyManager + * @param IUserManager $userManager * @param ILogger $logger * @param Setup $userSetup * @param IUserSession $user @@ -83,6 +89,7 @@ class UserHooks implements IHook { * @param Recovery $recovery */ public function __construct(KeyManager $keyManager, + IUserManager $userManager, ILogger $logger, Setup $userSetup, IUserSession $user, @@ -92,6 +99,7 @@ class UserHooks implements IHook { Recovery $recovery) { $this->keyManager = $keyManager; + $this->userManager = $userManager; $this->logger = $logger; $this->userSetup = $userSetup; $this->user = $user; @@ -196,7 +204,7 @@ class UserHooks implements IHook { public function preSetPassphrase($params) { if (App::isEnabled('encryption')) { - $user = $this->user->getUser(); + $user = $this->userManager->get($params['uid']); if ($user && !$user->canChangePassword()) { $this->setPassphrase($params); diff --git a/apps/encryption/l10n/ast.js b/apps/encryption/l10n/ast.js index 94a164ff65dcdbaa809c4e1d21e67000c1b73b36..eb732bada5622f8691b71f15b70033998df6464c 100644 --- a/apps/encryption/l10n/ast.js +++ b/apps/encryption/l10n/ast.js @@ -11,6 +11,8 @@ OC.L10N.register( "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Clave privada non válida pa Encryption. Por favor, anueva la to contraseña de clave nos tos axustes personales pa recuperar l'accesu a los tos ficheros cifraos.", "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "L'aplicación Encryption ta habilitada pero les tos claves nun s'aniciaron, por favor zarra sesión y aníciala de nueves", "Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Nun pudo descifrase esti ficheru, dablemente seya un ficheru compartíu. Solicita al propietariu del mesmu que vuelva a compartilu contigo.", + "The share will expire on %s." : "La compartición va caducar el %s.", + "Cheers!" : "¡Salú!", "Recovery key password" : "Contraseña de clave de recuperación", "Change recovery key password:" : "Camudar la contraseña de la clave de recuperación", "Change Password" : "Camudar contraseña", diff --git a/apps/encryption/l10n/ast.json b/apps/encryption/l10n/ast.json index ecd1c2ff2e350db37a3cc74bda3355096868804f..501e4757acf111cab059f1d9dc8f9f88ea838c36 100644 --- a/apps/encryption/l10n/ast.json +++ b/apps/encryption/l10n/ast.json @@ -9,6 +9,8 @@ "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Clave privada non válida pa Encryption. Por favor, anueva la to contraseña de clave nos tos axustes personales pa recuperar l'accesu a los tos ficheros cifraos.", "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "L'aplicación Encryption ta habilitada pero les tos claves nun s'aniciaron, por favor zarra sesión y aníciala de nueves", "Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Nun pudo descifrase esti ficheru, dablemente seya un ficheru compartíu. Solicita al propietariu del mesmu que vuelva a compartilu contigo.", + "The share will expire on %s." : "La compartición va caducar el %s.", + "Cheers!" : "¡Salú!", "Recovery key password" : "Contraseña de clave de recuperación", "Change recovery key password:" : "Camudar la contraseña de la clave de recuperación", "Change Password" : "Camudar contraseña", diff --git a/apps/encryption/l10n/az.js b/apps/encryption/l10n/az.js index a8897f9ec1879cf6d07a72d3cce755e45adf8333..0b429f903faf3e227b9d9b6c7da1cdbcec6b1a3a 100644 --- a/apps/encryption/l10n/az.js +++ b/apps/encryption/l10n/az.js @@ -20,6 +20,7 @@ OC.L10N.register( "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Şifrələnmə proqramı üçün yalnış şəxsi açar. Xahiş olunur öz şəxsi quraşdırmalarınızda şəxsi açarınızı yeniləyəsiniz ki, şifrələnmiş fayllara yetki ala biləsiniz. ", "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Proqram şifrələnməsi işə salınıb ancaq, sizin açarlar inisializasiya edilməyib. Xahiş edilir çıxıb yenidən daxil olasınız", "Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Bu faylı deşifrə etmək olmur və ola bilər ki, bu paylaşımda olan fayldır. Xahiş olunur faylın sahibinə həmin faylı sizinlə yenidən paylaşım etməsini bildirəsiniz. ", + "Cheers!" : "Şərəfə!", "Recovery key password" : "Açar şifrənin bərpa edilməsi", "Change recovery key password:" : "Bərpa açarın şifrəsini dəyişdir:", "Change Password" : "Şifrəni dəyişdir", diff --git a/apps/encryption/l10n/az.json b/apps/encryption/l10n/az.json index 1dae4fbeaf998e186a05ac4bf54582ea9c461c56..fc5ab73b8b428df58691a0045723fb7584a053e1 100644 --- a/apps/encryption/l10n/az.json +++ b/apps/encryption/l10n/az.json @@ -18,6 +18,7 @@ "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Şifrələnmə proqramı üçün yalnış şəxsi açar. Xahiş olunur öz şəxsi quraşdırmalarınızda şəxsi açarınızı yeniləyəsiniz ki, şifrələnmiş fayllara yetki ala biləsiniz. ", "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Proqram şifrələnməsi işə salınıb ancaq, sizin açarlar inisializasiya edilməyib. Xahiş edilir çıxıb yenidən daxil olasınız", "Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Bu faylı deşifrə etmək olmur və ola bilər ki, bu paylaşımda olan fayldır. Xahiş olunur faylın sahibinə həmin faylı sizinlə yenidən paylaşım etməsini bildirəsiniz. ", + "Cheers!" : "Şərəfə!", "Recovery key password" : "Açar şifrənin bərpa edilməsi", "Change recovery key password:" : "Bərpa açarın şifrəsini dəyişdir:", "Change Password" : "Şifrəni dəyişdir", diff --git a/apps/encryption/l10n/bg_BG.js b/apps/encryption/l10n/bg_BG.js index 0a5de0eab8529c3e9413250ebe4bc91864d5eeb1..f099d9462b759d591694a67b638fc860229978a1 100644 --- a/apps/encryption/l10n/bg_BG.js +++ b/apps/encryption/l10n/bg_BG.js @@ -20,6 +20,8 @@ OC.L10N.register( "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Невалиден личен ключ за Криптиращата Програма. Моля, обнови личния си ключ в Лични настройки, за да възстановиш достъпа до криптираните си файловете.", "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Програмата за криптиране е включена, но твоите ключове не са зададени, моля отпиши си и се впиши отново.", "Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Неуспешно разшифроване на този файл, вероятно това е споделен файл. Моля, поискай собственика на файла да го сподели повторно с теб.", + "The share will expire on %s." : "Споделянето ще изтече на %s.", + "Cheers!" : "Поздрави!", "Recovery key password" : "Парола за възстановяане на ключа", "Change recovery key password:" : "Промени паролата за въстановяване на ключа:", "Change Password" : "Промени Паролата", diff --git a/apps/encryption/l10n/bg_BG.json b/apps/encryption/l10n/bg_BG.json index 1272941719182929b8c2b49415c39671e0b038ae..d4aa2e521c9a97245d786e54c2d89c527879f4c9 100644 --- a/apps/encryption/l10n/bg_BG.json +++ b/apps/encryption/l10n/bg_BG.json @@ -18,6 +18,8 @@ "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Невалиден личен ключ за Криптиращата Програма. Моля, обнови личния си ключ в Лични настройки, за да възстановиш достъпа до криптираните си файловете.", "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Програмата за криптиране е включена, но твоите ключове не са зададени, моля отпиши си и се впиши отново.", "Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Неуспешно разшифроване на този файл, вероятно това е споделен файл. Моля, поискай собственика на файла да го сподели повторно с теб.", + "The share will expire on %s." : "Споделянето ще изтече на %s.", + "Cheers!" : "Поздрави!", "Recovery key password" : "Парола за възстановяане на ключа", "Change recovery key password:" : "Промени паролата за въстановяване на ключа:", "Change Password" : "Промени Паролата", diff --git a/apps/encryption/l10n/bn_BD.js b/apps/encryption/l10n/bn_BD.js index f91008e2408a35f9a7e3addce22d2875b22f4734..2d20f4caa266d42d72d222e32806b7bc43985ca3 100644 --- a/apps/encryption/l10n/bn_BD.js +++ b/apps/encryption/l10n/bn_BD.js @@ -4,6 +4,7 @@ OC.L10N.register( "Recovery key successfully enabled" : "পূনরুদ্ধার চাবি সার্থকভাবে কার্যকর করা হয়েছে", "Recovery key successfully disabled" : "পূনরুদ্ধার চাবি সার্থকভাবে অকার্যকর করা হয়েছে", "Password successfully changed." : "আপনার কূটশব্দটি সার্থকভাবে পরিবর্তন করা হয়েছে ", + "Cheers!" : "শুভেচ্ছা!", "Change recovery key password:" : "পূণরূদ্ধার কি এর কুটশব্দ পরিবর্তন করুন:", "Change Password" : "কূটশব্দ পরিবর্তন করুন", "Enabled" : "কার্যকর", diff --git a/apps/encryption/l10n/bn_BD.json b/apps/encryption/l10n/bn_BD.json index 375bbd517a7f4b990e63feed1360f21aba1e9c07..4c2c9c14b959f2ee8d087555b63750ff6f4d30cc 100644 --- a/apps/encryption/l10n/bn_BD.json +++ b/apps/encryption/l10n/bn_BD.json @@ -2,6 +2,7 @@ "Recovery key successfully enabled" : "পূনরুদ্ধার চাবি সার্থকভাবে কার্যকর করা হয়েছে", "Recovery key successfully disabled" : "পূনরুদ্ধার চাবি সার্থকভাবে অকার্যকর করা হয়েছে", "Password successfully changed." : "আপনার কূটশব্দটি সার্থকভাবে পরিবর্তন করা হয়েছে ", + "Cheers!" : "শুভেচ্ছা!", "Change recovery key password:" : "পূণরূদ্ধার কি এর কুটশব্দ পরিবর্তন করুন:", "Change Password" : "কূটশব্দ পরিবর্তন করুন", "Enabled" : "কার্যকর", diff --git a/apps/encryption/l10n/bs.js b/apps/encryption/l10n/bs.js index bd38f94486e1f38e063f9ac83a45693b0c2dca5c..41d7074d5a4cadd5d08b9ac84951c0d235354035 100644 --- a/apps/encryption/l10n/bs.js +++ b/apps/encryption/l10n/bs.js @@ -3,6 +3,8 @@ OC.L10N.register( { "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Neispravan privatni ključ za šifriranje. Molim ažurirajte lozinku svoga privatnog ključa u svojim osobnim postavkama da biste obnovili pristup svojim šifriranim datotekama.", "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Aplikacija šifriranja je uključena, ali vaši ključevi nisu inicializirani, molim odjavite se i ponovno prijavite", + "The share will expire on %s." : "Podijeljeni resurs će isteći na %s.", + "Cheers!" : "Cheers!", "Enabled" : "Aktivirano", "Disabled" : "Onemogućeno" }, diff --git a/apps/encryption/l10n/bs.json b/apps/encryption/l10n/bs.json index 4d858dbb9664ccd2337765336169b9ccef585e52..0beb35f1558f2042406eb906a3c109e59ad14bbf 100644 --- a/apps/encryption/l10n/bs.json +++ b/apps/encryption/l10n/bs.json @@ -1,6 +1,8 @@ { "translations": { "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Neispravan privatni ključ za šifriranje. Molim ažurirajte lozinku svoga privatnog ključa u svojim osobnim postavkama da biste obnovili pristup svojim šifriranim datotekama.", "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Aplikacija šifriranja je uključena, ali vaši ključevi nisu inicializirani, molim odjavite se i ponovno prijavite", + "The share will expire on %s." : "Podijeljeni resurs će isteći na %s.", + "Cheers!" : "Cheers!", "Enabled" : "Aktivirano", "Disabled" : "Onemogućeno" },"pluralForm" :"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);" diff --git a/apps/encryption/l10n/ca.js b/apps/encryption/l10n/ca.js index e160a23b72299ff004946fffd6a202ca91c02540..b9ca7f9756580b2dfe44249f5a910288fee13dc9 100644 --- a/apps/encryption/l10n/ca.js +++ b/apps/encryption/l10n/ca.js @@ -5,12 +5,16 @@ OC.L10N.register( "Could not enable recovery key. Please check your recovery key password!" : "No s'ha pogut activar la clau de recuperació. Comproveu contrasenya de la clau de recuperació!", "Recovery key successfully disabled" : "La clau de recuperació s'ha descativat", "Could not disable recovery key. Please check your recovery key password!" : "No s'ha pogut desactivar la calu de recuperació. Comproveu la contrasenya de la clau de recuperació!", + "Please provide a new recovery password" : "Siusplau proporcioneu una nova contrasenya de recuperació", + "Please repeat the new recovery password" : "Repetiu la nova contrasenya de recuperació", "Password successfully changed." : "La contrasenya s'ha canviat.", "Could not change the password. Maybe the old password was not correct." : "No s'ha pogut canviar la contrasenya. Potser la contrasenya anterior no era correcta.", "Private key password successfully updated." : "La contrasenya de la clau privada s'ha actualitzat.", "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "La clau privada de l'aplicació d'encriptació no és vàlida! Actualitzeu la contrasenya de la clau privada a l'arranjament personal per recuperar els fitxers encriptats.", "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "L'aplicació d'encriptació està activada però les claus no estan inicialitzades, sortiu i acrediteu-vos de nou.", "Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "No es pot desencriptar aquest fitxer, probablement és un fitxer compartit. Demaneu al propietari del fitxer que el comparteixi de nou amb vós.", + "The share will expire on %s." : "La compartició venç el %s.", + "Cheers!" : "Salut!", "Recovery key password" : "Clau de recuperació de la contrasenya", "Change recovery key password:" : "Canvia la clau de recuperació de contrasenya:", "Change Password" : "Canvia la contrasenya", diff --git a/apps/encryption/l10n/ca.json b/apps/encryption/l10n/ca.json index 464c6e86342fc0c97c6ea3d6fb3cd3abd77aa634..cedebee12c0b39268f761ca27b21568197b5e260 100644 --- a/apps/encryption/l10n/ca.json +++ b/apps/encryption/l10n/ca.json @@ -3,12 +3,16 @@ "Could not enable recovery key. Please check your recovery key password!" : "No s'ha pogut activar la clau de recuperació. Comproveu contrasenya de la clau de recuperació!", "Recovery key successfully disabled" : "La clau de recuperació s'ha descativat", "Could not disable recovery key. Please check your recovery key password!" : "No s'ha pogut desactivar la calu de recuperació. Comproveu la contrasenya de la clau de recuperació!", + "Please provide a new recovery password" : "Siusplau proporcioneu una nova contrasenya de recuperació", + "Please repeat the new recovery password" : "Repetiu la nova contrasenya de recuperació", "Password successfully changed." : "La contrasenya s'ha canviat.", "Could not change the password. Maybe the old password was not correct." : "No s'ha pogut canviar la contrasenya. Potser la contrasenya anterior no era correcta.", "Private key password successfully updated." : "La contrasenya de la clau privada s'ha actualitzat.", "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "La clau privada de l'aplicació d'encriptació no és vàlida! Actualitzeu la contrasenya de la clau privada a l'arranjament personal per recuperar els fitxers encriptats.", "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "L'aplicació d'encriptació està activada però les claus no estan inicialitzades, sortiu i acrediteu-vos de nou.", "Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "No es pot desencriptar aquest fitxer, probablement és un fitxer compartit. Demaneu al propietari del fitxer que el comparteixi de nou amb vós.", + "The share will expire on %s." : "La compartició venç el %s.", + "Cheers!" : "Salut!", "Recovery key password" : "Clau de recuperació de la contrasenya", "Change recovery key password:" : "Canvia la clau de recuperació de contrasenya:", "Change Password" : "Canvia la contrasenya", diff --git a/apps/encryption/l10n/cs_CZ.js b/apps/encryption/l10n/cs_CZ.js index 7b138c80086f5ffd8f90f79672ffbbea569fe8fb..661731c31d3e4dcfa9fc0a5a22911fb021d179de 100644 --- a/apps/encryption/l10n/cs_CZ.js +++ b/apps/encryption/l10n/cs_CZ.js @@ -25,8 +25,11 @@ OC.L10N.register( "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Chybný soukromý klíč pro šifrovací aplikaci. Aktualizujte prosím heslo svého soukromého klíče ve vašem osobním nastavení, abyste znovu získali přístup k vašim zašifrovaným souborům.", "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Aplikace pro šifrování je zapnuta, ale vaše klíče nejsou inicializované. Prosím odhlaste se a znovu přihlaste", "Encryption App is enabled and ready" : "Aplikace šifrování je již povolena", + "one-time password for server-side-encryption" : "jednorázové heslo pro šifrování na straně serveru", "Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Tento soubor se nepodařilo dešifrovat, pravděpodobně je sdílený. Požádejte prosím majitele souboru, aby jej s vámi znovu sdílel.", "Can not read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Soubor nelze načíst, pravděpodobně se jedná o sdílený soubor. Požádejte prosím vlastníka souboru, aby vám jej znovu sdílel.", + "The share will expire on %s." : "Sdílení vyprší %s.", + "Cheers!" : "Ať slouží!", "Enable recovery key" : "Povolit záchranný klíč", "Disable recovery key" : "Vypnout záchranný klíč", "The recovery key is an extra encryption key that is used to encrypt files. It allows recovery of a user's files if the user forgets his or her password." : "Záchranný klíč je dodatečný šifrovací klíč použitý pro\nšifrování souborů. S jeho pomocí lze obnovit soubory uživatele při zapomenutí hesla.", diff --git a/apps/encryption/l10n/cs_CZ.json b/apps/encryption/l10n/cs_CZ.json index ab0fd8b2e4ffc8e43df9f7e4d35f819cd11f1b03..1b530d137eda03d3bf5b4b2b7cfade2f7c36267c 100644 --- a/apps/encryption/l10n/cs_CZ.json +++ b/apps/encryption/l10n/cs_CZ.json @@ -23,8 +23,11 @@ "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Chybný soukromý klíč pro šifrovací aplikaci. Aktualizujte prosím heslo svého soukromého klíče ve vašem osobním nastavení, abyste znovu získali přístup k vašim zašifrovaným souborům.", "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Aplikace pro šifrování je zapnuta, ale vaše klíče nejsou inicializované. Prosím odhlaste se a znovu přihlaste", "Encryption App is enabled and ready" : "Aplikace šifrování je již povolena", + "one-time password for server-side-encryption" : "jednorázové heslo pro šifrování na straně serveru", "Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Tento soubor se nepodařilo dešifrovat, pravděpodobně je sdílený. Požádejte prosím majitele souboru, aby jej s vámi znovu sdílel.", "Can not read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Soubor nelze načíst, pravděpodobně se jedná o sdílený soubor. Požádejte prosím vlastníka souboru, aby vám jej znovu sdílel.", + "The share will expire on %s." : "Sdílení vyprší %s.", + "Cheers!" : "Ať slouží!", "Enable recovery key" : "Povolit záchranný klíč", "Disable recovery key" : "Vypnout záchranný klíč", "The recovery key is an extra encryption key that is used to encrypt files. It allows recovery of a user's files if the user forgets his or her password." : "Záchranný klíč je dodatečný šifrovací klíč použitý pro\nšifrování souborů. S jeho pomocí lze obnovit soubory uživatele při zapomenutí hesla.", diff --git a/apps/encryption/l10n/da.js b/apps/encryption/l10n/da.js index 5d97843f77c8678fa8a849f3b8d0dbfd9d5d5f8a..b5ca0a29e0cf65142151cfec1221fa2b187e0fa8 100644 --- a/apps/encryption/l10n/da.js +++ b/apps/encryption/l10n/da.js @@ -25,8 +25,13 @@ OC.L10N.register( "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Ugyldig privat nøgle for krypteringsprogrammet. Opdater venligst dit kodeord for den private nøgle i dine personlige indstillinger. Det kræves for at få adgang til dine krypterede filer.", "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Krypteringsprogrammet er aktiveret, men din nøgler er ikke igangsat. Log venligst ud og ind igen.", "Encryption App is enabled and ready" : "App til kryptering er slået til og er klar", + "one-time password for server-side-encryption" : "Engangs password for kryptering på serverdelen", "Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Kan ikke kryptere denne fil, sandsynligvis fordi filen er delt. Bed venligst filens ejer om at dele den med dig på ny.", - "Can not read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Kan ikke læse denne fil, sandsynligvis fordi det er en delt fil. Bed venligst ejeren af filen om at dele filen med dig påny.", + "Can not read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Kan ikke læse denne fil, sandsynligvis fordi det er en delt fil. Bed venligst ejeren af filen om at dele filen med dig på ny.", + "Hey there,\n\nthe admin enabled server-side-encryption. Your files were encrypted using the password '%s'.\n\nPlease login to the web interface, go to the section 'ownCloud basic encryption module' of your personal settings and update your encryption password by entering this password into the 'old log-in password' field and your current login-password.\n\n" : "Hejsa,\n\nadministrator aktiveret kryptering på serverdelen. '%s'.\n\nVenligst log på web brugerfladen, gå til sektionen \"ownCloud grundlæggende krypterings modul\" for din personlige opsætninger og opdater dine krypterings kodeord ved at indtaste dette kodeord i \"gamle kodeord log\" feltet samt dit nuværende kodeord.\n\n", + "The share will expire on %s." : "Delingen vil udløbe om %s.", + "Cheers!" : "Hej!", + "Hey there,

the admin enabled server-side-encryption. Your files were encrypted using the password %s.

Please login to the web interface, go to the section \"ownCloud basic encryption module\" of your personal settings and update your encryption password by entering this password into the \"old log-in password\" field and your current login-password.

" : "Hejsa,

administrator aktiveret kryptering på serverdelen. Dine file er blevet krypteret med kodeordet %s.

Venligst log på web brugerfladen, gå til sektionen \"ownCloud grundlæggende krypterings modul\" for din personlige opsætninger og opdater dine krypterings kodeord ved at indtaste dette kodeord i \"gamle kodeord log\" feltet samt dit nuværende kodeord.

", "Enable recovery key" : "Aktivér gendannelsesnøgle", "Disable recovery key" : "Deaktivér gendannelsesnøgle", "The recovery key is an extra encryption key that is used to encrypt files. It allows recovery of a user's files if the user forgets his or her password." : "Gendannelsesnøglen er en ekstra krypteringsnøgle, der bruges til at kryptere filer. Den tillader gendannelse af en brugers filer, hvis brugeren glemmer sin adgangskode.", diff --git a/apps/encryption/l10n/da.json b/apps/encryption/l10n/da.json index d90d030f45b996ccad08925cddb6006f73799f35..1ead926ca7cbf1c20af82acf0aac960d6333cf93 100644 --- a/apps/encryption/l10n/da.json +++ b/apps/encryption/l10n/da.json @@ -23,8 +23,13 @@ "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Ugyldig privat nøgle for krypteringsprogrammet. Opdater venligst dit kodeord for den private nøgle i dine personlige indstillinger. Det kræves for at få adgang til dine krypterede filer.", "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Krypteringsprogrammet er aktiveret, men din nøgler er ikke igangsat. Log venligst ud og ind igen.", "Encryption App is enabled and ready" : "App til kryptering er slået til og er klar", + "one-time password for server-side-encryption" : "Engangs password for kryptering på serverdelen", "Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Kan ikke kryptere denne fil, sandsynligvis fordi filen er delt. Bed venligst filens ejer om at dele den med dig på ny.", - "Can not read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Kan ikke læse denne fil, sandsynligvis fordi det er en delt fil. Bed venligst ejeren af filen om at dele filen med dig påny.", + "Can not read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Kan ikke læse denne fil, sandsynligvis fordi det er en delt fil. Bed venligst ejeren af filen om at dele filen med dig på ny.", + "Hey there,\n\nthe admin enabled server-side-encryption. Your files were encrypted using the password '%s'.\n\nPlease login to the web interface, go to the section 'ownCloud basic encryption module' of your personal settings and update your encryption password by entering this password into the 'old log-in password' field and your current login-password.\n\n" : "Hejsa,\n\nadministrator aktiveret kryptering på serverdelen. '%s'.\n\nVenligst log på web brugerfladen, gå til sektionen \"ownCloud grundlæggende krypterings modul\" for din personlige opsætninger og opdater dine krypterings kodeord ved at indtaste dette kodeord i \"gamle kodeord log\" feltet samt dit nuværende kodeord.\n\n", + "The share will expire on %s." : "Delingen vil udløbe om %s.", + "Cheers!" : "Hej!", + "Hey there,

the admin enabled server-side-encryption. Your files were encrypted using the password %s.

Please login to the web interface, go to the section \"ownCloud basic encryption module\" of your personal settings and update your encryption password by entering this password into the \"old log-in password\" field and your current login-password.

" : "Hejsa,

administrator aktiveret kryptering på serverdelen. Dine file er blevet krypteret med kodeordet %s.

Venligst log på web brugerfladen, gå til sektionen \"ownCloud grundlæggende krypterings modul\" for din personlige opsætninger og opdater dine krypterings kodeord ved at indtaste dette kodeord i \"gamle kodeord log\" feltet samt dit nuværende kodeord.

", "Enable recovery key" : "Aktivér gendannelsesnøgle", "Disable recovery key" : "Deaktivér gendannelsesnøgle", "The recovery key is an extra encryption key that is used to encrypt files. It allows recovery of a user's files if the user forgets his or her password." : "Gendannelsesnøglen er en ekstra krypteringsnøgle, der bruges til at kryptere filer. Den tillader gendannelse af en brugers filer, hvis brugeren glemmer sin adgangskode.", diff --git a/apps/encryption/l10n/de.js b/apps/encryption/l10n/de.js index df1566adb281decefe69c5d1599479087a924af9..a5ba567fb59b7a69f5c1e1d8adb37dedad18019c 100644 --- a/apps/encryption/l10n/de.js +++ b/apps/encryption/l10n/de.js @@ -25,8 +25,11 @@ OC.L10N.register( "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Ungültiger privater Schlüssel für die Verschlüsselung-App. Bitte aktualisiere Dein privates Schlüssel-Passwort, um den Zugriff auf Deine verschlüsselten Dateien wiederherzustellen.", "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Die Verschlüsselung-App ist aktiviert, aber Deine Schlüssel sind nicht initialisiert. Bitte melde Dich nochmals ab und wieder an.", "Encryption App is enabled and ready" : "Verschlüsselungs-App ist aktiviert und bereit", + "one-time password for server-side-encryption" : "Einmal-Passwort für serverseitige Verschlüsselung", "Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Diese Datei kann nicht entschlüsselt werden, es handelt sich wahrscheinlich um eine geteilte Datei. Bitte kontaktiere den Eigentümer der Datei und bitte darum, die Datei noch einmal mit Dir zu teilen.", "Can not read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Diese Datei kann nicht gelesen werden, es handelt sich wahrscheinlich um eine geteilte Datei. Bitte kontaktiere den Eigentümer der Datei und bitte darum, die Datei noch einmal mit Dir zu teilen.", + "The share will expire on %s." : "Die Freigabe wird am %s ablaufen.", + "Cheers!" : "Noch einen schönen Tag!", "Enable recovery key" : "Wiederherstellungsschlüssel aktivieren", "Disable recovery key" : "Wiederherstellungsschlüssel deaktivieren", "The recovery key is an extra encryption key that is used to encrypt files. It allows recovery of a user's files if the user forgets his or her password." : "Der Wiederherstellungsschlüssel ist ein zusätzlicher Verschlüsselungsschlüssel, der zum Verschlüsseln von Dateien benutzt wird. Er erlaubt die Wiederherstellung von Benutzerdateien auch dann, wenn der Benutzer sein oder ihr Passwort vergessen hat.", diff --git a/apps/encryption/l10n/de.json b/apps/encryption/l10n/de.json index 1fe237562f2b17a5acf6bcd57c9f533b86c6f854..dfac7ba8e9b3ab0ccc8cf84397b3d3bc38e5e25e 100644 --- a/apps/encryption/l10n/de.json +++ b/apps/encryption/l10n/de.json @@ -23,8 +23,11 @@ "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Ungültiger privater Schlüssel für die Verschlüsselung-App. Bitte aktualisiere Dein privates Schlüssel-Passwort, um den Zugriff auf Deine verschlüsselten Dateien wiederherzustellen.", "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Die Verschlüsselung-App ist aktiviert, aber Deine Schlüssel sind nicht initialisiert. Bitte melde Dich nochmals ab und wieder an.", "Encryption App is enabled and ready" : "Verschlüsselungs-App ist aktiviert und bereit", + "one-time password for server-side-encryption" : "Einmal-Passwort für serverseitige Verschlüsselung", "Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Diese Datei kann nicht entschlüsselt werden, es handelt sich wahrscheinlich um eine geteilte Datei. Bitte kontaktiere den Eigentümer der Datei und bitte darum, die Datei noch einmal mit Dir zu teilen.", "Can not read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Diese Datei kann nicht gelesen werden, es handelt sich wahrscheinlich um eine geteilte Datei. Bitte kontaktiere den Eigentümer der Datei und bitte darum, die Datei noch einmal mit Dir zu teilen.", + "The share will expire on %s." : "Die Freigabe wird am %s ablaufen.", + "Cheers!" : "Noch einen schönen Tag!", "Enable recovery key" : "Wiederherstellungsschlüssel aktivieren", "Disable recovery key" : "Wiederherstellungsschlüssel deaktivieren", "The recovery key is an extra encryption key that is used to encrypt files. It allows recovery of a user's files if the user forgets his or her password." : "Der Wiederherstellungsschlüssel ist ein zusätzlicher Verschlüsselungsschlüssel, der zum Verschlüsseln von Dateien benutzt wird. Er erlaubt die Wiederherstellung von Benutzerdateien auch dann, wenn der Benutzer sein oder ihr Passwort vergessen hat.", diff --git a/apps/encryption/l10n/de_DE.js b/apps/encryption/l10n/de_DE.js index 5d5911c91eb543deb44113bfb258393a40a64157..eb87c9982593be563e308850c229998be8168a73 100644 --- a/apps/encryption/l10n/de_DE.js +++ b/apps/encryption/l10n/de_DE.js @@ -27,6 +27,8 @@ OC.L10N.register( "Encryption App is enabled and ready" : "Verschlüsselungs-App ist aktiviert und bereit", "Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Diese Datei kann nicht entschlüsselt werden, es handelt sich wahrscheinlich um eine geteilte Datei. Bitte kontaktieren Sie den Eigentümer der Datei und bitten Sie darum, die Datei noch einmal mit Ihnen zu teilen.", "Can not read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Diese Datei kann nicht gelesen werden, es handelt sich wahrscheinlich um eine geteilte Datei. Bitte kontaktieren Sie den Eigentümer der Datei und bitten Sie darum, die Datei noch einmal mit Ihnen zu teilen.", + "The share will expire on %s." : "Die Freigabe wird am %s ablaufen.", + "Cheers!" : "Noch einen schönen Tag!", "Enable recovery key" : "Wiederherstellungsschlüssel aktivieren", "Disable recovery key" : "Wiederherstellungsschlüssel deaktivieren", "The recovery key is an extra encryption key that is used to encrypt files. It allows recovery of a user's files if the user forgets his or her password." : "Der Wiederherstellungsschlüssel ist ein zusätzlicher Verschlüsselungsschlüssel, der zum Verschlüsseln von Dateien benutzt wird. Er erlaubt die Wiederherstellung von Benutzerdateien auch dann, wenn der Benutzer sein Passwort vergessen hat.", diff --git a/apps/encryption/l10n/de_DE.json b/apps/encryption/l10n/de_DE.json index f67d5dfd4c5553ae6a9d9dba28a323f724877852..8971978dd780e4f073544d4868b73bbad9cf97ea 100644 --- a/apps/encryption/l10n/de_DE.json +++ b/apps/encryption/l10n/de_DE.json @@ -25,6 +25,8 @@ "Encryption App is enabled and ready" : "Verschlüsselungs-App ist aktiviert und bereit", "Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Diese Datei kann nicht entschlüsselt werden, es handelt sich wahrscheinlich um eine geteilte Datei. Bitte kontaktieren Sie den Eigentümer der Datei und bitten Sie darum, die Datei noch einmal mit Ihnen zu teilen.", "Can not read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Diese Datei kann nicht gelesen werden, es handelt sich wahrscheinlich um eine geteilte Datei. Bitte kontaktieren Sie den Eigentümer der Datei und bitten Sie darum, die Datei noch einmal mit Ihnen zu teilen.", + "The share will expire on %s." : "Die Freigabe wird am %s ablaufen.", + "Cheers!" : "Noch einen schönen Tag!", "Enable recovery key" : "Wiederherstellungsschlüssel aktivieren", "Disable recovery key" : "Wiederherstellungsschlüssel deaktivieren", "The recovery key is an extra encryption key that is used to encrypt files. It allows recovery of a user's files if the user forgets his or her password." : "Der Wiederherstellungsschlüssel ist ein zusätzlicher Verschlüsselungsschlüssel, der zum Verschlüsseln von Dateien benutzt wird. Er erlaubt die Wiederherstellung von Benutzerdateien auch dann, wenn der Benutzer sein Passwort vergessen hat.", diff --git a/apps/encryption/l10n/el.js b/apps/encryption/l10n/el.js index 078b66d6784e67caa02bf996677087d9c9879655..d27098ddb049498ca1784c8e9b80bf78cc9bd91d 100644 --- a/apps/encryption/l10n/el.js +++ b/apps/encryption/l10n/el.js @@ -25,8 +25,13 @@ OC.L10N.register( "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Άκυρο προσωπικό κλειδί για την εφαρμογή κρυπτογράφησης. Παρακαλώ ενημερώστε τον κωδικό του προσωπικού κλειδίου σας στις προσωπικές ρυθμίσεις για να επανακτήσετε πρόσβαση στα κρυπτογραφημένα σας αρχεία.", "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Η εφαρμογή κρυπτογράφησης είναι ενεργοποιημένη αλλά τα κλειδιά σας δεν έχουν καταγραφεί, παρακαλώ αποσυνδεθείτε και επανασυνδεθείτε.", "Encryption App is enabled and ready" : "Η Εφαρμογή Κρυπτογράφησης είναι ενεργοποιημένη και έτοιμη.", + "one-time password for server-side-encryption" : "κωδικός μιας χρήσης για κρυπτογράφηση στο διακομιστή", "Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Δεν ήταν δυνατό να αποκρυπτογραφηθεί αυτό το αρχείο, πιθανόν πρόκειται για κοινόχρηστο αρχείο. Παρακαλώ ζητήστε από τον ιδιοκτήτη του αρχείου να το ξαναμοιραστεί μαζί σας.", "Can not read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Αδυναμία ανάγνωσης αυτού του αρχείου, πιθανό να είναι διαμοιραζόμενο αρχείο. Παρακαλώ ρωτήστε τον κάτοχο του αρχείου να το διαμοιράσει ξανά μαζί σας.", + "Hey there,\n\nthe admin enabled server-side-encryption. Your files were encrypted using the password '%s'.\n\nPlease login to the web interface, go to the section 'ownCloud basic encryption module' of your personal settings and update your encryption password by entering this password into the 'old log-in password' field and your current login-password.\n\n" : "Χαίρετε,\n\nο διαχειριστής ενεργοποίηση την κρυπτογράφηση στο διακομιστή. Τα αρχεία σας κρυπτογραφήθηκαν με τον κωδικό '%s'.\n\nΠαρακαλούμε συνδεθείτε στη διεπαφή ιστού, πηγαίνετε στην ενότητα 'μονάδα βασικής κρυπτογράφησης ownCloud' στις προσωπικές σας ρυθμίσεις και ενημερώστε τον κωδικό κρυπτογράφησης εισάγοντας αυτό τον κωδικό στο πεδίο 'παλιός κωδικός σύνδεσης' και τον τωρινό σας κωδικό σύνδεσης.\n", + "The share will expire on %s." : "Ο διαμοιρασμός θα λήξει σε %s.", + "Cheers!" : "Χαιρετισμούς!", + "Hey there,

the admin enabled server-side-encryption. Your files were encrypted using the password %s.

Please login to the web interface, go to the section \"ownCloud basic encryption module\" of your personal settings and update your encryption password by entering this password into the \"old log-in password\" field and your current login-password.

" : "Χαίρετε,

ο διαχειριστής ενεργοποίησε την κρυπτογράφηση στο διακομιστή. Τα αρχεία σας κρυπτογραφήθηκαν με τον κωδικό %s.

Παρακαλούμε συνδεθείτε στη διεπαφή ιστού, πηγαίνετε στην ενότητα \"μονάδα βασικής κρυπτογράφησης ownCloud\" τωνπ ροσωπικών σας ρυθμίσεων και ενημερώστε τον κωδικό κρυπτογράφησης εισάγοντας αυτό τον κωδικό στο πεδίο \"παλιός κωδικός σύνδεσης\" και τον τωρινό σας κωδικό σύνδεσης.", "Enable recovery key" : "Ενεργοποίηση κλειδιού ανάκτησης", "Disable recovery key" : "Απενεργοποίηση κλειδιού ανάκτησης", "The recovery key is an extra encryption key that is used to encrypt files. It allows recovery of a user's files if the user forgets his or her password." : "Το κλειδί ανάκτησης είναι ένα επιπλέον κλειδί κρυπτογράφησης που χρησιμοποιείται για να κρυπτογραφήσει αρχεία. Επιτρέπει την ανάκτηση των αρχείων ενός χρήστη αν αυτός/αυτή ξεχάσει τον κωδικό πρόσβασης.", diff --git a/apps/encryption/l10n/el.json b/apps/encryption/l10n/el.json index c50f4cf938b520d3de41dd39795f0ce837ff4831..3ed5e39b7c0fc48ba58fd5d1091acf5cad7ba705 100644 --- a/apps/encryption/l10n/el.json +++ b/apps/encryption/l10n/el.json @@ -23,8 +23,13 @@ "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Άκυρο προσωπικό κλειδί για την εφαρμογή κρυπτογράφησης. Παρακαλώ ενημερώστε τον κωδικό του προσωπικού κλειδίου σας στις προσωπικές ρυθμίσεις για να επανακτήσετε πρόσβαση στα κρυπτογραφημένα σας αρχεία.", "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Η εφαρμογή κρυπτογράφησης είναι ενεργοποιημένη αλλά τα κλειδιά σας δεν έχουν καταγραφεί, παρακαλώ αποσυνδεθείτε και επανασυνδεθείτε.", "Encryption App is enabled and ready" : "Η Εφαρμογή Κρυπτογράφησης είναι ενεργοποιημένη και έτοιμη.", + "one-time password for server-side-encryption" : "κωδικός μιας χρήσης για κρυπτογράφηση στο διακομιστή", "Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Δεν ήταν δυνατό να αποκρυπτογραφηθεί αυτό το αρχείο, πιθανόν πρόκειται για κοινόχρηστο αρχείο. Παρακαλώ ζητήστε από τον ιδιοκτήτη του αρχείου να το ξαναμοιραστεί μαζί σας.", "Can not read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Αδυναμία ανάγνωσης αυτού του αρχείου, πιθανό να είναι διαμοιραζόμενο αρχείο. Παρακαλώ ρωτήστε τον κάτοχο του αρχείου να το διαμοιράσει ξανά μαζί σας.", + "Hey there,\n\nthe admin enabled server-side-encryption. Your files were encrypted using the password '%s'.\n\nPlease login to the web interface, go to the section 'ownCloud basic encryption module' of your personal settings and update your encryption password by entering this password into the 'old log-in password' field and your current login-password.\n\n" : "Χαίρετε,\n\nο διαχειριστής ενεργοποίηση την κρυπτογράφηση στο διακομιστή. Τα αρχεία σας κρυπτογραφήθηκαν με τον κωδικό '%s'.\n\nΠαρακαλούμε συνδεθείτε στη διεπαφή ιστού, πηγαίνετε στην ενότητα 'μονάδα βασικής κρυπτογράφησης ownCloud' στις προσωπικές σας ρυθμίσεις και ενημερώστε τον κωδικό κρυπτογράφησης εισάγοντας αυτό τον κωδικό στο πεδίο 'παλιός κωδικός σύνδεσης' και τον τωρινό σας κωδικό σύνδεσης.\n", + "The share will expire on %s." : "Ο διαμοιρασμός θα λήξει σε %s.", + "Cheers!" : "Χαιρετισμούς!", + "Hey there,

the admin enabled server-side-encryption. Your files were encrypted using the password %s.

Please login to the web interface, go to the section \"ownCloud basic encryption module\" of your personal settings and update your encryption password by entering this password into the \"old log-in password\" field and your current login-password.

" : "Χαίρετε,

ο διαχειριστής ενεργοποίησε την κρυπτογράφηση στο διακομιστή. Τα αρχεία σας κρυπτογραφήθηκαν με τον κωδικό %s.

Παρακαλούμε συνδεθείτε στη διεπαφή ιστού, πηγαίνετε στην ενότητα \"μονάδα βασικής κρυπτογράφησης ownCloud\" τωνπ ροσωπικών σας ρυθμίσεων και ενημερώστε τον κωδικό κρυπτογράφησης εισάγοντας αυτό τον κωδικό στο πεδίο \"παλιός κωδικός σύνδεσης\" και τον τωρινό σας κωδικό σύνδεσης.", "Enable recovery key" : "Ενεργοποίηση κλειδιού ανάκτησης", "Disable recovery key" : "Απενεργοποίηση κλειδιού ανάκτησης", "The recovery key is an extra encryption key that is used to encrypt files. It allows recovery of a user's files if the user forgets his or her password." : "Το κλειδί ανάκτησης είναι ένα επιπλέον κλειδί κρυπτογράφησης που χρησιμοποιείται για να κρυπτογραφήσει αρχεία. Επιτρέπει την ανάκτηση των αρχείων ενός χρήστη αν αυτός/αυτή ξεχάσει τον κωδικό πρόσβασης.", diff --git a/apps/encryption/l10n/en_GB.js b/apps/encryption/l10n/en_GB.js index 13b103dee12f508868d86eb4b0e096288ef79b7c..50835a334f29bb67581178123adfafa166ecdaf8 100644 --- a/apps/encryption/l10n/en_GB.js +++ b/apps/encryption/l10n/en_GB.js @@ -27,6 +27,8 @@ OC.L10N.register( "Encryption App is enabled and ready" : "Encryption App is enabled and ready", "Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Cannot decrypt this file, which is probably a shared file. Please ask the file owner to reshare the file with you.", "Can not read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Can not read this file, probably this is a shared file. Please ask the file owner to reshare the file with you.", + "The share will expire on %s." : "The share will expire on %s.", + "Cheers!" : "Cheers!", "Enable recovery key" : "Enable recovery key", "Disable recovery key" : "Disable recovery key", "The recovery key is an extra encryption key that is used to encrypt files. It allows recovery of a user's files if the user forgets his or her password." : "The recovery key is an extra encryption key that is used to encrypt files. It allows recovery of a user's files if the user forgets his or her password.", diff --git a/apps/encryption/l10n/en_GB.json b/apps/encryption/l10n/en_GB.json index e1d20385f6e89dad2027739ff2c0d8617e45537a..3c2e115290d2251be9a5daecea460864275304a6 100644 --- a/apps/encryption/l10n/en_GB.json +++ b/apps/encryption/l10n/en_GB.json @@ -25,6 +25,8 @@ "Encryption App is enabled and ready" : "Encryption App is enabled and ready", "Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Cannot decrypt this file, which is probably a shared file. Please ask the file owner to reshare the file with you.", "Can not read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Can not read this file, probably this is a shared file. Please ask the file owner to reshare the file with you.", + "The share will expire on %s." : "The share will expire on %s.", + "Cheers!" : "Cheers!", "Enable recovery key" : "Enable recovery key", "Disable recovery key" : "Disable recovery key", "The recovery key is an extra encryption key that is used to encrypt files. It allows recovery of a user's files if the user forgets his or her password." : "The recovery key is an extra encryption key that is used to encrypt files. It allows recovery of a user's files if the user forgets his or her password.", diff --git a/apps/encryption/l10n/es.js b/apps/encryption/l10n/es.js index cd800250be21741dba6c89daa84153cf9f99373c..6b49b3917fd98b0b135e82db8a895bae69a02df8 100644 --- a/apps/encryption/l10n/es.js +++ b/apps/encryption/l10n/es.js @@ -25,8 +25,13 @@ OC.L10N.register( "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "La clave privada no es válida para la app de cifrado. Por favor, actualiza la contraseña de tu clave privada en tus ajustes personales para recuperar el acceso a tus archivos cifrados.", "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "La app de cifrado está habilitada pero sus claves no se han inicializado, por favor, cierre la sesión y vuelva a iniciarla de nuevo.", "Encryption App is enabled and ready" : "Cifrado App está habilitada y lista", + "one-time password for server-side-encryption" : "Contraseña de un solo uso para el cifrado en el lado servidor", "Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "No fue posible descifrar este archivo, probablemente se trate de un archivo compartido. Solicite al propietario del mismo que vuelva a compartirlo con usted.", "Can not read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "No se puede leer este archivo, probablemente sea un archivo compartido. Consulte con el propietario del mismo y que lo vuelva a compartir con usted.", + "Hey there,\n\nthe admin enabled server-side-encryption. Your files were encrypted using the password '%s'.\n\nPlease login to the web interface, go to the section 'ownCloud basic encryption module' of your personal settings and update your encryption password by entering this password into the 'old log-in password' field and your current login-password.\n\n" : "Hola,\n\nEl administrador ha habilitado el cifrado del lado servidor. Sus archivos serán cifrados usando como contraseña: '%s'.\n\nPor favor, identifíquese en la interfaz web, vaya a la sección 'Modulo básico de cifrado' de sus opciones personales y actualice su contraseña tecleando esta contraseña en el campo 'contraseña antigua' e introduciendo la nueva en su correspondiente campo.\n\n", + "The share will expire on %s." : "El objeto dejará de ser compartido el %s.", + "Cheers!" : "¡Saludos!", + "Hey there,

the admin enabled server-side-encryption. Your files were encrypted using the password %s.

Please login to the web interface, go to the section \"ownCloud basic encryption module\" of your personal settings and update your encryption password by entering this password into the \"old log-in password\" field and your current login-password.

" : "Hola,\n

\nEl administrador ha habilitado el cifrado del lado servidor. Sus archivos serán cifrados usando como contraseña: %s\n

\nPor favor, identifíquese en la interfaz web, vaya a la sección 'Modulo básico de cifrado' de sus opciones personales y actualice su contraseña tecleando esta contraseña en el campo 'contraseña antigua' e introduciendo la nueva en su correspondiente campo.

", "Enable recovery key" : "Activa la clave de recuperación", "Disable recovery key" : "Desactiva la clave de recuperación", "The recovery key is an extra encryption key that is used to encrypt files. It allows recovery of a user's files if the user forgets his or her password." : "La clave de recuperación es una clave de cifrado extra que se usa para cifrar ficheros. Permite la recuperación de los ficheros de un usuario si él o ella olvida su contraseña.", diff --git a/apps/encryption/l10n/es.json b/apps/encryption/l10n/es.json index 69c14e008c22806ae4417f3ca3c7414ff1a9f31f..3f21b4c09a00f9dcec0df966f19bfcf96273a0f0 100644 --- a/apps/encryption/l10n/es.json +++ b/apps/encryption/l10n/es.json @@ -23,8 +23,13 @@ "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "La clave privada no es válida para la app de cifrado. Por favor, actualiza la contraseña de tu clave privada en tus ajustes personales para recuperar el acceso a tus archivos cifrados.", "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "La app de cifrado está habilitada pero sus claves no se han inicializado, por favor, cierre la sesión y vuelva a iniciarla de nuevo.", "Encryption App is enabled and ready" : "Cifrado App está habilitada y lista", + "one-time password for server-side-encryption" : "Contraseña de un solo uso para el cifrado en el lado servidor", "Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "No fue posible descifrar este archivo, probablemente se trate de un archivo compartido. Solicite al propietario del mismo que vuelva a compartirlo con usted.", "Can not read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "No se puede leer este archivo, probablemente sea un archivo compartido. Consulte con el propietario del mismo y que lo vuelva a compartir con usted.", + "Hey there,\n\nthe admin enabled server-side-encryption. Your files were encrypted using the password '%s'.\n\nPlease login to the web interface, go to the section 'ownCloud basic encryption module' of your personal settings and update your encryption password by entering this password into the 'old log-in password' field and your current login-password.\n\n" : "Hola,\n\nEl administrador ha habilitado el cifrado del lado servidor. Sus archivos serán cifrados usando como contraseña: '%s'.\n\nPor favor, identifíquese en la interfaz web, vaya a la sección 'Modulo básico de cifrado' de sus opciones personales y actualice su contraseña tecleando esta contraseña en el campo 'contraseña antigua' e introduciendo la nueva en su correspondiente campo.\n\n", + "The share will expire on %s." : "El objeto dejará de ser compartido el %s.", + "Cheers!" : "¡Saludos!", + "Hey there,

the admin enabled server-side-encryption. Your files were encrypted using the password %s.

Please login to the web interface, go to the section \"ownCloud basic encryption module\" of your personal settings and update your encryption password by entering this password into the \"old log-in password\" field and your current login-password.

" : "Hola,\n

\nEl administrador ha habilitado el cifrado del lado servidor. Sus archivos serán cifrados usando como contraseña: %s\n

\nPor favor, identifíquese en la interfaz web, vaya a la sección 'Modulo básico de cifrado' de sus opciones personales y actualice su contraseña tecleando esta contraseña en el campo 'contraseña antigua' e introduciendo la nueva en su correspondiente campo.

", "Enable recovery key" : "Activa la clave de recuperación", "Disable recovery key" : "Desactiva la clave de recuperación", "The recovery key is an extra encryption key that is used to encrypt files. It allows recovery of a user's files if the user forgets his or her password." : "La clave de recuperación es una clave de cifrado extra que se usa para cifrar ficheros. Permite la recuperación de los ficheros de un usuario si él o ella olvida su contraseña.", diff --git a/apps/encryption/l10n/es_AR.js b/apps/encryption/l10n/es_AR.js index e2fed7c3d381139761bdd2ada39e82ef774195c4..bff5b7c593ed925d63b50673c312a2ba0b969edd 100644 --- a/apps/encryption/l10n/es_AR.js +++ b/apps/encryption/l10n/es_AR.js @@ -11,6 +11,8 @@ OC.L10N.register( "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Llave privada inválida para la aplicación de encriptación. Por favor actualice la clave de la llave privada en las configuraciones personales para recobrar el acceso a sus archivos encriptados.", "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "La aplicación de encriptación está habilitada pero las llaves no fueron inicializadas, por favor termine y vuelva a iniciar la sesión", "Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "No se puede descibrar este archivo, probablemente sea un archivo compartido. Por favor pídele al dueño que recomparta el archivo contigo.", + "The share will expire on %s." : "El compartir expirará en %s.", + "Cheers!" : "¡Saludos!", "Recovery key password" : "Contraseña de recuperación de clave", "Change recovery key password:" : "Cambiar contraseña para recuperar la clave:", "Change Password" : "Cambiar contraseña", diff --git a/apps/encryption/l10n/es_AR.json b/apps/encryption/l10n/es_AR.json index b938c1d6e386da22bf62938e003e3d66e6148cbc..0cdcd9cd1219f77eeb3152c15e97b2595f1c1335 100644 --- a/apps/encryption/l10n/es_AR.json +++ b/apps/encryption/l10n/es_AR.json @@ -9,6 +9,8 @@ "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Llave privada inválida para la aplicación de encriptación. Por favor actualice la clave de la llave privada en las configuraciones personales para recobrar el acceso a sus archivos encriptados.", "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "La aplicación de encriptación está habilitada pero las llaves no fueron inicializadas, por favor termine y vuelva a iniciar la sesión", "Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "No se puede descibrar este archivo, probablemente sea un archivo compartido. Por favor pídele al dueño que recomparta el archivo contigo.", + "The share will expire on %s." : "El compartir expirará en %s.", + "Cheers!" : "¡Saludos!", "Recovery key password" : "Contraseña de recuperación de clave", "Change recovery key password:" : "Cambiar contraseña para recuperar la clave:", "Change Password" : "Cambiar contraseña", diff --git a/apps/encryption/l10n/es_MX.js b/apps/encryption/l10n/es_MX.js index 12836faa54d736edc8aa50d0a03da55af5b44fd1..ad94a24e114ccab21237538db22402b6d7b638b6 100644 --- a/apps/encryption/l10n/es_MX.js +++ b/apps/encryption/l10n/es_MX.js @@ -11,6 +11,8 @@ OC.L10N.register( "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "La clave privada no es válida para la aplicación de cifrado. Por favor, actualiza la contraseña de tu clave privada en tus ajustes personales para recuperar el acceso a tus archivos cifrados.", "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "La aplicación de crifrado está habilitada pero tus claves no han sido inicializadas, por favor, cierra la sesión y vuelva a iniciarla de nuevo.", "Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "No fue posible descifrar este archivo, probablemente se trate de un archivo compartido. Solicite al propietario del mismo que vuelva a compartirlo con usted.", + "The share will expire on %s." : "El objeto dejará de ser compartido el %s.", + "Cheers!" : "¡Saludos!", "Recovery key password" : "Contraseña de clave de recuperación", "Change recovery key password:" : "Cambiar la contraseña de la clave de recuperación", "Change Password" : "Cambiar contraseña", diff --git a/apps/encryption/l10n/es_MX.json b/apps/encryption/l10n/es_MX.json index f8332799f151cf01261da3b9d581c91c904c7444..5a64c7c87779337ea6a8308909e48d7722e84908 100644 --- a/apps/encryption/l10n/es_MX.json +++ b/apps/encryption/l10n/es_MX.json @@ -9,6 +9,8 @@ "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "La clave privada no es válida para la aplicación de cifrado. Por favor, actualiza la contraseña de tu clave privada en tus ajustes personales para recuperar el acceso a tus archivos cifrados.", "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "La aplicación de crifrado está habilitada pero tus claves no han sido inicializadas, por favor, cierra la sesión y vuelva a iniciarla de nuevo.", "Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "No fue posible descifrar este archivo, probablemente se trate de un archivo compartido. Solicite al propietario del mismo que vuelva a compartirlo con usted.", + "The share will expire on %s." : "El objeto dejará de ser compartido el %s.", + "Cheers!" : "¡Saludos!", "Recovery key password" : "Contraseña de clave de recuperación", "Change recovery key password:" : "Cambiar la contraseña de la clave de recuperación", "Change Password" : "Cambiar contraseña", diff --git a/apps/encryption/l10n/et_EE.js b/apps/encryption/l10n/et_EE.js index 0c33015cdf1f493303badef49804c28b0dfc115d..501772c28083d1d8a763cb5f081723d04a1ebc02 100644 --- a/apps/encryption/l10n/et_EE.js +++ b/apps/encryption/l10n/et_EE.js @@ -14,6 +14,8 @@ OC.L10N.register( "Please repeat the new recovery password" : "Palun korda uut taastevõtme parooli", "Password successfully changed." : "Parool edukalt vahetatud.", "Could not change the password. Maybe the old password was not correct." : "Ei suutnud vahetada parooli. Võib-olla on vana parool valesti sisestatud.", + "Recovery Key disabled" : "Taastevõti on välja lülitatud", + "Recovery Key enabled" : "Taastevõti on sisse lülitatud", "Could not update the private key password." : "Ei suutnud uuendada privaatse võtme parooli.", "The old password was not correct, please try again." : "Vana parool polnud õige, palun proovi uuesti.", "The current log-in password was not correct, please try again." : "Praeguse sisselogimise parool polnud õige, palun proovi uuesti.", @@ -21,8 +23,16 @@ OC.L10N.register( "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Vigane Krüpteerimisrakendi privaatvõti . Palun uuenda oma privaatse võtme parool oma personaasete seadete all taastamaks ligipääsu oma krüpteeritud failidele.", "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Krüpteerimisrakend on lubatud, kuid võtmeid pole lähtestatud. Palun logi välja ning uuesti sisse.", "Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Sa ei saa seda faili dekrüpteerida, see on tõenäoliselt jagatud fail. Palun lase omanikul seda faili sinuga uuesti jagada.", + "The share will expire on %s." : "Jagamine aegub %s.", + "Cheers!" : "Terekest!", + "Enable recovery key" : "Luba taastevõtme kasutamine", + "Disable recovery key" : "Keela taastevõtme kasutamine", "Recovery key password" : "Taastevõtme parool", + "Repeat recovery key password" : "Korda taastevõtme parooli", "Change recovery key password:" : "Muuda taastevõtme parooli:", + "Old recovery key password" : "Vana taastevõtme parool", + "New recovery key password" : "Uus taastevõtme parool", + "Repeat new recovery key password" : "Korda uut taastevõtme parooli", "Change Password" : "Muuda parooli", "Your private key password no longer matches your log-in password." : "Sinu provaatvõtme parool ei kattu enam sinu sisselogimise parooliga.", "Set your old private key password to your current log-in password:" : "Pane oma vana privaatvõtme parooliks oma praegune sisselogimise parool.", diff --git a/apps/encryption/l10n/et_EE.json b/apps/encryption/l10n/et_EE.json index 1f8f74dc7fe8bc4df0644c66f32d971a5dff531d..14d4c59f9fc441801138576a6d219ec980bb3b02 100644 --- a/apps/encryption/l10n/et_EE.json +++ b/apps/encryption/l10n/et_EE.json @@ -12,6 +12,8 @@ "Please repeat the new recovery password" : "Palun korda uut taastevõtme parooli", "Password successfully changed." : "Parool edukalt vahetatud.", "Could not change the password. Maybe the old password was not correct." : "Ei suutnud vahetada parooli. Võib-olla on vana parool valesti sisestatud.", + "Recovery Key disabled" : "Taastevõti on välja lülitatud", + "Recovery Key enabled" : "Taastevõti on sisse lülitatud", "Could not update the private key password." : "Ei suutnud uuendada privaatse võtme parooli.", "The old password was not correct, please try again." : "Vana parool polnud õige, palun proovi uuesti.", "The current log-in password was not correct, please try again." : "Praeguse sisselogimise parool polnud õige, palun proovi uuesti.", @@ -19,8 +21,16 @@ "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Vigane Krüpteerimisrakendi privaatvõti . Palun uuenda oma privaatse võtme parool oma personaasete seadete all taastamaks ligipääsu oma krüpteeritud failidele.", "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Krüpteerimisrakend on lubatud, kuid võtmeid pole lähtestatud. Palun logi välja ning uuesti sisse.", "Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Sa ei saa seda faili dekrüpteerida, see on tõenäoliselt jagatud fail. Palun lase omanikul seda faili sinuga uuesti jagada.", + "The share will expire on %s." : "Jagamine aegub %s.", + "Cheers!" : "Terekest!", + "Enable recovery key" : "Luba taastevõtme kasutamine", + "Disable recovery key" : "Keela taastevõtme kasutamine", "Recovery key password" : "Taastevõtme parool", + "Repeat recovery key password" : "Korda taastevõtme parooli", "Change recovery key password:" : "Muuda taastevõtme parooli:", + "Old recovery key password" : "Vana taastevõtme parool", + "New recovery key password" : "Uus taastevõtme parool", + "Repeat new recovery key password" : "Korda uut taastevõtme parooli", "Change Password" : "Muuda parooli", "Your private key password no longer matches your log-in password." : "Sinu provaatvõtme parool ei kattu enam sinu sisselogimise parooliga.", "Set your old private key password to your current log-in password:" : "Pane oma vana privaatvõtme parooliks oma praegune sisselogimise parool.", diff --git a/apps/encryption/l10n/eu.js b/apps/encryption/l10n/eu.js index 1e0cffe466254c5500fbf544fa8749527ae818c0..1c8bdf4fa0444ba963d65cc84cf4ea34ee74a2bb 100644 --- a/apps/encryption/l10n/eu.js +++ b/apps/encryption/l10n/eu.js @@ -20,6 +20,8 @@ OC.L10N.register( "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Enkriptazio aplikaziorako gako pribatu okerra. Mesedez eguneratu zure gako pribatuaren pasahitza zure ezarpen pertsonaletan zure enkriptatuko fitxategietarako sarrera berreskuratzeko.", "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Enkriptazio aplikazioa gaituta dago baina zure gakoak ez daude konfiguratuta, mesedez saioa bukatu eta berriro hasi", "Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Ezin izan da fitxategi hau deszifratu, ziurrenik elkarbanatutako fitxategi bat da. Mesdez, eskatu fitxategiaren jabeari fitxategia zurekin berriz elkarbana dezan.", + "The share will expire on %s." : "Elkarbanaketa %s-n iraungiko da.", + "Cheers!" : "Ongi izan!", "Recovery key password" : "Berreskuratze gako pasahitza", "Change recovery key password:" : "Aldatu berreskuratze gako pasahitza:", "Change Password" : "Aldatu Pasahitza", diff --git a/apps/encryption/l10n/eu.json b/apps/encryption/l10n/eu.json index b896698f6d67d628e77958c4f4e419990bead67c..0c07ebd477f961a84985e75cc573a807ed62baad 100644 --- a/apps/encryption/l10n/eu.json +++ b/apps/encryption/l10n/eu.json @@ -18,6 +18,8 @@ "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Enkriptazio aplikaziorako gako pribatu okerra. Mesedez eguneratu zure gako pribatuaren pasahitza zure ezarpen pertsonaletan zure enkriptatuko fitxategietarako sarrera berreskuratzeko.", "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Enkriptazio aplikazioa gaituta dago baina zure gakoak ez daude konfiguratuta, mesedez saioa bukatu eta berriro hasi", "Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Ezin izan da fitxategi hau deszifratu, ziurrenik elkarbanatutako fitxategi bat da. Mesdez, eskatu fitxategiaren jabeari fitxategia zurekin berriz elkarbana dezan.", + "The share will expire on %s." : "Elkarbanaketa %s-n iraungiko da.", + "Cheers!" : "Ongi izan!", "Recovery key password" : "Berreskuratze gako pasahitza", "Change recovery key password:" : "Aldatu berreskuratze gako pasahitza:", "Change Password" : "Aldatu Pasahitza", diff --git a/apps/encryption/l10n/fa.js b/apps/encryption/l10n/fa.js index 493b3992a62b89334a6e9d04aa8d4eebcd5ab8a5..ac39a7fbe880a21061117f0f4ee976865c1e6f1c 100644 --- a/apps/encryption/l10n/fa.js +++ b/apps/encryption/l10n/fa.js @@ -1,16 +1,37 @@ OC.L10N.register( "encryption", { + "Missing recovery key password" : "فاقد رمزعبور کلید بازیابی", + "Please repeat the recovery key password" : "لطفا رمز کلید بازیابی را تکرار کنید", "Recovery key successfully enabled" : "کلید بازیابی با موفقیت فعال شده است.", "Could not enable recovery key. Please check your recovery key password!" : "کلید بازیابی نمی تواند فعال شود. لطفا رمزعبور کلید بازیابی خود را بررسی نمایید!", "Recovery key successfully disabled" : "کلید بازیابی با موفقیت غیر فعال شده است.", "Could not disable recovery key. Please check your recovery key password!" : "کلید بازیابی را نمی تواند غیرفعال نماید. لطفا رمزعبور کلید بازیابی خود را بررسی کنید!", + "Missing parameters" : "پارامترهای فراموش شده", + "Please provide the old recovery password" : "لطفا رمز بازیابی قدیمی را وارد کنید", + "Please provide a new recovery password" : "لطفا رمز بازیابی جدید را وارد کنید", + "Please repeat the new recovery password" : "لطفا رمز بازیابی جدید را مجددا وارد کنید", "Password successfully changed." : "رمزعبور با موفقیت تغییر یافت.", "Could not change the password. Maybe the old password was not correct." : "رمزعبور را نمیتواند تغییر دهد. شاید رمزعبورقدیمی صحیح نمی باشد.", + "Recovery Key disabled" : "کلید بازیابی غیرفعال شد", + "Recovery Key enabled" : "کلید بازیابی فعال شد", + "Could not enable the recovery key, please try again or contact your administrator" : "امکان فعال‌سازی کلید بازیابی وجود ندارد، لطفا مجددا تلاش کرده و یا با مدیر تماس بگیرید", + "Could not update the private key password." : "امکان بروزرسانی رمزعبور کلید خصوصی وجود ندارد.", + "The old password was not correct, please try again." : "رمزعبور قدیمی اشتباه است، لطفا مجددا تلاش کنید.", "Private key password successfully updated." : "رمزعبور کلید خصوصی با موفقیت به روز شد.", + "Encryption App is enabled and ready" : "برنامه رمزگذاری فعال و آماده است", + "The share will expire on %s." : "اشتراک‌گذاری در %s منقضی خواهد شد.", + "Cheers!" : "سلامتی!", + "Enable recovery key" : "فعال‌سازی کلید بازیابی", + "Disable recovery key" : "غیرفعال‌سازی کلید بازیابی", "Recovery key password" : "رمزعبور کلید بازیابی", + "Repeat recovery key password" : "تکرار رمزعبور کلید بازیابی", "Change recovery key password:" : "تغییر رمزعبور کلید بازیابی:", + "Old recovery key password" : "رمزعبور قدیمی کلید بازیابی", + "New recovery key password" : "رمزعبور جدید کلید بازیابی", + "Repeat new recovery key password" : "تکرار رمزعبور جدید کلید بازیابی", "Change Password" : "تغییر رمزعبور", + "ownCloud basic encryption module" : "ماژول پایه رمزگذاری ownCloud", " If you don't remember your old password you can ask your administrator to recover your files." : "اگر رمزعبور قدیمی را فراموش کرده اید میتوانید از مدیر خود برای بازیابی فایل هایتان درخواست نمایید.", "Old log-in password" : "رمزعبور قدیمی", "Current log-in password" : "رمزعبور فعلی", diff --git a/apps/encryption/l10n/fa.json b/apps/encryption/l10n/fa.json index ccb7949e7e5f06cae4143f5cec6299e1a6c53c2f..1a6e7d162751a2b83150a64ecc19dc11e8d70080 100644 --- a/apps/encryption/l10n/fa.json +++ b/apps/encryption/l10n/fa.json @@ -1,14 +1,35 @@ { "translations": { + "Missing recovery key password" : "فاقد رمزعبور کلید بازیابی", + "Please repeat the recovery key password" : "لطفا رمز کلید بازیابی را تکرار کنید", "Recovery key successfully enabled" : "کلید بازیابی با موفقیت فعال شده است.", "Could not enable recovery key. Please check your recovery key password!" : "کلید بازیابی نمی تواند فعال شود. لطفا رمزعبور کلید بازیابی خود را بررسی نمایید!", "Recovery key successfully disabled" : "کلید بازیابی با موفقیت غیر فعال شده است.", "Could not disable recovery key. Please check your recovery key password!" : "کلید بازیابی را نمی تواند غیرفعال نماید. لطفا رمزعبور کلید بازیابی خود را بررسی کنید!", + "Missing parameters" : "پارامترهای فراموش شده", + "Please provide the old recovery password" : "لطفا رمز بازیابی قدیمی را وارد کنید", + "Please provide a new recovery password" : "لطفا رمز بازیابی جدید را وارد کنید", + "Please repeat the new recovery password" : "لطفا رمز بازیابی جدید را مجددا وارد کنید", "Password successfully changed." : "رمزعبور با موفقیت تغییر یافت.", "Could not change the password. Maybe the old password was not correct." : "رمزعبور را نمیتواند تغییر دهد. شاید رمزعبورقدیمی صحیح نمی باشد.", + "Recovery Key disabled" : "کلید بازیابی غیرفعال شد", + "Recovery Key enabled" : "کلید بازیابی فعال شد", + "Could not enable the recovery key, please try again or contact your administrator" : "امکان فعال‌سازی کلید بازیابی وجود ندارد، لطفا مجددا تلاش کرده و یا با مدیر تماس بگیرید", + "Could not update the private key password." : "امکان بروزرسانی رمزعبور کلید خصوصی وجود ندارد.", + "The old password was not correct, please try again." : "رمزعبور قدیمی اشتباه است، لطفا مجددا تلاش کنید.", "Private key password successfully updated." : "رمزعبور کلید خصوصی با موفقیت به روز شد.", + "Encryption App is enabled and ready" : "برنامه رمزگذاری فعال و آماده است", + "The share will expire on %s." : "اشتراک‌گذاری در %s منقضی خواهد شد.", + "Cheers!" : "سلامتی!", + "Enable recovery key" : "فعال‌سازی کلید بازیابی", + "Disable recovery key" : "غیرفعال‌سازی کلید بازیابی", "Recovery key password" : "رمزعبور کلید بازیابی", + "Repeat recovery key password" : "تکرار رمزعبور کلید بازیابی", "Change recovery key password:" : "تغییر رمزعبور کلید بازیابی:", + "Old recovery key password" : "رمزعبور قدیمی کلید بازیابی", + "New recovery key password" : "رمزعبور جدید کلید بازیابی", + "Repeat new recovery key password" : "تکرار رمزعبور جدید کلید بازیابی", "Change Password" : "تغییر رمزعبور", + "ownCloud basic encryption module" : "ماژول پایه رمزگذاری ownCloud", " If you don't remember your old password you can ask your administrator to recover your files." : "اگر رمزعبور قدیمی را فراموش کرده اید میتوانید از مدیر خود برای بازیابی فایل هایتان درخواست نمایید.", "Old log-in password" : "رمزعبور قدیمی", "Current log-in password" : "رمزعبور فعلی", diff --git a/apps/encryption/l10n/fi_FI.js b/apps/encryption/l10n/fi_FI.js index a3ea0bf761e8fe3fb4c63fc1c003cd15344af774..cac43eae16fb7f23dedefd5866c9a9df1fb38c60 100644 --- a/apps/encryption/l10n/fi_FI.js +++ b/apps/encryption/l10n/fi_FI.js @@ -25,8 +25,11 @@ OC.L10N.register( "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Salaussovelluksen salausavain on virheellinen. Ole hyvä ja päivitä salausavain henkilökohtaisissa asetuksissasi jotta voit taas avata salatuskirjoitetut tiedostosi.", "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Salaussovellus on käytössä, mutta salausavaimia ei ole alustettu. Ole hyvä ja kirjaudu sisään uudelleen.", "Encryption App is enabled and ready" : "Salaussovellus on käytössä ja valmis", + "one-time password for server-side-encryption" : "kertakäyttöinen salasana palvelinpään salausta varten", "Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Tämän tiedoston salauksen purkaminen ei onnistu. Kyseessä on luultavasti jaettu tiedosto. Pyydä tiedoston omistajaa jakamaan tiedosto kanssasi uudelleen.", "Can not read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Tiedostoa ei voi lukea, se on luultavasti jaettu tiedosto. Pyydä tiedoston omistajaa jakamaan tiedosto uudelleen kanssasi.", + "The share will expire on %s." : "Jakaminen päättyy %s.", + "Cheers!" : "Kiitos!", "Enable recovery key" : "Ota palautusavain käyttöön", "Disable recovery key" : "Poista palautusavain käytöstä", "The recovery key is an extra encryption key that is used to encrypt files. It allows recovery of a user's files if the user forgets his or her password." : "Palautusavain on ylimääräinen salausavain, jota käytetään tiedostojen salaamiseen. Sen avulla on mahdollista palauttaa käyttäjien tiedostot, vaikka käyttäjä unohtaisi oman salasanansa.", diff --git a/apps/encryption/l10n/fi_FI.json b/apps/encryption/l10n/fi_FI.json index 1c0faa5921aa0b3f730c7c2241fa1e19e7149cc5..7f5bec24f8b78577384a39c2f9393ee9681edaf4 100644 --- a/apps/encryption/l10n/fi_FI.json +++ b/apps/encryption/l10n/fi_FI.json @@ -23,8 +23,11 @@ "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Salaussovelluksen salausavain on virheellinen. Ole hyvä ja päivitä salausavain henkilökohtaisissa asetuksissasi jotta voit taas avata salatuskirjoitetut tiedostosi.", "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Salaussovellus on käytössä, mutta salausavaimia ei ole alustettu. Ole hyvä ja kirjaudu sisään uudelleen.", "Encryption App is enabled and ready" : "Salaussovellus on käytössä ja valmis", + "one-time password for server-side-encryption" : "kertakäyttöinen salasana palvelinpään salausta varten", "Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Tämän tiedoston salauksen purkaminen ei onnistu. Kyseessä on luultavasti jaettu tiedosto. Pyydä tiedoston omistajaa jakamaan tiedosto kanssasi uudelleen.", "Can not read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Tiedostoa ei voi lukea, se on luultavasti jaettu tiedosto. Pyydä tiedoston omistajaa jakamaan tiedosto uudelleen kanssasi.", + "The share will expire on %s." : "Jakaminen päättyy %s.", + "Cheers!" : "Kiitos!", "Enable recovery key" : "Ota palautusavain käyttöön", "Disable recovery key" : "Poista palautusavain käytöstä", "The recovery key is an extra encryption key that is used to encrypt files. It allows recovery of a user's files if the user forgets his or her password." : "Palautusavain on ylimääräinen salausavain, jota käytetään tiedostojen salaamiseen. Sen avulla on mahdollista palauttaa käyttäjien tiedostot, vaikka käyttäjä unohtaisi oman salasanansa.", diff --git a/apps/encryption/l10n/fr.js b/apps/encryption/l10n/fr.js index 6eaf7b125a56f7a646e035757829162c49b5f381..3ee1c05ffa7a77607e75acabb1a4469e7136e334 100644 --- a/apps/encryption/l10n/fr.js +++ b/apps/encryption/l10n/fr.js @@ -25,8 +25,13 @@ OC.L10N.register( "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Votre clef privée de chiffrement n'est pas valide ! Veuillez mettre à jour le mot de passe de la clef privée dans vos paramètres personnels pour récupérer l'accès à vos fichiers chiffrés.", "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "L'application de chiffrement est activée mais vos clefs ne sont pas initialisées. Veuillez vous déconnecter et ensuite vous reconnecter.", "Encryption App is enabled and ready" : "L'application de chiffrement est activée et prête", + "one-time password for server-side-encryption" : "Mot de passe à usage unique pour le chiffrement côté serveur", "Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Impossible de déchiffrer ce fichier : il s'agit probablement d'un fichier partagé. Veuillez demander au propriétaire du fichier de le partager à nouveau avec vous.", "Can not read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Impossible de lire ce fichier, il s'agit probablement d'un fichier partagé. Veuillez demander au propriétaire du fichier de le repartager avec vous. ", + "Hey there,\n\nthe admin enabled server-side-encryption. Your files were encrypted using the password '%s'.\n\nPlease login to the web interface, go to the section 'ownCloud basic encryption module' of your personal settings and update your encryption password by entering this password into the 'old log-in password' field and your current login-password.\n\n" : "Bonjour,\n\nL'administrateur a activé le chiffrement sur le serveur. Vos fichiers ont été chiffrés avec le mot de passe '%s'.\n\nVeuillez vous connecter dans l'interface web et aller dans la section \"Module de chiffrement de base d'ownCloud\" de vos paramètres personnels. De là, mettez à jour votre mot de passe de chiffrement en entrant le mot de passe fourni dans ce message dans le champ \"Ancien mot de passe de connexion\", et votre mot de passe de connexion actuel.\n", + "The share will expire on %s." : "Le partage expirera le %s.", + "Cheers!" : "À bientôt !", + "Hey there,

the admin enabled server-side-encryption. Your files were encrypted using the password %s.

Please login to the web interface, go to the section \"ownCloud basic encryption module\" of your personal settings and update your encryption password by entering this password into the \"old log-in password\" field and your current login-password.

" : "Bonjour,

L'administrateur a activé le chiffrement sur le serveur. Vos fichiers ont été chiffrés avec le mot de passe %s.

\nVeuillez vous connecter dans l'interface web et aller dans la section \"Module de chiffrement de base d'ownCloud\" de vos paramètres personnels. De là, mettez à jour votre mot de passe de chiffrement en entrant le mot de passe fourni dans ce message dans le champ \"Ancien mot de passe de connexion\", et votre mot de passe de connexion actuel.

", "Enable recovery key" : "Activer la clé de récupération", "Disable recovery key" : "Désactiver la clé de récupération", "The recovery key is an extra encryption key that is used to encrypt files. It allows recovery of a user's files if the user forgets his or her password." : "La clé de récupération est une clé supplémentaire utilisée pour chiffrer les fichiers. Elle permet de récupérer les fichiers des utilisateurs s'ils oublient leur mot de passe.", diff --git a/apps/encryption/l10n/fr.json b/apps/encryption/l10n/fr.json index 8e319e87fdeab2ae1ef8254b70bd33a1fd33dfc2..3694682d8bc9d007a49be37b5da94fa52b23952a 100644 --- a/apps/encryption/l10n/fr.json +++ b/apps/encryption/l10n/fr.json @@ -23,8 +23,13 @@ "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Votre clef privée de chiffrement n'est pas valide ! Veuillez mettre à jour le mot de passe de la clef privée dans vos paramètres personnels pour récupérer l'accès à vos fichiers chiffrés.", "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "L'application de chiffrement est activée mais vos clefs ne sont pas initialisées. Veuillez vous déconnecter et ensuite vous reconnecter.", "Encryption App is enabled and ready" : "L'application de chiffrement est activée et prête", + "one-time password for server-side-encryption" : "Mot de passe à usage unique pour le chiffrement côté serveur", "Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Impossible de déchiffrer ce fichier : il s'agit probablement d'un fichier partagé. Veuillez demander au propriétaire du fichier de le partager à nouveau avec vous.", "Can not read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Impossible de lire ce fichier, il s'agit probablement d'un fichier partagé. Veuillez demander au propriétaire du fichier de le repartager avec vous. ", + "Hey there,\n\nthe admin enabled server-side-encryption. Your files were encrypted using the password '%s'.\n\nPlease login to the web interface, go to the section 'ownCloud basic encryption module' of your personal settings and update your encryption password by entering this password into the 'old log-in password' field and your current login-password.\n\n" : "Bonjour,\n\nL'administrateur a activé le chiffrement sur le serveur. Vos fichiers ont été chiffrés avec le mot de passe '%s'.\n\nVeuillez vous connecter dans l'interface web et aller dans la section \"Module de chiffrement de base d'ownCloud\" de vos paramètres personnels. De là, mettez à jour votre mot de passe de chiffrement en entrant le mot de passe fourni dans ce message dans le champ \"Ancien mot de passe de connexion\", et votre mot de passe de connexion actuel.\n", + "The share will expire on %s." : "Le partage expirera le %s.", + "Cheers!" : "À bientôt !", + "Hey there,

the admin enabled server-side-encryption. Your files were encrypted using the password %s.

Please login to the web interface, go to the section \"ownCloud basic encryption module\" of your personal settings and update your encryption password by entering this password into the \"old log-in password\" field and your current login-password.

" : "Bonjour,

L'administrateur a activé le chiffrement sur le serveur. Vos fichiers ont été chiffrés avec le mot de passe %s.

\nVeuillez vous connecter dans l'interface web et aller dans la section \"Module de chiffrement de base d'ownCloud\" de vos paramètres personnels. De là, mettez à jour votre mot de passe de chiffrement en entrant le mot de passe fourni dans ce message dans le champ \"Ancien mot de passe de connexion\", et votre mot de passe de connexion actuel.

", "Enable recovery key" : "Activer la clé de récupération", "Disable recovery key" : "Désactiver la clé de récupération", "The recovery key is an extra encryption key that is used to encrypt files. It allows recovery of a user's files if the user forgets his or her password." : "La clé de récupération est une clé supplémentaire utilisée pour chiffrer les fichiers. Elle permet de récupérer les fichiers des utilisateurs s'ils oublient leur mot de passe.", diff --git a/apps/encryption/l10n/gl.js b/apps/encryption/l10n/gl.js index b1c38910786be7dd3c699924d7e39e78e3189c8a..d6a5d03e9384a04bfc5936d48a01666cd2f36b97 100644 --- a/apps/encryption/l10n/gl.js +++ b/apps/encryption/l10n/gl.js @@ -27,6 +27,8 @@ OC.L10N.register( "Encryption App is enabled and ready" : " A aplicación de cifrado está activada e lista", "Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Non foi posíbel descifrar o ficheiro, probabelmente tratase dun ficheiro compartido. Pídalle ao propietario do ficheiro que volva compartir o ficheiro con vostede.", "Can not read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Non foi posíbel ler o ficheiro, probabelmente tratase dun ficheiro compartido. Pídalle ao propietario do ficheiro que volva compartir o ficheiro con vostede.", + "The share will expire on %s." : "Esta compartición caduca o %s.", + "Cheers!" : "Saúdos!", "Enable recovery key" : "Activar a chave de recuperación", "Disable recovery key" : "Desactivar a chave de recuperación", "The recovery key is an extra encryption key that is used to encrypt files. It allows recovery of a user's files if the user forgets his or her password." : "A chave de recuperación é unha chave de cifrado adicional que se utiliza para cifrar ficheiros. Permite a recuperación de ficheiros dun usuario se o usuario esquece o seu contrasinal.", diff --git a/apps/encryption/l10n/gl.json b/apps/encryption/l10n/gl.json index 4fa779248fe0e7e216eb0af27d334cd68d4658db..78c781acaa98450c67671f74affdd6820df6da84 100644 --- a/apps/encryption/l10n/gl.json +++ b/apps/encryption/l10n/gl.json @@ -25,6 +25,8 @@ "Encryption App is enabled and ready" : " A aplicación de cifrado está activada e lista", "Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Non foi posíbel descifrar o ficheiro, probabelmente tratase dun ficheiro compartido. Pídalle ao propietario do ficheiro que volva compartir o ficheiro con vostede.", "Can not read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Non foi posíbel ler o ficheiro, probabelmente tratase dun ficheiro compartido. Pídalle ao propietario do ficheiro que volva compartir o ficheiro con vostede.", + "The share will expire on %s." : "Esta compartición caduca o %s.", + "Cheers!" : "Saúdos!", "Enable recovery key" : "Activar a chave de recuperación", "Disable recovery key" : "Desactivar a chave de recuperación", "The recovery key is an extra encryption key that is used to encrypt files. It allows recovery of a user's files if the user forgets his or her password." : "A chave de recuperación é unha chave de cifrado adicional que se utiliza para cifrar ficheiros. Permite a recuperación de ficheiros dun usuario se o usuario esquece o seu contrasinal.", diff --git a/apps/encryption/l10n/hr.js b/apps/encryption/l10n/hr.js index f6cf942edfb24be019fe52adcdbe5ef0ea4f49f2..2965961be00dc63a0e5a9f820ea22b1f8d0af9c8 100644 --- a/apps/encryption/l10n/hr.js +++ b/apps/encryption/l10n/hr.js @@ -11,6 +11,8 @@ OC.L10N.register( "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Neispravan privatni ključ za šifriranje. Molimo ažurirajte lozinku svoga privatnog ključa u svojim osobnimpostavkama da biste obnovili pristup svojim šifriranim datotekama.", "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Aplikacija šifriranja je aktivirana ali vaši ključevi nisu inicijalizirani, molimo odjavite se iponovno prijavite.", "Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Ovu datoteku nije moguće dešifrirati, vjerojatno je riječ o zajedničkoj datoteci. Molimopitajte vlasnika datoteke da je ponovo podijeli s vama.", + "The share will expire on %s." : "Podijeljeni resurs će isteći na %s.", + "Cheers!" : "Cheers!", "Recovery key password" : "Lozinka ključa za oporavak", "Change recovery key password:" : "Promijenite lozinku ključa za oporavak", "Change Password" : "Promijenite lozinku", diff --git a/apps/encryption/l10n/hr.json b/apps/encryption/l10n/hr.json index acfd057ec62d7fb41e384734a5e74849c43d438e..f52605084041042f5813856669a8582730636250 100644 --- a/apps/encryption/l10n/hr.json +++ b/apps/encryption/l10n/hr.json @@ -9,6 +9,8 @@ "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Neispravan privatni ključ za šifriranje. Molimo ažurirajte lozinku svoga privatnog ključa u svojim osobnimpostavkama da biste obnovili pristup svojim šifriranim datotekama.", "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Aplikacija šifriranja je aktivirana ali vaši ključevi nisu inicijalizirani, molimo odjavite se iponovno prijavite.", "Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Ovu datoteku nije moguće dešifrirati, vjerojatno je riječ o zajedničkoj datoteci. Molimopitajte vlasnika datoteke da je ponovo podijeli s vama.", + "The share will expire on %s." : "Podijeljeni resurs će isteći na %s.", + "Cheers!" : "Cheers!", "Recovery key password" : "Lozinka ključa za oporavak", "Change recovery key password:" : "Promijenite lozinku ključa za oporavak", "Change Password" : "Promijenite lozinku", diff --git a/apps/encryption/l10n/hu_HU.js b/apps/encryption/l10n/hu_HU.js index 15611a77d05fd050b2229bab9bd3c48f6ee56b1b..d13459e4902293b806e2f11b5a5d140e0ab9b281 100644 --- a/apps/encryption/l10n/hu_HU.js +++ b/apps/encryption/l10n/hu_HU.js @@ -11,6 +11,8 @@ OC.L10N.register( "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Az állományok titkosításához használt titkos kulcsa érvénytelen. Kérjük frissítse a titkos kulcs jelszót a személyes beállításokban, hogy ismét hozzáférjen a titkosított állományaihoz!", "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Az állományok titkosítása engedélyezve van, de az Ön titkos kulcsai nincsenek beállítva. Ezért kérjük, hogy jelentkezzen ki, és lépjen be újra!", "Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Az állományt nem sikerült dekódolni, valószínűleg ez egy megosztott fájl. Kérje meg az állomány tulajdonosát, hogy újra ossza meg Önnel ezt az állományt!", + "The share will expire on %s." : "A megosztás lejár ekkor %s", + "Cheers!" : "Üdv.", "Recovery key password" : "A helyreállítási kulcs jelszava", "Change recovery key password:" : "A helyreállítási kulcs jelszavának módosítása:", "Change Password" : "Jelszó megváltoztatása", diff --git a/apps/encryption/l10n/hu_HU.json b/apps/encryption/l10n/hu_HU.json index 3214000e1a1641f6fcc77267e426886996e90554..2e77ff30182a90605f5c1a3efd29719ff54c6dd7 100644 --- a/apps/encryption/l10n/hu_HU.json +++ b/apps/encryption/l10n/hu_HU.json @@ -9,6 +9,8 @@ "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Az állományok titkosításához használt titkos kulcsa érvénytelen. Kérjük frissítse a titkos kulcs jelszót a személyes beállításokban, hogy ismét hozzáférjen a titkosított állományaihoz!", "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Az állományok titkosítása engedélyezve van, de az Ön titkos kulcsai nincsenek beállítva. Ezért kérjük, hogy jelentkezzen ki, és lépjen be újra!", "Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Az állományt nem sikerült dekódolni, valószínűleg ez egy megosztott fájl. Kérje meg az állomány tulajdonosát, hogy újra ossza meg Önnel ezt az állományt!", + "The share will expire on %s." : "A megosztás lejár ekkor %s", + "Cheers!" : "Üdv.", "Recovery key password" : "A helyreállítási kulcs jelszava", "Change recovery key password:" : "A helyreállítási kulcs jelszavának módosítása:", "Change Password" : "Jelszó megváltoztatása", diff --git a/apps/encryption/l10n/ia.js b/apps/encryption/l10n/ia.js new file mode 100644 index 0000000000000000000000000000000000000000..27932deb15ec2c2b9937db224aab1fa638cf25d7 --- /dev/null +++ b/apps/encryption/l10n/ia.js @@ -0,0 +1,7 @@ +OC.L10N.register( + "encryption", + { + "The share will expire on %s." : "Le compartir expirara le %s.", + "Cheers!" : "Acclamationes!" +}, +"nplurals=2; plural=(n != 1);"); diff --git a/apps/encryption/l10n/ia.json b/apps/encryption/l10n/ia.json new file mode 100644 index 0000000000000000000000000000000000000000..a935ab07c575e46a3c9292cb8813bef31661d93a --- /dev/null +++ b/apps/encryption/l10n/ia.json @@ -0,0 +1,5 @@ +{ "translations": { + "The share will expire on %s." : "Le compartir expirara le %s.", + "Cheers!" : "Acclamationes!" +},"pluralForm" :"nplurals=2; plural=(n != 1);" +} \ No newline at end of file diff --git a/apps/encryption/l10n/id.js b/apps/encryption/l10n/id.js index e1de33fe15630fa1b2f2c02c825f795363530165..1247b35bad6b52741263787073c664e058131b8e 100644 --- a/apps/encryption/l10n/id.js +++ b/apps/encryption/l10n/id.js @@ -25,8 +25,13 @@ OC.L10N.register( "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Kunci privat tidak sah untuk Aplikasi Enskripsi. Silakan perbarui sandi kunci privat anda pada pengaturan pribadi untuk memulihkan akses ke berkas anda yang dienskripsi.", "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Aplikasi Enskripsi telah diaktifkan tetapi kunci tidak diinisialisasi, silakan log-out dan log-in lagi", "Encryption App is enabled and ready" : "Apl Enkripsi telah diaktifkan dan siap", + "one-time password for server-side-encryption" : "Sandi sekali pakai untuk server-side-encryption", "Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Tidak dapat mendekripsi berkas ini, mungkin ini adalah berkas bersama. Silakan meminta pemilik berkas ini untuk membagikan kembali dengan Anda.", "Can not read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Tidak dapat membaca berkas ini, kemungkinan merupakan berkas berbagi. Silakan minta pemilik berkas untuk membagikan ulang kepada Anda.", + "Hey there,\n\nthe admin enabled server-side-encryption. Your files were encrypted using the password '%s'.\n\nPlease login to the web interface, go to the section 'ownCloud basic encryption module' of your personal settings and update your encryption password by entering this password into the 'old log-in password' field and your current login-password.\n\n" : "Hai,\n\nadmin mengaktifkan server-side-encryption. Berkas-berkas Anda dienkripsi menggunakan sandi '%s'.\n\nSilakan masuk di antarmuka web, pergi ke bagian 'modul enkripsi dasar ownCloud' pada pengaturan pribadi Anda dan perbarui sandi enkripsi Anda dengan memasukkan sandi ini kedalam kolom 'sandi masuk yang lama' dan sandi-masuk saat ini.\n\n", + "The share will expire on %s." : "Pembagian akan berakhir pada %s.", + "Cheers!" : "Horee!", + "Hey there,

the admin enabled server-side-encryption. Your files were encrypted using the password %s.

Please login to the web interface, go to the section \"ownCloud basic encryption module\" of your personal settings and update your encryption password by entering this password into the \"old log-in password\" field and your current login-password.

" : "Hai,

admin mengaktifkan server-side-encryption. Berkas-berkas Anda dienkripsi menggunakan sandi %s.

Silakan masuk di antarmuka web, pergi ke bagian 'modul enkripsi dasar ownCloud' pada pengaturan pribadi Anda dan perbarui sandi enkripsi Anda dengan memasukkan sandi ini kedalam kolom 'sandi masuk yang lama' dan sandi masuk yang baru.

", "Enable recovery key" : "Aktifkan kunci pemulihan", "Disable recovery key" : "Nonaktifkan kunci pemulihan", "The recovery key is an extra encryption key that is used to encrypt files. It allows recovery of a user's files if the user forgets his or her password." : "Kunci pemulihan adalah kunci enkripsi tambahan yang digunakan untuk mengenkripsi berkas. Kunci pemulihan memungkinkan untuk memulihkan berkas-berkas pengguna ketika pengguna tersebut melupakan sandi mereka.", diff --git a/apps/encryption/l10n/id.json b/apps/encryption/l10n/id.json index 66d7f6c8991b76b675b64102f598d8f7d6846165..3771f7e935f5dc4591e29cfc2794532391c194e1 100644 --- a/apps/encryption/l10n/id.json +++ b/apps/encryption/l10n/id.json @@ -23,8 +23,13 @@ "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Kunci privat tidak sah untuk Aplikasi Enskripsi. Silakan perbarui sandi kunci privat anda pada pengaturan pribadi untuk memulihkan akses ke berkas anda yang dienskripsi.", "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Aplikasi Enskripsi telah diaktifkan tetapi kunci tidak diinisialisasi, silakan log-out dan log-in lagi", "Encryption App is enabled and ready" : "Apl Enkripsi telah diaktifkan dan siap", + "one-time password for server-side-encryption" : "Sandi sekali pakai untuk server-side-encryption", "Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Tidak dapat mendekripsi berkas ini, mungkin ini adalah berkas bersama. Silakan meminta pemilik berkas ini untuk membagikan kembali dengan Anda.", "Can not read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Tidak dapat membaca berkas ini, kemungkinan merupakan berkas berbagi. Silakan minta pemilik berkas untuk membagikan ulang kepada Anda.", + "Hey there,\n\nthe admin enabled server-side-encryption. Your files were encrypted using the password '%s'.\n\nPlease login to the web interface, go to the section 'ownCloud basic encryption module' of your personal settings and update your encryption password by entering this password into the 'old log-in password' field and your current login-password.\n\n" : "Hai,\n\nadmin mengaktifkan server-side-encryption. Berkas-berkas Anda dienkripsi menggunakan sandi '%s'.\n\nSilakan masuk di antarmuka web, pergi ke bagian 'modul enkripsi dasar ownCloud' pada pengaturan pribadi Anda dan perbarui sandi enkripsi Anda dengan memasukkan sandi ini kedalam kolom 'sandi masuk yang lama' dan sandi-masuk saat ini.\n\n", + "The share will expire on %s." : "Pembagian akan berakhir pada %s.", + "Cheers!" : "Horee!", + "Hey there,

the admin enabled server-side-encryption. Your files were encrypted using the password %s.

Please login to the web interface, go to the section \"ownCloud basic encryption module\" of your personal settings and update your encryption password by entering this password into the \"old log-in password\" field and your current login-password.

" : "Hai,

admin mengaktifkan server-side-encryption. Berkas-berkas Anda dienkripsi menggunakan sandi %s.

Silakan masuk di antarmuka web, pergi ke bagian 'modul enkripsi dasar ownCloud' pada pengaturan pribadi Anda dan perbarui sandi enkripsi Anda dengan memasukkan sandi ini kedalam kolom 'sandi masuk yang lama' dan sandi masuk yang baru.

", "Enable recovery key" : "Aktifkan kunci pemulihan", "Disable recovery key" : "Nonaktifkan kunci pemulihan", "The recovery key is an extra encryption key that is used to encrypt files. It allows recovery of a user's files if the user forgets his or her password." : "Kunci pemulihan adalah kunci enkripsi tambahan yang digunakan untuk mengenkripsi berkas. Kunci pemulihan memungkinkan untuk memulihkan berkas-berkas pengguna ketika pengguna tersebut melupakan sandi mereka.", diff --git a/apps/encryption/l10n/is.js b/apps/encryption/l10n/is.js new file mode 100644 index 0000000000000000000000000000000000000000..afdf2b02f4c8bd2fe446a8f0e32bff57793f2b2c --- /dev/null +++ b/apps/encryption/l10n/is.js @@ -0,0 +1,7 @@ +OC.L10N.register( + "encryption", + { + "The share will expire on %s." : "Gildistími deilingar rennur út %s.", + "Cheers!" : "Skál!" +}, +"nplurals=2; plural=(n % 10 != 1 || n % 100 == 11);"); diff --git a/apps/encryption/l10n/is.json b/apps/encryption/l10n/is.json new file mode 100644 index 0000000000000000000000000000000000000000..6c56e00be826bf58b94c94cacee0e367df9f1b76 --- /dev/null +++ b/apps/encryption/l10n/is.json @@ -0,0 +1,5 @@ +{ "translations": { + "The share will expire on %s." : "Gildistími deilingar rennur út %s.", + "Cheers!" : "Skál!" +},"pluralForm" :"nplurals=2; plural=(n % 10 != 1 || n % 100 == 11);" +} \ No newline at end of file diff --git a/apps/encryption/l10n/it.js b/apps/encryption/l10n/it.js index 9980396f6e93c827580316c54eea5734b5a3ffdb..9f94b409f57752bae940fd69ffd6f3c08d3a6113 100644 --- a/apps/encryption/l10n/it.js +++ b/apps/encryption/l10n/it.js @@ -1,17 +1,17 @@ OC.L10N.register( "encryption", { - "Missing recovery key password" : "Manca la password della chiave di recupero", - "Please repeat the recovery key password" : "Ripeti la password della chiave di recupero", - "Repeated recovery key password does not match the provided recovery key password" : "La password della chiave di recupero ripetuta non corrisponde alla password della chiave di recupero fornita", - "Recovery key successfully enabled" : "Chiave di recupero abilitata correttamente", + "Missing recovery key password" : "Manca la password della chiave di ripristino", + "Please repeat the recovery key password" : "Ripeti la password della chiave di ripristino", + "Repeated recovery key password does not match the provided recovery key password" : "La password della chiave di ripristino ripetuta non corrisponde alla password della chiave di ripristino fornita", + "Recovery key successfully enabled" : "Chiave di ripristino abilitata correttamente", "Could not enable recovery key. Please check your recovery key password!" : "Impossibile abilitare la chiave di ripristino. Verifica la password della chiave di ripristino.", - "Recovery key successfully disabled" : "Chiave di recupero disabilitata correttamente", - "Could not disable recovery key. Please check your recovery key password!" : "Impossibile disabilitare la chiave di recupero. Verifica la password della chiave di recupero.", + "Recovery key successfully disabled" : "Chiave di ripristino disabilitata correttamente", + "Could not disable recovery key. Please check your recovery key password!" : "Impossibile disabilitare la chiave di ripristino. Verifica la password della chiave di ripristino.", "Missing parameters" : "Parametri mancanti", - "Please provide the old recovery password" : "Fornisci la vecchia password di recupero", - "Please provide a new recovery password" : "Fornisci una nuova password di recupero", - "Please repeat the new recovery password" : "Ripeti la nuova password di recupero", + "Please provide the old recovery password" : "Fornisci la vecchia password di ripristino", + "Please provide a new recovery password" : "Fornisci una nuova password di ripristino", + "Please repeat the new recovery password" : "Ripeti la nuova password di ripristino", "Password successfully changed." : "Password modificata correttamente.", "Could not change the password. Maybe the old password was not correct." : "Impossibile cambiare la password. Forse la vecchia password non era corretta.", "Recovery Key disabled" : "Chiave di ripristino disabilitata", @@ -25,19 +25,24 @@ OC.L10N.register( "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Chiave privata non valida per l'applicazione di cifratura. Aggiorna la password della chiave privata nelle impostazioni personali per ripristinare l'accesso ai tuoi file cifrati.", "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "L'applicazione di cifratura è abilitata, ma le chiavi non sono state inizializzate, disconnettiti ed effettua nuovamente l'accesso", "Encryption App is enabled and ready" : "L'applicazione Cifratura è abilitata e pronta", + "one-time password for server-side-encryption" : "password monouso per la cifratura lato server", "Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Impossibile decifrare questo file, probabilmente è un file condiviso. Chiedi al proprietario del file di condividere nuovamente il file con te.", "Can not read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Impossibile leggere questo file, probabilmente è un file condiviso. Chiedi al proprietario del file di condividere nuovamente il file con te.", + "Hey there,\n\nthe admin enabled server-side-encryption. Your files were encrypted using the password '%s'.\n\nPlease login to the web interface, go to the section 'ownCloud basic encryption module' of your personal settings and update your encryption password by entering this password into the 'old log-in password' field and your current login-password.\n\n" : "Ciao,\n\nl'amministratore ha abilitato la cifratura lato server. I tuoi file sono stati\ncifrati utilizzando la password '%s'.\n\nAccedi all'interfaccia web, vai alla sezione 'modulo di cifratura base di ownCloud' dalle nelle tue impostazioni personali e aggiorna la tua password di cifratura digitando la password nel campo 'vecchia password di accesso' e la tua nuova password.\n\n", + "The share will expire on %s." : "La condivisione scadrà il %s.", + "Cheers!" : "Saluti!", + "Hey there,

the admin enabled server-side-encryption. Your files were encrypted using the password %s.

Please login to the web interface, go to the section \"ownCloud basic encryption module\" of your personal settings and update your encryption password by entering this password into the \"old log-in password\" field and your current login-password.

" : "Ciao,

l'amministratore ha abilitato la cifratura lato server. I tuoi file sono stati cifrati utilizzando la password %s.

Accedi all'interfaccia web, vai alla sezione \"modulo di cifratura base di ownCloud\" dalle nelle tue impostazioni personali e aggiorna la tua password di cifratura digitando la password nel campo \"vecchia password di accesso\" e la tua nuova password.", "Enable recovery key" : "Abilita chiave di ripristino", "Disable recovery key" : "Disabilita chiave di ripristino", "The recovery key is an extra encryption key that is used to encrypt files. It allows recovery of a user's files if the user forgets his or her password." : "La chiave di ripristino è una chiave di cifratura aggiuntiva utilizzata per cifrare i file. Consente di ripristinare i file di un utente se l'utente dimentica la propria password.", - "Recovery key password" : "Password della chiave di recupero", + "Recovery key password" : "Password della chiave di ripristino", "Repeat recovery key password" : "Ripeti la password della chiave di ripristino", - "Change recovery key password:" : "Cambia la password della chiave di recupero:", + "Change recovery key password:" : "Cambia la password della chiave di ripristino:", "Old recovery key password" : "Vecchia password della chiave di ripristino", "New recovery key password" : "Nuova password della chiave di ripristino", "Repeat new recovery key password" : "Ripeti la nuova password della chiave di ripristino", "Change Password" : "Modifica password", - "ownCloud basic encryption module" : "Modulo di cifratura di base di ownCloud", + "ownCloud basic encryption module" : "Modulo di cifratura base di ownCloud", "Your private key password no longer matches your log-in password." : "La password della chiave privata non corrisponde più alla password di accesso.", "Set your old private key password to your current log-in password:" : "Imposta la vecchia password della chiave privata sull'attuale password di accesso:", " If you don't remember your old password you can ask your administrator to recover your files." : "Se non ricordi la vecchia password puoi chiedere al tuo amministratore di recuperare i file.", diff --git a/apps/encryption/l10n/it.json b/apps/encryption/l10n/it.json index 69b31b7d3da09a07dc7fe72e3506fe7b979fcbf8..a117af8a317fc2a43af716b0b2072f6499d43fcf 100644 --- a/apps/encryption/l10n/it.json +++ b/apps/encryption/l10n/it.json @@ -1,15 +1,15 @@ { "translations": { - "Missing recovery key password" : "Manca la password della chiave di recupero", - "Please repeat the recovery key password" : "Ripeti la password della chiave di recupero", - "Repeated recovery key password does not match the provided recovery key password" : "La password della chiave di recupero ripetuta non corrisponde alla password della chiave di recupero fornita", - "Recovery key successfully enabled" : "Chiave di recupero abilitata correttamente", + "Missing recovery key password" : "Manca la password della chiave di ripristino", + "Please repeat the recovery key password" : "Ripeti la password della chiave di ripristino", + "Repeated recovery key password does not match the provided recovery key password" : "La password della chiave di ripristino ripetuta non corrisponde alla password della chiave di ripristino fornita", + "Recovery key successfully enabled" : "Chiave di ripristino abilitata correttamente", "Could not enable recovery key. Please check your recovery key password!" : "Impossibile abilitare la chiave di ripristino. Verifica la password della chiave di ripristino.", - "Recovery key successfully disabled" : "Chiave di recupero disabilitata correttamente", - "Could not disable recovery key. Please check your recovery key password!" : "Impossibile disabilitare la chiave di recupero. Verifica la password della chiave di recupero.", + "Recovery key successfully disabled" : "Chiave di ripristino disabilitata correttamente", + "Could not disable recovery key. Please check your recovery key password!" : "Impossibile disabilitare la chiave di ripristino. Verifica la password della chiave di ripristino.", "Missing parameters" : "Parametri mancanti", - "Please provide the old recovery password" : "Fornisci la vecchia password di recupero", - "Please provide a new recovery password" : "Fornisci una nuova password di recupero", - "Please repeat the new recovery password" : "Ripeti la nuova password di recupero", + "Please provide the old recovery password" : "Fornisci la vecchia password di ripristino", + "Please provide a new recovery password" : "Fornisci una nuova password di ripristino", + "Please repeat the new recovery password" : "Ripeti la nuova password di ripristino", "Password successfully changed." : "Password modificata correttamente.", "Could not change the password. Maybe the old password was not correct." : "Impossibile cambiare la password. Forse la vecchia password non era corretta.", "Recovery Key disabled" : "Chiave di ripristino disabilitata", @@ -23,19 +23,24 @@ "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Chiave privata non valida per l'applicazione di cifratura. Aggiorna la password della chiave privata nelle impostazioni personali per ripristinare l'accesso ai tuoi file cifrati.", "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "L'applicazione di cifratura è abilitata, ma le chiavi non sono state inizializzate, disconnettiti ed effettua nuovamente l'accesso", "Encryption App is enabled and ready" : "L'applicazione Cifratura è abilitata e pronta", + "one-time password for server-side-encryption" : "password monouso per la cifratura lato server", "Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Impossibile decifrare questo file, probabilmente è un file condiviso. Chiedi al proprietario del file di condividere nuovamente il file con te.", "Can not read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Impossibile leggere questo file, probabilmente è un file condiviso. Chiedi al proprietario del file di condividere nuovamente il file con te.", + "Hey there,\n\nthe admin enabled server-side-encryption. Your files were encrypted using the password '%s'.\n\nPlease login to the web interface, go to the section 'ownCloud basic encryption module' of your personal settings and update your encryption password by entering this password into the 'old log-in password' field and your current login-password.\n\n" : "Ciao,\n\nl'amministratore ha abilitato la cifratura lato server. I tuoi file sono stati\ncifrati utilizzando la password '%s'.\n\nAccedi all'interfaccia web, vai alla sezione 'modulo di cifratura base di ownCloud' dalle nelle tue impostazioni personali e aggiorna la tua password di cifratura digitando la password nel campo 'vecchia password di accesso' e la tua nuova password.\n\n", + "The share will expire on %s." : "La condivisione scadrà il %s.", + "Cheers!" : "Saluti!", + "Hey there,

the admin enabled server-side-encryption. Your files were encrypted using the password %s.

Please login to the web interface, go to the section \"ownCloud basic encryption module\" of your personal settings and update your encryption password by entering this password into the \"old log-in password\" field and your current login-password.

" : "Ciao,

l'amministratore ha abilitato la cifratura lato server. I tuoi file sono stati cifrati utilizzando la password %s.

Accedi all'interfaccia web, vai alla sezione \"modulo di cifratura base di ownCloud\" dalle nelle tue impostazioni personali e aggiorna la tua password di cifratura digitando la password nel campo \"vecchia password di accesso\" e la tua nuova password.", "Enable recovery key" : "Abilita chiave di ripristino", "Disable recovery key" : "Disabilita chiave di ripristino", "The recovery key is an extra encryption key that is used to encrypt files. It allows recovery of a user's files if the user forgets his or her password." : "La chiave di ripristino è una chiave di cifratura aggiuntiva utilizzata per cifrare i file. Consente di ripristinare i file di un utente se l'utente dimentica la propria password.", - "Recovery key password" : "Password della chiave di recupero", + "Recovery key password" : "Password della chiave di ripristino", "Repeat recovery key password" : "Ripeti la password della chiave di ripristino", - "Change recovery key password:" : "Cambia la password della chiave di recupero:", + "Change recovery key password:" : "Cambia la password della chiave di ripristino:", "Old recovery key password" : "Vecchia password della chiave di ripristino", "New recovery key password" : "Nuova password della chiave di ripristino", "Repeat new recovery key password" : "Ripeti la nuova password della chiave di ripristino", "Change Password" : "Modifica password", - "ownCloud basic encryption module" : "Modulo di cifratura di base di ownCloud", + "ownCloud basic encryption module" : "Modulo di cifratura base di ownCloud", "Your private key password no longer matches your log-in password." : "La password della chiave privata non corrisponde più alla password di accesso.", "Set your old private key password to your current log-in password:" : "Imposta la vecchia password della chiave privata sull'attuale password di accesso:", " If you don't remember your old password you can ask your administrator to recover your files." : "Se non ricordi la vecchia password puoi chiedere al tuo amministratore di recuperare i file.", diff --git a/apps/encryption/l10n/ja.js b/apps/encryption/l10n/ja.js index f76b215fe1fa427bdbec31d33a643922587ded5f..5c4f470def8a9edd4c743b3fdeed1f2ae87b0d82 100644 --- a/apps/encryption/l10n/ja.js +++ b/apps/encryption/l10n/ja.js @@ -27,6 +27,8 @@ OC.L10N.register( "Encryption App is enabled and ready" : "暗号化アプリは有効になっており、準備が整いました", "Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "このファイルを復号化できません、共有ファイルの可能性があります。ファイルの所有者にお願いして、ファイルを共有しなおしてもらってください。", "Can not read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "このファイルを読み取ることができません、共有ファイルの可能性があります。ファイルの所有者にお願いして、ファイルを共有しなおしてもらってください。", + "The share will expire on %s." : "共有は %s で有効期限が切れます。", + "Cheers!" : "それでは!", "Enable recovery key" : "復旧キーを有効にする", "Disable recovery key" : "復旧キーを無効にする", "The recovery key is an extra encryption key that is used to encrypt files. It allows recovery of a user's files if the user forgets his or her password." : "復旧キーは、ファイルの暗号化に使う特別な暗号化キーです。ユーザがパスワードを忘れてしまった場合には、リカバリキーを使ってユーザのファイルを復元することができます。", diff --git a/apps/encryption/l10n/ja.json b/apps/encryption/l10n/ja.json index 58b32ebdd2e2ba80065c68b283be1c74a97f96c2..9e04dd87f83cbc041409035ab78edc867f191749 100644 --- a/apps/encryption/l10n/ja.json +++ b/apps/encryption/l10n/ja.json @@ -25,6 +25,8 @@ "Encryption App is enabled and ready" : "暗号化アプリは有効になっており、準備が整いました", "Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "このファイルを復号化できません、共有ファイルの可能性があります。ファイルの所有者にお願いして、ファイルを共有しなおしてもらってください。", "Can not read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "このファイルを読み取ることができません、共有ファイルの可能性があります。ファイルの所有者にお願いして、ファイルを共有しなおしてもらってください。", + "The share will expire on %s." : "共有は %s で有効期限が切れます。", + "Cheers!" : "それでは!", "Enable recovery key" : "復旧キーを有効にする", "Disable recovery key" : "復旧キーを無効にする", "The recovery key is an extra encryption key that is used to encrypt files. It allows recovery of a user's files if the user forgets his or her password." : "復旧キーは、ファイルの暗号化に使う特別な暗号化キーです。ユーザがパスワードを忘れてしまった場合には、リカバリキーを使ってユーザのファイルを復元することができます。", diff --git a/apps/encryption/l10n/kn.js b/apps/encryption/l10n/kn.js index aca1cf249b103a93ed1631b14c9903540e13ca1b..3f0108db1731ebe4979b33df4bb1a9524ce53f02 100644 --- a/apps/encryption/l10n/kn.js +++ b/apps/encryption/l10n/kn.js @@ -1,6 +1,7 @@ OC.L10N.register( "encryption", { + "Cheers!" : "ಆನಂದಿಸಿ !", "Enabled" : "ಸಕ್ರಿಯಗೊಳಿಸಿದೆ", "Disabled" : "ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಲಾಗಿದೆ" }, diff --git a/apps/encryption/l10n/kn.json b/apps/encryption/l10n/kn.json index 8387e3890da5e0147c59996c0f153e46adb5a458..3b78ba1f13e7149dcc153e4d597db9edf247fb40 100644 --- a/apps/encryption/l10n/kn.json +++ b/apps/encryption/l10n/kn.json @@ -1,4 +1,5 @@ { "translations": { + "Cheers!" : "ಆನಂದಿಸಿ !", "Enabled" : "ಸಕ್ರಿಯಗೊಳಿಸಿದೆ", "Disabled" : "ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಲಾಗಿದೆ" },"pluralForm" :"nplurals=1; plural=0;" diff --git a/apps/encryption/l10n/ko.js b/apps/encryption/l10n/ko.js index 891265e8c91e42b23fc1109c0c057622d18a0ba2..8bf099b6b3693c4ceadb197d978b9e5a4bf4719d 100644 --- a/apps/encryption/l10n/ko.js +++ b/apps/encryption/l10n/ko.js @@ -25,8 +25,13 @@ OC.L10N.register( "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "암호화 앱의 개인 키가 잘못되었습니다. 암호화된 파일에 다시 접근하려면 개인 설정에서 개인 키 암호를 업데이트해야 합니다.", "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "암호화 앱이 활성화되어 있지만 키가 초기화되지 않았습니다. 로그아웃한 후 다시 로그인하십시오", "Encryption App is enabled and ready" : "암호화 앱이 활성화되었고 준비됨", + "one-time password for server-side-encryption" : "서버 측 암호화용 일회용 암호", "Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "이 파일을 복호화할 수 없습니다. 공유된 파일일 수도 있습니다. 파일 소유자에게 공유를 다시 요청하십시오.", "Can not read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "이 파일을 읽을 수 없습니다. 공유된 파일이라면 파일 소유자에게 연락하여 다시 공유해 달라고 요청하십시오.", + "Hey there,\n\nthe admin enabled server-side-encryption. Your files were encrypted using the password '%s'.\n\nPlease login to the web interface, go to the section 'ownCloud basic encryption module' of your personal settings and update your encryption password by entering this password into the 'old log-in password' field and your current login-password.\n\n" : "안녕하세요,\n\n시스템 관리자가 서버 측 암호화를 활성화하였습니다. 저장된 파일이 암호 '%s'으(로) 암호화되었습니다.\n\n웹 인터페이스에 로그인하여 개인 설정의 'ownCloud 기본 암호화 모듈'로 이동한 다음, '이전 로그인 암호' 필드에 위 암호를 입력하고 현재 로그인 암호로 변경하여 암호화 암호를 업데이트하십시오.\n\n", + "The share will expire on %s." : "이 공유는 %s 까지 유지됩니다.", + "Cheers!" : "감사합니다!", + "Hey there,

the admin enabled server-side-encryption. Your files were encrypted using the password %s.

Please login to the web interface, go to the section \"ownCloud basic encryption module\" of your personal settings and update your encryption password by entering this password into the \"old log-in password\" field and your current login-password.

" : "안녕하세요,

시스템 관리자가 서버 측 암호화를 활성화하였습니다. 저장된 파일이 암호 %s으(로) 암호화되었습니다.

웹 인터페이스에 로그인하여 개인 설정의 'ownCloud 기본 암호화 모듈'로 이동한 다음, '이전 로그인 암호' 필드에 위 암호를 입력하고 현재 로그인 암호로 변경하여 암호화 암호를 업데이트하십시오.

", "Enable recovery key" : "복구 키 활성화", "Disable recovery key" : "복구 키 비활성화", "The recovery key is an extra encryption key that is used to encrypt files. It allows recovery of a user's files if the user forgets his or her password." : "복구 키는 파일을 암호화하는 추가 키입니다. 사용자가 암호를 잊었을 때 복구할 수 있도록 해 줍니다.", diff --git a/apps/encryption/l10n/ko.json b/apps/encryption/l10n/ko.json index 0231412e29adb288db69ce4ccc7c78580a432feb..a6843bdda452b45c9ec05b861258d226c9b8cf63 100644 --- a/apps/encryption/l10n/ko.json +++ b/apps/encryption/l10n/ko.json @@ -23,8 +23,13 @@ "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "암호화 앱의 개인 키가 잘못되었습니다. 암호화된 파일에 다시 접근하려면 개인 설정에서 개인 키 암호를 업데이트해야 합니다.", "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "암호화 앱이 활성화되어 있지만 키가 초기화되지 않았습니다. 로그아웃한 후 다시 로그인하십시오", "Encryption App is enabled and ready" : "암호화 앱이 활성화되었고 준비됨", + "one-time password for server-side-encryption" : "서버 측 암호화용 일회용 암호", "Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "이 파일을 복호화할 수 없습니다. 공유된 파일일 수도 있습니다. 파일 소유자에게 공유를 다시 요청하십시오.", "Can not read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "이 파일을 읽을 수 없습니다. 공유된 파일이라면 파일 소유자에게 연락하여 다시 공유해 달라고 요청하십시오.", + "Hey there,\n\nthe admin enabled server-side-encryption. Your files were encrypted using the password '%s'.\n\nPlease login to the web interface, go to the section 'ownCloud basic encryption module' of your personal settings and update your encryption password by entering this password into the 'old log-in password' field and your current login-password.\n\n" : "안녕하세요,\n\n시스템 관리자가 서버 측 암호화를 활성화하였습니다. 저장된 파일이 암호 '%s'으(로) 암호화되었습니다.\n\n웹 인터페이스에 로그인하여 개인 설정의 'ownCloud 기본 암호화 모듈'로 이동한 다음, '이전 로그인 암호' 필드에 위 암호를 입력하고 현재 로그인 암호로 변경하여 암호화 암호를 업데이트하십시오.\n\n", + "The share will expire on %s." : "이 공유는 %s 까지 유지됩니다.", + "Cheers!" : "감사합니다!", + "Hey there,

the admin enabled server-side-encryption. Your files were encrypted using the password %s.

Please login to the web interface, go to the section \"ownCloud basic encryption module\" of your personal settings and update your encryption password by entering this password into the \"old log-in password\" field and your current login-password.

" : "안녕하세요,

시스템 관리자가 서버 측 암호화를 활성화하였습니다. 저장된 파일이 암호 %s으(로) 암호화되었습니다.

웹 인터페이스에 로그인하여 개인 설정의 'ownCloud 기본 암호화 모듈'로 이동한 다음, '이전 로그인 암호' 필드에 위 암호를 입력하고 현재 로그인 암호로 변경하여 암호화 암호를 업데이트하십시오.

", "Enable recovery key" : "복구 키 활성화", "Disable recovery key" : "복구 키 비활성화", "The recovery key is an extra encryption key that is used to encrypt files. It allows recovery of a user's files if the user forgets his or her password." : "복구 키는 파일을 암호화하는 추가 키입니다. 사용자가 암호를 잊었을 때 복구할 수 있도록 해 줍니다.", diff --git a/apps/encryption/l10n/lb.js b/apps/encryption/l10n/lb.js index 0e57555bb19f6afc6a07e33770d3acc459eaa599..478426b6a1c709d92b841bcb01fbefea6238eaa8 100644 --- a/apps/encryption/l10n/lb.js +++ b/apps/encryption/l10n/lb.js @@ -1,6 +1,7 @@ OC.L10N.register( "encryption", { + "Cheers!" : "Prost!", "Change Password" : "Passwuert änneren", "Enabled" : "Aktivéiert", "Disabled" : "Deaktivéiert" diff --git a/apps/encryption/l10n/lb.json b/apps/encryption/l10n/lb.json index 08afbc43c83b7fcd382339da9ae7230c80d25c88..53692b969e1160119e77015cb6c8b904bce469d8 100644 --- a/apps/encryption/l10n/lb.json +++ b/apps/encryption/l10n/lb.json @@ -1,4 +1,5 @@ { "translations": { + "Cheers!" : "Prost!", "Change Password" : "Passwuert änneren", "Enabled" : "Aktivéiert", "Disabled" : "Deaktivéiert" diff --git a/apps/encryption/l10n/lt_LT.js b/apps/encryption/l10n/lt_LT.js index 03a825d1e3aef86d3d47b897cfeb9a990c4562ea..627be83860b7e6a68adf99dfbc91b2187c9fad44 100644 --- a/apps/encryption/l10n/lt_LT.js +++ b/apps/encryption/l10n/lt_LT.js @@ -11,6 +11,8 @@ OC.L10N.register( "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Netinkamas privatus raktas Šifravimo programai. Prašome atnaujinti savo privataus rakto slaptažodį asmeniniuose nustatymuose, kad atkurti prieigą prie šifruotų failų.", "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Šifravimo programa įjungta, bet Jūsų raktai nėra pritaikyti. Prašome atsijungti ir vėl prisijungti", "Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Failo iššifruoti nepavyko, gali būti jog jis yra pasidalintas su jumis. Paprašykite failo savininko, kad jums iš naujo pateiktų šį failą.", + "The share will expire on %s." : "Bendrinimo laikas baigsis %s.", + "Cheers!" : "Sveikinimai!", "Recovery key password" : "Atkūrimo rakto slaptažodis", "Change recovery key password:" : "Pakeisti atkūrimo rakto slaptažodį:", "Change Password" : "Pakeisti slaptažodį", diff --git a/apps/encryption/l10n/lt_LT.json b/apps/encryption/l10n/lt_LT.json index fcfee0f3e5e06befa3c4caf1e0e501e3eb996f66..7a38dca5a97b053a3c51db1cb160efce08b2cb7b 100644 --- a/apps/encryption/l10n/lt_LT.json +++ b/apps/encryption/l10n/lt_LT.json @@ -9,6 +9,8 @@ "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Netinkamas privatus raktas Šifravimo programai. Prašome atnaujinti savo privataus rakto slaptažodį asmeniniuose nustatymuose, kad atkurti prieigą prie šifruotų failų.", "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Šifravimo programa įjungta, bet Jūsų raktai nėra pritaikyti. Prašome atsijungti ir vėl prisijungti", "Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Failo iššifruoti nepavyko, gali būti jog jis yra pasidalintas su jumis. Paprašykite failo savininko, kad jums iš naujo pateiktų šį failą.", + "The share will expire on %s." : "Bendrinimo laikas baigsis %s.", + "Cheers!" : "Sveikinimai!", "Recovery key password" : "Atkūrimo rakto slaptažodis", "Change recovery key password:" : "Pakeisti atkūrimo rakto slaptažodį:", "Change Password" : "Pakeisti slaptažodį", diff --git a/apps/encryption/l10n/mk.js b/apps/encryption/l10n/mk.js index f1abdd2f5180443a79c1a4312739789bdb49d184..c2f503a4495e628b8116d4a112ef38b82ae9a7f3 100644 --- a/apps/encryption/l10n/mk.js +++ b/apps/encryption/l10n/mk.js @@ -3,6 +3,7 @@ OC.L10N.register( { "Password successfully changed." : "Лозинката е успешно променета.", "Could not change the password. Maybe the old password was not correct." : "Лозинката не можеше да се промени. Можеби старата лозинка не беше исправна.", + "Cheers!" : "Поздрав!", "Change Password" : "Смени лозинка", "Old log-in password" : "Старата лозинка за најавување", "Current log-in password" : "Тековната лозинка за најавување", diff --git a/apps/encryption/l10n/mk.json b/apps/encryption/l10n/mk.json index 112d818347c01442a266c7f4918e0fadc545ea1b..fb521ea75fb223acdbe3968cd7508e76e99e5a7a 100644 --- a/apps/encryption/l10n/mk.json +++ b/apps/encryption/l10n/mk.json @@ -1,6 +1,7 @@ { "translations": { "Password successfully changed." : "Лозинката е успешно променета.", "Could not change the password. Maybe the old password was not correct." : "Лозинката не можеше да се промени. Можеби старата лозинка не беше исправна.", + "Cheers!" : "Поздрав!", "Change Password" : "Смени лозинка", "Old log-in password" : "Старата лозинка за најавување", "Current log-in password" : "Тековната лозинка за најавување", diff --git a/apps/encryption/l10n/nb_NO.js b/apps/encryption/l10n/nb_NO.js index 295621f9caae241e2d0f0e44cf6b537d6f0c4ef3..d5ce66186898bc5907640c4f8051fe7ac2b30fb0 100644 --- a/apps/encryption/l10n/nb_NO.js +++ b/apps/encryption/l10n/nb_NO.js @@ -25,8 +25,13 @@ OC.L10N.register( "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Ugyldig privat nøkkel for Krypterings-app. Oppdater passordet for din private nøkkel i dine personlige innstillinger for å gjenopprette tilgang til de krypterte filene dine.", "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "App for kryptering er aktivert men nøklene dine er ikke satt opp. Logg ut og logg inn igjen.", "Encryption App is enabled and ready" : "Krypterings-appen er aktivert og klar", + "one-time password for server-side-encryption" : "engangspassord for serverkryptering", "Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Kan ikke dekryptere denne filen. Dette er sannsynligvis en delt fil. Spør eieren av filen om å dele den med deg på nytt.", "Can not read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Kan ikke lese denne filen, som sannsynligvis er en delt fil. Be eieren av filen om å dele den med deg på nytt.", + "Hey there,\n\nthe admin enabled server-side-encryption. Your files were encrypted using the password '%s'.\n\nPlease login to the web interface, go to the section 'ownCloud basic encryption module' of your personal settings and update your encryption password by entering this password into the 'old log-in password' field and your current login-password.\n\n" : "Hei,\n\nAdministratoren har aktivert serverkryptering. Filene dine er blitt kryptert med passordet '%s'.\n\nVennligst logg inn på web-grensesnittet, gå til seksjonen 'ownCloud grunnleggende krypteringsmodul' i dine personlige innstillinger og oppdater krypteringspassordet ditt ved å legge inn dette passordet i feltet 'gammelt påloggingspassord' sammen med ditt nåværende påloggingspassord.\n\n", + "The share will expire on %s." : "Delingen vil opphøre %s.", + "Cheers!" : "Ha det!", + "Hey there,

the admin enabled server-side-encryption. Your files were encrypted using the password %s.

Please login to the web interface, go to the section \"ownCloud basic encryption module\" of your personal settings and update your encryption password by entering this password into the \"old log-in password\" field and your current login-password.

" : "Hei,

Administratoren har aktivert serverkryptering. Filene dine er blitt kryptert med passordet %s.

Vennligst logg inn på web-grensesnittet, gå til seksjonen \"ownCloud grunnleggende krypteringsmodul\" i dine personlige innstillinger og oppdater krypteringspassordet ditt ved å legge inn dette passordet i feltet \"gammelt påloggingspassord\" sammen med ditt nåværende påloggingspassord.

", "Enable recovery key" : "Aktiver gjenopprettingsnøkkel", "Disable recovery key" : "Deaktiver gjenopprettingsnøkkel", "The recovery key is an extra encryption key that is used to encrypt files. It allows recovery of a user's files if the user forgets his or her password." : "Gjenopprettingsnøkkelen er en ekstra krypteringsnøkkel som brukes til å kryptere filer. Den tillater gjenoppretting av en brukers filer i tilfelle brukeren glemmer passordet sitt.", diff --git a/apps/encryption/l10n/nb_NO.json b/apps/encryption/l10n/nb_NO.json index bb95014e9676d41327741e290a117fe572deebbc..8b3e8c117473795867240708e6a4cd832713b177 100644 --- a/apps/encryption/l10n/nb_NO.json +++ b/apps/encryption/l10n/nb_NO.json @@ -23,8 +23,13 @@ "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Ugyldig privat nøkkel for Krypterings-app. Oppdater passordet for din private nøkkel i dine personlige innstillinger for å gjenopprette tilgang til de krypterte filene dine.", "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "App for kryptering er aktivert men nøklene dine er ikke satt opp. Logg ut og logg inn igjen.", "Encryption App is enabled and ready" : "Krypterings-appen er aktivert og klar", + "one-time password for server-side-encryption" : "engangspassord for serverkryptering", "Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Kan ikke dekryptere denne filen. Dette er sannsynligvis en delt fil. Spør eieren av filen om å dele den med deg på nytt.", "Can not read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Kan ikke lese denne filen, som sannsynligvis er en delt fil. Be eieren av filen om å dele den med deg på nytt.", + "Hey there,\n\nthe admin enabled server-side-encryption. Your files were encrypted using the password '%s'.\n\nPlease login to the web interface, go to the section 'ownCloud basic encryption module' of your personal settings and update your encryption password by entering this password into the 'old log-in password' field and your current login-password.\n\n" : "Hei,\n\nAdministratoren har aktivert serverkryptering. Filene dine er blitt kryptert med passordet '%s'.\n\nVennligst logg inn på web-grensesnittet, gå til seksjonen 'ownCloud grunnleggende krypteringsmodul' i dine personlige innstillinger og oppdater krypteringspassordet ditt ved å legge inn dette passordet i feltet 'gammelt påloggingspassord' sammen med ditt nåværende påloggingspassord.\n\n", + "The share will expire on %s." : "Delingen vil opphøre %s.", + "Cheers!" : "Ha det!", + "Hey there,

the admin enabled server-side-encryption. Your files were encrypted using the password %s.

Please login to the web interface, go to the section \"ownCloud basic encryption module\" of your personal settings and update your encryption password by entering this password into the \"old log-in password\" field and your current login-password.

" : "Hei,

Administratoren har aktivert serverkryptering. Filene dine er blitt kryptert med passordet %s.

Vennligst logg inn på web-grensesnittet, gå til seksjonen \"ownCloud grunnleggende krypteringsmodul\" i dine personlige innstillinger og oppdater krypteringspassordet ditt ved å legge inn dette passordet i feltet \"gammelt påloggingspassord\" sammen med ditt nåværende påloggingspassord.

", "Enable recovery key" : "Aktiver gjenopprettingsnøkkel", "Disable recovery key" : "Deaktiver gjenopprettingsnøkkel", "The recovery key is an extra encryption key that is used to encrypt files. It allows recovery of a user's files if the user forgets his or her password." : "Gjenopprettingsnøkkelen er en ekstra krypteringsnøkkel som brukes til å kryptere filer. Den tillater gjenoppretting av en brukers filer i tilfelle brukeren glemmer passordet sitt.", diff --git a/apps/encryption/l10n/nl.js b/apps/encryption/l10n/nl.js index 4a3115d46a71bc0d112d3de0cdba3286d6215871..0655b6d29bde736c7e1e8d7023441f2879fdb170 100644 --- a/apps/encryption/l10n/nl.js +++ b/apps/encryption/l10n/nl.js @@ -25,8 +25,13 @@ OC.L10N.register( "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Ongeldige privésleutel voor crypto app. Werk het privésleutel wachtwoord bij in uw persoonlijke instellingen om opnieuw toegang te krijgen tot uw versleutelde bestanden.", "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Crypto app is geactiveerd, maar uw sleutels werden niet geïnitialiseerd. Log uit en log daarna opnieuw in.", "Encryption App is enabled and ready" : "Encryptie app is geactiveerd en gereed", + "one-time password for server-side-encryption" : "eenmalig wachtwoord voor server-side versleuteling", "Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Kan dit bestand niet ontcijferen, waarschijnlijk is het een gedeeld bestand, Vraag de eigenaar om het bestand opnieuw met u te delen.", "Can not read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Kan dit bestand niet lezen, waarschijnlijk is het een gedeeld bestand. Vraag de eigenaar om het bestand opnieuw met u te delen.", + "Hey there,\n\nthe admin enabled server-side-encryption. Your files were encrypted using the password '%s'.\n\nPlease login to the web interface, go to the section 'ownCloud basic encryption module' of your personal settings and update your encryption password by entering this password into the 'old log-in password' field and your current login-password.\n\n" : "Hallo daar,\n\nde beheerder heeft server-side versleuteling ingeschakeld. Uw bestanden werden versleuteld met het wachtwoord '%s'.\n\nLogin op de webinterface, ga naar 'ownCloud basis cryptomodule' in uw persoonlijke instellingen en pas uw cryptowachtwoord aan door dit wachtwoord in het 'oude inlog wachtwoord' veld in te vullen alsmede in uw huidige inlogwachtwoord.\n", + "The share will expire on %s." : "De share vervalt op %s.", + "Cheers!" : "Proficiat!", + "Hey there,

the admin enabled server-side-encryption. Your files were encrypted using the password %s.

Please login to the web interface, go to the section \"ownCloud basic encryption module\" of your personal settings and update your encryption password by entering this password into the \"old log-in password\" field and your current login-password.

" : "Hallo daar,

de beheerder heeft server-side versleuteling ingeschakeld. Uw bestanden werden versleuteld met het wachtwoord %s.

Login op de webinterface, ga naar 'ownCloud basis cryptomodule' in uw persoonlijke instellingen en pas uw cryptowachtwoord aan door dit wachtwoord in het \"oude inlog wachtwoord\" veld in te vullen alsmede in uw huidige inlogwachtwoord.

", "Enable recovery key" : "Activeer herstelsleutel", "Disable recovery key" : "Deactiveer herstelsleutel", "The recovery key is an extra encryption key that is used to encrypt files. It allows recovery of a user's files if the user forgets his or her password." : "De herstelsleutel is een extra cryptografische sleutel die wordt gebruikt om bestanden te versleutelen. Die maakt het mogelijk bestanden te herstellen als de gebruiker zijn of haar wachtwoord vergeet.", diff --git a/apps/encryption/l10n/nl.json b/apps/encryption/l10n/nl.json index 1689a418f981eb3b91ebfda70df64cf71accee21..00f6e67822e588abba024952dc51fa12cd8128cb 100644 --- a/apps/encryption/l10n/nl.json +++ b/apps/encryption/l10n/nl.json @@ -23,8 +23,13 @@ "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Ongeldige privésleutel voor crypto app. Werk het privésleutel wachtwoord bij in uw persoonlijke instellingen om opnieuw toegang te krijgen tot uw versleutelde bestanden.", "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Crypto app is geactiveerd, maar uw sleutels werden niet geïnitialiseerd. Log uit en log daarna opnieuw in.", "Encryption App is enabled and ready" : "Encryptie app is geactiveerd en gereed", + "one-time password for server-side-encryption" : "eenmalig wachtwoord voor server-side versleuteling", "Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Kan dit bestand niet ontcijferen, waarschijnlijk is het een gedeeld bestand, Vraag de eigenaar om het bestand opnieuw met u te delen.", "Can not read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Kan dit bestand niet lezen, waarschijnlijk is het een gedeeld bestand. Vraag de eigenaar om het bestand opnieuw met u te delen.", + "Hey there,\n\nthe admin enabled server-side-encryption. Your files were encrypted using the password '%s'.\n\nPlease login to the web interface, go to the section 'ownCloud basic encryption module' of your personal settings and update your encryption password by entering this password into the 'old log-in password' field and your current login-password.\n\n" : "Hallo daar,\n\nde beheerder heeft server-side versleuteling ingeschakeld. Uw bestanden werden versleuteld met het wachtwoord '%s'.\n\nLogin op de webinterface, ga naar 'ownCloud basis cryptomodule' in uw persoonlijke instellingen en pas uw cryptowachtwoord aan door dit wachtwoord in het 'oude inlog wachtwoord' veld in te vullen alsmede in uw huidige inlogwachtwoord.\n", + "The share will expire on %s." : "De share vervalt op %s.", + "Cheers!" : "Proficiat!", + "Hey there,

the admin enabled server-side-encryption. Your files were encrypted using the password %s.

Please login to the web interface, go to the section \"ownCloud basic encryption module\" of your personal settings and update your encryption password by entering this password into the \"old log-in password\" field and your current login-password.

" : "Hallo daar,

de beheerder heeft server-side versleuteling ingeschakeld. Uw bestanden werden versleuteld met het wachtwoord %s.

Login op de webinterface, ga naar 'ownCloud basis cryptomodule' in uw persoonlijke instellingen en pas uw cryptowachtwoord aan door dit wachtwoord in het \"oude inlog wachtwoord\" veld in te vullen alsmede in uw huidige inlogwachtwoord.

", "Enable recovery key" : "Activeer herstelsleutel", "Disable recovery key" : "Deactiveer herstelsleutel", "The recovery key is an extra encryption key that is used to encrypt files. It allows recovery of a user's files if the user forgets his or her password." : "De herstelsleutel is een extra cryptografische sleutel die wordt gebruikt om bestanden te versleutelen. Die maakt het mogelijk bestanden te herstellen als de gebruiker zijn of haar wachtwoord vergeet.", diff --git a/apps/encryption/l10n/oc.js b/apps/encryption/l10n/oc.js index 34d8782b2f8c3e824653dc1f17a2415a7265e1c5..8715fd378b8a63433ed72ff193fe5cca14d8ec3e 100644 --- a/apps/encryption/l10n/oc.js +++ b/apps/encryption/l10n/oc.js @@ -27,6 +27,8 @@ OC.L10N.register( "Encryption App is enabled and ready" : "L'aplicacion de chiframent es activada e prèsta", "Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Impossible de deschifrar aqueste fichièr : s'agís probablament d'un fichièr partejat. Demandatz al proprietari del fichièr de lo partejar tornamai amb vos.", "Can not read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Impossible de legir aqueste fichièr, s'agís probablament d'un fichièr partejat. Demandatz al proprietari del fichièr de lo repartejar amb vos. ", + "The share will expire on %s." : "Lo partiment expirarà lo %s.", + "Cheers!" : "A lèu !", "Enable recovery key" : "Activar la clau de recuperacion", "Disable recovery key" : "Desactivar la clau de recuperacion", "The recovery key is an extra encryption key that is used to encrypt files. It allows recovery of a user's files if the user forgets his or her password." : "La clau de recuperacion es una clau suplementària utilizada per chifrar los fichièrs. Permet de recuperar los fichièrs dels utilizaires se doblidan lor senhal.", diff --git a/apps/encryption/l10n/oc.json b/apps/encryption/l10n/oc.json index e3afad2db1b1fd3bd6c90d78fc7a1299db58f2cb..ec4406dd77e644e4c5e24a7fe4eab2874bd24cc3 100644 --- a/apps/encryption/l10n/oc.json +++ b/apps/encryption/l10n/oc.json @@ -25,6 +25,8 @@ "Encryption App is enabled and ready" : "L'aplicacion de chiframent es activada e prèsta", "Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Impossible de deschifrar aqueste fichièr : s'agís probablament d'un fichièr partejat. Demandatz al proprietari del fichièr de lo partejar tornamai amb vos.", "Can not read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Impossible de legir aqueste fichièr, s'agís probablament d'un fichièr partejat. Demandatz al proprietari del fichièr de lo repartejar amb vos. ", + "The share will expire on %s." : "Lo partiment expirarà lo %s.", + "Cheers!" : "A lèu !", "Enable recovery key" : "Activar la clau de recuperacion", "Disable recovery key" : "Desactivar la clau de recuperacion", "The recovery key is an extra encryption key that is used to encrypt files. It allows recovery of a user's files if the user forgets his or her password." : "La clau de recuperacion es una clau suplementària utilizada per chifrar los fichièrs. Permet de recuperar los fichièrs dels utilizaires se doblidan lor senhal.", diff --git a/apps/encryption/l10n/pl.js b/apps/encryption/l10n/pl.js index 016671e88b73013c99af92054565a1faf74e75c3..fda41f571474f2337e9cf2ac7b216322523b5380 100644 --- a/apps/encryption/l10n/pl.js +++ b/apps/encryption/l10n/pl.js @@ -20,6 +20,8 @@ OC.L10N.register( "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Klucz prywatny nie jest poprawny! Może Twoje hasło zostało zmienione z zewnątrz. Można zaktualizować hasło klucza prywatnego w ustawieniach osobistych w celu odzyskania dostępu do plików", "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Aplikacja szyfrująca jest aktywna, ale twoje klucze nie zostały zainicjowane, prosze wyloguj się i zaloguj ponownie.", "Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Nie można odszyfrować tego pliku, prawdopodobnie jest to plik udostępniony. Poproś właściciela pliku o ponowne udostępnianie pliku Tobie.", + "The share will expire on %s." : "Ten zasób wygaśnie %s", + "Cheers!" : "Pozdrawiam!", "Recovery key password" : "Hasło klucza odzyskiwania", "Change recovery key password:" : "Zmień hasło klucza odzyskiwania", "Change Password" : "Zmień hasło", diff --git a/apps/encryption/l10n/pl.json b/apps/encryption/l10n/pl.json index 3b6e4a18e49272776fac3925c500540ba2907585..7de8c5ad595e7d3ac10d3a3aece545bf5d0270cc 100644 --- a/apps/encryption/l10n/pl.json +++ b/apps/encryption/l10n/pl.json @@ -18,6 +18,8 @@ "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Klucz prywatny nie jest poprawny! Może Twoje hasło zostało zmienione z zewnątrz. Można zaktualizować hasło klucza prywatnego w ustawieniach osobistych w celu odzyskania dostępu do plików", "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Aplikacja szyfrująca jest aktywna, ale twoje klucze nie zostały zainicjowane, prosze wyloguj się i zaloguj ponownie.", "Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Nie można odszyfrować tego pliku, prawdopodobnie jest to plik udostępniony. Poproś właściciela pliku o ponowne udostępnianie pliku Tobie.", + "The share will expire on %s." : "Ten zasób wygaśnie %s", + "Cheers!" : "Pozdrawiam!", "Recovery key password" : "Hasło klucza odzyskiwania", "Change recovery key password:" : "Zmień hasło klucza odzyskiwania", "Change Password" : "Zmień hasło", diff --git a/apps/encryption/l10n/pt_BR.js b/apps/encryption/l10n/pt_BR.js index faac7ca03a63e59ca340d0f850c7e6d27fbdd8d0..09ed1910c1ad145efee11e18347aee8ce5603db1 100644 --- a/apps/encryption/l10n/pt_BR.js +++ b/apps/encryption/l10n/pt_BR.js @@ -25,8 +25,13 @@ OC.L10N.register( "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Chave do App de Criptografia é inválida. Por favor, atualize sua senha de chave privada em suas configurações pessoais para recuperar o acesso a seus arquivos criptografados.", "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "App de criptografia está ativado, mas as chaves não estão inicializadas, por favor log-out e faça login novamente", "Encryption App is enabled and ready" : "Aplicativo de criptografia está ativado e pronto", + "one-time password for server-side-encryption" : "senha de uso único para criptografia-lado-servidor", "Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Este arquivo não pode ser decriptado, provavelmente este é um arquivo compartilhado. Por favor peça ao dono do arquivo para compartilha-lo com você.", "Can not read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Não é possível ler este arquivo, provavelmente este é um arquivo compartilhado. Por favor, pergunte o dono do arquivo para recompartilhar o arquivo com você.", + "Hey there,\n\nthe admin enabled server-side-encryption. Your files were encrypted using the password '%s'.\n\nPlease login to the web interface, go to the section 'ownCloud basic encryption module' of your personal settings and update your encryption password by entering this password into the 'old log-in password' field and your current login-password.\n\n" : "Olá,\n\nO administrador habilitou criptografia-lado-servidor. Os seus arquivos foram criptografados usando a senha '%s'.\n\nPor favor faça o login para a interface da Web, vá para a seção 'ownCloud módulo de criptografia básico' das suas definições pessoais e atualize sua senha de criptografia, inserindo esta senha no campo 'senha antiga de log-in' e sua atual senha-de-login.\n\n", + "The share will expire on %s." : "O compartilhamento irá expirar em %s.", + "Cheers!" : "Saúde!", + "Hey there,

the admin enabled server-side-encryption. Your files were encrypted using the password %s.

Please login to the web interface, go to the section \"ownCloud basic encryption module\" of your personal settings and update your encryption password by entering this password into the \"old log-in password\" field and your current login-password.

" : "Olá,

o administrador habilitou criptografia-lado-servidor. Os seus arquivos foram criptografados usando a senha %s.

Por favor faça o login para a interface da Web, vá para a seção 'ownCloud módulo de criptografia básico' das suas definições pessoais e atualize sua senha de criptografia, inserindo esta senha no campo 'senha antiga de log-in' e sua atual senha-de-login..

", "Enable recovery key" : "Habilitar recuperação de chave", "Disable recovery key" : "Dasabilitar chave de recuperação", "The recovery key is an extra encryption key that is used to encrypt files. It allows recovery of a user's files if the user forgets his or her password." : "A chave de recuperação é uma chave de encriptação extra que é utilizada para encriptar arquivos. Ela permite a recuperação de arquivos de um usuário esquecer sua senha.", diff --git a/apps/encryption/l10n/pt_BR.json b/apps/encryption/l10n/pt_BR.json index fd8fd33d8c9115c44f63d40641a44e756da79d27..1682ec44b28f20a35b914591592bf362902e1bbd 100644 --- a/apps/encryption/l10n/pt_BR.json +++ b/apps/encryption/l10n/pt_BR.json @@ -23,8 +23,13 @@ "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Chave do App de Criptografia é inválida. Por favor, atualize sua senha de chave privada em suas configurações pessoais para recuperar o acesso a seus arquivos criptografados.", "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "App de criptografia está ativado, mas as chaves não estão inicializadas, por favor log-out e faça login novamente", "Encryption App is enabled and ready" : "Aplicativo de criptografia está ativado e pronto", + "one-time password for server-side-encryption" : "senha de uso único para criptografia-lado-servidor", "Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Este arquivo não pode ser decriptado, provavelmente este é um arquivo compartilhado. Por favor peça ao dono do arquivo para compartilha-lo com você.", "Can not read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Não é possível ler este arquivo, provavelmente este é um arquivo compartilhado. Por favor, pergunte o dono do arquivo para recompartilhar o arquivo com você.", + "Hey there,\n\nthe admin enabled server-side-encryption. Your files were encrypted using the password '%s'.\n\nPlease login to the web interface, go to the section 'ownCloud basic encryption module' of your personal settings and update your encryption password by entering this password into the 'old log-in password' field and your current login-password.\n\n" : "Olá,\n\nO administrador habilitou criptografia-lado-servidor. Os seus arquivos foram criptografados usando a senha '%s'.\n\nPor favor faça o login para a interface da Web, vá para a seção 'ownCloud módulo de criptografia básico' das suas definições pessoais e atualize sua senha de criptografia, inserindo esta senha no campo 'senha antiga de log-in' e sua atual senha-de-login.\n\n", + "The share will expire on %s." : "O compartilhamento irá expirar em %s.", + "Cheers!" : "Saúde!", + "Hey there,

the admin enabled server-side-encryption. Your files were encrypted using the password %s.

Please login to the web interface, go to the section \"ownCloud basic encryption module\" of your personal settings and update your encryption password by entering this password into the \"old log-in password\" field and your current login-password.

" : "Olá,

o administrador habilitou criptografia-lado-servidor. Os seus arquivos foram criptografados usando a senha %s.

Por favor faça o login para a interface da Web, vá para a seção 'ownCloud módulo de criptografia básico' das suas definições pessoais e atualize sua senha de criptografia, inserindo esta senha no campo 'senha antiga de log-in' e sua atual senha-de-login..

", "Enable recovery key" : "Habilitar recuperação de chave", "Disable recovery key" : "Dasabilitar chave de recuperação", "The recovery key is an extra encryption key that is used to encrypt files. It allows recovery of a user's files if the user forgets his or her password." : "A chave de recuperação é uma chave de encriptação extra que é utilizada para encriptar arquivos. Ela permite a recuperação de arquivos de um usuário esquecer sua senha.", diff --git a/apps/encryption/l10n/pt_PT.js b/apps/encryption/l10n/pt_PT.js index 48730b91b1235e3e9feca185fac32c8e145305b2..fc93818e9ec69ac65701174e86f6a7fb5855e4e5 100644 --- a/apps/encryption/l10n/pt_PT.js +++ b/apps/encryption/l10n/pt_PT.js @@ -27,6 +27,8 @@ OC.L10N.register( "Encryption App is enabled and ready" : "A aplicação de encriptação está ativa e pronta", "Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Não é possível desencriptar este ficheiro, provavelmente é um ficheiro partilhado. Por favor, peça ao proprietário do ficheiro para voltar a partilhar o ficheiro consigo.", "Can not read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Não é possível ler este ficheiro, provavelmente isto é um ficheiro compartilhado. Por favor, peça ao dono do ficheiro para voltar a partilhar o ficheiro consigo.", + "The share will expire on %s." : "Esta partilha irá expirar em %s.", + "Cheers!" : "Parabéns!", "Enable recovery key" : "Ativar a chave de recuperação", "Disable recovery key" : "Desativar a chave de recuperação", "The recovery key is an extra encryption key that is used to encrypt files. It allows recovery of a user's files if the user forgets his or her password." : "A chave de recuperação é uma chave de encriptação extra que é utilizada para encriptar os ficheiros. Esta permite a recuperação dos ficheiros do utilizador se este esquecer a sua senha.", diff --git a/apps/encryption/l10n/pt_PT.json b/apps/encryption/l10n/pt_PT.json index 3a63d95bea288d310060820f01c5a9558672ddc8..de139edfffa69a24877e52a6a82e10f0a7788b7c 100644 --- a/apps/encryption/l10n/pt_PT.json +++ b/apps/encryption/l10n/pt_PT.json @@ -25,6 +25,8 @@ "Encryption App is enabled and ready" : "A aplicação de encriptação está ativa e pronta", "Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Não é possível desencriptar este ficheiro, provavelmente é um ficheiro partilhado. Por favor, peça ao proprietário do ficheiro para voltar a partilhar o ficheiro consigo.", "Can not read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Não é possível ler este ficheiro, provavelmente isto é um ficheiro compartilhado. Por favor, peça ao dono do ficheiro para voltar a partilhar o ficheiro consigo.", + "The share will expire on %s." : "Esta partilha irá expirar em %s.", + "Cheers!" : "Parabéns!", "Enable recovery key" : "Ativar a chave de recuperação", "Disable recovery key" : "Desativar a chave de recuperação", "The recovery key is an extra encryption key that is used to encrypt files. It allows recovery of a user's files if the user forgets his or her password." : "A chave de recuperação é uma chave de encriptação extra que é utilizada para encriptar os ficheiros. Esta permite a recuperação dos ficheiros do utilizador se este esquecer a sua senha.", diff --git a/apps/encryption/l10n/ro.js b/apps/encryption/l10n/ro.js index 3f699577243c61bbc4c252245c1631bbc890ecd1..88af06692ac12cbd224d85e8e1ac1dc6789c1ba7 100644 --- a/apps/encryption/l10n/ro.js +++ b/apps/encryption/l10n/ro.js @@ -17,6 +17,7 @@ OC.L10N.register( "Private key password successfully updated." : "Cheia privata a fost actualizata cu succes", "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Cheie privată nevalidă pentru aplicația Încriptare. Te rog, actualizează-ți parola cheii private folosind setările personale pentru a reaccesa fișierele tale încriptate.", "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Aplicatia de criptare este activata dar tastatura nu este initializata , va rugam deconectati-va si reconectati-va", + "The share will expire on %s." : "Partajarea va expira în data de %s.", "Change Password" : "Schimbă parola", "ownCloud basic encryption module" : "modul de ecnriptie bazic ownCloud", "Enabled" : "Activat", diff --git a/apps/encryption/l10n/ro.json b/apps/encryption/l10n/ro.json index e546b400935f15763aed7e9d5071a8a020f54023..9251037e35f0180d453e454e2ad7060e5587f1ed 100644 --- a/apps/encryption/l10n/ro.json +++ b/apps/encryption/l10n/ro.json @@ -15,6 +15,7 @@ "Private key password successfully updated." : "Cheia privata a fost actualizata cu succes", "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Cheie privată nevalidă pentru aplicația Încriptare. Te rog, actualizează-ți parola cheii private folosind setările personale pentru a reaccesa fișierele tale încriptate.", "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Aplicatia de criptare este activata dar tastatura nu este initializata , va rugam deconectati-va si reconectati-va", + "The share will expire on %s." : "Partajarea va expira în data de %s.", "Change Password" : "Schimbă parola", "ownCloud basic encryption module" : "modul de ecnriptie bazic ownCloud", "Enabled" : "Activat", diff --git a/apps/encryption/l10n/ru.js b/apps/encryption/l10n/ru.js index 7907c8aaeb9fc48acc3f88d482bc5e6b3d4e7938..b326b71456d052ca18d60ecdce89350938fb81b3 100644 --- a/apps/encryption/l10n/ru.js +++ b/apps/encryption/l10n/ru.js @@ -25,8 +25,13 @@ OC.L10N.register( "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Закрытый ключ приложения шифрования недействителен. Обновите закрытый ключ в личных настройках, чтобы восстановить доступ к зашифрованным файлам.", "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Приложение шифрования активно, но ваши ключи не инициализированы, выйдите из системы и войдите заново", "Encryption App is enabled and ready" : "Приложение шифрования включено и готово", + "one-time password for server-side-encryption" : "одноразовый пароль для шифрования на стороне сервера", "Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Не удалось расшифровать файл, возможно это опубликованный файл. Попросите владельца файла повторно открыть к нему доступ.", "Can not read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Не удается прочитать файл, возможно это публичный файл. Пожалуйста попросите владельца открыть доступ снова.", + "Hey there,\n\nthe admin enabled server-side-encryption. Your files were encrypted using the password '%s'.\n\nPlease login to the web interface, go to the section 'ownCloud basic encryption module' of your personal settings and update your encryption password by entering this password into the 'old log-in password' field and your current login-password.\n\n" : "Привет,\n\nадминистратор включил шифрование на стороне сервера. Ваши файлы были зашифрованы с помощью пароля '%s'.\n\nПожалуйста войдите в веб-приложение, в разделе 'ownCloud простой модуль шифрования' в личных настройках вам нужно обновить пароль шифрования.\n\n", + "The share will expire on %s." : "Доступ будет закрыт %s", + "Cheers!" : "Всего наилучшего!", + "Hey there,

the admin enabled server-side-encryption. Your files were encrypted using the password %s.

Please login to the web interface, go to the section \"ownCloud basic encryption module\" of your personal settings and update your encryption password by entering this password into the \"old log-in password\" field and your current login-password.

" : "Привет,

администратор включил шифрование на стороне сервера. Ваши файлы были зашифрованы с помощью пароля %s.

Пожалуйста войдите в веб-приложение, в разделе \"ownCloud простой модуль шифрования\" в личных настройках вам нужно обновить пароль шифрования.

", "Enable recovery key" : "Включить ключ восстановления", "Disable recovery key" : "Отключить ключ восстановления", "The recovery key is an extra encryption key that is used to encrypt files. It allows recovery of a user's files if the user forgets his or her password." : "Ключ восстановления это дополнительный ключ, который используется для шифрования файлов. Он позволяет восстановить пользовательские файлы в случае утери пароля.", diff --git a/apps/encryption/l10n/ru.json b/apps/encryption/l10n/ru.json index 87378952dba4f6ae978c7ba5b2f8aca61bdb19e2..f4a14cb841f38d5cb60c80cb6e633a083675b879 100644 --- a/apps/encryption/l10n/ru.json +++ b/apps/encryption/l10n/ru.json @@ -23,8 +23,13 @@ "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Закрытый ключ приложения шифрования недействителен. Обновите закрытый ключ в личных настройках, чтобы восстановить доступ к зашифрованным файлам.", "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Приложение шифрования активно, но ваши ключи не инициализированы, выйдите из системы и войдите заново", "Encryption App is enabled and ready" : "Приложение шифрования включено и готово", + "one-time password for server-side-encryption" : "одноразовый пароль для шифрования на стороне сервера", "Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Не удалось расшифровать файл, возможно это опубликованный файл. Попросите владельца файла повторно открыть к нему доступ.", "Can not read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Не удается прочитать файл, возможно это публичный файл. Пожалуйста попросите владельца открыть доступ снова.", + "Hey there,\n\nthe admin enabled server-side-encryption. Your files were encrypted using the password '%s'.\n\nPlease login to the web interface, go to the section 'ownCloud basic encryption module' of your personal settings and update your encryption password by entering this password into the 'old log-in password' field and your current login-password.\n\n" : "Привет,\n\nадминистратор включил шифрование на стороне сервера. Ваши файлы были зашифрованы с помощью пароля '%s'.\n\nПожалуйста войдите в веб-приложение, в разделе 'ownCloud простой модуль шифрования' в личных настройках вам нужно обновить пароль шифрования.\n\n", + "The share will expire on %s." : "Доступ будет закрыт %s", + "Cheers!" : "Всего наилучшего!", + "Hey there,

the admin enabled server-side-encryption. Your files were encrypted using the password %s.

Please login to the web interface, go to the section \"ownCloud basic encryption module\" of your personal settings and update your encryption password by entering this password into the \"old log-in password\" field and your current login-password.

" : "Привет,

администратор включил шифрование на стороне сервера. Ваши файлы были зашифрованы с помощью пароля %s.

Пожалуйста войдите в веб-приложение, в разделе \"ownCloud простой модуль шифрования\" в личных настройках вам нужно обновить пароль шифрования.

", "Enable recovery key" : "Включить ключ восстановления", "Disable recovery key" : "Отключить ключ восстановления", "The recovery key is an extra encryption key that is used to encrypt files. It allows recovery of a user's files if the user forgets his or her password." : "Ключ восстановления это дополнительный ключ, который используется для шифрования файлов. Он позволяет восстановить пользовательские файлы в случае утери пароля.", diff --git a/apps/encryption/l10n/sk_SK.js b/apps/encryption/l10n/sk_SK.js index 3f3b93f043e80f91796069efd42aa9476d1805d4..6b97ef326832fedb7675df660fe9b1c15d237a4e 100644 --- a/apps/encryption/l10n/sk_SK.js +++ b/apps/encryption/l10n/sk_SK.js @@ -23,6 +23,8 @@ OC.L10N.register( "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Chybný súkromný kľúč na šifrovanie aplikácií. Zaktualizujte si heslo súkromného kľúča v svojom osobnom nastavení, aby ste znovu získali prístup k svojim zašifrovaným súborom.", "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Aplikácia na šifrovanie je zapnutá, ale vaše kľúče nie sú inicializované. Odhláste sa a znovu sa prihláste.", "Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Tento súbor sa nepodarilo dešifrovať, pravdepodobne je zdieľaný. Požiadajte majiteľa súboru, aby ho s vami znovu vyzdieľal.", + "The share will expire on %s." : "Zdieľanie vyprší %s.", + "Cheers!" : "Pekný deň!", "Enable recovery key" : "Povoliť obnovovací kľúč", "Disable recovery key" : "Zakázať obnovovací kľúč", "Recovery key password" : "Heslo obnovovacieho kľúča", diff --git a/apps/encryption/l10n/sk_SK.json b/apps/encryption/l10n/sk_SK.json index 05371299dbc93a8ad775fddd873d1033aa50f5e9..92ef811db23e7fc9d57bcd065d797f987e064ac8 100644 --- a/apps/encryption/l10n/sk_SK.json +++ b/apps/encryption/l10n/sk_SK.json @@ -21,6 +21,8 @@ "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Chybný súkromný kľúč na šifrovanie aplikácií. Zaktualizujte si heslo súkromného kľúča v svojom osobnom nastavení, aby ste znovu získali prístup k svojim zašifrovaným súborom.", "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Aplikácia na šifrovanie je zapnutá, ale vaše kľúče nie sú inicializované. Odhláste sa a znovu sa prihláste.", "Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Tento súbor sa nepodarilo dešifrovať, pravdepodobne je zdieľaný. Požiadajte majiteľa súboru, aby ho s vami znovu vyzdieľal.", + "The share will expire on %s." : "Zdieľanie vyprší %s.", + "Cheers!" : "Pekný deň!", "Enable recovery key" : "Povoliť obnovovací kľúč", "Disable recovery key" : "Zakázať obnovovací kľúč", "Recovery key password" : "Heslo obnovovacieho kľúča", diff --git a/apps/encryption/l10n/sl.js b/apps/encryption/l10n/sl.js index 7c90ba7e9a7f41c1b258a4a75d41500be9209350..4e4e9998b0dc573efa118fa9915f8da010b9d9c6 100644 --- a/apps/encryption/l10n/sl.js +++ b/apps/encryption/l10n/sl.js @@ -23,6 +23,8 @@ OC.L10N.register( "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Ni ustreznega osebnega ključa za program za šifriranje. Posodobite osebni ključ za dostop do šifriranih datotek med nastavitvami.", "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Program za šifriranje je omogočen, vendar ni začet. Odjavite se in nato ponovno prijavite.", "Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Te datoteke ni mogoče šifrirati, ker je to najverjetneje datoteka v souporabi. Prosite lastnika datoteke, da jo da ponovno v souporabo.", + "The share will expire on %s." : "Povezava souporabe bo potekla %s.", + "Cheers!" : "Na zdravje!", "Enable recovery key" : "Omogoči obnovitev gesla", "Disable recovery key" : "Onemogoči obnovitev gesla", "Recovery key password" : "Ključ za obnovitev gesla", diff --git a/apps/encryption/l10n/sl.json b/apps/encryption/l10n/sl.json index 82d23fc6e74e99fffbee044a9504a5a254ee2461..34829a2280ede73ea9e77d16a0d95a28b144d8e1 100644 --- a/apps/encryption/l10n/sl.json +++ b/apps/encryption/l10n/sl.json @@ -21,6 +21,8 @@ "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Ni ustreznega osebnega ključa za program za šifriranje. Posodobite osebni ključ za dostop do šifriranih datotek med nastavitvami.", "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Program za šifriranje je omogočen, vendar ni začet. Odjavite se in nato ponovno prijavite.", "Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Te datoteke ni mogoče šifrirati, ker je to najverjetneje datoteka v souporabi. Prosite lastnika datoteke, da jo da ponovno v souporabo.", + "The share will expire on %s." : "Povezava souporabe bo potekla %s.", + "Cheers!" : "Na zdravje!", "Enable recovery key" : "Omogoči obnovitev gesla", "Disable recovery key" : "Onemogoči obnovitev gesla", "Recovery key password" : "Ključ za obnovitev gesla", diff --git a/apps/encryption/l10n/sq.js b/apps/encryption/l10n/sq.js index be24512a35cdc11c57f9a71a43f466223f86080d..9a9230e86fb5e42c5a0c89d39ae83f95e0039e92 100644 --- a/apps/encryption/l10n/sq.js +++ b/apps/encryption/l10n/sq.js @@ -2,6 +2,8 @@ OC.L10N.register( "encryption", { "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Çelësi privat për Aplikacionin e Shifrimit është i pavlefshëm. Ju lutem përditësoni fjalëkalimin e çelësit tuaj privat në parametrat tuaj për të rimarrë qasje në skedarët tuaj të shifruar.", + "The share will expire on %s." : "Ndarja do të skadojë në %s.", + "Cheers!" : "Gjithë të mirat", "Enabled" : "Aktivizuar" }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/encryption/l10n/sq.json b/apps/encryption/l10n/sq.json index 48f32535ac083b8f05e6017a3ac1f87f761f8747..87481aa3349bcd0655756d39884586600624ceca 100644 --- a/apps/encryption/l10n/sq.json +++ b/apps/encryption/l10n/sq.json @@ -1,5 +1,7 @@ { "translations": { "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Çelësi privat për Aplikacionin e Shifrimit është i pavlefshëm. Ju lutem përditësoni fjalëkalimin e çelësit tuaj privat në parametrat tuaj për të rimarrë qasje në skedarët tuaj të shifruar.", + "The share will expire on %s." : "Ndarja do të skadojë në %s.", + "Cheers!" : "Gjithë të mirat", "Enabled" : "Aktivizuar" },"pluralForm" :"nplurals=2; plural=(n != 1);" } \ No newline at end of file diff --git a/apps/encryption/l10n/sr.js b/apps/encryption/l10n/sr.js index 9c37a8a3b300d6b973750077f1455b1b684ee2d6..e351a73923451e7e33c056a2667aa0ea0c0b9be7 100644 --- a/apps/encryption/l10n/sr.js +++ b/apps/encryption/l10n/sr.js @@ -27,6 +27,8 @@ OC.L10N.register( "Encryption App is enabled and ready" : "Апликација шифровања је укључена и спремна", "Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Не могу да дешифрујем фајл. Вероватно је то дељен фајл. Затражите од власника фајла да га поново подели са вама.", "Can not read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Не могу да читам фајл. Вероватно је дељен. Питајте власника да га поново подели са вама.", + "The share will expire on %s." : "Дељење истиче %s.", + "Cheers!" : "Здраво!", "Enable recovery key" : "Омогући кључ за опоравак", "Disable recovery key" : "Онемогући кључ за опоравак", "The recovery key is an extra encryption key that is used to encrypt files. It allows recovery of a user's files if the user forgets his or her password." : "Кључ за опоравак је додатни шифрарски кључ који се користи за шифровање фајлова. Он омогућава опоравак корисничких фајлова ако корисник заборави своју лозинку.", diff --git a/apps/encryption/l10n/sr.json b/apps/encryption/l10n/sr.json index cd648279e9ec18824dac1e493a67a8483fcf22a0..7fe6e1672d28564d100d19cb4bcba5bdf5f13a4e 100644 --- a/apps/encryption/l10n/sr.json +++ b/apps/encryption/l10n/sr.json @@ -25,6 +25,8 @@ "Encryption App is enabled and ready" : "Апликација шифровања је укључена и спремна", "Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Не могу да дешифрујем фајл. Вероватно је то дељен фајл. Затражите од власника фајла да га поново подели са вама.", "Can not read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Не могу да читам фајл. Вероватно је дељен. Питајте власника да га поново подели са вама.", + "The share will expire on %s." : "Дељење истиче %s.", + "Cheers!" : "Здраво!", "Enable recovery key" : "Омогући кључ за опоравак", "Disable recovery key" : "Онемогући кључ за опоравак", "The recovery key is an extra encryption key that is used to encrypt files. It allows recovery of a user's files if the user forgets his or her password." : "Кључ за опоравак је додатни шифрарски кључ који се користи за шифровање фајлова. Он омогућава опоравак корисничких фајлова ако корисник заборави своју лозинку.", diff --git a/apps/encryption/l10n/sr@latin.js b/apps/encryption/l10n/sr@latin.js index b078b50fce78ae467932758d5c537ec391abb087..d784912394c6e6ebc12e763d97dc993e91c8ef2e 100644 --- a/apps/encryption/l10n/sr@latin.js +++ b/apps/encryption/l10n/sr@latin.js @@ -3,6 +3,8 @@ OC.L10N.register( { "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Neispravan privatni ključ za Aplikaciju za šifrovanje. Molimo da osvežite vašu lozinku privatnog ključa u ličnim podešavanjima kako bi dobili pristup šifrovanim fajlovima.", "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Aplikacija za šifrovanje je omogućena ali Vaši ključevi nisu inicijalizovani, molimo Vas da se izlogujete i ulogujete ponovo.", + "The share will expire on %s." : "Deljeni sadržaj će isteći: %s", + "Cheers!" : "U zdravlje!", "Disabled" : "Onemogućeno" }, "nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);"); diff --git a/apps/encryption/l10n/sr@latin.json b/apps/encryption/l10n/sr@latin.json index 08f90ad59124be8f5187e9f75f6b2e38cf0e6743..cb3a38ecf72352ac0d2d510de3743f39c3a3a616 100644 --- a/apps/encryption/l10n/sr@latin.json +++ b/apps/encryption/l10n/sr@latin.json @@ -1,6 +1,8 @@ { "translations": { "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Neispravan privatni ključ za Aplikaciju za šifrovanje. Molimo da osvežite vašu lozinku privatnog ključa u ličnim podešavanjima kako bi dobili pristup šifrovanim fajlovima.", "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Aplikacija za šifrovanje je omogućena ali Vaši ključevi nisu inicijalizovani, molimo Vas da se izlogujete i ulogujete ponovo.", + "The share will expire on %s." : "Deljeni sadržaj će isteći: %s", + "Cheers!" : "U zdravlje!", "Disabled" : "Onemogućeno" },"pluralForm" :"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);" } \ No newline at end of file diff --git a/apps/encryption/l10n/sv.js b/apps/encryption/l10n/sv.js index d68e3274ad670aed442dc1a52861bce6fea56399..16f9d00cd3b3e9df4c5438934f555a974cac9766 100644 --- a/apps/encryption/l10n/sv.js +++ b/apps/encryption/l10n/sv.js @@ -20,6 +20,8 @@ OC.L10N.register( "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Ogiltig privat nyckel i krypteringsprogrammet. Vänligen uppdatera lösenordet till din privata nyckel under dina personliga inställningar för att återfå tillgång till dina krypterade filer.", "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Krypteringsprogrammet är aktiverat men dina nycklar är inte initierade. Vänligen logga ut och in igen", "Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Kan ej dekryptera denna fil, förmodligen är det en delad fil. Be ägaren av filen att dela den med dig.", + "The share will expire on %s." : "Utdelningen kommer att upphöra %s.", + "Cheers!" : "Ha de fint!", "Recovery key password" : "Lösenord för återställningsnyckel", "Change recovery key password:" : "Ändra lösenord för återställningsnyckel:", "Change Password" : "Byt lösenord", diff --git a/apps/encryption/l10n/sv.json b/apps/encryption/l10n/sv.json index 2ab5025fb251a39f2a362ead7dfdb0d56b2907c9..c8f6596670580023dcce281fc9b735448bd00084 100644 --- a/apps/encryption/l10n/sv.json +++ b/apps/encryption/l10n/sv.json @@ -18,6 +18,8 @@ "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Ogiltig privat nyckel i krypteringsprogrammet. Vänligen uppdatera lösenordet till din privata nyckel under dina personliga inställningar för att återfå tillgång till dina krypterade filer.", "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Krypteringsprogrammet är aktiverat men dina nycklar är inte initierade. Vänligen logga ut och in igen", "Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Kan ej dekryptera denna fil, förmodligen är det en delad fil. Be ägaren av filen att dela den med dig.", + "The share will expire on %s." : "Utdelningen kommer att upphöra %s.", + "Cheers!" : "Ha de fint!", "Recovery key password" : "Lösenord för återställningsnyckel", "Change recovery key password:" : "Ändra lösenord för återställningsnyckel:", "Change Password" : "Byt lösenord", diff --git a/apps/encryption/l10n/th_TH.js b/apps/encryption/l10n/th_TH.js index d6a2d00d123a6270f141b82f54229792b5cd867f..3c4a5d696fa9fcf8928c4908ac892f5529b7ef1e 100644 --- a/apps/encryption/l10n/th_TH.js +++ b/apps/encryption/l10n/th_TH.js @@ -25,8 +25,13 @@ OC.L10N.register( "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "รหัสส่วนตัวไม่ถูกต้องสำหรับการเข้ารหัสแอพฯ กรุณาอัพเดทรหัสการเข้ารหัสผ่านส่วนตัวของคุณในการตั้งค่าส่วนบุคคลและในการกู้คืนการเข้าถึงไฟล์ที่มีการเข้ารหัสของคุณ", "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "การเข้ารหัสแอพฯ ถูกเปิดใช้งานแต่รหัสของคุณยังไม่ได้เริ่มต้นใช้ โปรดออกและเข้าสู่ระบบอีกครั้ง", "Encryption App is enabled and ready" : "เข้ารหัสแอพถูกเปิดใช้งานและพร้อมทำงาน", + "one-time password for server-side-encryption" : "รหัสผ่านเพียงครั้งเดียว สำหรับเข้ารหัสฝั่งเซิร์ฟเวอร์", "Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "ไม่สามารถถอดรหัสไฟล์นี้ มันอาจเป็นไฟล์ที่ใช้งานร่วมกัน กรุณาถามเจ้าของไฟล์เพื่อยกเลิกการใช้งานร่วมกัน ", "Can not read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "ไม่สามารถอ่านไฟล์นี้ มันอาจเป็นไฟล์ที่ใช้งานร่วมกัน กรุณาสอบถามเจ้าของไฟล์เพื่อแชร์ไฟล์กับคุณ", + "Hey there,\n\nthe admin enabled server-side-encryption. Your files were encrypted using the password '%s'.\n\nPlease login to the web interface, go to the section 'ownCloud basic encryption module' of your personal settings and update your encryption password by entering this password into the 'old log-in password' field and your current login-password.\n\n" : "นี่คุณ
\n
\nผู้ดูแลระบบเปิดใช้งานการเข้ารหัสฝั่งเซิร์ฟเวอร์ ไฟล์ของคุณจะถูกเข้ารหัสโดยใช้รหัสผ่าน %s
\n
\nกรุณาเข้าสู่ระบบเว็บอินเตอร์เฟซไปที่ส่วน \"โมดูลการเข้ารหัส ownCloud พื้นฐาน\" ของการตั้งค่าส่วนบุคคลของคุณและอัพเดทการเข้ารหัสรหัสผ่านของคุณโดย ป้อนรหัสผ่านนี้ในช่อง \"รหัสผ่านเก่าที่เข้าสู่ระบบ\" และเข้าสู่ระบบด้วยรหัสผ่านปัจจุบันของคุณ
\n
\n", + "The share will expire on %s." : "การแชร์จะหมดอายุในวันที่ %s", + "Cheers!" : "ไชโย!", + "Hey there,

the admin enabled server-side-encryption. Your files were encrypted using the password %s.

Please login to the web interface, go to the section \"ownCloud basic encryption module\" of your personal settings and update your encryption password by entering this password into the \"old log-in password\" field and your current login-password.

" : "นี่คุณ

ผู้ดูแลระบบเปิดใช้งานการเข้ารหัสฝั่งเซิร์ฟเวอร์ ไฟล์ของคุณจะถูกเข้ารหัสโดยใช้รหัสผ่าน %s

กรุณาเข้าสู่ระบบเว็บอินเตอร์เฟซไปที่ส่วน \"โมดูลการเข้ารหัส ownCloud พื้นฐาน\" ของการตั้งค่าส่วนบุคคลของคุณและอัพเดทการเข้ารหัสรหัสผ่านของคุณโดย ป้อนรหัสผ่านนี้ในช่อง \"รหัสผ่านเก่าที่เข้าสู่ระบบ\" และเข้าสู่ระบบด้วยรหัสผ่านปัจจุบันของคุณ

", "Enable recovery key" : "เปิดใช้งานการกู้คืนรหัส", "Disable recovery key" : "ปิดใช้งานรหัสการกู้คืนรหัส", "The recovery key is an extra encryption key that is used to encrypt files. It allows recovery of a user's files if the user forgets his or her password." : "รหัสการกู้คืนเป็นการเข้ารหัสลับพิเศษจะใช้ในการเข้ารหัสไฟล์ มันจะช่วยเรื่องการกู้คืนไฟล์ของผู้ใช้ที่ลืมรหัสผ่าน", diff --git a/apps/encryption/l10n/th_TH.json b/apps/encryption/l10n/th_TH.json index 5c9043409839951f7c944f703bd93a4fac642d21..b69cdb8a871a042dad05fda0810ae12b21710e3e 100644 --- a/apps/encryption/l10n/th_TH.json +++ b/apps/encryption/l10n/th_TH.json @@ -23,8 +23,13 @@ "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "รหัสส่วนตัวไม่ถูกต้องสำหรับการเข้ารหัสแอพฯ กรุณาอัพเดทรหัสการเข้ารหัสผ่านส่วนตัวของคุณในการตั้งค่าส่วนบุคคลและในการกู้คืนการเข้าถึงไฟล์ที่มีการเข้ารหัสของคุณ", "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "การเข้ารหัสแอพฯ ถูกเปิดใช้งานแต่รหัสของคุณยังไม่ได้เริ่มต้นใช้ โปรดออกและเข้าสู่ระบบอีกครั้ง", "Encryption App is enabled and ready" : "เข้ารหัสแอพถูกเปิดใช้งานและพร้อมทำงาน", + "one-time password for server-side-encryption" : "รหัสผ่านเพียงครั้งเดียว สำหรับเข้ารหัสฝั่งเซิร์ฟเวอร์", "Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "ไม่สามารถถอดรหัสไฟล์นี้ มันอาจเป็นไฟล์ที่ใช้งานร่วมกัน กรุณาถามเจ้าของไฟล์เพื่อยกเลิกการใช้งานร่วมกัน ", "Can not read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "ไม่สามารถอ่านไฟล์นี้ มันอาจเป็นไฟล์ที่ใช้งานร่วมกัน กรุณาสอบถามเจ้าของไฟล์เพื่อแชร์ไฟล์กับคุณ", + "Hey there,\n\nthe admin enabled server-side-encryption. Your files were encrypted using the password '%s'.\n\nPlease login to the web interface, go to the section 'ownCloud basic encryption module' of your personal settings and update your encryption password by entering this password into the 'old log-in password' field and your current login-password.\n\n" : "นี่คุณ
\n
\nผู้ดูแลระบบเปิดใช้งานการเข้ารหัสฝั่งเซิร์ฟเวอร์ ไฟล์ของคุณจะถูกเข้ารหัสโดยใช้รหัสผ่าน %s
\n
\nกรุณาเข้าสู่ระบบเว็บอินเตอร์เฟซไปที่ส่วน \"โมดูลการเข้ารหัส ownCloud พื้นฐาน\" ของการตั้งค่าส่วนบุคคลของคุณและอัพเดทการเข้ารหัสรหัสผ่านของคุณโดย ป้อนรหัสผ่านนี้ในช่อง \"รหัสผ่านเก่าที่เข้าสู่ระบบ\" และเข้าสู่ระบบด้วยรหัสผ่านปัจจุบันของคุณ
\n
\n", + "The share will expire on %s." : "การแชร์จะหมดอายุในวันที่ %s", + "Cheers!" : "ไชโย!", + "Hey there,

the admin enabled server-side-encryption. Your files were encrypted using the password %s.

Please login to the web interface, go to the section \"ownCloud basic encryption module\" of your personal settings and update your encryption password by entering this password into the \"old log-in password\" field and your current login-password.

" : "นี่คุณ

ผู้ดูแลระบบเปิดใช้งานการเข้ารหัสฝั่งเซิร์ฟเวอร์ ไฟล์ของคุณจะถูกเข้ารหัสโดยใช้รหัสผ่าน %s

กรุณาเข้าสู่ระบบเว็บอินเตอร์เฟซไปที่ส่วน \"โมดูลการเข้ารหัส ownCloud พื้นฐาน\" ของการตั้งค่าส่วนบุคคลของคุณและอัพเดทการเข้ารหัสรหัสผ่านของคุณโดย ป้อนรหัสผ่านนี้ในช่อง \"รหัสผ่านเก่าที่เข้าสู่ระบบ\" และเข้าสู่ระบบด้วยรหัสผ่านปัจจุบันของคุณ

", "Enable recovery key" : "เปิดใช้งานการกู้คืนรหัส", "Disable recovery key" : "ปิดใช้งานรหัสการกู้คืนรหัส", "The recovery key is an extra encryption key that is used to encrypt files. It allows recovery of a user's files if the user forgets his or her password." : "รหัสการกู้คืนเป็นการเข้ารหัสลับพิเศษจะใช้ในการเข้ารหัสไฟล์ มันจะช่วยเรื่องการกู้คืนไฟล์ของผู้ใช้ที่ลืมรหัสผ่าน", diff --git a/apps/encryption/l10n/tr.js b/apps/encryption/l10n/tr.js index 065c0d16d1c54708572433e29566778e9fc54422..e1fcb526d06f31f4b6604aa9b41148bc3c1cd5e2 100644 --- a/apps/encryption/l10n/tr.js +++ b/apps/encryption/l10n/tr.js @@ -25,8 +25,13 @@ OC.L10N.register( "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Şifreleme Uygulaması için geçersiz özel anahtar. Lütfen şifreli dosyalarınıza erişimi tekrar kazanabilmek için kişisel ayarlarınızdan özel anahtar parolanızı güncelleyin.", "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Şifreleme Uygulaması etkin ancak anahtarlarınız başlatılmamış. Lütfen oturumu kapatıp yeniden açın", "Encryption App is enabled and ready" : "Şifreleme Uygulaması etkin ve hazır", + "one-time password for server-side-encryption" : "sunucu tarafında şifleme için tek kullanımlık parola", "Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Bu dosya muhtemelen bir paylaşılan dosya olduğundan şifrelemesi kaldırılamıyor. Lütfen dosyayı sizinle bir daha paylaşması için dosya sahibi ile iletişime geçin.", "Can not read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Bu dosya muhtemelen bir paylaşılan dosya olduğundan okunamıyor. Lütfen dosyayı sizinle bir daha paylaşması için dosya sahibi ile iletişime geçin.", + "Hey there,\n\nthe admin enabled server-side-encryption. Your files were encrypted using the password '%s'.\n\nPlease login to the web interface, go to the section 'ownCloud basic encryption module' of your personal settings and update your encryption password by entering this password into the 'old log-in password' field and your current login-password.\n\n" : "Selam,\n\nSistem yöneticisi sunucu tarafında şifrelemeyi etkinleştirdi. Dosyalarınız '%s' parolası kullanılarak şifrelendi.\n\nLütfen web arayüzünde oturum açın ve kişisel ayarlarınızdan 'ownCloud temel şifreleme modülü'ne giderek 'eski oturum parolası' alanına bu parolayı girdikten sonra şifreleme parolanızı ve mevcut oturum açma parolanızı güncelleyin.\n\n", + "The share will expire on %s." : "Bu paylaşım %s tarihinde sona erecek.", + "Cheers!" : "Hoşçakalın!", + "Hey there,

the admin enabled server-side-encryption. Your files were encrypted using the password %s.

Please login to the web interface, go to the section \"ownCloud basic encryption module\" of your personal settings and update your encryption password by entering this password into the \"old log-in password\" field and your current login-password.

" : "Selam,

Sistem yöneticisi sunucu tarafında şifrelemeyi etkinleştirdi. Dosyalarınız %s parolası kullanılarak şifrelendi.

Lütfen web arayüzünde oturum açın ve kişisel ayarlarınızdan 'ownCloud temel şifreleme modülü'ne giderek 'eski oturum parolası' alanına bu parolayı girdikten sonra şifreleme parolanızı ve mevcut oturum açma parolanızı güncelleyin.

", "Enable recovery key" : "Kurtarma anahtarını etkinleştir", "Disable recovery key" : "Kurtarma anahtarını devre dışı bırak", "The recovery key is an extra encryption key that is used to encrypt files. It allows recovery of a user's files if the user forgets his or her password." : "Kurtarma anahtarı, dosyaların şifrelenmesi için daha fazla \nşifreleme sunar. Bu kullanıcının dosyasının şifresini unuttuğunda kurtarmasına imkan verir.", diff --git a/apps/encryption/l10n/tr.json b/apps/encryption/l10n/tr.json index b21a019bb642d2c523c3fda3ed65e77eb81c5287..743d3e7d15cf4a4e6afcab58f395a709af669529 100644 --- a/apps/encryption/l10n/tr.json +++ b/apps/encryption/l10n/tr.json @@ -23,8 +23,13 @@ "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Şifreleme Uygulaması için geçersiz özel anahtar. Lütfen şifreli dosyalarınıza erişimi tekrar kazanabilmek için kişisel ayarlarınızdan özel anahtar parolanızı güncelleyin.", "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Şifreleme Uygulaması etkin ancak anahtarlarınız başlatılmamış. Lütfen oturumu kapatıp yeniden açın", "Encryption App is enabled and ready" : "Şifreleme Uygulaması etkin ve hazır", + "one-time password for server-side-encryption" : "sunucu tarafında şifleme için tek kullanımlık parola", "Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Bu dosya muhtemelen bir paylaşılan dosya olduğundan şifrelemesi kaldırılamıyor. Lütfen dosyayı sizinle bir daha paylaşması için dosya sahibi ile iletişime geçin.", "Can not read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Bu dosya muhtemelen bir paylaşılan dosya olduğundan okunamıyor. Lütfen dosyayı sizinle bir daha paylaşması için dosya sahibi ile iletişime geçin.", + "Hey there,\n\nthe admin enabled server-side-encryption. Your files were encrypted using the password '%s'.\n\nPlease login to the web interface, go to the section 'ownCloud basic encryption module' of your personal settings and update your encryption password by entering this password into the 'old log-in password' field and your current login-password.\n\n" : "Selam,\n\nSistem yöneticisi sunucu tarafında şifrelemeyi etkinleştirdi. Dosyalarınız '%s' parolası kullanılarak şifrelendi.\n\nLütfen web arayüzünde oturum açın ve kişisel ayarlarınızdan 'ownCloud temel şifreleme modülü'ne giderek 'eski oturum parolası' alanına bu parolayı girdikten sonra şifreleme parolanızı ve mevcut oturum açma parolanızı güncelleyin.\n\n", + "The share will expire on %s." : "Bu paylaşım %s tarihinde sona erecek.", + "Cheers!" : "Hoşçakalın!", + "Hey there,

the admin enabled server-side-encryption. Your files were encrypted using the password %s.

Please login to the web interface, go to the section \"ownCloud basic encryption module\" of your personal settings and update your encryption password by entering this password into the \"old log-in password\" field and your current login-password.

" : "Selam,

Sistem yöneticisi sunucu tarafında şifrelemeyi etkinleştirdi. Dosyalarınız %s parolası kullanılarak şifrelendi.

Lütfen web arayüzünde oturum açın ve kişisel ayarlarınızdan 'ownCloud temel şifreleme modülü'ne giderek 'eski oturum parolası' alanına bu parolayı girdikten sonra şifreleme parolanızı ve mevcut oturum açma parolanızı güncelleyin.

", "Enable recovery key" : "Kurtarma anahtarını etkinleştir", "Disable recovery key" : "Kurtarma anahtarını devre dışı bırak", "The recovery key is an extra encryption key that is used to encrypt files. It allows recovery of a user's files if the user forgets his or her password." : "Kurtarma anahtarı, dosyaların şifrelenmesi için daha fazla \nşifreleme sunar. Bu kullanıcının dosyasının şifresini unuttuğunda kurtarmasına imkan verir.", diff --git a/apps/encryption/l10n/uk.js b/apps/encryption/l10n/uk.js index 4c7143800d85cbd0c35beae666e788609d1256ec..aa1821729effcd5fb0b48ba3ef31a0b39737d77a 100644 --- a/apps/encryption/l10n/uk.js +++ b/apps/encryption/l10n/uk.js @@ -24,7 +24,10 @@ OC.L10N.register( "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Невірний закритий ключ для доданку шифрування. Оновіть пароль до вашого закритого ключа в особистих налаштуваннях.", "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Доданок шифрування ввімкнено, але ваші ключі не ініціалізовано, вийдіть та зайдіть знову", "Encryption App is enabled and ready" : "Додаток кодування дозволений і готовий", + "one-time password for server-side-encryption" : "одноразовий пароль для шифрування на сервері", "Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Не можу розшифрувати цей файл, можливо він опублікований. Будь ласка, попросіть власника опублікувати його заново.", + "The share will expire on %s." : "Спільний доступ закінчиться %s.", + "Cheers!" : "Будьмо!", "Enable recovery key" : "Увімкнути ключ відновлення", "Disable recovery key" : "Вимкнути ключ відновлення", "Recovery key password" : "Пароль ключа відновлення", diff --git a/apps/encryption/l10n/uk.json b/apps/encryption/l10n/uk.json index 3be3a35b2f1a074cf7bb6a6f0159483503c777ce..cf54cadc708ce2cac84e8df573a7d49220e51957 100644 --- a/apps/encryption/l10n/uk.json +++ b/apps/encryption/l10n/uk.json @@ -22,7 +22,10 @@ "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Невірний закритий ключ для доданку шифрування. Оновіть пароль до вашого закритого ключа в особистих налаштуваннях.", "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Доданок шифрування ввімкнено, але ваші ключі не ініціалізовано, вийдіть та зайдіть знову", "Encryption App is enabled and ready" : "Додаток кодування дозволений і готовий", + "one-time password for server-side-encryption" : "одноразовий пароль для шифрування на сервері", "Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Не можу розшифрувати цей файл, можливо він опублікований. Будь ласка, попросіть власника опублікувати його заново.", + "The share will expire on %s." : "Спільний доступ закінчиться %s.", + "Cheers!" : "Будьмо!", "Enable recovery key" : "Увімкнути ключ відновлення", "Disable recovery key" : "Вимкнути ключ відновлення", "Recovery key password" : "Пароль ключа відновлення", diff --git a/apps/user_webdavauth/l10n/eu_ES.js b/apps/encryption/l10n/ur_PK.js similarity index 57% rename from apps/user_webdavauth/l10n/eu_ES.js rename to apps/encryption/l10n/ur_PK.js index 68ab406f8341e3f14eaae009a3da6c2800875937..9fbed2e780f65756ac1781330403780b7782a2fc 100644 --- a/apps/user_webdavauth/l10n/eu_ES.js +++ b/apps/encryption/l10n/ur_PK.js @@ -1,6 +1,6 @@ OC.L10N.register( - "user_webdavauth", + "encryption", { - "Save" : "Gorde" + "Cheers!" : "واہ!" }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/user_webdavauth/l10n/ur_PK.json b/apps/encryption/l10n/ur_PK.json similarity index 72% rename from apps/user_webdavauth/l10n/ur_PK.json rename to apps/encryption/l10n/ur_PK.json index 2c8f5af7ae5fec9903a5a90ef169673210018265..f798bdf2a7be385313b01552530e30001a9bc03b 100644 --- a/apps/user_webdavauth/l10n/ur_PK.json +++ b/apps/encryption/l10n/ur_PK.json @@ -1,4 +1,4 @@ { "translations": { - "Save" : "حفظ" + "Cheers!" : "واہ!" },"pluralForm" :"nplurals=2; plural=(n != 1);" } \ No newline at end of file diff --git a/apps/encryption/l10n/vi.js b/apps/encryption/l10n/vi.js index b99565516220733708329377e7574130254719b1..d325fc71661058645a83656793485567a21bcd5f 100644 --- a/apps/encryption/l10n/vi.js +++ b/apps/encryption/l10n/vi.js @@ -11,6 +11,8 @@ OC.L10N.register( "Could not change the password. Maybe the old password was not correct." : "Không thể đổi mật khẩu. Có lẽ do mật khẩu cũ không đúng.", "Private key password successfully updated." : "Cập nhật thành công mật khẩu khóa cá nhân", "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Ứng dụng mã hóa đã được kích hoạt nhưng bạn chưa khởi tạo khóa. Vui lòng đăng xuất ra và đăng nhập lại", + "The share will expire on %s." : "Chia sẻ này sẽ hết hiệu lực vào %s.", + "Cheers!" : "Chúc mừng!", "Change Password" : "Đổi Mật khẩu", " If you don't remember your old password you can ask your administrator to recover your files." : "Nếu bạn không nhớ mật khẩu cũ, bạn có thể yêu cầu quản trị viên khôi phục tập tin của bạn.", "Old log-in password" : "Mật khẩu đăng nhập cũ", diff --git a/apps/encryption/l10n/vi.json b/apps/encryption/l10n/vi.json index eaaa3d1c038b4dc097230760f654b1db7fdea5a6..78ed43b7047309fe244bb864a6c07d6bc56e4ebd 100644 --- a/apps/encryption/l10n/vi.json +++ b/apps/encryption/l10n/vi.json @@ -9,6 +9,8 @@ "Could not change the password. Maybe the old password was not correct." : "Không thể đổi mật khẩu. Có lẽ do mật khẩu cũ không đúng.", "Private key password successfully updated." : "Cập nhật thành công mật khẩu khóa cá nhân", "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Ứng dụng mã hóa đã được kích hoạt nhưng bạn chưa khởi tạo khóa. Vui lòng đăng xuất ra và đăng nhập lại", + "The share will expire on %s." : "Chia sẻ này sẽ hết hiệu lực vào %s.", + "Cheers!" : "Chúc mừng!", "Change Password" : "Đổi Mật khẩu", " If you don't remember your old password you can ask your administrator to recover your files." : "Nếu bạn không nhớ mật khẩu cũ, bạn có thể yêu cầu quản trị viên khôi phục tập tin của bạn.", "Old log-in password" : "Mật khẩu đăng nhập cũ", diff --git a/apps/encryption/l10n/zh_CN.js b/apps/encryption/l10n/zh_CN.js index bf09eab2ca32535baacce08b83ebfe85cc2ed5d0..93a1b13996af105ce89c5790c78b77673b12b164 100644 --- a/apps/encryption/l10n/zh_CN.js +++ b/apps/encryption/l10n/zh_CN.js @@ -19,6 +19,8 @@ OC.L10N.register( "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "无效的私有密钥。请到您的个人配置里去更新私有密钥,来恢复对加密文件的访问。", "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "加密应用被启用了,但是你的加密密钥没有初始化,请重新登出登录系统一次。", "Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : " 无法解密这个文件(或许这是一个共享文件?),请询问文件所有者重新与您分享这个文件。", + "The share will expire on %s." : "此分享将在 %s 过期。", + "Cheers!" : "干杯!", "Recovery key password" : "恢复密钥密码", "Change recovery key password:" : "更改恢复密钥密码", "Change Password" : "修改密码", diff --git a/apps/encryption/l10n/zh_CN.json b/apps/encryption/l10n/zh_CN.json index c9c58b0dee4a4f7659db3d863b9a4475eb17f33a..0fb653b232c719cd74195b025c6f1af4365cb927 100644 --- a/apps/encryption/l10n/zh_CN.json +++ b/apps/encryption/l10n/zh_CN.json @@ -17,6 +17,8 @@ "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "无效的私有密钥。请到您的个人配置里去更新私有密钥,来恢复对加密文件的访问。", "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "加密应用被启用了,但是你的加密密钥没有初始化,请重新登出登录系统一次。", "Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : " 无法解密这个文件(或许这是一个共享文件?),请询问文件所有者重新与您分享这个文件。", + "The share will expire on %s." : "此分享将在 %s 过期。", + "Cheers!" : "干杯!", "Recovery key password" : "恢复密钥密码", "Change recovery key password:" : "更改恢复密钥密码", "Change Password" : "修改密码", diff --git a/apps/encryption/l10n/zh_TW.js b/apps/encryption/l10n/zh_TW.js index 01b35d4661adcfac30909cdbe1eed2e3a0fc5e73..17893b44b67a91fdf0d1144462dc1262c13ac374 100644 --- a/apps/encryption/l10n/zh_TW.js +++ b/apps/encryption/l10n/zh_TW.js @@ -11,6 +11,8 @@ OC.L10N.register( "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "無效的檔案加密私鑰,請在個人設定中更新您的私鑰密語以存取加密的檔案。", "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "檔案加密已啓用,但是您的金鑰尚未初始化,請重新登入一次", "Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "無法解密這個檔案,也許這是分享的檔案。請詢問檔案所有人重新分享檔案給您。", + "The share will expire on %s." : "這個分享將會於 %s 過期", + "Cheers!" : "太棒了!", "Recovery key password" : "還原金鑰密碼", "Change recovery key password:" : "變更還原金鑰密碼:", "Change Password" : "變更密碼", diff --git a/apps/encryption/l10n/zh_TW.json b/apps/encryption/l10n/zh_TW.json index a1617eec761251c6f9339a9abed653826047941f..ce2e07228fc53ffe1caaa74a7738ab116f97365f 100644 --- a/apps/encryption/l10n/zh_TW.json +++ b/apps/encryption/l10n/zh_TW.json @@ -9,6 +9,8 @@ "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "無效的檔案加密私鑰,請在個人設定中更新您的私鑰密語以存取加密的檔案。", "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "檔案加密已啓用,但是您的金鑰尚未初始化,請重新登入一次", "Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "無法解密這個檔案,也許這是分享的檔案。請詢問檔案所有人重新分享檔案給您。", + "The share will expire on %s." : "這個分享將會於 %s 過期", + "Cheers!" : "太棒了!", "Recovery key password" : "還原金鑰密碼", "Change recovery key password:" : "變更還原金鑰密碼:", "Change Password" : "變更密碼", diff --git a/apps/encryption/lib/crypto/crypt.php b/apps/encryption/lib/crypto/crypt.php index 6c4c108f50af72964be8b16a65b75432f2492301..c55fb00f8382e3ad9fb20e021196cc51d0b965c3 100644 --- a/apps/encryption/lib/crypto/crypt.php +++ b/apps/encryption/lib/crypto/crypt.php @@ -3,7 +3,6 @@ * @author Björn Schießle * @author Clark Tomlinson * @author Lukas Reschke - * @author Morris Jobke * @author Thomas Müller * * @copyright Copyright (c) 2015, ownCloud, Inc. @@ -398,7 +397,7 @@ class Crypt { } } - return true; + return false; } /** diff --git a/apps/encryption/lib/crypto/decryptall.php b/apps/encryption/lib/crypto/decryptall.php new file mode 100644 index 0000000000000000000000000000000000000000..1daf3699d13ea6266ea2f9ac9ab3b109b57580ef --- /dev/null +++ b/apps/encryption/lib/crypto/decryptall.php @@ -0,0 +1,149 @@ + + * + * @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 + * + */ + + +namespace OCA\Encryption\Crypto; + + +use OCA\Encryption\KeyManager; +use OCA\Encryption\Session; +use OCA\Encryption\Util; +use Symfony\Component\Console\Helper\QuestionHelper; +use Symfony\Component\Console\Input\InputInterface; +use Symfony\Component\Console\Output\OutputInterface; +use Symfony\Component\Console\Question\ConfirmationQuestion; +use Symfony\Component\Console\Question\Question; + +class DecryptAll { + + /** @var Util */ + protected $util; + + /** @var QuestionHelper */ + protected $questionHelper; + + /** @var Crypt */ + protected $crypt; + + /** @var KeyManager */ + protected $keyManager; + + /** @var Session */ + protected $session; + + /** + * @param Util $util + * @param KeyManager $keyManager + * @param Crypt $crypt + * @param Session $session + * @param QuestionHelper $questionHelper + */ + public function __construct( + Util $util, + KeyManager $keyManager, + Crypt $crypt, + Session $session, + QuestionHelper $questionHelper + ) { + $this->util = $util; + $this->keyManager = $keyManager; + $this->crypt = $crypt; + $this->session = $session; + $this->questionHelper = $questionHelper; + } + + /** + * prepare encryption module to decrypt all files + * + * @param InputInterface $input + * @param OutputInterface $output + * @param $user + * @return bool + */ + public function prepare(InputInterface $input, OutputInterface $output, $user) { + + $question = new Question('Please enter the recovery key password: '); + $recoveryKeyId = $this->keyManager->getRecoveryKeyId(); + + if (!empty($user)) { + $output->writeln('You can only decrypt the users files if you know'); + $output->writeln('the users password or if he activated the recovery key.'); + $output->writeln(''); + $questionUseLoginPassword = new ConfirmationQuestion( + 'Do you want to use the users login password to decrypt all files? (y/n) ', + false + ); + $useLoginPassword = $this->questionHelper->ask($input, $output, $questionUseLoginPassword); + if ($useLoginPassword) { + $question = new Question('Please enter the user\'s login password: '); + } else if ($this->util->isRecoveryEnabledForUser($user) === false) { + $output->writeln('No recovery key available for user ' . $user); + return false; + } else { + $user = $recoveryKeyId; + } + } else { + $output->writeln('You can only decrypt the files of all users if the'); + $output->writeln('recovery key is enabled by the admin and activated by the users.'); + $output->writeln(''); + $user = $recoveryKeyId; + } + + $question->setHidden(true); + $question->setHiddenFallback(false); + $password = $this->questionHelper->ask($input, $output, $question); + $privateKey = $this->getPrivateKey($user, $password); + if ($privateKey !== false) { + $this->updateSession($user, $privateKey); + return true; + } else { + $output->writeln('Could not decrypt private key, maybe you entered the wrong password?'); + } + + + return false; + } + + /** + * get the private key which will be used to decrypt all files + * + * @param string $user + * @param string $password + * @return bool|string + * @throws \OCA\Encryption\Exceptions\PrivateKeyMissingException + */ + protected function getPrivateKey($user, $password) { + $recoveryKeyId = $this->keyManager->getRecoveryKeyId(); + if ($user === $recoveryKeyId) { + $recoveryKey = $this->keyManager->getSystemPrivateKey($recoveryKeyId); + $privateKey = $this->crypt->decryptPrivateKey($recoveryKey, $password); + } else { + $userKey = $this->keyManager->getPrivateKey($user); + $privateKey = $this->crypt->decryptPrivateKey($userKey, $password, $user); + } + + return $privateKey; + } + + protected function updateSession($user, $privateKey) { + $this->session->prepareDecryptAll($user, $privateKey); + } +} diff --git a/apps/encryption/lib/crypto/encryptall.php b/apps/encryption/lib/crypto/encryptall.php new file mode 100644 index 0000000000000000000000000000000000000000..8e97fe341b481db0c909f1da420018c64265a93e --- /dev/null +++ b/apps/encryption/lib/crypto/encryptall.php @@ -0,0 +1,430 @@ + + * + * @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 + * + */ + + +namespace OCA\Encryption\Crypto; + +use OC\Encryption\Exceptions\DecryptionFailedException; +use OC\Files\View; +use OCA\Encryption\KeyManager; +use OCA\Encryption\Users\Setup; +use OCP\IConfig; +use OCP\IL10N; +use OCP\IUserManager; +use OCP\Mail\IMailer; +use OCP\Security\ISecureRandom; +use Symfony\Component\Console\Helper\ProgressBar; +use Symfony\Component\Console\Helper\QuestionHelper; +use Symfony\Component\Console\Helper\Table; +use Symfony\Component\Console\Input\InputInterface; +use Symfony\Component\Console\Output\OutputInterface; +use Symfony\Component\Console\Question\ConfirmationQuestion; + +class EncryptAll { + + /** @var Setup */ + protected $userSetup; + + /** @var IUserManager */ + protected $userManager; + + /** @var View */ + protected $rootView; + + /** @var KeyManager */ + protected $keyManager; + + /** @var array */ + protected $userPasswords; + + /** @var IConfig */ + protected $config; + + /** @var IMailer */ + protected $mailer; + + /** @var IL10N */ + protected $l; + + /** @var QuestionHelper */ + protected $questionHelper; + + /** @var OutputInterface */ + protected $output; + + /** @var InputInterface */ + protected $input; + + /** @var ISecureRandom */ + protected $secureRandom; + + /** + * @param Setup $userSetup + * @param IUserManager $userManager + * @param View $rootView + * @param KeyManager $keyManager + * @param IConfig $config + * @param IMailer $mailer + * @param IL10N $l + * @param QuestionHelper $questionHelper + * @param ISecureRandom $secureRandom + */ + public function __construct( + Setup $userSetup, + IUserManager $userManager, + View $rootView, + KeyManager $keyManager, + IConfig $config, + IMailer $mailer, + IL10N $l, + QuestionHelper $questionHelper, + ISecureRandom $secureRandom + ) { + $this->userSetup = $userSetup; + $this->userManager = $userManager; + $this->rootView = $rootView; + $this->keyManager = $keyManager; + $this->config = $config; + $this->mailer = $mailer; + $this->l = $l; + $this->questionHelper = $questionHelper; + $this->secureRandom = $secureRandom; + // store one time passwords for the users + $this->userPasswords = array(); + } + + /** + * start to encrypt all files + * + * @param InputInterface $input + * @param OutputInterface $output + */ + public function encryptAll(InputInterface $input, OutputInterface $output) { + + $this->input = $input; + $this->output = $output; + + $headline = 'Encrypt all files with the ' . Encryption::DISPLAY_NAME; + $this->output->writeln("\n"); + $this->output->writeln($headline); + $this->output->writeln(str_pad('', strlen($headline), '=')); + + //create private/public keys for each user and store the private key password + $this->output->writeln("\n"); + $this->output->writeln('Create key-pair for every user'); + $this->output->writeln('------------------------------'); + $this->output->writeln(''); + $this->output->writeln('This module will encrypt all files in the users files folder initially.'); + $this->output->writeln('Already existing versions and files in the trash bin will not be encrypted.'); + $this->output->writeln(''); + $this->createKeyPairs(); + + //setup users file system and encrypt all files one by one (take should encrypt setting of storage into account) + $this->output->writeln("\n"); + $this->output->writeln('Start to encrypt users files'); + $this->output->writeln('----------------------------'); + $this->output->writeln(''); + $this->encryptAllUsersFiles(); + //send-out or display password list and write it to a file + $this->output->writeln("\n"); + $this->output->writeln('Generated encryption key passwords'); + $this->output->writeln('----------------------------------'); + $this->output->writeln(''); + $this->outputPasswords(); + $this->output->writeln("\n"); + } + + /** + * create key-pair for every user + */ + protected function createKeyPairs() { + $this->output->writeln("\n"); + $progress = new ProgressBar($this->output); + $progress->setFormat(" %message% \n [%bar%]"); + $progress->start(); + + foreach($this->userManager->getBackends() as $backend) { + $limit = 500; + $offset = 0; + do { + $users = $backend->getUsers('', $limit, $offset); + foreach ($users as $user) { + if ($this->keyManager->userHasKeys($user) === false) { + $progress->setMessage('Create key-pair for ' . $user); + $progress->advance(); + $this->setupUserFS($user); + $password = $this->generateOneTimePassword($user); + $this->userSetup->setupUser($user, $password); + } else { + // users which already have a key-pair will be stored with a + // empty password and filtered out later + $this->userPasswords[$user] = ''; + } + } + $offset += $limit; + } while(count($users) >= $limit); + } + + $progress->setMessage('Key-pair created for all users'); + $progress->finish(); + } + + /** + * iterate over all user and encrypt their files + */ + protected function encryptAllUsersFiles() { + $this->output->writeln("\n"); + $progress = new ProgressBar($this->output); + $progress->setFormat(" %message% \n [%bar%]"); + $progress->start(); + $numberOfUsers = count($this->userPasswords); + $userNo = 1; + foreach ($this->userPasswords as $uid => $password) { + $userCount = "$uid ($userNo of $numberOfUsers)"; + $this->encryptUsersFiles($uid, $progress, $userCount); + $userNo++; + } + $progress->setMessage("all files encrypted"); + $progress->finish(); + + } + + /** + * encrypt files from the given user + * + * @param string $uid + * @param ProgressBar $progress + * @param string $userCount + */ + protected function encryptUsersFiles($uid, ProgressBar $progress, $userCount) { + + $this->setupUserFS($uid); + $directories = array(); + $directories[] = '/' . $uid . '/files'; + + while($root = array_pop($directories)) { + $content = $this->rootView->getDirectoryContent($root); + foreach ($content as $file) { + $path = $root . '/' . $file['name']; + if ($this->rootView->is_dir($path)) { + $directories[] = $path; + continue; + } else { + $progress->setMessage("encrypt files for user $userCount: $path"); + $progress->advance(); + if($this->encryptFile($path) === false) { + $progress->setMessage("encrypt files for user $userCount: $path (already encrypted)"); + $progress->advance(); + } + } + } + } + } + + /** + * encrypt file + * + * @param string $path + * @return bool + */ + protected function encryptFile($path) { + + $source = $path; + $target = $path . '.encrypted.' . time(); + + try { + $this->rootView->copy($source, $target); + $this->rootView->rename($target, $source); + } catch (DecryptionFailedException $e) { + if ($this->rootView->file_exists($target)) { + $this->rootView->unlink($target); + } + return false; + } + + return true; + } + + /** + * output one-time encryption passwords + */ + protected function outputPasswords() { + $table = new Table($this->output); + $table->setHeaders(array('Username', 'Private key password')); + + //create rows + $newPasswords = array(); + $unchangedPasswords = array(); + foreach ($this->userPasswords as $uid => $password) { + if (empty($password)) { + $unchangedPasswords[] = $uid; + } else { + $newPasswords[] = [$uid, $password]; + } + } + + if (empty($newPasswords)) { + $this->output->writeln("\nAll users already had a key-pair, no further action needed.\n"); + return; + } + + $table->setRows($newPasswords); + $table->render(); + + if (!empty($unchangedPasswords)) { + $this->output->writeln("\nThe following users already had a key-pair which was reused without setting a new password:\n"); + foreach ($unchangedPasswords as $uid) { + $this->output->writeln(" $uid"); + } + } + + $this->writePasswordsToFile($newPasswords); + + $this->output->writeln(''); + $question = new ConfirmationQuestion('Do you want to send the passwords directly to the users by mail? (y/n) ', false); + if ($this->questionHelper->ask($this->input, $this->output, $question)) { + $this->sendPasswordsByMail(); + } + } + + /** + * write one-time encryption passwords to a csv file + * + * @param array $passwords + */ + protected function writePasswordsToFile(array $passwords) { + $fp = $this->rootView->fopen('oneTimeEncryptionPasswords.csv', 'w'); + foreach ($passwords as $pwd) { + fputcsv($fp, $pwd); + } + fclose($fp); + $this->output->writeln("\n"); + $this->output->writeln('A list of all newly created passwords was written to data/oneTimeEncryptionPasswords.csv'); + $this->output->writeln(''); + $this->output->writeln('Each of these users need to login to the web interface, go to the'); + $this->output->writeln('personal settings section "ownCloud basic encryption module" and'); + $this->output->writeln('update the private key password to match the login password again by'); + $this->output->writeln('entering the one-time password into the "old log-in password" field'); + $this->output->writeln('and their current login password'); + } + + /** + * setup user file system + * + * @param string $uid + */ + protected function setupUserFS($uid) { + \OC_Util::tearDownFS(); + \OC_Util::setupFS($uid); + } + + /** + * generate one time password for the user and store it in a array + * + * @param string $uid + * @return string password + */ + protected function generateOneTimePassword($uid) { + $password = $this->secureRandom->getMediumStrengthGenerator()->generate(8); + $this->userPasswords[$uid] = $password; + return $password; + } + + /** + * send encryption key passwords to the users by mail + */ + protected function sendPasswordsByMail() { + $noMail = []; + + $this->output->writeln(''); + $progress = new ProgressBar($this->output, count($this->userPasswords)); + $progress->start(); + + foreach ($this->userPasswords as $recipient => $password) { + $progress->advance(); + if (!empty($password)) { + $recipientDisplayName = $this->userManager->get($recipient)->getDisplayName(); + $to = $this->config->getUserValue($recipient, 'settings', 'email', ''); + + if ($to === '') { + $noMail[] = $recipient; + continue; + } + + $subject = (string)$this->l->t('one-time password for server-side-encryption'); + list($htmlBody, $textBody) = $this->createMailBody($password); + + // send it out now + try { + $message = $this->mailer->createMessage(); + $message->setSubject($subject); + $message->setTo([$to => $recipientDisplayName]); + $message->setHtmlBody($htmlBody); + $message->setPlainBody($textBody); + $message->setFrom([ + \OCP\Util::getDefaultEmailAddress('admin-noreply') + ]); + + $this->mailer->send($message); + } catch (\Exception $e) { + $noMail[] = $recipient; + } + } + } + + $progress->finish(); + + if (empty($noMail)) { + $this->output->writeln("\n\nPassword successfully send to all users"); + } else { + $table = new Table($this->output); + $table->setHeaders(array('Username', 'Private key password')); + $this->output->writeln("\n\nCould not send password to following users:\n"); + $rows = []; + foreach ($noMail as $uid) { + $rows[] = [$uid, $this->userPasswords[$uid]]; + } + $table->setRows($rows); + $table->render(); + } + + } + + /** + * create mail body for plain text and html mail + * + * @param string $password one-time encryption password + * @return array an array of the html mail body and the plain text mail body + */ + protected function createMailBody($password) { + + $html = new \OC_Template("encryption", "mail", ""); + $html->assign ('password', $password); + $htmlMail = $html->fetchPage(); + + $plainText = new \OC_Template("encryption", "altmail", ""); + $plainText->assign ('password', $password); + $plainTextMail = $plainText->fetchPage(); + + return [$htmlMail, $plainTextMail]; + } + +} diff --git a/apps/encryption/lib/crypto/encryption.php b/apps/encryption/lib/crypto/encryption.php index 1fa0581506b4f380b3cf71803cca22ee31be7d2f..1a05277e20dd0caef5c797d28870bb3f86c8bb17 100644 --- a/apps/encryption/lib/crypto/encryption.php +++ b/apps/encryption/lib/crypto/encryption.php @@ -5,7 +5,6 @@ * @author Jan-Christoph Borchardt * @author Joas Schilling * @author Lukas Reschke - * @author Morris Jobke * @author Thomas Müller * * @copyright Copyright (c) 2015, ownCloud, Inc. @@ -30,11 +29,14 @@ namespace OCA\Encryption\Crypto; use OC\Encryption\Exceptions\DecryptionFailedException; use OCA\Encryption\Exceptions\PublicKeyMissingException; +use OCA\Encryption\Session; use OCA\Encryption\Util; use OCP\Encryption\IEncryptionModule; use OCA\Encryption\KeyManager; use OCP\IL10N; use OCP\ILogger; +use Symfony\Component\Console\Input\InputInterface; +use Symfony\Component\Console\Output\OutputInterface; class Encryption implements IEncryptionModule { @@ -73,30 +75,52 @@ class Encryption implements IEncryptionModule { /** @var Util */ private $util; + /** @var Session */ + private $session; + /** @var ILogger */ private $logger; /** @var IL10N */ private $l; + /** @var EncryptAll */ + private $encryptAll; + + /** @var bool */ + private $useMasterPassword; + + /** @var DecryptAll */ + private $decryptAll; + /** * * @param Crypt $crypt * @param KeyManager $keyManager * @param Util $util + * @param Session $session + * @param EncryptAll $encryptAll + * @param DecryptAll $decryptAll * @param ILogger $logger * @param IL10N $il10n */ public function __construct(Crypt $crypt, KeyManager $keyManager, Util $util, + Session $session, + EncryptAll $encryptAll, + DecryptAll $decryptAll, ILogger $logger, IL10N $il10n) { $this->crypt = $crypt; $this->keyManager = $keyManager; $this->util = $util; + $this->session = $session; + $this->encryptAll = $encryptAll; + $this->decryptAll = $decryptAll; $this->logger = $logger; $this->l = $il10n; + $this->useMasterPassword = $util->isMasterKeyEnabled(); } /** @@ -138,7 +162,15 @@ class Encryption implements IEncryptionModule { $this->isWriteOperation = false; $this->writeCache = ''; - $this->fileKey = $this->keyManager->getFileKey($this->path, $this->user); + if ($this->session->decryptAllModeActivated()) { + $encryptedFileKey = $this->keyManager->getEncryptedFileKey($this->path); + $shareKey = $this->keyManager->getShareKey($this->path, $this->session->getDecryptAllUid()); + $this->fileKey = $this->crypt->multiKeyDecrypt($encryptedFileKey, + $shareKey, + $this->session->getDecryptAllKey()); + } else { + $this->fileKey = $this->keyManager->getFileKey($this->path, $this->user); + } if ( $mode === 'w' @@ -185,23 +217,26 @@ class Encryption implements IEncryptionModule { $this->writeCache = ''; } $publicKeys = array(); - foreach ($this->accessList['users'] as $uid) { - try { - $publicKeys[$uid] = $this->keyManager->getPublicKey($uid); - } catch (PublicKeyMissingException $e) { - $this->logger->warning( - 'no public key found for user "{uid}", user will not be able to read the file', - ['app' => 'encryption', 'uid' => $uid] - ); - // if the public key of the owner is missing we should fail - if ($uid === $this->user) { - throw $e; + if ($this->useMasterPassword === true) { + $publicKeys[$this->keyManager->getMasterKeyId()] = $this->keyManager->getPublicMasterKey(); + } else { + foreach ($this->accessList['users'] as $uid) { + try { + $publicKeys[$uid] = $this->keyManager->getPublicKey($uid); + } catch (PublicKeyMissingException $e) { + $this->logger->warning( + 'no public key found for user "{uid}", user will not be able to read the file', + ['app' => 'encryption', 'uid' => $uid] + ); + // if the public key of the owner is missing we should fail + if ($uid === $this->user) { + throw $e; + } } } } $publicKeys = $this->keyManager->addSystemKeys($this->accessList, $publicKeys, $this->user); - $encryptedKeyfiles = $this->crypt->multiKeyEncrypt($this->fileKey, $publicKeys); $this->keyManager->setAllFileKeys($this->path, $encryptedKeyfiles); } @@ -310,8 +345,12 @@ class Encryption implements IEncryptionModule { if (!empty($fileKey)) { $publicKeys = array(); - foreach ($accessList['users'] as $user) { - $publicKeys[$user] = $this->keyManager->getPublicKey($user); + if ($this->useMasterPassword === true) { + $publicKeys[$this->keyManager->getMasterKeyId()] = $this->keyManager->getPublicMasterKey(); + } else { + foreach ($accessList['users'] as $user) { + $publicKeys[$user] = $this->keyManager->getPublicKey($user); + } } $publicKeys = $this->keyManager->addSystemKeys($accessList, $publicKeys, $uid); @@ -397,6 +436,29 @@ class Encryption implements IEncryptionModule { return true; } + /** + * Initial encryption of all files + * + * @param InputInterface $input + * @param OutputInterface $output write some status information to the terminal during encryption + */ + public function encryptAll(InputInterface $input, OutputInterface $output) { + $this->encryptAll->encryptAll($input, $output); + } + + /** + * prepare module to perform decrypt all operation + * + * @param InputInterface $input + * @param OutputInterface $output + * @param string $user + * @return bool + */ + public function prepareDecryptAll(InputInterface $input, OutputInterface $output, $user = '') { + return $this->decryptAll->prepare($input, $output, $user); + } + + /** * @param string $path * @return string diff --git a/apps/encryption/lib/hookmanager.php b/apps/encryption/lib/hookmanager.php index 0fea1b0f9f24c85f0dc85a32c44e6f2d6d36e80f..ab059369333f35a0140122337fbcb7b05b47f8ee 100644 --- a/apps/encryption/lib/hookmanager.php +++ b/apps/encryption/lib/hookmanager.php @@ -2,9 +2,6 @@ /** * @author Björn Schießle * @author Clark Tomlinson - * @author Lukas Reschke - * @author Morris Jobke - * @author Thomas Müller * * @copyright Copyright (c) 2015, ownCloud, Inc. * @license AGPL-3.0 diff --git a/apps/encryption/lib/keymanager.php b/apps/encryption/lib/keymanager.php index 6c793e5964faf8b8d75769eaaa23ba0b09c2f661..c45072288780d0735aaf35c40a17526f1f64064a 100644 --- a/apps/encryption/lib/keymanager.php +++ b/apps/encryption/lib/keymanager.php @@ -54,6 +54,10 @@ class KeyManager { * @var string */ private $publicShareKeyId; + /** + * @var string + */ + private $masterKeyId; /** * @var string UserID */ @@ -131,10 +135,20 @@ class KeyManager { $this->config->setAppValue('encryption', 'publicShareKeyId', $this->publicShareKeyId); } + $this->masterKeyId = $this->config->getAppValue('encryption', + 'masterKeyId'); + if (empty($this->masterKeyId)) { + $this->masterKeyId = 'master_' . substr(md5(time()), 0, 8); + $this->config->setAppValue('encryption', 'masterKeyId', $this->masterKeyId); + } + $this->keyId = $userSession && $userSession->isLoggedIn() ? $userSession->getUser()->getUID() : false; $this->log = $log; } + /** + * check if key pair for public link shares exists, if not we create one + */ public function validateShareKey() { $shareKey = $this->getPublicShareKey(); if (empty($shareKey)) { @@ -152,6 +166,26 @@ class KeyManager { } } + /** + * check if a key pair for the master key exists, if not we create one + */ + public function validateMasterKey() { + $masterKey = $this->getPublicMasterKey(); + if (empty($masterKey)) { + $keyPair = $this->crypt->createKeyPair(); + + // Save public key + $this->keyStorage->setSystemUserKey( + $this->masterKeyId . '.publicKey', $keyPair['publicKey'], + Encryption::ID); + + // Encrypt private key with system password + $encryptedKey = $this->crypt->encryptPrivateKey($keyPair['privateKey'], $this->getMasterKeyPassword(), $this->masterKeyId); + $header = $this->crypt->generateHeader(); + $this->setSystemPrivateKey($this->masterKeyId, $header . $encryptedKey); + } + } + /** * @return bool */ @@ -304,8 +338,15 @@ class KeyManager { $this->session->setStatus(Session::INIT_EXECUTED); + try { - $privateKey = $this->getPrivateKey($uid); + if($this->util->isMasterKeyEnabled()) { + $uid = $this->getMasterKeyId(); + $passPhrase = $this->getMasterKeyPassword(); + $privateKey = $this->getSystemPrivateKey($uid); + } else { + $privateKey = $this->getPrivateKey($uid); + } $privateKey = $this->crypt->decryptPrivateKey($privateKey, $passPhrase, $uid); } catch (PrivateKeyMissingException $e) { return false; @@ -345,6 +386,10 @@ class KeyManager { public function getFileKey($path, $uid) { $encryptedFileKey = $this->keyStorage->getFileKey($path, $this->fileKeyId, Encryption::ID); + if ($this->util->isMasterKeyEnabled()) { + $uid = $this->getMasterKeyId(); + } + if (is_null($uid)) { $uid = $this->getPublicShareKeyId(); $shareKey = $this->getShareKey($path, $uid); @@ -566,4 +611,37 @@ class KeyManager { return $publicKeys; } + + /** + * get master key password + * + * @return string + * @throws \Exception + */ + protected function getMasterKeyPassword() { + $password = $this->config->getSystemValue('secret'); + if (empty($password)){ + throw new \Exception('Can not get secret from ownCloud instance'); + } + + return $password; + } + + /** + * return master key id + * + * @return string + */ + public function getMasterKeyId() { + return $this->masterKeyId; + } + + /** + * get public master key + * + * @return string + */ + public function getPublicMasterKey() { + return $this->keyStorage->getSystemUserKey($this->masterKeyId . '.publicKey', Encryption::ID); + } } diff --git a/apps/encryption/lib/migration.php b/apps/encryption/lib/migration.php index 5396a7db627a83c0f26f91c20644ce359b38ced7..1a7c2e9877d1bf81ca686d3fbfe7ec7dfbc81163 100644 --- a/apps/encryption/lib/migration.php +++ b/apps/encryption/lib/migration.php @@ -1,7 +1,7 @@ - * @author Morris Jobke + * @author Joas Schilling * * @copyright Copyright (c) 2015, ownCloud, Inc. * @license AGPL-3.0 diff --git a/apps/encryption/lib/recovery.php b/apps/encryption/lib/recovery.php index b22e32656285d32e2f7d71b001b82733448a6e2f..e7b20e2c4afb3c835835e78674dfbc88322df84c 100644 --- a/apps/encryption/lib/recovery.php +++ b/apps/encryption/lib/recovery.php @@ -2,8 +2,6 @@ /** * @author Björn Schießle * @author Clark Tomlinson - * @author Morris Jobke - * @author Thomas Müller * * @copyright Copyright (c) 2015, ownCloud, Inc. * @license AGPL-3.0 diff --git a/apps/encryption/lib/session.php b/apps/encryption/lib/session.php index c3759c3fc56c1313f9de8be1b55f7e9cbd0e166c..2c83319d71e8d32a717c45bfaf05c6b20f2eb347 100644 --- a/apps/encryption/lib/session.php +++ b/apps/encryption/lib/session.php @@ -3,8 +3,6 @@ * @author Björn Schießle * @author Clark Tomlinson * @author Lukas Reschke - * @author Morris Jobke - * @author Thomas Müller * * @copyright Copyright (c) 2015, ownCloud, Inc. * @license AGPL-3.0 @@ -25,6 +23,7 @@ namespace OCA\Encryption; +use OCA\Encryption\Exceptions\PrivateKeyMissingException; use \OCP\ISession; class Session { @@ -106,6 +105,61 @@ class Session { $this->session->set('privateKey', $key); } + /** + * store data needed for the decrypt all operation in the session + * + * @param string $user + * @param string $key + */ + public function prepareDecryptAll($user, $key) { + $this->session->set('decryptAll', true); + $this->session->set('decryptAllKey', $key); + $this->session->set('decryptAllUid', $user); + } + + /** + * check if we are in decrypt all mode + * + * @return bool + */ + public function decryptAllModeActivated() { + $decryptAll = $this->session->get('decryptAll'); + return ($decryptAll === true); + } + + /** + * get uid used for decrypt all operation + * + * @return string + * @throws \Exception + */ + public function getDecryptAllUid() { + $uid = $this->session->get('decryptAllUid'); + if (is_null($uid) && $this->decryptAllModeActivated()) { + throw new \Exception('No uid found while in decrypt all mode'); + } elseif (is_null($uid)) { + throw new \Exception('Please activate decrypt all mode first'); + } + + return $uid; + } + + /** + * get private key for decrypt all operation + * + * @return string + * @throws PrivateKeyMissingException + */ + public function getDecryptAllKey() { + $privateKey = $this->session->get('decryptAllKey'); + if (is_null($privateKey) && $this->decryptAllModeActivated()) { + throw new PrivateKeyMissingException('No private key found while in decrypt all mode'); + } elseif (is_null($privateKey)) { + throw new PrivateKeyMissingException('Please activate decrypt all mode first'); + } + + return $privateKey; + } /** * remove keys from session @@ -114,7 +168,9 @@ class Session { $this->session->remove('publicSharePrivateKey'); $this->session->remove('privateKey'); $this->session->remove('encryptionInitialized'); - + $this->session->remove('decryptAll'); + $this->session->remove('decryptAllKey'); + $this->session->remove('decryptAllUid'); } } diff --git a/apps/encryption/lib/users/setup.php b/apps/encryption/lib/users/setup.php index f224826ed52198b7dd2123451926254d3547eeaf..99368cab0808b492a7c0b08993a60da06e26982a 100644 --- a/apps/encryption/lib/users/setup.php +++ b/apps/encryption/lib/users/setup.php @@ -3,7 +3,6 @@ * @author Björn Schießle * @author Clark Tomlinson * @author Lukas Reschke - * @author Morris Jobke * @author Thomas Müller * * @copyright Copyright (c) 2015, ownCloud, Inc. @@ -76,12 +75,15 @@ class Setup { } /** + * check if user has a key pair, if not we create one + * * @param string $uid userid * @param string $password user password * @return bool */ public function setupServerSide($uid, $password) { $this->keyManager->validateShareKey(); + $this->keyManager->validateMasterKey(); // Check if user already has keys if (!$this->keyManager->userHasKeys($uid)) { return $this->keyManager->storeKeyPair($uid, $password, diff --git a/apps/encryption/lib/util.php b/apps/encryption/lib/util.php index fbedc5d6077b466055b21fb8c0e1315286fb703e..a162dcde30579bccac177e03d9027c1b3bb2ffbb 100644 --- a/apps/encryption/lib/util.php +++ b/apps/encryption/lib/util.php @@ -2,8 +2,6 @@ /** * @author Björn Schießle * @author Clark Tomlinson - * @author Morris Jobke - * @author Thomas Müller * * @copyright Copyright (c) 2015, ownCloud, Inc. * @license AGPL-3.0 @@ -101,6 +99,16 @@ class Util { return ($recoveryMode === '1'); } + /** + * check if master key is enabled + * + * @return bool + */ + public function isMasterKeyEnabled() { + $userMasterKey = $this->config->getAppValue('encryption', 'useMasterKey', '0'); + return ($userMasterKey === '1'); + } + /** * @param $enabled * @return bool diff --git a/apps/encryption/templates/altmail.php b/apps/encryption/templates/altmail.php new file mode 100644 index 0000000000000000000000000000000000000000..b92c6b4a7c45560365531da7d8d717cefafa800c --- /dev/null +++ b/apps/encryption/templates/altmail.php @@ -0,0 +1,16 @@ +t("Hey there,\n\nthe admin enabled server-side-encryption. Your files were encrypted using the password '%s'.\n\nPlease login to the web interface, go to the section 'ownCloud basic encryption module' of your personal settings and update your encryption password by entering this password into the 'old log-in password' field and your current login-password.\n\n", array($_['password']))); +if ( isset($_['expiration']) ) { + print_unescaped($l->t("The share will expire on %s.", array($_['expiration']))); + print_unescaped("\n\n"); +} +// TRANSLATORS term at the end of a mail +p($l->t("Cheers!")); +?> + + -- +getName() . ' - ' . $theme->getSlogan()); ?> +getBaseUrl()); diff --git a/apps/encryption/templates/mail.php b/apps/encryption/templates/mail.php new file mode 100644 index 0000000000000000000000000000000000000000..2b61e915decdc934e1fe920fa9bd0f16fab2c626 --- /dev/null +++ b/apps/encryption/templates/mail.php @@ -0,0 +1,39 @@ + + + +
+ + + + + + + + + + + + + + + + + + +
  + <?php p($theme->getName()); ?> +
 
  + t('Hey there,

the admin enabled server-side-encryption. Your files were encrypted using the password %s.

Please login to the web interface, go to the section "ownCloud basic encryption module" of your personal settings and update your encryption password by entering this password into the "old log-in password" field and your current login-password.

', array($_['password']))); + // TRANSLATORS term at the end of a mail + p($l->t('Cheers!')); + ?> +
 
 --
+ getName()); ?> - + getSlogan()); ?> +
getBaseUrl());?> +
 
+
diff --git a/apps/encryption/tests/command/testenablemasterkey.php b/apps/encryption/tests/command/testenablemasterkey.php new file mode 100644 index 0000000000000000000000000000000000000000..c905329269e1b4d34e329a8c2fbe967bc220cea7 --- /dev/null +++ b/apps/encryption/tests/command/testenablemasterkey.php @@ -0,0 +1,103 @@ + + * + * @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 + * + */ + + +namespace OCA\Encryption\Tests\Command; + + +use OCA\Encryption\Command\EnableMasterKey; +use Test\TestCase; + +class TestEnableMasterKey extends TestCase { + + /** @var EnableMasterKey */ + protected $enableMasterKey; + + /** @var Util | \PHPUnit_Framework_MockObject_MockObject */ + protected $util; + + /** @var \OCP\IConfig | \PHPUnit_Framework_MockObject_MockObject */ + protected $config; + + /** @var \Symfony\Component\Console\Helper\QuestionHelper | \PHPUnit_Framework_MockObject_MockObject */ + protected $questionHelper; + + /** @var \Symfony\Component\Console\Output\OutputInterface | \PHPUnit_Framework_MockObject_MockObject */ + protected $output; + + /** @var \Symfony\Component\Console\Input\InputInterface | \PHPUnit_Framework_MockObject_MockObject */ + protected $input; + + public function setUp() { + parent::setUp(); + + $this->util = $this->getMockBuilder('OCA\Encryption\Util') + ->disableOriginalConstructor()->getMock(); + $this->config = $this->getMockBuilder('OCP\IConfig') + ->disableOriginalConstructor()->getMock(); + $this->questionHelper = $this->getMockBuilder('Symfony\Component\Console\Helper\QuestionHelper') + ->disableOriginalConstructor()->getMock(); + $this->output = $this->getMockBuilder('Symfony\Component\Console\Output\OutputInterface') + ->disableOriginalConstructor()->getMock(); + $this->input = $this->getMockBuilder('Symfony\Component\Console\Input\InputInterface') + ->disableOriginalConstructor()->getMock(); + + $this->enableMasterKey = new EnableMasterKey($this->util, $this->config, $this->questionHelper); + } + + /** + * @dataProvider dataTestExecute + * + * @param bool $isAlreadyEnabled + * @param string $answer + */ + public function testExecute($isAlreadyEnabled, $answer) { + + $this->util->expects($this->once())->method('isMasterKeyEnabled') + ->willReturn($isAlreadyEnabled); + + if ($isAlreadyEnabled) { + $this->output->expects($this->once())->method('writeln') + ->with('Master key already enabled'); + } else { + if ($answer === 'y') { + $this->questionHelper->expects($this->once())->method('ask')->willReturn(true); + $this->config->expects($this->once())->method('setAppValue') + ->with('encryption', 'useMasterKey', '1'); + } else { + $this->questionHelper->expects($this->once())->method('ask')->willReturn(false); + $this->config->expects($this->never())->method('setAppValue'); + + } + } + + $this->invokePrivate($this->enableMasterKey, 'execute', [$this->input, $this->output]); + } + + public function dataTestExecute() { + return [ + [true, ''], + [false, 'y'], + [false, 'n'], + [false, ''] + ]; + } +} diff --git a/apps/encryption/tests/controller/RecoveryControllerTest.php b/apps/encryption/tests/controller/RecoveryControllerTest.php index d122b992ef0a4ad8e154434b73dc55f2a1f017f7..6c554c97ae9da22534f833f00c0beeefc51593b1 100644 --- a/apps/encryption/tests/controller/RecoveryControllerTest.php +++ b/apps/encryption/tests/controller/RecoveryControllerTest.php @@ -1,7 +1,6 @@ - * @author Morris Jobke * * @copyright Copyright (c) 2015, ownCloud, Inc. * @license AGPL-3.0 diff --git a/apps/encryption/tests/controller/SettingsControllerTest.php b/apps/encryption/tests/controller/SettingsControllerTest.php index d985c7d7d25638f296a34ab2cf3b5576052b3bc9..724a01522af392593eace2d8d86c12dbb2340f1a 100644 --- a/apps/encryption/tests/controller/SettingsControllerTest.php +++ b/apps/encryption/tests/controller/SettingsControllerTest.php @@ -2,7 +2,6 @@ /** * @author Björn Schießle * @author Joas Schilling - * @author Morris Jobke * * @copyright Copyright (c) 2015, ownCloud, Inc. * @license AGPL-3.0 @@ -54,6 +53,9 @@ class SettingsControllerTest extends TestCase { /** @var \PHPUnit_Framework_MockObject_MockObject */ private $sessionMock; + /** @var \PHPUnit_Framework_MockObject_MockObject */ + private $ocSessionMock; + protected function setUp() { parent::setUp(); @@ -91,9 +93,11 @@ class SettingsControllerTest extends TestCase { ]) ->getMock(); + $this->ocSessionMock = $this->getMockBuilder('\OCP\ISession')->disableOriginalConstructor()->getMock(); + $this->userSessionMock->expects($this->any()) ->method('getUID') - ->willReturn('testUser'); + ->willReturn('testUserUid'); $this->userSessionMock->expects($this->any()) ->method($this->anything()) @@ -110,7 +114,8 @@ class SettingsControllerTest extends TestCase { $this->userSessionMock, $this->keyManagerMock, $this->cryptMock, - $this->sessionMock + $this->sessionMock, + $this->ocSessionMock ); } @@ -122,8 +127,10 @@ class SettingsControllerTest extends TestCase { $oldPassword = 'old'; $newPassword = 'new'; + $this->userSessionMock->expects($this->once())->method('getUID')->willReturn('uid'); + $this->userManagerMock - ->expects($this->once()) + ->expects($this->exactly(2)) ->method('checkPassword') ->willReturn(false); @@ -171,16 +178,22 @@ class SettingsControllerTest extends TestCase { $oldPassword = 'old'; $newPassword = 'new'; - $this->userSessionMock - ->expects($this->once()) - ->method('getUID') - ->willReturn('testUser'); + $this->ocSessionMock->expects($this->once()) + ->method('get')->with('loginname')->willReturn('testUser'); $this->userManagerMock - ->expects($this->once()) + ->expects($this->at(0)) + ->method('checkPassword') + ->with('testUserUid', 'new') + ->willReturn(false); + $this->userManagerMock + ->expects($this->at(1)) ->method('checkPassword') + ->with('testUser', 'new') ->willReturn(true); + + $this->cryptMock ->expects($this->once()) ->method('decryptPrivateKey') @@ -200,7 +213,7 @@ class SettingsControllerTest extends TestCase { $this->keyManagerMock ->expects($this->once()) ->method('setPrivateKey') - ->with($this->equalTo('testUser'), $this->equalTo('header.encryptedKey')); + ->with($this->equalTo('testUserUid'), $this->equalTo('header.encryptedKey')); $this->sessionMock ->expects($this->once()) diff --git a/apps/encryption/tests/hooks/UserHooksTest.php b/apps/encryption/tests/hooks/UserHooksTest.php index aa16a4d87039600fe0b93ebb2f4233d6252c22a0..ada0081f649c116895ea6b90fa41ef38c7151306 100644 --- a/apps/encryption/tests/hooks/UserHooksTest.php +++ b/apps/encryption/tests/hooks/UserHooksTest.php @@ -2,7 +2,6 @@ /** * @author Björn Schießle * @author Clark Tomlinson - * @author Morris Jobke * * @copyright Copyright (c) 2015, ownCloud, Inc. * @license AGPL-3.0 @@ -47,6 +46,11 @@ class UserHooksTest extends TestCase { * @var \PHPUnit_Framework_MockObject_MockObject */ private $keyManagerMock; + /** + * @var \PHPUnit_Framework_MockObject_MockObject + */ + private $userManagerMock; + /** * @var \PHPUnit_Framework_MockObject_MockObject */ @@ -101,11 +105,58 @@ class UserHooksTest extends TestCase { $this->assertNull($this->instance->postDeleteUser($this->params)); } - public function testPreSetPassphrase() { - $this->userSessionMock->expects($this->once()) - ->method('canChangePassword'); + /** + * @dataProvider dataTestPreSetPassphrase + */ + public function testPreSetPassphrase($canChange) { + + /** @var UserHooks | \PHPUnit_Framework_MockObject_MockObject $instance */ + $instance = $this->getMockBuilder('OCA\Encryption\Hooks\UserHooks') + ->setConstructorArgs( + [ + $this->keyManagerMock, + $this->userManagerMock, + $this->loggerMock, + $this->userSetupMock, + $this->userSessionMock, + $this->utilMock, + $this->sessionMock, + $this->cryptMock, + $this->recoveryMock + ] + ) + ->setMethods(['setPassphrase']) + ->getMock(); + + $userMock = $this->getMock('OCP\IUser'); + + $this->userManagerMock->expects($this->once()) + ->method('get') + ->with($this->params['uid']) + ->willReturn($userMock); + $userMock->expects($this->once()) + ->method('canChangePassword') + ->willReturn($canChange); + + if ($canChange) { + // in this case the password will be changed in the post hook + $instance->expects($this->never())->method('setPassphrase'); + } else { + // if user can't change the password we update the encryption + // key password already in the pre hook + $instance->expects($this->once()) + ->method('setPassphrase') + ->with($this->params); + } + + $instance->preSetPassphrase($this->params); + } - $this->assertNull($this->instance->preSetPassphrase($this->params)); + public function dataTestPreSetPassphrase() { + return [ + [true], + [false] + ]; } public function testSetPassphrase() { @@ -186,6 +237,7 @@ class UserHooksTest extends TestCase { ->willReturn(false); $userHooks = new UserHooks($this->keyManagerMock, + $this->userManagerMock, $this->loggerMock, $this->userSetupMock, $userSessionMock, @@ -216,6 +268,9 @@ class UserHooksTest extends TestCase { $this->keyManagerMock = $this->getMockBuilder('OCA\Encryption\KeyManager') ->disableOriginalConstructor() ->getMock(); + $this->userManagerMock = $this->getMockBuilder('OCP\IUserManager') + ->disableOriginalConstructor() + ->getMock(); $this->userSetupMock = $this->getMockBuilder('OCA\Encryption\Users\Setup') ->disableOriginalConstructor() ->getMock(); @@ -258,6 +313,7 @@ class UserHooksTest extends TestCase { $this->recoveryMock = $recoveryMock; $this->utilMock = $utilMock; $this->instance = new UserHooks($this->keyManagerMock, + $this->userManagerMock, $this->loggerMock, $this->userSetupMock, $this->userSessionMock, diff --git a/apps/encryption/tests/lib/HookManagerTest.php b/apps/encryption/tests/lib/HookManagerTest.php index b1d511cb89b2393b8b9705ad193c1d9b2d56895e..288b27b5d8b3896176585b97e10f8555f0d1c441 100644 --- a/apps/encryption/tests/lib/HookManagerTest.php +++ b/apps/encryption/tests/lib/HookManagerTest.php @@ -2,8 +2,6 @@ /** * @author Clark Tomlinson * @author Joas Schilling - * @author Morris Jobke - * @author Thomas Müller * * @copyright Copyright (c) 2015, ownCloud, Inc. * @license AGPL-3.0 diff --git a/apps/encryption/tests/lib/KeyManagerTest.php b/apps/encryption/tests/lib/KeyManagerTest.php index 71b00cf254add7e95f4e9927f683abe79d4e78c4..35ae8ad6ca065647baf73f8c0e6e089045f5ed60 100644 --- a/apps/encryption/tests/lib/KeyManagerTest.php +++ b/apps/encryption/tests/lib/KeyManagerTest.php @@ -3,7 +3,6 @@ * @author Björn Schießle * @author Clark Tomlinson * @author Joas Schilling - * @author Morris Jobke * @author Thomas Müller * * @copyright Copyright (c) 2015, ownCloud, Inc. @@ -27,6 +26,7 @@ namespace OCA\Encryption\Tests; use OCA\Encryption\KeyManager; +use OCA\Encryption\Session; use Test\TestCase; class KeyManagerTest extends TestCase { @@ -237,24 +237,62 @@ class KeyManagerTest extends TestCase { } + /** + * @dataProvider dataTestInit + * + * @param bool $useMasterKey + */ + public function testInit($useMasterKey) { + + $instance = $this->getMockBuilder('OCA\Encryption\KeyManager') + ->setConstructorArgs( + [ + $this->keyStorageMock, + $this->cryptMock, + $this->configMock, + $this->userMock, + $this->sessionMock, + $this->logMock, + $this->utilMock + ] + )->setMethods(['getMasterKeyId', 'getMasterKeyPassword', 'getSystemPrivateKey', 'getPrivateKey']) + ->getMock(); - public function testInit() { - $this->keyStorageMock->expects($this->any()) - ->method('getUserKey') - ->with($this->equalTo($this->userId), $this->equalTo('privateKey')) - ->willReturn('privateKey'); - $this->cryptMock->expects($this->any()) - ->method('decryptPrivateKey') - ->with($this->equalTo('privateKey'), $this->equalTo('pass')) - ->willReturn('decryptedPrivateKey'); + $this->utilMock->expects($this->once())->method('isMasterKeyEnabled') + ->willReturn($useMasterKey); + + $this->sessionMock->expects($this->at(0))->method('setStatus') + ->with(Session::INIT_EXECUTED); + + $instance->expects($this->any())->method('getMasterKeyId')->willReturn('masterKeyId'); + $instance->expects($this->any())->method('getMasterKeyPassword')->willReturn('masterKeyPassword'); + $instance->expects($this->any())->method('getSystemPrivateKey')->with('masterKeyId')->willReturn('privateMasterKey'); + $instance->expects($this->any())->method('getPrivateKey')->with($this->userId)->willReturn('privateUserKey'); + + if($useMasterKey) { + $this->cryptMock->expects($this->once())->method('decryptPrivateKey') + ->with('privateMasterKey', 'masterKeyPassword', 'masterKeyId') + ->willReturn('key'); + } else { + $this->cryptMock->expects($this->once())->method('decryptPrivateKey') + ->with('privateUserKey', 'pass', $this->userId) + ->willReturn('key'); + } + $this->sessionMock->expects($this->once())->method('setPrivateKey') + ->with('key'); - $this->assertTrue( - $this->instance->init($this->userId, 'pass') - ); + $this->assertTrue($instance->init($this->userId, 'pass')); + } + public function dataTestInit() { + return [ + [true], + [false] + ]; } + public function testSetRecoveryKey() { $this->keyStorageMock->expects($this->exactly(2)) ->method('setSystemUserKey') @@ -401,5 +439,92 @@ class KeyManagerTest extends TestCase { ); } + public function testGetMasterKeyId() { + $this->assertSame('systemKeyId', $this->instance->getMasterKeyId()); + } + + public function testGetPublicMasterKey() { + $this->keyStorageMock->expects($this->once())->method('getSystemUserKey') + ->with('systemKeyId.publicKey', \OCA\Encryption\Crypto\Encryption::ID) + ->willReturn(true); + + $this->assertTrue( + $this->instance->getPublicMasterKey() + ); + } + + public function testGetMasterKeyPassword() { + $this->configMock->expects($this->once())->method('getSystemValue')->with('secret') + ->willReturn('password'); + + $this->assertSame('password', + $this->invokePrivate($this->instance, 'getMasterKeyPassword', []) + ); + } + + /** + * @expectedException \Exception + */ + public function testGetMasterKeyPasswordException() { + $this->configMock->expects($this->once())->method('getSystemValue')->with('secret') + ->willReturn(''); + + $this->invokePrivate($this->instance, 'getMasterKeyPassword', []); + } + + /** + * @dataProvider dataTestValidateMasterKey + * + * @param $masterKey + */ + public function testValidateMasterKey($masterKey) { + + /** @var \OCA\Encryption\KeyManager | \PHPUnit_Framework_MockObject_MockObject $instance */ + $instance = $this->getMockBuilder('OCA\Encryption\KeyManager') + ->setConstructorArgs( + [ + $this->keyStorageMock, + $this->cryptMock, + $this->configMock, + $this->userMock, + $this->sessionMock, + $this->logMock, + $this->utilMock + ] + )->setMethods(['getPublicMasterKey', 'setSystemPrivateKey', 'getMasterKeyPassword']) + ->getMock(); + + $instance->expects($this->once())->method('getPublicMasterKey') + ->willReturn($masterKey); + + $instance->expects($this->any())->method('getMasterKeyPassword')->willReturn('masterKeyPassword'); + $this->cryptMock->expects($this->any())->method('generateHeader')->willReturn('header'); + + if(empty($masterKey)) { + $this->cryptMock->expects($this->once())->method('createKeyPair') + ->willReturn(['publicKey' => 'public', 'privateKey' => 'private']); + $this->keyStorageMock->expects($this->once())->method('setSystemUserKey') + ->with('systemKeyId.publicKey', 'public', \OCA\Encryption\Crypto\Encryption::ID); + $this->cryptMock->expects($this->once())->method('encryptPrivateKey') + ->with('private', 'masterKeyPassword', 'systemKeyId') + ->willReturn('EncryptedKey'); + $instance->expects($this->once())->method('setSystemPrivateKey') + ->with('systemKeyId', 'headerEncryptedKey'); + } else { + $this->cryptMock->expects($this->never())->method('createKeyPair'); + $this->keyStorageMock->expects($this->never())->method('setSystemUserKey'); + $this->cryptMock->expects($this->never())->method('encryptPrivateKey'); + $instance->expects($this->never())->method('setSystemPrivateKey'); + } + + $instance->validateMasterKey(); + } + + public function dataTestValidateMasterKey() { + return [ + ['masterKey'], + [''] + ]; + } } diff --git a/apps/encryption/tests/lib/MigrationTest.php b/apps/encryption/tests/lib/MigrationTest.php index bb1f0a310a2360754ed39d830197737b630091a8..6146e4e7cfb6a96d020e661267b05a94f68f6b45 100644 --- a/apps/encryption/tests/lib/MigrationTest.php +++ b/apps/encryption/tests/lib/MigrationTest.php @@ -2,7 +2,6 @@ /** * @author Björn Schießle * @author Joas Schilling - * @author Morris Jobke * * @copyright Copyright (c) 2015, ownCloud, Inc. * @license AGPL-3.0 diff --git a/apps/encryption/tests/lib/RecoveryTest.php b/apps/encryption/tests/lib/RecoveryTest.php index c0624a36be95006b8887f5d826a04d348dd5305d..0cdd76d6b44985ff1d78624d5500d9b313a0dfcc 100644 --- a/apps/encryption/tests/lib/RecoveryTest.php +++ b/apps/encryption/tests/lib/RecoveryTest.php @@ -3,8 +3,6 @@ * @author Björn Schießle * @author Clark Tomlinson * @author Joas Schilling - * @author Morris Jobke - * @author Thomas Müller * * @copyright Copyright (c) 2015, ownCloud, Inc. * @license AGPL-3.0 diff --git a/apps/encryption/tests/lib/SessionTest.php b/apps/encryption/tests/lib/SessionTest.php index e036c4399398d870c42dcecbcff01e6cc7bbc38c..1cc0d89a93d97fe564b5137c20f57dc53ebdf830 100644 --- a/apps/encryption/tests/lib/SessionTest.php +++ b/apps/encryption/tests/lib/SessionTest.php @@ -1,5 +1,6 @@ * @author Clark Tomlinson * @author Thomas Müller * @@ -56,6 +57,7 @@ class SessionTest extends TestCase { * @depends testSetAndGetPrivateKey */ public function testIsPrivateKeySet() { + $this->instance->setPrivateKey('dummyPrivateKey'); $this->assertTrue($this->instance->isPrivateKeySet()); unset(self::$tempStorage['privateKey']); @@ -65,6 +67,51 @@ class SessionTest extends TestCase { self::$tempStorage['privateKey'] = 'dummyPrivateKey'; } + public function testDecryptAllModeActivated() { + $this->instance->prepareDecryptAll('user1', 'usersKey'); + $this->assertTrue($this->instance->decryptAllModeActivated()); + $this->assertSame('user1', $this->instance->getDecryptAllUid()); + $this->assertSame('usersKey', $this->instance->getDecryptAllKey()); + } + + public function testDecryptAllModeDeactivated() { + $this->assertFalse($this->instance->decryptAllModeActivated()); + } + + /** + * @expectedException \Exception + * @expectExceptionMessage 'Please activate decrypt all mode first' + */ + public function testGetDecryptAllUidException() { + $this->instance->getDecryptAllUid(); + } + + /** + * @expectedException \Exception + * @expectExceptionMessage 'No uid found while in decrypt all mode' + */ + public function testGetDecryptAllUidException2() { + $this->instance->prepareDecryptAll(null, 'key'); + $this->instance->getDecryptAllUid(); + } + + /** + * @expectedException \OCA\Encryption\Exceptions\PrivateKeyMissingException + * @expectExceptionMessage 'Please activate decrypt all mode first' + */ + public function testGetDecryptAllKeyException() { + $this->instance->getDecryptAllKey(); + } + + /** + * @expectedException \OCA\Encryption\Exceptions\PrivateKeyMissingException + * @expectExceptionMessage 'No key found while in decrypt all mode' + */ + public function testGetDecryptAllKeyException2() { + $this->instance->prepareDecryptAll('user', null); + $this->instance->getDecryptAllKey(); + } + /** * */ @@ -112,6 +159,10 @@ class SessionTest extends TestCase { * */ public function testClearWillRemoveValues() { + $this->instance->setPrivateKey('privateKey'); + $this->instance->setStatus('initStatus'); + $this->instance->prepareDecryptAll('user', 'key'); + $this->assertNotEmpty(self::$tempStorage); $this->instance->clear(); $this->assertEmpty(self::$tempStorage); } @@ -138,4 +189,9 @@ class SessionTest extends TestCase { $this->instance = new Session($this->sessionMock); } + + protected function tearDown() { + self::$tempStorage = []; + parent::tearDown(); + } } diff --git a/apps/encryption/tests/lib/UtilTest.php b/apps/encryption/tests/lib/UtilTest.php index e75e8ea36b4c691e2310c86f25e4005bf655f3a5..723cc9fb9107593c3cb0a649027dff4a0ffd8672 100644 --- a/apps/encryption/tests/lib/UtilTest.php +++ b/apps/encryption/tests/lib/UtilTest.php @@ -2,8 +2,6 @@ /** * @author Björn Schießle * @author Clark Tomlinson - * @author Morris Jobke - * @author Thomas Müller * * @copyright Copyright (c) 2015, ownCloud, Inc. * @license AGPL-3.0 @@ -132,4 +130,25 @@ class UtilTest extends TestCase { return $default ?: null; } + /** + * @dataProvider dataTestIsMasterKeyEnabled + * + * @param string $value + * @param bool $expect + */ + public function testIsMasterKeyEnabled($value, $expect) { + $this->configMock->expects($this->once())->method('getAppValue') + ->with('encryption', 'useMasterKey', '0')->willReturn($value); + $this->assertSame($expect, + $this->instance->isMasterKeyEnabled() + ); + } + + public function dataTestIsMasterKeyEnabled() { + return [ + ['0', false], + ['1', true] + ]; + } + } diff --git a/apps/encryption/tests/lib/crypto/cryptTest.php b/apps/encryption/tests/lib/crypto/cryptTest.php index 3c7767a8908256e712ef980569416c121a48ad52..cad347618400f25ca8519687bf37939fad4acdf7 100644 --- a/apps/encryption/tests/lib/crypto/cryptTest.php +++ b/apps/encryption/tests/lib/crypto/cryptTest.php @@ -2,7 +2,6 @@ /** * @author Björn Schießle * @author Joas Schilling - * @author Morris Jobke * * @copyright Copyright (c) 2015, ownCloud, Inc. * @license AGPL-3.0 @@ -363,4 +362,19 @@ class cryptTest extends TestCase { ]; } + public function testIsValidPrivateKey() { + $res = openssl_pkey_new(); + openssl_pkey_export($res, $privateKey); + + // valid private key + $this->assertTrue( + $this->invokePrivate($this->crypt, 'isValidPrivateKey', [$privateKey]) + ); + + // invalid private key + $this->assertFalse( + $this->invokePrivate($this->crypt, 'isValidPrivateKey', ['foo']) + ); + } + } diff --git a/apps/encryption/tests/lib/crypto/decryptalltest.php b/apps/encryption/tests/lib/crypto/decryptalltest.php new file mode 100644 index 0000000000000000000000000000000000000000..d6a52fe97c02b97c093508f4df8f1402f7650ecc --- /dev/null +++ b/apps/encryption/tests/lib/crypto/decryptalltest.php @@ -0,0 +1,125 @@ + + * + * @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 + * + */ + + +namespace OCA\Encryption\Tests\lib\Crypto; + + +use OCA\Encryption\Crypto\Crypt; +use OCA\Encryption\Crypto\DecryptAll; +use OCA\Encryption\KeyManager; +use OCA\Encryption\Session; +use OCA\Encryption\Util; +use Symfony\Component\Console\Helper\QuestionHelper; +use Test\TestCase; + +class DecryptAllTest extends TestCase { + + /** @var DecryptAll */ + protected $instance; + + /** @var Util | \PHPUnit_Framework_MockObject_MockObject */ + protected $util; + + /** @var KeyManager | \PHPUnit_Framework_MockObject_MockObject */ + protected $keyManager; + + /** @var Crypt | \PHPUnit_Framework_MockObject_MockObject */ + protected $crypt; + + /** @var Session | \PHPUnit_Framework_MockObject_MockObject */ + protected $session; + + /** @var QuestionHelper | \PHPUnit_Framework_MockObject_MockObject */ + protected $questionHelper; + + public function setUp() { + parent::setUp(); + + $this->util = $this->getMockBuilder('OCA\Encryption\Util') + ->disableOriginalConstructor()->getMock(); + $this->keyManager = $this->getMockBuilder('OCA\Encryption\KeyManager') + ->disableOriginalConstructor()->getMock(); + $this->crypt = $this->getMockBuilder('OCA\Encryption\Crypto\Crypt') + ->disableOriginalConstructor()->getMock(); + $this->session = $this->getMockBuilder('OCA\Encryption\Session') + ->disableOriginalConstructor()->getMock(); + $this->questionHelper = $this->getMockBuilder('Symfony\Component\Console\Helper\QuestionHelper') + ->disableOriginalConstructor()->getMock(); + + $this->instance = new DecryptAll( + $this->util, + $this->keyManager, + $this->crypt, + $this->session, + $this->questionHelper + ); + } + + public function testUpdateSession() { + $this->session->expects($this->once())->method('prepareDecryptAll') + ->with('user1', 'key1'); + + $this->invokePrivate($this->instance, 'updateSession', ['user1', 'key1']); + } + + /** + * @dataProvider dataTestGetPrivateKey + * + * @param string $user + * @param string $recoveryKeyId + */ + public function testGetPrivateKey($user, $recoveryKeyId) { + $password = 'passwd'; + $recoveryKey = 'recoveryKey'; + $userKey = 'userKey'; + $unencryptedKey = 'unencryptedKey'; + + $this->keyManager->expects($this->any())->method('getRecoveryKeyId') + ->willReturn($recoveryKeyId); + + if ($user === $recoveryKeyId) { + $this->keyManager->expects($this->once())->method('getSystemPrivateKey') + ->with($recoveryKeyId)->willReturn($recoveryKey); + $this->keyManager->expects($this->never())->method('getPrivateKey'); + $this->crypt->expects($this->once())->method('decryptPrivateKey') + ->with($recoveryKey, $password)->willReturn($unencryptedKey); + } else { + $this->keyManager->expects($this->never())->method('getSystemPrivateKey'); + $this->keyManager->expects($this->once())->method('getPrivateKey') + ->with($user)->willReturn($userKey); + $this->crypt->expects($this->once())->method('decryptPrivateKey') + ->with($userKey, $password, $user)->willReturn($unencryptedKey); + } + + $this->assertSame($unencryptedKey, + $this->invokePrivate($this->instance, 'getPrivateKey', [$user, $password]) + ); + } + + public function dataTestGetPrivateKey() { + return [ + ['user1', 'recoveryKey'], + ['recoveryKeyId', 'recoveryKeyId'] + ]; + } + +} diff --git a/apps/encryption/tests/lib/crypto/encryptalltest.php b/apps/encryption/tests/lib/crypto/encryptalltest.php new file mode 100644 index 0000000000000000000000000000000000000000..e907d154a2d9997c426f55af22498774dcdedfef --- /dev/null +++ b/apps/encryption/tests/lib/crypto/encryptalltest.php @@ -0,0 +1,291 @@ + + * + * @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 + * + */ + + +namespace OCA\Encryption\Tests\lib\Crypto; + + +use OCA\Encryption\Crypto\EncryptAll; +use Test\TestCase; + +class EncryptAllTest extends TestCase { + + /** @var \PHPUnit_Framework_MockObject_MockObject | \OCA\Encryption\KeyManager */ + protected $keyManager; + + /** @var \PHPUnit_Framework_MockObject_MockObject | \OCP\IUserManager */ + protected $userManager; + + /** @var \PHPUnit_Framework_MockObject_MockObject | \OCA\Encryption\Users\Setup */ + protected $setupUser; + + /** @var \PHPUnit_Framework_MockObject_MockObject | \OC\Files\View */ + protected $view; + + /** @var \PHPUnit_Framework_MockObject_MockObject | \OCP\IConfig */ + protected $config; + + /** @var \PHPUnit_Framework_MockObject_MockObject | \OCP\Mail\IMailer */ + protected $mailer; + + /** @var \PHPUnit_Framework_MockObject_MockObject | \OCP\IL10N */ + protected $l; + + /** @var \PHPUnit_Framework_MockObject_MockObject | \Symfony\Component\Console\Helper\QuestionHelper */ + protected $questionHelper; + + /** @var \PHPUnit_Framework_MockObject_MockObject | \Symfony\Component\Console\Input\InputInterface */ + protected $inputInterface; + + /** @var \PHPUnit_Framework_MockObject_MockObject | \Symfony\Component\Console\Output\OutputInterface */ + protected $outputInterface; + + /** @var \PHPUnit_Framework_MockObject_MockObject | \OCP\UserInterface */ + protected $userInterface; + + /** @var \PHPUnit_Framework_MockObject_MockObject | \OCP\Security\ISecureRandom */ + protected $secureRandom; + + /** @var EncryptAll */ + protected $encryptAll; + + function setUp() { + parent::setUp(); + $this->setupUser = $this->getMockBuilder('OCA\Encryption\Users\Setup') + ->disableOriginalConstructor()->getMock(); + $this->keyManager = $this->getMockBuilder('OCA\Encryption\KeyManager') + ->disableOriginalConstructor()->getMock(); + $this->userManager = $this->getMockBuilder('OCP\IUserManager') + ->disableOriginalConstructor()->getMock(); + $this->view = $this->getMockBuilder('OC\Files\View') + ->disableOriginalConstructor()->getMock(); + $this->config = $this->getMockBuilder('OCP\IConfig') + ->disableOriginalConstructor()->getMock(); + $this->mailer = $this->getMockBuilder('OCP\Mail\IMailer') + ->disableOriginalConstructor()->getMock(); + $this->l = $this->getMockBuilder('OCP\IL10N') + ->disableOriginalConstructor()->getMock(); + $this->questionHelper = $this->getMockBuilder('Symfony\Component\Console\Helper\QuestionHelper') + ->disableOriginalConstructor()->getMock(); + $this->inputInterface = $this->getMockBuilder('Symfony\Component\Console\Input\InputInterface') + ->disableOriginalConstructor()->getMock(); + $this->outputInterface = $this->getMockBuilder('Symfony\Component\Console\Output\OutputInterface') + ->disableOriginalConstructor()->getMock(); + $this->userInterface = $this->getMockBuilder('OCP\UserInterface') + ->disableOriginalConstructor()->getMock(); + + + $this->outputInterface->expects($this->any())->method('getFormatter') + ->willReturn($this->getMock('\Symfony\Component\Console\Formatter\OutputFormatterInterface')); + + $this->userManager->expects($this->any())->method('getBackends')->willReturn([$this->userInterface]); + $this->userInterface->expects($this->any())->method('getUsers')->willReturn(['user1', 'user2']); + + $this->secureRandom = $this->getMockBuilder('OCP\Security\ISecureRandom')->disableOriginalConstructor()->getMock(); + $this->secureRandom->expects($this->any())->method('getMediumStrengthGenerator')->willReturn($this->secureRandom); + $this->secureRandom->expects($this->any())->method('getLowStrengthGenerator')->willReturn($this->secureRandom); + $this->secureRandom->expects($this->any())->method('generate')->willReturn('12345678'); + + + $this->encryptAll = new EncryptAll( + $this->setupUser, + $this->userManager, + $this->view, + $this->keyManager, + $this->config, + $this->mailer, + $this->l, + $this->questionHelper, + $this->secureRandom + ); + } + + public function testEncryptAll() { + /** @var EncryptAll | \PHPUnit_Framework_MockObject_MockObject $encryptAll */ + $encryptAll = $this->getMockBuilder('OCA\Encryption\Crypto\EncryptAll') + ->setConstructorArgs( + [ + $this->setupUser, + $this->userManager, + $this->view, + $this->keyManager, + $this->config, + $this->mailer, + $this->l, + $this->questionHelper, + $this->secureRandom + ] + ) + ->setMethods(['createKeyPairs', 'encryptAllUsersFiles', 'outputPasswords']) + ->getMock(); + + $encryptAll->expects($this->at(0))->method('createKeyPairs')->with(); + $encryptAll->expects($this->at(1))->method('encryptAllUsersFiles')->with(); + $encryptAll->expects($this->at(2))->method('outputPasswords')->with(); + + $encryptAll->encryptAll($this->inputInterface, $this->outputInterface); + + } + + public function testCreateKeyPairs() { + /** @var EncryptAll | \PHPUnit_Framework_MockObject_MockObject $encryptAll */ + $encryptAll = $this->getMockBuilder('OCA\Encryption\Crypto\EncryptAll') + ->setConstructorArgs( + [ + $this->setupUser, + $this->userManager, + $this->view, + $this->keyManager, + $this->config, + $this->mailer, + $this->l, + $this->questionHelper, + $this->secureRandom + ] + ) + ->setMethods(['setupUserFS', 'generateOneTimePassword']) + ->getMock(); + + + // set protected property $output + $this->invokePrivate($encryptAll, 'output', [$this->outputInterface]); + + $this->keyManager->expects($this->exactly(2))->method('userHasKeys') + ->willReturnCallback( + function ($user) { + if ($user === 'user1') { + return false; + } + return true; + } + ); + + $encryptAll->expects($this->once())->method('setupUserFS')->with('user1'); + $encryptAll->expects($this->once())->method('generateOneTimePassword')->with('user1')->willReturn('password'); + $this->setupUser->expects($this->once())->method('setupUser')->with('user1', 'password'); + + $this->invokePrivate($encryptAll, 'createKeyPairs'); + + $userPasswords = $this->invokePrivate($encryptAll, 'userPasswords'); + + // we only expect the skipped user, because generateOneTimePassword which + // would set the user with the new password was mocked. + // This method will be tested separately + $this->assertSame(1, count($userPasswords)); + $this->assertSame('', $userPasswords['user2']); + } + + public function testEncryptAllUsersFiles() { + /** @var EncryptAll | \PHPUnit_Framework_MockObject_MockObject $encryptAll */ + $encryptAll = $this->getMockBuilder('OCA\Encryption\Crypto\EncryptAll') + ->setConstructorArgs( + [ + $this->setupUser, + $this->userManager, + $this->view, + $this->keyManager, + $this->config, + $this->mailer, + $this->l, + $this->questionHelper, + $this->secureRandom + ] + ) + ->setMethods(['encryptUsersFiles']) + ->getMock(); + + // set protected property $output + $this->invokePrivate($encryptAll, 'output', [$this->outputInterface]); + $this->invokePrivate($encryptAll, 'userPasswords', [['user1' => 'pwd1', 'user2' => 'pwd2']]); + + $encryptAll->expects($this->at(0))->method('encryptUsersFiles')->with('user1'); + $encryptAll->expects($this->at(1))->method('encryptUsersFiles')->with('user2'); + + $this->invokePrivate($encryptAll, 'encryptAllUsersFiles'); + + } + + public function testEncryptUsersFiles() { + /** @var EncryptAll | \PHPUnit_Framework_MockObject_MockObject $encryptAll */ + $encryptAll = $this->getMockBuilder('OCA\Encryption\Crypto\EncryptAll') + ->setConstructorArgs( + [ + $this->setupUser, + $this->userManager, + $this->view, + $this->keyManager, + $this->config, + $this->mailer, + $this->l, + $this->questionHelper, + $this->secureRandom + ] + ) + ->setMethods(['encryptFile']) + ->getMock(); + + + $this->view->expects($this->at(0))->method('getDirectoryContent') + ->with('/user1/files')->willReturn( + [ + ['name' => 'foo', 'type'=>'dir'], + ['name' => 'bar', 'type'=>'file'], + ] + ); + + $this->view->expects($this->at(3))->method('getDirectoryContent') + ->with('/user1/files/foo')->willReturn( + [ + ['name' => 'subfile', 'type'=>'file'] + ] + ); + + $this->view->expects($this->any())->method('is_dir') + ->willReturnCallback( + function($path) { + if ($path === '/user1/files/foo') { + return true; + } + return false; + } + ); + + $encryptAll->expects($this->at(0))->method('encryptFile')->with('/user1/files/bar'); + $encryptAll->expects($this->at(1))->method('encryptFile')->with('/user1/files/foo/subfile'); + + $progressBar = $this->getMockBuilder('Symfony\Component\Console\Helper\ProgressBar') + ->disableOriginalConstructor()->getMock(); + + $this->invokePrivate($encryptAll, 'encryptUsersFiles', ['user1', $progressBar, '']); + + } + + public function testGenerateOneTimePassword() { + $password = $this->invokePrivate($this->encryptAll, 'generateOneTimePassword', ['user1']); + $this->assertTrue(is_string($password)); + $this->assertSame(8, strlen($password)); + + $userPasswords = $this->invokePrivate($this->encryptAll, 'userPasswords'); + $this->assertSame(1, count($userPasswords)); + $this->assertSame($password, $userPasswords['user1']); + } + +} diff --git a/apps/encryption/tests/lib/crypto/encryptionTest.php b/apps/encryption/tests/lib/crypto/encryptionTest.php index 7b0b29fe197c54b4e9c7b5ebc0c153b354cd53b5..f76bdfb6d61543be5f7579d2dd033f6a27358944 100644 --- a/apps/encryption/tests/lib/crypto/encryptionTest.php +++ b/apps/encryption/tests/lib/crypto/encryptionTest.php @@ -2,8 +2,6 @@ /** * @author Björn Schießle * @author Joas Schilling - * @author Morris Jobke - * @author Thomas Müller * * @copyright Copyright (c) 2015, ownCloud, Inc. * @license AGPL-3.0 @@ -36,6 +34,15 @@ class EncryptionTest extends TestCase { /** @var \PHPUnit_Framework_MockObject_MockObject */ private $keyManagerMock; + /** @var \PHPUnit_Framework_MockObject_MockObject */ + private $encryptAllMock; + + /** @var \PHPUnit_Framework_MockObject_MockObject */ + private $decryptAllMock; + + /** @var \PHPUnit_Framework_MockObject_MockObject */ + private $sessionMock; + /** @var \PHPUnit_Framework_MockObject_MockObject */ private $cryptMock; @@ -60,6 +67,15 @@ class EncryptionTest extends TestCase { $this->keyManagerMock = $this->getMockBuilder('OCA\Encryption\KeyManager') ->disableOriginalConstructor() ->getMock(); + $this->sessionMock = $this->getMockBuilder('OCA\Encryption\Session') + ->disableOriginalConstructor() + ->getMock(); + $this->encryptAllMock = $this->getMockBuilder('OCA\Encryption\Crypto\EncryptAll') + ->disableOriginalConstructor() + ->getMock(); + $this->decryptAllMock = $this->getMockBuilder('OCA\Encryption\Crypto\DecryptAll') + ->disableOriginalConstructor() + ->getMock(); $this->loggerMock = $this->getMockBuilder('OCP\ILogger') ->disableOriginalConstructor() ->getMock(); @@ -75,6 +91,9 @@ class EncryptionTest extends TestCase { $this->cryptMock, $this->keyManagerMock, $this->utilMock, + $this->sessionMock, + $this->encryptAllMock, + $this->decryptAllMock, $this->loggerMock, $this->l10nMock ); @@ -163,6 +182,16 @@ class EncryptionTest extends TestCase { */ public function testBegin($mode, $header, $legacyCipher, $defaultCipher, $fileKey, $expected) { + $this->sessionMock->expects($this->once()) + ->method('decryptAllModeActivated') + ->willReturn(false); + + $this->sessionMock->expects($this->never())->method('getDecryptAllUid'); + $this->sessionMock->expects($this->never())->method('getDecryptAllKey'); + $this->keyManagerMock->expects($this->never())->method('getEncryptedFileKey'); + $this->keyManagerMock->expects($this->never())->method('getShareKey'); + $this->cryptMock->expects($this->never())->method('multiKeyDecrypt'); + $this->cryptMock->expects($this->any()) ->method('getCipher') ->willReturn($defaultCipher); @@ -202,6 +231,49 @@ class EncryptionTest extends TestCase { ); } + + /** + * test begin() if decryptAll mode was activated + */ + public function testBeginDecryptAll() { + + $path = '/user/files/foo.txt'; + $recoveryKeyId = 'recoveryKeyId'; + $recoveryShareKey = 'recoveryShareKey'; + $decryptAllKey = 'decryptAllKey'; + $fileKey = 'fileKey'; + + $this->sessionMock->expects($this->once()) + ->method('decryptAllModeActivated') + ->willReturn(true); + $this->sessionMock->expects($this->once()) + ->method('getDecryptAllUid') + ->willReturn($recoveryKeyId); + $this->sessionMock->expects($this->once()) + ->method('getDecryptAllKey') + ->willReturn($decryptAllKey); + + $this->keyManagerMock->expects($this->once()) + ->method('getEncryptedFileKey') + ->willReturn('encryptedFileKey'); + $this->keyManagerMock->expects($this->once()) + ->method('getShareKey') + ->with($path, $recoveryKeyId) + ->willReturn($recoveryShareKey); + $this->cryptMock->expects($this->once()) + ->method('multiKeyDecrypt') + ->with('encryptedFileKey', $recoveryShareKey, $decryptAllKey) + ->willReturn($fileKey); + + $this->keyManagerMock->expects($this->never())->method('getFileKey'); + + $this->instance->begin($path, 'user', 'r', [], []); + + $this->assertSame($fileKey, + $this->invokePrivate($this->instance, 'fileKey') + ); + } + /** * @dataProvider dataTestUpdate * @@ -266,4 +338,15 @@ class EncryptionTest extends TestCase { public function testDecrypt() { $this->instance->decrypt('abc'); } + + public function testPrepareDecryptAll() { + $input = $this->getMock('Symfony\Component\Console\Input\InputInterface'); + $output = $this->getMock('Symfony\Component\Console\Output\OutputInterface'); + + $this->decryptAllMock->expects($this->once())->method('prepare') + ->with($input, $output, 'user'); + + $this->instance->prepareDecryptAll($input, $output, 'user'); + } + } diff --git a/apps/encryption/tests/lib/users/SetupTest.php b/apps/encryption/tests/lib/users/SetupTest.php index e6936c5c12e7872b94c280f197c56766b428dd0a..022bf5dc466749e5cb18466102d9b0bbc5c8d2d0 100644 --- a/apps/encryption/tests/lib/users/SetupTest.php +++ b/apps/encryption/tests/lib/users/SetupTest.php @@ -1,8 +1,7 @@ * @author Clark Tomlinson - * @author Morris Jobke - * @author Thomas Müller * * @copyright Copyright (c) 2015, ownCloud, Inc. * @license AGPL-3.0 @@ -43,6 +42,8 @@ class SetupTest extends TestCase { private $instance; public function testSetupServerSide() { + $this->keyManagerMock->expects($this->exactly(2))->method('validateShareKey'); + $this->keyManagerMock->expects($this->exactly(2))->method('validateMasterKey'); $this->keyManagerMock->expects($this->exactly(2)) ->method('userHasKeys') ->with('admin') diff --git a/apps/files/admin.php b/apps/files/admin.php index 349c27ff7428fb66f75935a06886b38719488a64..786a8edf2a64207fe73bd5ed74eae78424ceb82e 100644 --- a/apps/files/admin.php +++ b/apps/files/admin.php @@ -7,6 +7,7 @@ * @author Michael Göhler * @author Morris Jobke * @author Robin Appelman + * @author Robin McCorkell * @author Thomas Müller * * @copyright Copyright (c) 2015, ownCloud, Inc. diff --git a/apps/files/ajax/list.php b/apps/files/ajax/list.php index 19129e9de1112f345fa2c12cae93242e0686cca5..6cfa04b49d6d59c9b35861f6624e36b09e7cb4e3 100644 --- a/apps/files/ajax/list.php +++ b/apps/files/ajax/list.php @@ -1,6 +1,5 @@ * @author Jörn Friedrich Dreyer * @author Lukas Reschke * @author Morris Jobke diff --git a/apps/files/ajax/scan.php b/apps/files/ajax/scan.php index 7d47a538fa11a905ffce25df5775e2e2de19e2ca..491adaa9b880b9d9a1118eb8d29e5234e420877d 100644 --- a/apps/files/ajax/scan.php +++ b/apps/files/ajax/scan.php @@ -4,6 +4,7 @@ * @author Jörn Friedrich Dreyer * @author Lukas Reschke * @author Robin Appelman + * @author Vincent Petry * * @copyright Copyright (c) 2015, ownCloud, Inc. * @license AGPL-3.0 diff --git a/apps/files/ajax/upload.php b/apps/files/ajax/upload.php index 4bc2ce8bdf3f9238b91d406ce045bebc925aab52..a784642728fa47834f864cbbfa9b5e1918d3ec3d 100644 --- a/apps/files/ajax/upload.php +++ b/apps/files/ajax/upload.php @@ -5,6 +5,7 @@ * @author Björn Schießle * @author Florian Pritz * @author Frank Karlitschek + * @author Individual IT Services * @author Joas Schilling * @author Jörn Friedrich Dreyer * @author Lukas Reschke @@ -148,7 +149,7 @@ if ($maxUploadFileSize >= 0 and $totalSize > $maxUploadFileSize) { } $result = array(); -if (strpos($dir, '..') === false) { +if (\OC\Files\Filesystem::isValidPath($dir) === true) { $fileCount = count($files['name']); for ($i = 0; $i < $fileCount; $i++) { diff --git a/apps/files/appinfo/remote.php b/apps/files/appinfo/remote.php index 36479ae13d08f550a62e20b350da9c7eb9595f2a..02f7f3c027ffbacd2c6a9fc90053e4f8a4178b4c 100644 --- a/apps/files/appinfo/remote.php +++ b/apps/files/appinfo/remote.php @@ -1,9 +1,8 @@ * @author Frank Karlitschek * @author Jakob Sack - * @author Jörn Friedrich Dreyer + * @author Joas Schilling * @author Lukas Reschke * @author Morris Jobke * @author Robin Appelman @@ -39,7 +38,8 @@ $serverFactory = new \OC\Connector\Sabre\ServerFactory( \OC::$server->getDatabaseConnection(), \OC::$server->getUserSession(), \OC::$server->getMountManager(), - \OC::$server->getTagManager() + \OC::$server->getTagManager(), + \OC::$server->getEventDispatcher() ); // Backends diff --git a/apps/files/appinfo/routes.php b/apps/files/appinfo/routes.php index d1b8954d5ceaf3c859c9654226845081a0a27fb4..41aeec6a1528847958e1a47e9a89131ae13b0f87 100644 --- a/apps/files/appinfo/routes.php +++ b/apps/files/appinfo/routes.php @@ -2,7 +2,6 @@ /** * @author Bart Visscher * @author Lukas Reschke - * @author Morris Jobke * @author Roeland Jago Douma * @author Tobias Kaminsky * @author Tom Needham diff --git a/apps/files/appinfo/update.php b/apps/files/appinfo/update.php index ff1369bb1a556c53fc67b1bb4ec1185cea42300a..6084435fa5a5f7c41a097b9d634a97e19dfd2034 100644 --- a/apps/files/appinfo/update.php +++ b/apps/files/appinfo/update.php @@ -2,6 +2,7 @@ /** * @author Björn Schießle * @author Joas Schilling + * @author Morris Jobke * * @copyright Copyright (c) 2015, ownCloud, Inc. * @license AGPL-3.0 diff --git a/apps/files/controller/apicontroller.php b/apps/files/controller/apicontroller.php index 494d97db7a61e9bfa4b0f645ff100af38cdf5077..ea5ee81a9f60f9958a860705f48d3a808a40192b 100644 --- a/apps/files/controller/apicontroller.php +++ b/apps/files/controller/apicontroller.php @@ -4,6 +4,7 @@ * @author Lukas Reschke * @author Morris Jobke * @author Roeland Jago Douma + * @author Thomas Müller * @author Tobias Kaminsky * @author Vincent Petry * diff --git a/apps/files/css/detailsView.css b/apps/files/css/detailsView.css index dafd8c2457319551fa4ebb8de90af8a0c6478cd2..485c20e686520d7eac6cee3da054c0f8c1b7f8ed 100644 --- a/apps/files/css/detailsView.css +++ b/apps/files/css/detailsView.css @@ -9,11 +9,55 @@ #app-sidebar .mainFileInfoView { margin-right: 20px; /* accomodate for close icon */ + float:left; + display:block; + width: 100%; +} + +#app-sidebar .file-details-container { + display: inline-block; + float: left; +} + +#app-sidebar .thumbnailContainer.image { + margin-left: -15px; + margin-right: -35px; /* 15 + 20 for the close button */ + margin-top: -15px; +} + +#app-sidebar .thumbnailContainer.image.portrait { + margin: 0; /* if we dont fit the image anyway we give it back the margin */ +} + +#app-sidebar .image .thumbnail { + width:100%; + display:block; + background-repeat: no-repeat; + background-position: center; + background-size: 100%; + float: none; + margin: 0; + height: auto; +} + +#app-sidebar .image .thumbnail .stretcher { + content: ''; + display: block; + padding-bottom: 56.25%; /* sets height of .thumbnail to 9/16 of the width */ +} + +#app-sidebar .image.portrait .thumbnail { + background-position: 50% top; +} + +#app-sidebar .image.portrait .thumbnail { + background-size: contain; } #app-sidebar .thumbnail { width: 75px; height: 75px; + display: inline-block; float: left; margin-right: 10px; background-size: 75px; @@ -31,8 +75,14 @@ padding-bottom: 3px; } +#app-sidebar .fileName h3 { + max-width: 300px; + display: inline-block; + padding: 5px 0; + margin: -5px 0; +} + #app-sidebar .file-details { - margin-top: 3px; -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=50)"; opacity: .5; } diff --git a/apps/files/css/files.css b/apps/files/css/files.css index 026713569a1fcea4b29baf1d254303b1d85611c7..d0a2cce1a86a161a193fd67586235bdfa8e11387 100644 --- a/apps/files/css/files.css +++ b/apps/files/css/files.css @@ -18,11 +18,6 @@ z-index: -30; } -#new { - z-index: 1010; - float: left; - padding: 0 !important; /* override default control bar button padding */ -} #trash { margin-right: 8px; float: right; @@ -30,49 +25,8 @@ padding: 10px; font-weight: normal; } -#new > a { - padding: 14px 10px; - position: relative; - top: 7px; -} -#new.active { - border-bottom-left-radius: 0; - border-bottom-right-radius: 0; - border-bottom: none; - background: #f8f8f8; -} -#new > ul { - display: none; - position: fixed; - min-width: 112px; - z-index: -10; - padding: 8px; - padding-bottom: 0; - margin-top: 13.5px; - margin-left: -1px; - text-align: left; - background: #f8f8f8; - border: 1px solid #ddd; - border: 1px solid rgba(240, 240, 240, 0.9); - border-radius: 5px; - border-top-left-radius: 0; - box-shadow: 0 2px 7px rgba(170,170,170,.4); -} -#new > ul > li { - height: 36px; - margin: 5px; - padding-left: 42px; - padding-bottom: 2px; - background-position: left center; - cursor: pointer; -} -#new > ul > li > p { - cursor: pointer; - padding-top: 7px; - padding-bottom: 7px; -} -#new .error, #fileList .error { +.newFileMenu .error, #fileList .error { color: #e9322d; border-color: #e9322d; -webkit-box-shadow: 0 0 6px #f8b9b7; @@ -96,7 +50,10 @@ min-width: 688px; /* 768 (mobile break) - 80 (nav width) */ } -#filestable tbody tr { background-color:#fff; height:51px; } +#filestable tbody tr { + background-color: #fff; + height: 51px; +} /* fit app list view heights */ .app-files #app-content>.viewcontainer { @@ -133,27 +90,48 @@ position: fixed !important; bottom: 44px; width: inherit !important; - background-color: #f5f5f5; + background-color: #fff; + border-right: 1px solid #eee; } /* double padding to account for Deleted files entry, issue with Firefox */ .app-files #app-navigation > ul li:nth-last-child(2) { margin-bottom: 44px; } -#filestable tbody tr { background-color:#fff; height:40px; } +#app-navigation .nav-files a.nav-icon-files { + width: auto; +} +/* button needs overrides due to navigation styles */ +#app-navigation .nav-files a.new { + width: 40px; + height: 32px; + padding: 0 10px; + margin: 0; + cursor: pointer; +} + +#app-navigation .nav-files a.new.hidden { + display: none; +} + +#app-navigation .nav-files a.new.disabled { + opacity: 0.3; +} + +#filestable tbody tr { + background-color: #fff; + height: 40px; +} #filestable tbody tr:hover, #filestable tbody tr:focus, #filestable tbody .name:focus, -#filestable tbody tr:active { - background-color: rgb(240,240,240); -} +#filestable tbody tr:active, #filestable tbody tr.highlighted, #filestable tbody tr.highlighted .name:focus, -#filestable tbody tr.selected { - background-color: rgb(230,230,230); -} -#filestable tbody tr.searchresult { - background-color: rgb(240,240,240); +#filestable tbody tr.selected, +#filestable tbody tr.searchresult, +table tr.mouseOver td { + background-color: #f8f8f8; } tbody a { color:#000; } @@ -178,9 +156,6 @@ tr:focus span.extension { color: #777; } -table tr.mouseOver td { - background-color: #eee; -} table th, table th a { color: #999; } @@ -211,9 +186,15 @@ table th .sort-indicator { filter: alpha(opacity=30); opacity: .3; } -.sort-indicator.hidden { +.sort-indicator.hidden, +.multiselect .sort-indicator, +table.multiselect th:hover .sort-indicator.hidden, +table.multiselect th:focus .sort-indicator.hidden { visibility: hidden; } +.multiselect .sort, .multiselect .sort span { + cursor: default; +} table th:hover .sort-indicator.hidden, table th:focus .sort-indicator.hidden { visibility: visible; @@ -275,7 +256,7 @@ table thead th { background-color: #fff; } table.multiselect thead th { - background-color: rgba(220,220,220,.8); + background-color: rgba(255, 255, 255, 0.95); /* like controls bar */ color: #000; font-weight: bold; border-bottom: 0; @@ -349,10 +330,6 @@ table td.filename .nametext { max-width: 800px; height: 100%; } -/* IE8 text-overflow: ellipsis support */ -.ie8 table td.filename .nametext { - min-width: 50%; -} .has-favorites #fileList td.filename a.name { left: 50px; margin-right: 50px; @@ -365,38 +342,54 @@ table td.filename .nametext .innernametext { display: inline-block; vertical-align: top; } -/* IE8 text-overflow: ellipsis support */ -.ie8 table td.filename .nametext .innernametext { - white-space: nowrap; - word-wrap: normal; - -ms-text-overflow: ellipsis; - max-width: 47%; -} -@media only screen and (min-width: 1366px) { +@media only screen and (min-width: 1500px) { + table td.filename .nametext .innernametext { + max-width: 790px; + } + .with-app-sidebar table td.filename .nametext .innernametext { + max-width: 390px; + } +} +@media only screen and (min-width: 1366px) and (max-width: 1500px) { table td.filename .nametext .innernametext { max-width: 660px; } + .with-app-sidebar table td.filename .nametext .innernametext { + max-width: 290px; + } } @media only screen and (min-width: 1200px) and (max-width: 1366px) { table td.filename .nametext .innernametext { max-width: 500px; } + .with-app-sidebar table td.filename .nametext .innernametext { + max-width: 230px; + } } @media only screen and (min-width: 1100px) and (max-width: 1200px) { table td.filename .nametext .innernametext { max-width: 400px; } + .with-app-sidebar table td.filename .nametext .innernametext { + max-width: 230px; + } } @media only screen and (min-width: 1000px) and (max-width: 1100px) { table td.filename .nametext .innernametext { max-width: 310px; } + .with-app-sidebar table td.filename .nametext .innernametext { + max-width: 230px; + } } @media only screen and (min-width: 768px) and (max-width: 1000px) { table td.filename .nametext .innernametext { max-width: 240px; } + .with-app-sidebar table td.filename .nametext .innernametext { + max-width: 230px; + } } /* for smaller resolutions - see mobile.css */ @@ -418,7 +411,14 @@ table td.filename .uploadtext { } /* File checkboxes */ -#fileList tr td.filename>.selectCheckBox { +html:not(.ie8) #fileList tr td.filename>.selectCheckBox + label:before { + opacity: 0; + position: absolute; + bottom: 4px; + right: 0; + z-index: 10; +} +html.ie8 #fileList tr td.filename>.selectCheckBox { -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; filter: alpha(opacity=0); opacity: 0; @@ -426,17 +426,22 @@ table td.filename .uploadtext { top: 0; margin: 32px 0 4px 32px; /* bigger clickable area doesn’t work in FF width:2.8em; height:2.4em;*/ } + /* Show checkbox when hovering, checked, or selected */ -#fileList tr:hover td.filename>.selectCheckBox, -#fileList tr:focus td.filename>.selectCheckBox, -#fileList tr td.filename>.selectCheckBox:checked, -#fileList tr.selected td.filename>.selectCheckBox { +html.ie8 #fileList tr:hover td.filename>.selectCheckBox, +html.ie8 #fileList tr:focus td.filename>.selectCheckBox, +html.ie8 #fileList tr td.filename>.selectCheckBox:checked, +html.ie8 #fileList tr.selected td.filename>.selectCheckBox, +html:not(.ie8) #fileList tr:hover td.filename>.selectCheckBox + label:before, +html:not(.ie8) #fileList tr:focus td.filename>.selectCheckBox + label:before, +html:not(.ie8) #fileList tr td.filename>.selectCheckBox:checked + label:before, +html:not(.ie8) #fileList tr.selected td.filename>.selectCheckBox + label:before { opacity: 1; } -.lte9 #fileList tr:hover td.filename>.selectCheckBox, -.lte9 #fileList tr:focus td.filename>.selectCheckBox, -.lte9 #fileList tr td.filename>.selectCheckBox[checked=checked], -.lte9 #fileList tr.selected td.filename>.selectCheckBox { +html.ie8 #fileList tr:hover td.filename>.selectCheckBox, +html.ie8 #fileList tr:focus td.filename>.selectCheckBox, +html.ie8 #fileList tr td.filename>.selectCheckBox[checked=checked], +html.ie8 #fileList tr.selected td.filename>.selectCheckBox { -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=100)"; filter: alpha(opacity=100); } @@ -444,6 +449,7 @@ table td.filename .uploadtext { /* Use label to have bigger clickable size for checkbox */ #fileList tr td.filename>.selectCheckBox + label, .select-all + label { + background-position: 30px 30px; height: 50px; position: absolute; width: 50px; @@ -458,7 +464,8 @@ table td.filename .uploadtext { .select-all + label { top: 0; } -.select-all { +.ie8 .select-all, +.select-all + label:before { position: absolute; top: 18px; left: 18px; @@ -499,7 +506,6 @@ table td.filename .uploadtext { .fileactions { position: absolute; right: 0; - font-size: 11px; } .busy .fileactions, .busy .action { @@ -564,6 +570,10 @@ a.action > img { margin-bottom: -1px; } +html.ie8 .column-mtime .selectedActions { + top: -95px; +} + #fileList a.action { display: inline; padding: 17px 8px; @@ -573,6 +583,17 @@ a.action > img { opacity: 0; display:none; } +#fileList a.action.action-share, +#fileList a.action.action-menu { + padding: 17px 14px; +} + +#fileList .popovermenu { + margin-right: 21px; +} +.ie8 #fileList .popovermenu { + margin-top: -10px; +} .ie8 #fileList a.action img, #fileList tr:hover a.action, @@ -588,9 +609,9 @@ a.action > img { #fileList tr:focus a.action.disabled:focus, #fileList .name:focus a.action.disabled:focus, #fileList a.action.disabled img { - -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=50)"; - filter: alpha(opacity=50); - opacity: .5; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=30)"; + filter: alpha(opacity=30); + opacity: .3; display:inline; } .ie8 #fileList a.action:hover img, @@ -600,15 +621,44 @@ a.action > img { #fileList tr:hover a.action:hover, #fileList tr:focus a.action:focus, #fileList .name:focus a.action:focus { - -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=100)"; - filter: alpha(opacity=100); - opacity: 1; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=70)"; + filter: alpha(opacity=70); + opacity: 7; display:inline; } #fileList tr a.action.disabled { background: none; } +/* show share action of shared items darker to distinguish from non-shared */ +#fileList a.action.permanent.shared-style, +#fileList a.action.action-favorite.permanent { + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=70)" !important; + filter: alpha(opacity=70) !important; + opacity: .7 !important; +} +/* always show actions on mobile, not only on hover */ +#fileList a.action.action-menu.permanent { + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=30)" !important; + filter: alpha(opacity=30) !important; + opacity: .3 !important; + display: inline !important; +} + +/* properly display actions in the popover menu */ +#fileList .popovermenu .action { + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=50)" !important; + filter: alpha(opacity=50) !important; + opacity: .5 !important; +} +#fileList .popovermenu .action:hover, +#fileList .popovermenu .action:focus { + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=100)" !important; + filter: alpha(opacity=100) !important; + opacity: 1 !important; +} + + #selectedActionsList a.download.disabled, #fileList tr a.action.action-download.disabled { color: #000000; @@ -671,7 +721,7 @@ table.dragshadow td.size { left: 0; right: 0; bottom: 0; - background-color: white; + background-color: #fff; background-repeat: no-repeat no-repeat; background-position: 50%; opacity: 0.7; @@ -686,43 +736,63 @@ table.dragshadow td.size { opacity: 0; } -.fileActionsMenu { - padding: 4px 12px; -} -.fileActionsMenu li { - padding: 5px 0; -} -#fileList .fileActionsMenu a.action img { +#fileList .popovermenu a.action img { padding: initial; } -#fileList .fileActionsMenu a.action { + +#fileList .popovermenu a.action { padding: 10px; margin: -10px; } -.fileActionsMenu.hidden { - display: none; +.newFileMenu { + width: 140px; + margin-left: -56px; + margin-top: 25px; + z-index: 1001; } -#fileList .fileActionsMenu .action { - display: block; - line-height: 30px; - padding-left: 5px; - color: #000; +.newFileMenu .menuitem { + white-space: nowrap; + overflow: hidden; +} +.newFileMenu.popovermenu .menuitem .icon { + margin-bottom: -2px; +} +.newFileMenu.popovermenu a.menuitem, +.newFileMenu.popovermenu label.menuitem, +.newFileMenu.popovermenu .menuitem { padding: 0; + margin: 0; } -.fileActionsMenu .action img, -.fileActionsMenu .action .no-icon { +.newFileMenu.popovermenu a.menuitem.active { + opacity: 1; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=100)"; + filter: alpha(opacity=100); +} + +.newFileMenu.bubble:after { + left: 75px; + right: auto; +} +.newFileMenu.bubble:before { + left: 75px; + right: auto; +} + +.newFileMenu .filenameform { display: inline-block; - width: 16px; - margin-right: 5px; } -.fileActionsMenu .action { - opacity: 0.5; +.newFileMenu .filenameform input { + width: 100px; } -.fileActionsMenu li:hover .action { - opacity: 1; +#fileList .popovermenu .action { + display: block; + line-height: 30px; + padding-left: 5px; + color: #000; + padding: 0; } diff --git a/apps/files/css/mobile.css b/apps/files/css/mobile.css index 635c24c4168993939de560f8007a423cb9daff64..0641304d211dc3a80d5816ec6e25075893d2d484 100644 --- a/apps/files/css/mobile.css +++ b/apps/files/css/mobile.css @@ -32,35 +32,25 @@ table td.filename .nametext { width: 100%; } -/* show share action of shared items darker to distinguish from non-shared */ -#fileList a.action.permanent.shared-style { - -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=70)" !important; - filter: alpha(opacity=70) !important; - opacity: .7 !important; -} -/* always show actions on mobile, not only on hover */ -#fileList a.action, -#fileList a.action.action-menu.permanent { - -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=20)" !important; - filter: alpha(opacity=20) !important; - opacity: .2 !important; - display: inline !important; -} #fileList a.action.action-menu img { - padding-left: 2px; + padding-left: 0; } #fileList .fileActionsMenu { - margin-right: 5px; -} -/* some padding for better clickability */ -#fileList a.action img { - padding: 0 6px 0 12px; + margin-right: 6px; } /* hide text of the share action on mobile */ #fileList a.action-share span { display: none; } +#fileList a.action.action-favorite { + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=70)" !important; + opacity: .7 !important; +} +#fileList a.action.action-favorite { + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=30)" !important; + opacity: .3 !important; +} /* ellipsis on file names */ table td.filename .nametext .innernametext { diff --git a/apps/files/css/upload.css b/apps/files/css/upload.css index bd60f8313888b40a8085bfb4a820344c6820240b..07b788b937f3c12628ce44381c29a6fe25754b0b 100644 --- a/apps/files/css/upload.css +++ b/apps/files/css/upload.css @@ -24,20 +24,6 @@ } .file_upload_target { display:none; } .file_upload_form { display:inline; float:left; margin:0; padding:0; cursor:pointer; overflow:visible; } -#file_upload_start { - position: relative; - left: 0; - top: 0; - width: 44px; - height: 44px; - margin: -5px -3px; - padding: 0; - font-size: 16px; - -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; filter:alpha(opacity=0); opacity:0; - z-index: 20; - cursor: pointer; - overflow: hidden; -} #uploadprogresswrapper, #uploadprogresswrapper * { -moz-box-sizing: border-box; diff --git a/apps/files/img/delete.png b/apps/files/img/delete.png index b2ab8c5efefab235fa4bfa1eb06afa0106116a21..20e894c7f740da793d98590fa12e998749ae2ad3 100644 Binary files a/apps/files/img/delete.png and b/apps/files/img/delete.png differ diff --git a/apps/files/img/delete.svg b/apps/files/img/delete.svg index b6dc2cc4173980c0b8d838b5606090479f743c52..f0a3cd4db889acc95eda1df31d164ca4e0f69b21 100644 --- a/apps/files/img/delete.svg +++ b/apps/files/img/delete.svg @@ -1,4 +1,4 @@ - + diff --git a/apps/files/img/external.png b/apps/files/img/external.png index 2ac5e9344c33c1abf1b12d115d91d2d3e4240650..af03dbf3e05397a5aa029b699297933729f55d56 100644 Binary files a/apps/files/img/external.png and b/apps/files/img/external.png differ diff --git a/apps/files/img/external.svg b/apps/files/img/external.svg index d1940f2f1b3abdcb008d6be99d16c06422a85353..80eba5b9960869e6c4dae1caa2a190ccc2ea3605 100644 --- a/apps/files/img/external.svg +++ b/apps/files/img/external.svg @@ -1,4 +1,4 @@ - + diff --git a/apps/files/img/folder.png b/apps/files/img/folder.png index ada4c4c2f882d05c44d53a592309c44d0c6e31f2..287a0c9ba6df4317e00aebd4464d05d78606228d 100644 Binary files a/apps/files/img/folder.png and b/apps/files/img/folder.png differ diff --git a/apps/files/img/folder.svg b/apps/files/img/folder.svg index 1a97808443d12cf93939deaf3fc26df8a7f3ca6d..0cf4b3499dc8f9deed9d157a67f8207d8589f30c 100644 --- a/apps/files/img/folder.svg +++ b/apps/files/img/folder.svg @@ -1,6 +1,6 @@ - - + + diff --git a/apps/files/img/public.png b/apps/files/img/public.png index f49c5fb1ee555b025a3645238a90515a6baf0f8a..772838ad2058e5e6e16c9fcb13e1bb6708155238 100644 Binary files a/apps/files/img/public.png and b/apps/files/img/public.png differ diff --git a/apps/files/img/public.svg b/apps/files/img/public.svg index 23ac51d83672ab7db30424889775bb6653c911a4..7721c9e3408ea839a8bdcb6a59f8ed7385fddde5 100644 --- a/apps/files/img/public.svg +++ b/apps/files/img/public.svg @@ -1,6 +1,6 @@ - + diff --git a/apps/files/img/share.png b/apps/files/img/share.png index 61c87e78b6cc9f46d9ffec57af4e9961b6a85964..fdacbbabebcf013a5a80907b3e62cb2e3c0ee26d 100644 Binary files a/apps/files/img/share.png and b/apps/files/img/share.png differ diff --git a/apps/files/img/share.svg b/apps/files/img/share.svg index 97f52f2e7834a92e3a5c72a9d3cf0316ddf5e379..d67d35c6e5668b77afb88c2d49c3b69d9bedb7d2 100644 --- a/apps/files/img/share.svg +++ b/apps/files/img/share.svg @@ -1,6 +1,6 @@ - + diff --git a/apps/files/img/star.png b/apps/files/img/star.png index 6b0ec67ec1c5729ca1d758e271c84ff1a328f707..8b24c4441cfa2877a37c9275b800edb4b08dfe4a 100644 Binary files a/apps/files/img/star.png and b/apps/files/img/star.png differ diff --git a/apps/files/img/star.svg b/apps/files/img/star.svg index fb3eef1e45211cc5c4c9ee429a4b523eb37ffe57..ba0f54f8eba90281f3713046b9babdbeffa63999 100644 --- a/apps/files/img/star.svg +++ b/apps/files/img/star.svg @@ -1,6 +1,6 @@ - - + + diff --git a/apps/files/index.php b/apps/files/index.php index a73caa50fbe58610b9f6368eb2eae8869c23a3d5..cc007ebdb07a5f1e96529cfe12d68828aa44ca5d 100644 --- a/apps/files/index.php +++ b/apps/files/index.php @@ -38,6 +38,7 @@ OCP\Util::addStyle('files', 'upload'); OCP\Util::addStyle('files', 'mobile'); OCP\Util::addscript('files', 'app'); OCP\Util::addscript('files', 'file-upload'); +OCP\Util::addscript('files', 'newfilemenu'); OCP\Util::addscript('files', 'jquery.iframe-transport'); OCP\Util::addscript('files', 'jquery.fileupload'); OCP\Util::addscript('files', 'jquery-visibility'); diff --git a/apps/files/js/detailsview.js b/apps/files/js/detailsview.js index a4ebe90cd649ec83f437c30ff229d303f3c9a902..f04adcf1292e05528177f829ff75de8506d89aa3 100644 --- a/apps/files/js/detailsview.js +++ b/apps/files/js/detailsview.js @@ -10,24 +10,20 @@ (function() { var TEMPLATE = - '
' + '
' + '
' + - '
' + - ' {{#if tabHeaders}}' + - '
    ' + + ' {{#if tabHeaders}}' + + '
      ' + ' {{#each tabHeaders}}' + '
    • ' + ' {{label}}' + '
    • ' + ' {{/each}}' + - '
    ' + - ' {{/if}}' + - '
    ' + - '
    ' + + '
' + + ' {{/if}}' + + '
' + '
' + - ' ' + - '
'; + ' '; /** * @class OCA.Files.DetailsView @@ -39,7 +35,7 @@ var DetailsView = OC.Backbone.View.extend({ id: 'app-sidebar', tabName: 'div', - className: 'detailsView', + className: 'detailsView scroll-container', _template: null, @@ -88,7 +84,7 @@ }, _onClose: function(event) { - OC.Apps.hideAppSidebar(); + OC.Apps.hideAppSidebar(this.$el); event.preventDefault(); }, @@ -136,16 +132,22 @@ closeLabel: t('files', 'Close') }; - if (this._tabViews.length > 1) { - // only render headers if there is more than one available - templateVars.tabHeaders = _.map(this._tabViews, function(tabView, i) { - return { - tabId: tabView.id, - tabIndex: i, - label: tabView.getLabel() - }; - }); - } + this._tabViews = this._tabViews.sort(function(tabA, tabB) { + var orderA = tabA.order || 0; + var orderB = tabB.order || 0; + if (orderA === orderB) { + return OC.Util.naturalSortCompare(tabA.getLabel(), tabB.getLabel()); + } + return orderA - orderB; + }); + + templateVars.tabHeaders = _.map(this._tabViews, function(tabView, i) { + return { + tabId: tabView.id, + tabIndex: i, + label: tabView.getLabel() + }; + }); this.$el.html(this.template(templateVars)); @@ -162,6 +164,8 @@ this.selectTab(this._currentTabId); + this._updateTabVisibilities(); + this._dirty = false; }, @@ -220,6 +224,8 @@ if (this._dirty) { this.render(); + } else { + this._updateTabVisibilities(); } if (this._currentTabId) { @@ -236,6 +242,37 @@ }); }, + /** + * Update tab headers based on the current model + */ + _updateTabVisibilities: function() { + // update tab header visibilities + var self = this; + var deselect = false; + var countVisible = 0; + var $tabHeaders = this.$el.find('.tabHeaders li'); + _.each(this._tabViews, function(tabView) { + var isVisible = tabView.canDisplay(self.model); + if (isVisible) { + countVisible += 1; + } + if (!isVisible && self._currentTabId === tabView.id) { + deselect = true; + } + $tabHeaders.filterAttr('data-tabid', tabView.id).toggleClass('hidden', !isVisible); + }); + + // hide the whole container if there is only one tab + this.$el.find('.tabHeaders').toggleClass('hidden', countVisible <= 1); + + if (deselect) { + // select the first visible tab instead + var visibleTabId = this.$el.find('.tabHeader:not(.hidden):first').attr('data-tabid'); + this.selectTab(visibleTabId); + } + + }, + /** * Returns the file info. * @@ -268,4 +305,3 @@ OCA.Files.DetailsView = DetailsView; })(); - diff --git a/apps/files/js/detailtabview.js b/apps/files/js/detailtabview.js index b0e170bc4e76a4b2bf723f74c22cf9708dd16235..0bd34a881885538e057de5d162a75197fd19eab5 100644 --- a/apps/files/js/detailtabview.js +++ b/apps/files/js/detailtabview.js @@ -29,11 +29,15 @@ _template: null, - initialize: function() { + initialize: function(options) { + options = options || {}; if (!this.id) { this.id = 'detailTabView' + DetailTabView._TAB_COUNT; DetailTabView._TAB_COUNT++; } + if (options.order) { + this.order = options.order || 0; + } }, /** @@ -84,6 +88,24 @@ */ getFileInfo: function() { return this.model; + }, + + /** + * Load the next page of results + */ + nextPage: function() { + // load the next page, if applicable + }, + + /** + * Returns whether the current tab is able to display + * the given file info, for example based on mime type. + * + * @param {OCA.Files.FileInfoModel} fileInfo file info model + * @return {bool} whether to display this tab + */ + canDisplay: function(fileInfo) { + return true; } }); DetailTabView._TAB_COUNT = 0; diff --git a/apps/files/js/file-upload.js b/apps/files/js/file-upload.js index 6b6acdb5e01053c7da03cd2f8d83d4ffffab5535..8bae8567a0549cbdf5b43e8447ac3cf3ce8c2f5c 100644 --- a/apps/files/js/file-upload.js +++ b/apps/files/js/file-upload.js @@ -18,7 +18,7 @@ * - TODO music upload button */ -/* global Files, FileList, jQuery, oc_requesttoken, humanFileSize, getUniqueName */ +/* global jQuery, oc_requesttoken, humanFileSize */ /** * Function that will allow us to know if Ajax uploads are supported @@ -139,6 +139,9 @@ OC.Upload = { if (data.data) { data.data.append('resolution', 'replace'); } else { + if (!data.formData) { + data.formData = []; + } data.formData.push({name:'resolution', value:'replace'}); //hack for ie8 } data.submit(); @@ -152,6 +155,9 @@ OC.Upload = { if (data.data) { data.data.append('resolution', 'autorename'); } else { + if (!data.formData) { + data.formData = []; + } data.formData.push({name:'resolution', value:'autorename'}); //hack for ie8 } data.submit(); @@ -164,8 +170,9 @@ OC.Upload = { } }, /** - * TODO checks the list of existing files prior to uploading and shows a simple dialog to choose + * checks the list of existing files prior to uploading and shows a simple dialog to choose * skip all, replace all or choose which files to keep + * * @param {array} selection of files to upload * @param {object} callbacks - object with several callback methods * @param {function} callbacks.onNoConflicts @@ -175,14 +182,37 @@ OC.Upload = { * @param {function} callbacks.onCancel */ checkExistingFiles: function (selection, callbacks) { - /* - $.each(selection.uploads, function(i, upload) { - var $row = OCA.Files.App.fileList.findFileEl(upload.files[0].name); - if ($row) { - // TODO check filelist before uploading and show dialog on conflicts, use callbacks + var fileList = OCA.Files.App.fileList; + var conflicts = []; + // only keep non-conflicting uploads + selection.uploads = _.filter(selection.uploads, function(upload) { + var fileInfo = fileList.findFile(upload.files[0].name); + if (fileInfo) { + conflicts.push([ + // original + _.extend(fileInfo, { + directory: fileInfo.directory || fileInfo.path || fileList.getCurrentDirectory() + }), + // replacement (File object) + upload + ]); + return false; } + return true; }); - */ + if (conflicts.length) { + // wait for template loading + OC.dialogs.fileexists(null, null, null, OC.Upload).done(function() { + _.each(conflicts, function(conflictData) { + OC.dialogs.fileexists(conflictData[1], conflictData[0], conflictData[1].files[0], OC.Upload); + }); + }); + } + + // upload non-conflicting files + // note: when reaching the server they might still meet conflicts + // if the folder was concurrently modified, these will get added + // to the already visible dialog, if applicable callbacks.onNoConflicts(selection); }, @@ -368,18 +398,18 @@ OC.Upload = { }, submit: function(e, data) { OC.Upload.rememberUpload(data); - if ( ! data.formData ) { - var fileDirectory = ''; - if(typeof data.files[0].relativePath !== 'undefined') { - fileDirectory = data.files[0].relativePath; - } - // noone set update parameters, we set the minimum - data.formData = { - requesttoken: oc_requesttoken, - dir: data.targetDir || FileList.getCurrentDirectory(), - file_directory: fileDirectory - }; + if (!data.formData) { + data.formData = []; + } + + var fileDirectory = ''; + if(typeof data.files[0].relativePath !== 'undefined') { + fileDirectory = data.files[0].relativePath; } + // FIXME: prevent re-adding the same + data.formData.push({name: 'requesttoken', value: oc_requesttoken}); + data.formData.push({name: 'dir', value: data.targetDir || FileList.getCurrentDirectory()}); + data.formData.push({name: 'file_directory', value: fileDirectory}); }, fail: function(e, data) { OC.Upload.log('fail', e, data); @@ -551,155 +581,6 @@ OC.Upload = { $('#file_upload_start').attr('multiple', 'multiple'); } - $(document).click(function(ev) { - // do not close when clicking in the dropdown - if ($(ev.target).closest('#new').length){ - return; - } - $('#new>ul').hide(); - $('#new').removeClass('active'); - if ($('#new .error').length > 0) { - $('#new .error').tipsy('hide'); - } - $('#new li').each(function(i,element) { - if ($(element).children('p').length === 0) { - $(element).children('form').remove(); - $(element).append('

' + $(element).data('text') + '

'); - } - }); - }); - $('#new').click(function(event) { - event.stopPropagation(); - }); - $('#new>a').click(function() { - $('#new>ul').toggle(); - $('#new').toggleClass('active'); - }); - $('#new li').click(function() { - if ($(this).children('p').length === 0) { - return; - } - - $('#new .error').tipsy('hide'); - - $('#new li').each(function(i, element) { - if ($(element).children('p').length === 0) { - $(element).children('form').remove(); - $(element).append('

' + $(element).data('text') + '

'); - } - }); - - var type = $(this).data('type'); - var text = $(this).children('p').text(); - $(this).data('text', text); - $(this).children('p').remove(); - - // add input field - var form = $('
'); - var input = $(''); - var newName = $(this).attr('data-newname') || ''; - var fileType = 'input-' + $(this).attr('data-type'); - if (newName) { - input.val(newName); - input.attr('id', fileType); - } - var label = $(''); - label.attr('for', fileType); - - form.append(label).append(input); - $(this).append(form); - var lastPos; - var checkInput = function () { - var filename = input.val(); - if (!Files.isFileNameValid(filename)) { - // Files.isFileNameValid(filename) throws an exception itself - } else if (FileList.inList(filename)) { - throw t('files', '{new_name} already exists', {new_name: filename}); - } else { - return true; - } - }; - - // verify filename on typing - input.keyup(function(event) { - try { - checkInput(); - input.tipsy('hide'); - input.removeClass('error'); - } catch (error) { - input.attr('title', error); - input.tipsy({gravity: 'w', trigger: 'manual'}); - input.tipsy('show'); - input.addClass('error'); - } - }); - - input.focus(); - // pre select name up to the extension - lastPos = newName.lastIndexOf('.'); - if (lastPos === -1) { - lastPos = newName.length; - } - input.selectRange(0, lastPos); - form.submit(function(event) { - event.stopPropagation(); - event.preventDefault(); - try { - checkInput(); - var newname = input.val(); - if (FileList.lastAction) { - FileList.lastAction(); - } - var name = FileList.getUniqueName(newname); - switch(type) { - case 'file': - $.post( - OC.filePath('files', 'ajax', 'newfile.php'), - { - dir: FileList.getCurrentDirectory(), - filename: name - }, - function(result) { - if (result.status === 'success') { - FileList.add(result.data, {animate: true, scrollTo: true}); - } else { - OC.dialogs.alert(result.data.message, t('core', 'Could not create file')); - } - } - ); - break; - case 'folder': - $.post( - OC.filePath('files','ajax','newfolder.php'), - { - dir: FileList.getCurrentDirectory(), - foldername: name - }, - function(result) { - if (result.status === 'success') { - FileList.add(result.data, {animate: true, scrollTo: true}); - } else { - OC.dialogs.alert(result.data.message, t('core', 'Could not create folder')); - } - } - ); - break; - } - var li = form.parent(); - form.remove(); - /* workaround for IE 9&10 click event trap, 2 lines: */ - $('input').first().focus(); - $('#content').focus(); - li.append('

' + li.data('text') + '

'); - $('#new>a').click(); - } catch (error) { - input.attr('title', error); - input.tipsy({gravity: 'w', trigger: 'manual'}); - input.tipsy('show'); - input.addClass('error'); - } - }); - }); window.file_upload_param = file_upload_param; return file_upload_param; } diff --git a/apps/files/js/fileactions.js b/apps/files/js/fileactions.js index f3f137a05372d5a7bde1c21024ecbc14a20230ac..079c5330ec2a644eedcc883349735f087bf2a45c 100644 --- a/apps/files/js/fileactions.js +++ b/apps/files/js/fileactions.js @@ -141,9 +141,11 @@ name: name, displayName: action.displayName, mime: mime, + order: action.order || 0, icon: action.icon, permissions: action.permissions, - type: action.type || FileActions.TYPE_DROPDOWN + type: action.type || FileActions.TYPE_DROPDOWN, + altText: action.altText || '' }; if (_.isUndefined(action.displayName)) { actionSpec.displayName = t('files', name); @@ -565,6 +567,7 @@ this.registerAction({ name: 'Download', displayName: t('files', 'Download'), + order: -20, mime: 'all', permissions: OC.PERMISSION_READ, icon: function () { @@ -594,7 +597,9 @@ this.registerAction({ name: 'Rename', + displayName: t('files', 'Rename'), mime: 'all', + order: -30, permissions: OC.PERMISSION_UPDATE, icon: function() { return OC.imagePath('core', 'actions/rename'); @@ -614,7 +619,9 @@ this.registerAction({ name: 'Delete', + displayName: t('files', 'Delete'), mime: 'all', + order: 1000, // permission is READ because we show a hint instead if there is no permission permissions: OC.PERMISSION_DELETE, icon: function() { diff --git a/apps/files/js/fileactionsmenu.js b/apps/files/js/fileactionsmenu.js index 623ebde544279f63a015710dc3821a62b16b8de7..67cbb48c9651988347410f5ea81462baa02a2cec 100644 --- a/apps/files/js/fileactionsmenu.js +++ b/apps/files/js/fileactionsmenu.js @@ -14,7 +14,7 @@ ''; @@ -26,7 +26,7 @@ */ var FileActionsMenu = OC.Backbone.View.extend({ tagName: 'div', - className: 'fileActionsMenu bubble hidden open menu', + className: 'fileActionsMenu popovermenu bubble hidden open menu', /** * Current context @@ -100,6 +100,14 @@ (!defaultAction || actionSpec.name !== defaultAction.name) ); }); + items = items.sort(function(actionA, actionB) { + var orderA = actionA.order || 0; + var orderB = actionB.order || 0; + if (orderB === orderA) { + return OC.Util.naturalSortCompare(actionA.displayName, actionB.displayName); + } + return orderA - orderB; + }); items = _.map(items, function(item) { item.nameLowerCase = item.name.toLowerCase(); return item; diff --git a/apps/files/js/fileinfomodel.js b/apps/files/js/fileinfomodel.js index 05060854fbad4c2b13493c64235dcc6fb04f8200..de1b143a16041b9626097c254e218b2146fdf7f2 100644 --- a/apps/files/js/fileinfomodel.js +++ b/apps/files/js/fileinfomodel.js @@ -31,16 +31,15 @@ */ var FileInfoModel = OC.Backbone.Model.extend({ + defaults: { + mimetype: 'application/octet-stream', + path: '' + }, + initialize: function(data) { if (!_.isUndefined(data.id)) { data.id = parseInt(data.id, 10); } - - // TODO: normalize path - data.path = data.path || ''; - data.name = data.name; - - data.mimetype = data.mimetype || 'application/octet-stream'; }, /** @@ -52,6 +51,21 @@ return this.get('mimetype') === 'httpd/unix-directory'; }, + /** + * Returns whether this file is an image + * + * @return {boolean} true if this is an image, false otherwise + */ + isImage: function() { + if (!this.has('mimetype')) { + return false; + } + return this.get('mimetype').substr(0, 6) === 'image/' + || this.get('mimetype') === 'application/postscript' + || this.get('mimetype') === 'application/illustrator' + || this.get('mimetype') === 'application/x-photoshop'; + }, + /** * Returns the full path to this file * diff --git a/apps/files/js/filelist.js b/apps/files/js/filelist.js index ac96d58701537316c86a8b40f8cd8fbd37d58fc4..6cf82391baf44e61ef9f7df585f4b520ac9626a5 100644 --- a/apps/files/js/filelist.js +++ b/apps/files/js/filelist.js @@ -9,6 +9,9 @@ */ (function() { + + var TEMPLATE_ADDBUTTON = '{{addText}}'; + /** * @class OCA.Files.FileList * @classdesc @@ -190,7 +193,19 @@ this.$container = options.scrollContainer || $(window); this.$table = $el.find('table:first'); this.$fileList = $el.find('#fileList'); + + if (_.isUndefined(options.detailsViewEnabled) || options.detailsViewEnabled) { + this._detailsView = new OCA.Files.DetailsView(); + this._detailsView.$el.insertBefore(this.$el); + this._detailsView.$el.addClass('disappear'); + } + this._initFileActions(options.fileActions); + + if (this._detailsView) { + this._detailsView.addDetailView(new OCA.Files.MainFileInfoDetailView({fileList: this, fileActions: this.fileActions})); + } + this.files = []; this._selectedFiles = {}; this._selectionSummary = new OCA.Files.FileSummary(); @@ -211,31 +226,20 @@ } this.breadcrumb = new OCA.Files.BreadCrumb(breadcrumbOptions); - if (_.isUndefined(options.detailsViewEnabled) || options.detailsViewEnabled) { - this._detailsView = new OCA.Files.DetailsView(); - this._detailsView.addDetailView(new OCA.Files.MainFileInfoDetailView({fileList: this, fileActions: this.fileActions})); - this._detailsView.$el.insertBefore(this.$el); - this._detailsView.$el.addClass('disappear'); - } - this.$el.find('#controls').prepend(this.breadcrumb.$el); + this._renderNewButton(); + this.$el.find('thead th .columntitle').click(_.bind(this._onClickHeader, this)); this._onResize = _.debounce(_.bind(this._onResize, this), 100); + $('#app-content').on('appresized', this._onResize); $(window).resize(this._onResize); this.$el.on('show', this._onResize); this.updateSearch(); - this.$el.on('click', function(event) { - var $target = $(event.target); - // click outside file row ? - if (!$target.closest('tbody').length && !$target.closest('#app-sidebar').length) { - self._updateDetailsView(null); - } - }); this.$fileList.on('click','td.filename>a.name', _.bind(this._onClickFile, this)); this.$fileList.on('change', 'td.filename>.selectCheckBox', _.bind(this._onClickFileCheckbox, this)); this.$el.on('urlChanged', _.bind(this._onUrlChanged, this)); @@ -262,10 +266,20 @@ * Destroy / uninitialize this instance. */ destroy: function() { + if (this._newFileMenu) { + this._newFileMenu.remove(); + } + if (this._newButton) { + this._newButton.remove(); + } + if (this._detailsView) { + this._detailsView.remove(); + } // TODO: also unregister other event handlers this.fileActions.off('registerAction', this._onFileActionsUpdated); this.fileActions.off('setDefault', this._onFileActionsUpdated); OC.Plugins.detach('OCA.Files.FileList', this); + $('#app-content').off('appresized', this._onResize); }, /** @@ -274,11 +288,27 @@ * @param {OCA.Files.FileActions} fileActions file actions */ _initFileActions: function(fileActions) { + var self = this; this.fileActions = fileActions; if (!this.fileActions) { this.fileActions = new OCA.Files.FileActions(); this.fileActions.registerDefaultActions(); } + + if (this._detailsView) { + this.fileActions.registerAction({ + name: 'Details', + displayName: t('files', 'Details'), + mime: 'all', + order: -50, + icon: OC.imagePath('core', 'actions/details'), + permissions: OC.PERMISSION_READ, + actionHandler: function(fileName, context) { + self._updateDetailsView(fileName); + } + }); + } + this._onFileActionsUpdated = _.debounce(_.bind(this._onFileActionsUpdated, this), 100); this.fileActions.on('registerAction', this._onFileActionsUpdated); this.fileActions.on('setDefault', this._onFileActionsUpdated); @@ -291,6 +321,7 @@ * @return {OCA.Files.FileInfoModel} file info model */ getModelForFile: function(fileName) { + var self = this; var $tr; // jQuery object ? if (fileName.is) { @@ -315,12 +346,42 @@ // and contain existing models that can be used. // This method would in the future simply retrieve the matching model from the collection. var model = new OCA.Files.FileInfoModel(this.elementToFile($tr)); - if (!model.has('path')) { + if (!model.get('path')) { model.set('path', this.getCurrentDirectory(), {silent: true}); } + + model.on('change', function(model) { + // re-render row + var highlightState = $tr.hasClass('highlighted'); + $tr = self.updateRow( + $tr, + _.extend({isPreviewAvailable: true}, model.toJSON()), + {updateSummary: true, silent: false, animate: true} + ); + $tr.toggleClass('highlighted', highlightState); + }); + model.on('busy', function(model, state) { + self.showFileBusyState($tr, state); + }); + return model; }, + /** + * Displays the details view for the given file and + * selects the given tab + * + * @param {string} fileName file name for which to show details + * @param {string} [tabId] optional tab id to select + */ + showDetailsView: function(fileName, tabId) { + this._updateDetailsView(fileName); + if (tabId) { + this._detailsView.selectTab(tabId); + } + OC.Apps.showAppSidebar(this._detailsView.$el); + }, + /** * Update the details view to display the given file * @@ -339,12 +400,19 @@ } if (!fileName) { - OC.Apps.hideAppSidebar(this._detailsView.$el); this._detailsView.setFileInfo(null); + if (this._currentFileModel) { + this._currentFileModel.off(); + } this._currentFileModel = null; + OC.Apps.hideAppSidebar(this._detailsView.$el); return; } + if (this._detailsView.$el.hasClass('disappear')) { + OC.Apps.showAppSidebar(this._detailsView.$el); + } + var $tr = this.findFileEl(fileName); var model = this.getModelForFile($tr); @@ -354,7 +422,6 @@ this._detailsView.setFileInfo(model); this._detailsView.$el.scrollTop(0); - _.defer(OC.Apps.showAppSidebar, this._detailsView.$el); }, /** @@ -372,6 +439,8 @@ this.breadcrumb.setMaxWidth(containerWidth - actionsWidth - 10); + this.$table.find('>thead').width($('#app-content').width() - OC.Util.getScrollBarWidth()); + this.updateSearch(); }, @@ -388,10 +457,10 @@ * Selected/deselects the given file element and updated * the internal selection cache. * - * @param $tr single file row element - * @param state true to select, false to deselect + * @param {Object} $tr single file row element + * @param {bool} state true to select, false to deselect */ - _selectFileEl: function($tr, state) { + _selectFileEl: function($tr, state, showDetailsView) { var $checkbox = $tr.find('td.filename>.selectCheckBox'); var oldData = !!this._selectedFiles[$tr.data('id')]; var data; @@ -410,11 +479,8 @@ delete this._selectedFiles[$tr.data('id')]; this._selectionSummary.remove(data); } - if (this._selectionSummary.getTotal() === 1) { + if (this._detailsView && this._selectionSummary.getTotal() === 1 && !this._detailsView.$el.hasClass('disappear')) { this._updateDetailsView(_.values(this._selectedFiles)[0].name); - } else { - // show nothing when multiple files are selected - this._updateDetailsView(null); } this.$el.find('.select-all').prop('checked', this._selectionSummary.getTotal() === this.files.length); }, @@ -424,6 +490,9 @@ */ _onClickFile: function(event) { var $tr = $(event.target).closest('tr'); + if ($tr.hasClass('dragging')) { + return; + } if (this._allowSelection && (event.ctrlKey || event.shiftKey)) { event.preventDefault(); if (event.shiftKey) { @@ -487,9 +556,13 @@ */ _onClickFileCheckbox: function(e) { var $tr = $(e.target).closest('tr'); - this._selectFileEl($tr, !$tr.hasClass('selected')); + var state = !$tr.hasClass('selected'); + this._selectFileEl($tr, state); this._lastChecked = $tr; this.updateSelectionSummary(); + if (state) { + this._updateDetailsView($tr.attr('data-file')); + } }, /** @@ -559,6 +632,9 @@ * Event handler when clicking on a table header */ _onClickHeader: function(e) { + if (this.$table.hasClass('multiselect')) { + return; + } var $target = $(e.target); var sort; if (!$target.is('a')) { @@ -654,8 +730,23 @@ return true; }, /** - * Returns the tr element for a given file name - * @param fileName file name + * Returns the file info for the given file name from the internal collection. + * + * @param {string} fileName file name + * @return {OCA.Files.FileInfo} file info or null if it was not found + * + * @since 8.2 + */ + findFile: function(fileName) { + return _.find(this.files, function(aFile) { + return (aFile.name === fileName); + }) || null; + }, + /** + * Returns the tr element for a given file name, but only if it was already rendered. + * + * @param {string} fileName file name + * @return {Object} jQuery object of the matching row */ findFileEl: function(fileName){ // use filterAttr to avoid escaping issues @@ -861,7 +952,7 @@ if (this._allowSelection) { td.append( '