diff options
312 files changed, 3812 insertions, 719 deletions
diff --git a/apps/encryption/appinfo/application.php b/apps/encryption/appinfo/application.php index 5d0fe2c9184..fa620992c81 100644 --- a/apps/encryption/appinfo/application.php +++ b/apps/encryption/appinfo/application.php @@ -24,8 +24,10 @@ namespace OCA\Encryption\AppInfo; -use OC\Files\Filesystem; use OC\Files\View; +use OCA\Encryption\Controller\RecoveryController; +use OCA\Encryption\Controller\SettingsController; +use OCA\Encryption\Controller\StatusController; use OCA\Encryption\Crypto\Crypt; use OCA\Encryption\Crypto\Encryption; use OCA\Encryption\HookManager; @@ -126,11 +128,11 @@ class Application extends \OCP\AppFramework\App { function (IAppContainer $c) { $server = $c->getServer(); - return new KeyManager($server->getEncryptionKeyStorage(\OCA\Encryption\Crypto\Encryption::ID), + return new KeyManager($server->getEncryptionKeyStorage(), $c->query('Crypt'), $server->getConfig(), $server->getUserSession(), - new \OCA\Encryption\Session($server->getSession()), + new Session($server->getSession()), $server->getLogger(), $c->query('Util') ); @@ -146,14 +148,14 @@ class Application extends \OCP\AppFramework\App { $server->getSecureRandom(), $c->query('KeyManager'), $server->getConfig(), - $server->getEncryptionKeyStorage(\OCA\Encryption\Crypto\Encryption::ID), + $server->getEncryptionKeyStorage(), $server->getEncryptionFilesHelper(), - new \OC\Files\View()); + new View()); }); $container->registerService('RecoveryController', function (IAppContainer $c) { $server = $c->getServer(); - return new \OCA\Encryption\Controller\RecoveryController( + return new RecoveryController( $c->getAppName(), $server->getRequest(), $server->getConfig(), @@ -163,7 +165,7 @@ class Application extends \OCP\AppFramework\App { $container->registerService('StatusController', function (IAppContainer $c) { $server = $c->getServer(); - return new \OCA\Encryption\Controller\StatusController( + return new StatusController( $c->getAppName(), $server->getRequest(), $server->getL10N($c->getAppName()), @@ -171,6 +173,20 @@ class Application extends \OCP\AppFramework\App { ); }); + $container->registerService('SettingsController', function (IAppContainer $c) { + $server = $c->getServer(); + return new SettingsController( + $c->getAppName(), + $server->getRequest(), + $server->getL10N($c->getAppName()), + $server->getUserManager(), + $server->getUserSession(), + $c->query('KeyManager'), + $c->query('Crypt'), + $c->query('Session') + ); + }); + $container->registerService('UserSetup', function (IAppContainer $c) { $server = $c->getServer(); diff --git a/apps/encryption/appinfo/routes.php b/apps/encryption/appinfo/routes.php index 4194308a0ce..8fa163d0751 100644 --- a/apps/encryption/appinfo/routes.php +++ b/apps/encryption/appinfo/routes.php @@ -31,6 +31,11 @@ namespace OCA\Encryption\AppInfo; 'verb' => 'POST' ], [ + 'name' => 'Settings#updatePrivateKeyPassword', + 'url' => '/ajax/updatePrivateKeyPassword', + 'verb' => 'POST' + ], + [ 'name' => 'Recovery#changeRecoveryPassword', 'url' => '/ajax/changeRecoveryPassword', 'verb' => 'POST' diff --git a/apps/encryption/controller/settingscontroller.php b/apps/encryption/controller/settingscontroller.php new file mode 100644 index 00000000000..7fa3f469a14 --- /dev/null +++ b/apps/encryption/controller/settingscontroller.php @@ -0,0 +1,131 @@ +<?php +/** + * @author Björn Schießle <schiessle@owncloud.com> + * + * @copyright Copyright (c) 2015, ownCloud, Inc. + * @license AGPL-3.0 + * + * This code is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License, version 3, + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License, version 3, + * along with this program. If not, see <http://www.gnu.org/licenses/> + * + */ + +namespace OCA\Encryption\Controller; + +use OCA\Encryption\Crypto\Crypt; +use OCA\Encryption\KeyManager; +use OCA\Encryption\Session; +use OCP\AppFramework\Controller; +use OCP\AppFramework\Http; +use OCP\AppFramework\Http\DataResponse; +use OCP\IL10N; +use OCP\IRequest; +use OCP\IUserManager; +use OCP\IUserSession; + +class SettingsController extends Controller { + + /** @var IL10N */ + private $l; + + /** @var IUserManager */ + private $userManager; + + /** @var IUserSession */ + private $userSession; + + /** @var KeyManager */ + private $keyManager; + + /** @var Crypt */ + private $crypt; + + /** @var Session */ + private $session; + + /** + * @param string $AppName + * @param IRequest $request + * @param IL10N $l10n + * @param IUserManager $userManager + * @param IUserSession $userSession + * @param KeyManager $keyManager + * @param Crypt $crypt + * @param Session $session + */ + public function __construct($AppName, + IRequest $request, + IL10N $l10n, + IUserManager $userManager, + IUserSession $userSession, + KeyManager $keyManager, + Crypt $crypt, + Session $session) { + parent::__construct($AppName, $request); + $this->l = $l10n; + $this->userSession = $userSession; + $this->userManager = $userManager; + $this->keyManager = $keyManager; + $this->crypt = $crypt; + $this->session = $session; + } + + + /** + * @NoAdminRequired + * @UseSession + * + * @param string $oldPassword + * @param string $newPassword + * @return DataResponse + */ + public function updatePrivateKeyPassword($oldPassword, $newPassword) { + $result = false; + $uid = $this->userSession->getUser()->getUID(); + $errorMessage = $this->l->t('Could not update the private key password.'); + + //check if password is correct + $passwordCorrect = $this->userManager->checkPassword($uid, $newPassword); + + if ($passwordCorrect !== false) { + $encryptedKey = $this->keyManager->getPrivateKey($uid); + $decryptedKey = $this->crypt->decryptPrivateKey($encryptedKey, $oldPassword); + + if ($decryptedKey) { + $encryptedKey = $this->crypt->symmetricEncryptFileContent($decryptedKey, $newPassword); + $header = $this->crypt->generateHeader(); + if ($encryptedKey) { + $this->keyManager->setPrivateKey($uid, $header . $encryptedKey); + $this->session->setPrivateKey($decryptedKey); + $result = true; + } + } else { + $errorMessage = $this->l->t('The old password was not correct, please try again.'); + } + } else { + $errorMessage = $this->l->t('The current log-in password was not correct, please try again.'); + } + + if ($result === true) { + $this->session->setStatus(Session::INIT_SUCCESSFUL); + return new DataResponse( + ['message' => (string) $this->l->t('Private key password successfully updated.')] + ); + } else { + return new DataResponse( + ['message' => (string) $errorMessage], + Http::STATUS_BAD_REQUEST + ); + } + + } +} diff --git a/apps/encryption/js/encryption.js b/apps/encryption/js/encryption.js index c02b4d74ae8..ea6a5596f24 100644 --- a/apps/encryption/js/encryption.js +++ b/apps/encryption/js/encryption.js @@ -5,25 +5,23 @@ * See the COPYING-README file. */ +if (!OC.Encryption) { + OC.Encryption = {}; +} + /** * @namespace * @memberOf OC */ -OC.Encryption= { - MIGRATION_OPEN: 0, - MIGRATION_COMPLETED: 1, - MIGRATION_IN_PROGRESS: -1, - - +OC.Encryption = { displayEncryptionWarning: function () { - - if (!OC.Notification.isHidden()) { + if (!OC.currentUser || !OC.Notification.isHidden()) { return; } $.get( - OC.generateUrl('/apps/encryption/ajax/getStatus') - , function( result ) { + OC.generateUrl('/apps/encryption/ajax/getStatus'), + function (result) { if (result.status === "success") { OC.Notification.show(result.data.message); } @@ -31,7 +29,6 @@ OC.Encryption= { ); } }; - $(document).ready(function() { // wait for other apps/extensions to register their event handlers and file actions // in the "ready" clause diff --git a/apps/encryption/js/settings-admin.js b/apps/encryption/js/settings-admin.js index 36765adf3e4..bb539f6a4e2 100644 --- a/apps/encryption/js/settings-admin.js +++ b/apps/encryption/js/settings-admin.js @@ -12,17 +12,20 @@ $(document).ready(function(){ $( 'input:radio[name="adminEnableRecovery"]' ).change( function() { var recoveryStatus = $( this ).val(); - var oldStatus = (1+parseInt(recoveryStatus)) % 2; + var oldStatus = (1+parseInt(recoveryStatus, 10)) % 2; var recoveryPassword = $( '#encryptionRecoveryPassword' ).val(); var confirmPassword = $( '#repeatEncryptionRecoveryPassword' ).val(); OC.msg.startSaving('#encryptionSetRecoveryKey .msg'); $.post( - OC.generateUrl('/apps/encryption/ajax/adminRecovery') - , { adminEnableRecovery: recoveryStatus, recoveryPassword: recoveryPassword, confirmPassword: confirmPassword } - , function( result ) { + OC.generateUrl('/apps/encryption/ajax/adminRecovery'), + { adminEnableRecovery: recoveryStatus, + recoveryPassword: recoveryPassword, + confirmPassword: confirmPassword }, + function( result ) { OC.msg.finishedSaving('#encryptionSetRecoveryKey .msg', result); if (result.status === "error") { - $('input:radio[name="adminEnableRecovery"][value="'+oldStatus.toString()+'"]').attr("checked", "true"); + $('input:radio[name="adminEnableRecovery"][value="'+oldStatus.toString()+'"]') + .attr("checked", "true"); } else { if (recoveryStatus === "0") { $('p[name="changeRecoveryPasswordBlock"]').addClass("hidden"); @@ -44,9 +47,9 @@ $(document).ready(function(){ var confirmNewPassword = $('#repeatedNewEncryptionRecoveryPassword').val(); OC.msg.startSaving('#encryptionChangeRecoveryKey .msg'); $.post( - OC.generateUrl('/apps/encryption/ajax/changeRecoveryPassword') - , { oldPassword: oldRecoveryPassword, newPassword: newRecoveryPassword, confirmPassword: confirmNewPassword } - , function( data ) { + OC.generateUrl('/apps/encryption/ajax/changeRecoveryPassword'), + { oldPassword: oldRecoveryPassword, newPassword: newRecoveryPassword, confirmPassword: confirmNewPassword }, + function( data ) { OC.msg.finishedSaving('#encryptionChangeRecoveryKey .msg', data); } ); diff --git a/apps/encryption/js/settings-personal.js b/apps/encryption/js/settings-personal.js index dcfbba4ecde..e36f10a244e 100644 --- a/apps/encryption/js/settings-personal.js +++ b/apps/encryption/js/settings-personal.js @@ -4,23 +4,26 @@ * See the COPYING-README file. */ -function updatePrivateKeyPasswd() { - var oldPrivateKeyPassword = $('input:password[id="oldPrivateKeyPassword"]').val(); - var newPrivateKeyPassword = $('input:password[id="newPrivateKeyPassword"]').val(); - OC.msg.startSaving('#encryption .msg'); - $.post( - OC.generateUrl('/apps/encryption/ajax/updatePrivateKeyPassword') - , { oldPassword: oldPrivateKeyPassword, newPassword: newPrivateKeyPassword } - , function( data ) { - if (data.status === "error") { - OC.msg.finishedSaving('#encryption .msg', data); - } else { - OC.msg.finishedSaving('#encryption .msg', data); - } - } - ); +if (!OC.Encryption) { + OC.Encryption = {}; } +OC.Encryption = { + updatePrivateKeyPassword: function() { + var oldPrivateKeyPassword = $('input:password[id="oldPrivateKeyPassword"]').val(); + var newPrivateKeyPassword = $('input:password[id="newPrivateKeyPassword"]').val(); + OC.msg.startSaving('#encryption .msg'); + $.post( + OC.generateUrl('/apps/encryption/ajax/updatePrivateKeyPassword'), + {oldPassword: oldPrivateKeyPassword, newPassword: newPrivateKeyPassword} + ).success(function (response) { + OC.msg.finishedSuccess('#encryption .msg', response.message); + }).fail(function (response) { + OC.msg.finishedError('#encryption .msg', response.responseJSON.message); + }); + } +}; + $(document).ready(function(){ // Trigger ajax on recoveryAdmin status change @@ -29,9 +32,9 @@ $(document).ready(function(){ var recoveryStatus = $( this ).val(); OC.msg.startAction('#userEnableRecovery .msg', 'Updating recovery keys. This can take some time...'); $.post( - OC.generateUrl('/apps/encryption/ajax/userSetRecovery') - , { userEnableRecovery: recoveryStatus } - , function( data ) { + OC.generateUrl('/apps/encryption/ajax/userSetRecovery'), + { userEnableRecovery: recoveryStatus }, + function( data ) { OC.msg.finishedAction('#userEnableRecovery .msg', data); } ); @@ -48,7 +51,7 @@ $(document).ready(function(){ if (newPrivateKeyPassword !== '' && oldPrivateKeyPassword !== '' ) { $('button:button[name="submitChangePrivateKeyPassword"]').removeAttr("disabled"); if(event.which === 13) { - updatePrivateKeyPasswd(); + OC.Encryption.updatePrivateKeyPassword(); } } else { $('button:button[name="submitChangePrivateKeyPassword"]').attr("disabled", "true"); @@ -56,7 +59,7 @@ $(document).ready(function(){ }); $('button:button[name="submitChangePrivateKeyPassword"]').click(function() { - updatePrivateKeyPasswd(); + OC.Encryption.updatePrivateKeyPassword(); }); }); diff --git a/apps/encryption/l10n/ar.js b/apps/encryption/l10n/ar.js index aa07ac83c77..7f2dcb55c02 100644 --- a/apps/encryption/l10n/ar.js +++ b/apps/encryption/l10n/ar.js @@ -7,6 +7,7 @@ OC.L10N.register( "Could not disable recovery key. Please check your recovery key password!" : "لا يمكن تعطيل مفتاح الاستعادة, يرجى التحقق من كلمة مرور مفتاح الاستعادة!", "Password successfully changed." : "تم تغيير كلمة المرور بنجاح.", "Could not change the password. Maybe the old password was not correct." : "تعذر تغيير كلمة المرور. من الممكن ان كلمة المرور القديمة غير صحيحة.", + "Private key password successfully updated." : "تم تحديث كلمة المرور للمفتاح الخاص بنجاح.", "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" : "تم تمكين تشفير البرامج لكن لم يتم تهيئة المفاتيح لذا يرجى تسجيل الخروج ثم تسجيل الدخول مرة آخرى.", "Enable recovery key (allow to recover users files in case of password loss):" : "تفعيل استعادة المفتاح (سوف يمكنك من استعادة ملفات المستخدمين في حال فقدان كلمة المرور):", diff --git a/apps/encryption/l10n/ar.json b/apps/encryption/l10n/ar.json index abee54f539d..3808eeb9e76 100644 --- a/apps/encryption/l10n/ar.json +++ b/apps/encryption/l10n/ar.json @@ -5,6 +5,7 @@ "Could not disable recovery key. Please check your recovery key password!" : "لا يمكن تعطيل مفتاح الاستعادة, يرجى التحقق من كلمة مرور مفتاح الاستعادة!", "Password successfully changed." : "تم تغيير كلمة المرور بنجاح.", "Could not change the password. Maybe the old password was not correct." : "تعذر تغيير كلمة المرور. من الممكن ان كلمة المرور القديمة غير صحيحة.", + "Private key password successfully updated." : "تم تحديث كلمة المرور للمفتاح الخاص بنجاح.", "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" : "تم تمكين تشفير البرامج لكن لم يتم تهيئة المفاتيح لذا يرجى تسجيل الخروج ثم تسجيل الدخول مرة آخرى.", "Enable recovery key (allow to recover users files in case of password loss):" : "تفعيل استعادة المفتاح (سوف يمكنك من استعادة ملفات المستخدمين في حال فقدان كلمة المرور):", diff --git a/apps/encryption/l10n/ast.js b/apps/encryption/l10n/ast.js index 1f8adec4604..7316c5b6651 100644 --- a/apps/encryption/l10n/ast.js +++ b/apps/encryption/l10n/ast.js @@ -7,6 +7,7 @@ OC.L10N.register( "Could not disable recovery key. Please check your recovery key password!" : "Nun pudo deshabilitase la clave de recuperación. Por favor comprueba la contraseña!", "Password successfully changed." : "Camudóse la contraseña", "Could not change the password. Maybe the old password was not correct." : "Nun pudo camudase la contraseña. Comprueba que la contraseña actual seya correuta.", + "Private key password successfully updated." : "Contraseña de clave privada anovada correchamente.", "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", "Enable recovery key (allow to recover users files in case of password loss):" : "Habilitar la clave de recuperación (permite recuperar los ficheros del usuariu en casu de perda de la contraseña);", diff --git a/apps/encryption/l10n/ast.json b/apps/encryption/l10n/ast.json index d1bf0b6b7d5..6639d1341ca 100644 --- a/apps/encryption/l10n/ast.json +++ b/apps/encryption/l10n/ast.json @@ -5,6 +5,7 @@ "Could not disable recovery key. Please check your recovery key password!" : "Nun pudo deshabilitase la clave de recuperación. Por favor comprueba la contraseña!", "Password successfully changed." : "Camudóse la contraseña", "Could not change the password. Maybe the old password was not correct." : "Nun pudo camudase la contraseña. Comprueba que la contraseña actual seya correuta.", + "Private key password successfully updated." : "Contraseña de clave privada anovada correchamente.", "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", "Enable recovery key (allow to recover users files in case of password loss):" : "Habilitar la clave de recuperación (permite recuperar los ficheros del usuariu en casu de perda de la contraseña);", diff --git a/apps/encryption/l10n/az.js b/apps/encryption/l10n/az.js index 7ef7b6b2027..bbb3e72ce95 100644 --- a/apps/encryption/l10n/az.js +++ b/apps/encryption/l10n/az.js @@ -13,6 +13,10 @@ OC.L10N.register( "Please repeat the new recovery password" : "Xahiş olunur yeni bərpa açarını təkrarlayasınız", "Password successfully changed." : "Şifrə uğurla dəyişdirildi.", "Could not change the password. Maybe the old password was not correct." : "Şifrəni dəyişmək olmur, ola bilər ki, köhnə şifrə düzgün olmayıb.", + "Could not update the private key password." : "Gizli açarın şifrəsini yeniləmək mümkün olmadı.", + "The old password was not correct, please try again." : "Köhnə şifrə düzgün deyildi, xahiş olunur yenidən cəhd edəsiniz.", + "The current log-in password was not correct, please try again." : "Hal-hazırki istifadəçi şifrəsi düzgün deyildi, xahiş olunur yenidən cəhd edəsiniz.", + "Private key password successfully updated." : "Gizli aşar şifrəsi uğurla yeniləndi.", "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", "Enable recovery key (allow to recover users files in case of password loss):" : "Bərpa açarını aktivləşdir(şifrə itirilməsi hadısələrində, istifadəçi fayllarının bərpasına izin verir)", diff --git a/apps/encryption/l10n/az.json b/apps/encryption/l10n/az.json index ad675bdab96..78bedc365b1 100644 --- a/apps/encryption/l10n/az.json +++ b/apps/encryption/l10n/az.json @@ -11,6 +11,10 @@ "Please repeat the new recovery password" : "Xahiş olunur yeni bərpa açarını təkrarlayasınız", "Password successfully changed." : "Şifrə uğurla dəyişdirildi.", "Could not change the password. Maybe the old password was not correct." : "Şifrəni dəyişmək olmur, ola bilər ki, köhnə şifrə düzgün olmayıb.", + "Could not update the private key password." : "Gizli açarın şifrəsini yeniləmək mümkün olmadı.", + "The old password was not correct, please try again." : "Köhnə şifrə düzgün deyildi, xahiş olunur yenidən cəhd edəsiniz.", + "The current log-in password was not correct, please try again." : "Hal-hazırki istifadəçi şifrəsi düzgün deyildi, xahiş olunur yenidən cəhd edəsiniz.", + "Private key password successfully updated." : "Gizli aşar şifrəsi uğurla yeniləndi.", "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", "Enable recovery key (allow to recover users files in case of password loss):" : "Bərpa açarını aktivləşdir(şifrə itirilməsi hadısələrində, istifadəçi fayllarının bərpasına izin verir)", diff --git a/apps/encryption/l10n/bg_BG.js b/apps/encryption/l10n/bg_BG.js index dbfd97421b7..f809545a6b9 100644 --- a/apps/encryption/l10n/bg_BG.js +++ b/apps/encryption/l10n/bg_BG.js @@ -13,6 +13,10 @@ OC.L10N.register( "Please repeat the new recovery password" : "Моля, въведи повторна новата парола за възстановяване", "Password successfully changed." : "Паролата е успешно променена.", "Could not change the password. Maybe the old password was not correct." : "Грешка при промяна на паролата. Може би старата ти парола е сгрешена.", + "Could not update the private key password." : "Неуспешна промяна на паролата на личния ключ", + "The old password was not correct, please try again." : "Старата парола е грешна, опитай отново.", + "The current log-in password was not correct, please try again." : "Грешна парола за вписване, опитай отново.", + "Private key password successfully updated." : "Успешно променена тайната парола за ключа.", "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" : "Програмата за криптиране е включена, но твоите ключове не са зададени, моля отпиши си и се впиши отново.", "Enable recovery key (allow to recover users files in case of password loss):" : "Включи опцията възстановяване на ключ (разрешава да възстанови файловете на потребителите в случай на загубена парола):", diff --git a/apps/encryption/l10n/bg_BG.json b/apps/encryption/l10n/bg_BG.json index 9938f672b9b..ca285bfff49 100644 --- a/apps/encryption/l10n/bg_BG.json +++ b/apps/encryption/l10n/bg_BG.json @@ -11,6 +11,10 @@ "Please repeat the new recovery password" : "Моля, въведи повторна новата парола за възстановяване", "Password successfully changed." : "Паролата е успешно променена.", "Could not change the password. Maybe the old password was not correct." : "Грешка при промяна на паролата. Може би старата ти парола е сгрешена.", + "Could not update the private key password." : "Неуспешна промяна на паролата на личния ключ", + "The old password was not correct, please try again." : "Старата парола е грешна, опитай отново.", + "The current log-in password was not correct, please try again." : "Грешна парола за вписване, опитай отново.", + "Private key password successfully updated." : "Успешно променена тайната парола за ключа.", "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" : "Програмата за криптиране е включена, но твоите ключове не са зададени, моля отпиши си и се впиши отново.", "Enable recovery key (allow to recover users files in case of password loss):" : "Включи опцията възстановяване на ключ (разрешава да възстанови файловете на потребителите в случай на загубена парола):", diff --git a/apps/encryption/l10n/ca.js b/apps/encryption/l10n/ca.js index 2986dd96242..c81840fae7d 100644 --- a/apps/encryption/l10n/ca.js +++ b/apps/encryption/l10n/ca.js @@ -7,6 +7,7 @@ OC.L10N.register( "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ó!", "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.", "Enable recovery key (allow to recover users files in case of password loss):" : "Activa la clau de recuperació (permet recuperar fitxers d'usuaris en cas de pèrdua de contrasenya):", diff --git a/apps/encryption/l10n/ca.json b/apps/encryption/l10n/ca.json index b6458161877..5309fafa2d6 100644 --- a/apps/encryption/l10n/ca.json +++ b/apps/encryption/l10n/ca.json @@ -5,6 +5,7 @@ "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ó!", "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.", "Enable recovery key (allow to recover users files in case of password loss):" : "Activa la clau de recuperació (permet recuperar fitxers d'usuaris en cas de pèrdua de contrasenya):", diff --git a/apps/encryption/l10n/cs_CZ.js b/apps/encryption/l10n/cs_CZ.js index fcec4fd4d23..e433bad6b97 100644 --- a/apps/encryption/l10n/cs_CZ.js +++ b/apps/encryption/l10n/cs_CZ.js @@ -15,6 +15,10 @@ OC.L10N.register( "Could not change the password. Maybe the old password was not correct." : "Změna hesla se nezdařila. Pravděpodobně nebylo stávající heslo zadáno správně.", "Recovery Key enabled" : "Záchranný klíč povolen", "Could not enable the recovery key, please try again or contact your administrator" : "Nelze povolit záchranný klíč. Zkuste to prosím znovu nebo kontaktujte svého správce.", + "Could not update the private key password." : "Nelze aktualizovat heslo soukromého klíče.", + "The old password was not correct, please try again." : "Staré heslo nebylo zadáno správně, zkuste to prosím znovu.", + "The current log-in password was not correct, please try again." : "Současné přihlašovací heslo nebylo zadáno správně, zkuste to prosím znovu.", + "Private key password successfully updated." : "Heslo soukromého klíče úspěšně aktualizováno.", "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", "ownCloud basic encryption module" : "ownCloud základní šifrovací modul", diff --git a/apps/encryption/l10n/cs_CZ.json b/apps/encryption/l10n/cs_CZ.json index 49c4d0eb33c..164d7ac7354 100644 --- a/apps/encryption/l10n/cs_CZ.json +++ b/apps/encryption/l10n/cs_CZ.json @@ -13,6 +13,10 @@ "Could not change the password. Maybe the old password was not correct." : "Změna hesla se nezdařila. Pravděpodobně nebylo stávající heslo zadáno správně.", "Recovery Key enabled" : "Záchranný klíč povolen", "Could not enable the recovery key, please try again or contact your administrator" : "Nelze povolit záchranný klíč. Zkuste to prosím znovu nebo kontaktujte svého správce.", + "Could not update the private key password." : "Nelze aktualizovat heslo soukromého klíče.", + "The old password was not correct, please try again." : "Staré heslo nebylo zadáno správně, zkuste to prosím znovu.", + "The current log-in password was not correct, please try again." : "Současné přihlašovací heslo nebylo zadáno správně, zkuste to prosím znovu.", + "Private key password successfully updated." : "Heslo soukromého klíče úspěšně aktualizováno.", "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", "ownCloud basic encryption module" : "ownCloud základní šifrovací modul", diff --git a/apps/encryption/l10n/da.js b/apps/encryption/l10n/da.js index 5aad28311d8..18c8e22bc61 100644 --- a/apps/encryption/l10n/da.js +++ b/apps/encryption/l10n/da.js @@ -15,6 +15,10 @@ OC.L10N.register( "Could not change the password. Maybe the old password was not correct." : "Kunne ikke ændre kodeordet. Måske var det gamle kodeord ikke korrekt.", "Recovery Key enabled" : "Gendannalsesnøgle aktiv", "Could not enable the recovery key, please try again or contact your administrator" : "Kunne ikke aktivere gendannelsesnøglen, venligst prøv igen eller kontakt din administrator", + "Could not update the private key password." : "Kunne ikke opdatere kodeordet til den private nøgle.", + "The old password was not correct, please try again." : "Det gamle kodeord var ikke korrekt, prøv venligst igen.", + "The current log-in password was not correct, please try again." : "Det nuværende kodeord til log-in var ikke korrekt, prøv venligst igen.", + "Private key password successfully updated." : "Privat nøgle kodeord succesfuldt opdateret.", "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.", "ownCloud basic encryption module" : "ownCloud basis krypteringsmodul", diff --git a/apps/encryption/l10n/da.json b/apps/encryption/l10n/da.json index 8916a6bb4d6..baf52f14508 100644 --- a/apps/encryption/l10n/da.json +++ b/apps/encryption/l10n/da.json @@ -13,6 +13,10 @@ "Could not change the password. Maybe the old password was not correct." : "Kunne ikke ændre kodeordet. Måske var det gamle kodeord ikke korrekt.", "Recovery Key enabled" : "Gendannalsesnøgle aktiv", "Could not enable the recovery key, please try again or contact your administrator" : "Kunne ikke aktivere gendannelsesnøglen, venligst prøv igen eller kontakt din administrator", + "Could not update the private key password." : "Kunne ikke opdatere kodeordet til den private nøgle.", + "The old password was not correct, please try again." : "Det gamle kodeord var ikke korrekt, prøv venligst igen.", + "The current log-in password was not correct, please try again." : "Det nuværende kodeord til log-in var ikke korrekt, prøv venligst igen.", + "Private key password successfully updated." : "Privat nøgle kodeord succesfuldt opdateret.", "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.", "ownCloud basic encryption module" : "ownCloud basis krypteringsmodul", diff --git a/apps/encryption/l10n/de.js b/apps/encryption/l10n/de.js index d91c7f16307..c248b481cf1 100644 --- a/apps/encryption/l10n/de.js +++ b/apps/encryption/l10n/de.js @@ -15,6 +15,10 @@ OC.L10N.register( "Could not change the password. Maybe the old password was not correct." : "Das Passwort konnte nicht geändert werden. Vielleicht war das alte Passwort falsch.", "Recovery Key enabled" : "Wiederherstellungsschlüssel aktiviert", "Could not enable the recovery key, please try again or contact your administrator" : "Der Wiederherstellungsschlüssel konnte nicht aktiviert werden, bitte versuche es noch einmal oder kontaktiere Deinen Administrator", + "Could not update the private key password." : "Das Passwort des privaten Schlüssels konnte nicht aktualisiert werden.", + "The old password was not correct, please try again." : "Das alte Passwort war nicht korrekt, bitte versuche es noch einmal.", + "The current log-in password was not correct, please try again." : "Das aktuelle Anmeldepasswort war nicht korrekt, bitte versuche es noch einmal.", + "Private key password successfully updated." : "Passwort des privaten Schlüssels erfolgreich aktualisiert", "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.", "ownCloud basic encryption module" : "ownCloud-Basisverschlüsselungsmodul", diff --git a/apps/encryption/l10n/de.json b/apps/encryption/l10n/de.json index 04f97f298a7..74c591fb632 100644 --- a/apps/encryption/l10n/de.json +++ b/apps/encryption/l10n/de.json @@ -13,6 +13,10 @@ "Could not change the password. Maybe the old password was not correct." : "Das Passwort konnte nicht geändert werden. Vielleicht war das alte Passwort falsch.", "Recovery Key enabled" : "Wiederherstellungsschlüssel aktiviert", "Could not enable the recovery key, please try again or contact your administrator" : "Der Wiederherstellungsschlüssel konnte nicht aktiviert werden, bitte versuche es noch einmal oder kontaktiere Deinen Administrator", + "Could not update the private key password." : "Das Passwort des privaten Schlüssels konnte nicht aktualisiert werden.", + "The old password was not correct, please try again." : "Das alte Passwort war nicht korrekt, bitte versuche es noch einmal.", + "The current log-in password was not correct, please try again." : "Das aktuelle Anmeldepasswort war nicht korrekt, bitte versuche es noch einmal.", + "Private key password successfully updated." : "Passwort des privaten Schlüssels erfolgreich aktualisiert", "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.", "ownCloud basic encryption module" : "ownCloud-Basisverschlüsselungsmodul", diff --git a/apps/encryption/l10n/de_DE.js b/apps/encryption/l10n/de_DE.js index 71cf2ea6202..695937fc6c5 100644 --- a/apps/encryption/l10n/de_DE.js +++ b/apps/encryption/l10n/de_DE.js @@ -15,6 +15,10 @@ OC.L10N.register( "Could not change the password. Maybe the old password was not correct." : "Das Passwort konnte nicht geändert werden. Vielleicht war das alte Passwort nicht richtig.", "Recovery Key enabled" : "Wiederherstellungsschlüssel aktiviert", "Could not enable the recovery key, please try again or contact your administrator" : "Der Wiederherstellungsschlüssel konnte nicht aktiviert werden, bitte versuchen Sie es noch einmal oder kontaktieren Sie Ihren Administrator", + "Could not update the private key password." : "Das Passwort des privaten Schlüssels konnte nicht aktualisiert werden.", + "The old password was not correct, please try again." : "Das alte Passwort war nicht korrekt, bitte versuchen Sie es noch einmal.", + "The current log-in password was not correct, please try again." : "Das aktuelle Anmeldepasswort war nicht korrekt, bitte versuchen Sie es noch einmal.", + "Private key password successfully updated." : "Das Passwort des privaten Schlüssels wurde erfolgreich aktualisiert.", "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üsselungs-App. Bitte aktualisieren Sie Ihr privates Schlüsselpasswort, um den Zugriff auf Ihre verschlüsselten Dateien wiederherzustellen.", "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Verschlüsselung-App ist aktiviert, aber Ihre Schlüssel sind nicht initialisiert. Bitte nochmals ab- und wieder anmelden.", "ownCloud basic encryption module" : "ownCloud-Basisverschlüsselungsmodul", diff --git a/apps/encryption/l10n/de_DE.json b/apps/encryption/l10n/de_DE.json index c55229f1238..66e7d6f9772 100644 --- a/apps/encryption/l10n/de_DE.json +++ b/apps/encryption/l10n/de_DE.json @@ -13,6 +13,10 @@ "Could not change the password. Maybe the old password was not correct." : "Das Passwort konnte nicht geändert werden. Vielleicht war das alte Passwort nicht richtig.", "Recovery Key enabled" : "Wiederherstellungsschlüssel aktiviert", "Could not enable the recovery key, please try again or contact your administrator" : "Der Wiederherstellungsschlüssel konnte nicht aktiviert werden, bitte versuchen Sie es noch einmal oder kontaktieren Sie Ihren Administrator", + "Could not update the private key password." : "Das Passwort des privaten Schlüssels konnte nicht aktualisiert werden.", + "The old password was not correct, please try again." : "Das alte Passwort war nicht korrekt, bitte versuchen Sie es noch einmal.", + "The current log-in password was not correct, please try again." : "Das aktuelle Anmeldepasswort war nicht korrekt, bitte versuchen Sie es noch einmal.", + "Private key password successfully updated." : "Das Passwort des privaten Schlüssels wurde erfolgreich aktualisiert.", "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üsselungs-App. Bitte aktualisieren Sie Ihr privates Schlüsselpasswort, um den Zugriff auf Ihre verschlüsselten Dateien wiederherzustellen.", "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Verschlüsselung-App ist aktiviert, aber Ihre Schlüssel sind nicht initialisiert. Bitte nochmals ab- und wieder anmelden.", "ownCloud basic encryption module" : "ownCloud-Basisverschlüsselungsmodul", diff --git a/apps/encryption/l10n/el.js b/apps/encryption/l10n/el.js index f60089f3d10..4b8ebdc2f7f 100644 --- a/apps/encryption/l10n/el.js +++ b/apps/encryption/l10n/el.js @@ -15,6 +15,10 @@ OC.L10N.register( "Could not change the password. Maybe the old password was not correct." : "Αποτυχία αλλαγής κωδικού ίσως ο παλιός κωδικός να μην ήταν σωστός.", "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." : "Το παλαιό συνθηματικό δεν είναι σωστό, παρακαλώ δοκιμάστε ξανά.", + "The current log-in password was not correct, please try again." : "Το τρέχον συνθηματικό δεν είναι σωστό, παρακαλώ δοκιμάστε ξανά.", + "Private key password successfully updated." : "Το Προσωπικό κλειδί πρόσβασης ενημερώθηκε επιτυχώς", "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" : "Η εφαρμογή κρυπτογράφησης είναι ενεργοποιημένη αλλά τα κλειδιά σας δεν έχουν καταγραφεί, παρακαλώ αποσυνδεθείτε και επανασυνδεθείτε.", "ownCloud basic encryption module" : "Βασική μονάδα κρυπτογράφησης του ", diff --git a/apps/encryption/l10n/el.json b/apps/encryption/l10n/el.json index e3dcd4ab78a..b75921da40c 100644 --- a/apps/encryption/l10n/el.json +++ b/apps/encryption/l10n/el.json @@ -13,6 +13,10 @@ "Could not change the password. Maybe the old password was not correct." : "Αποτυχία αλλαγής κωδικού ίσως ο παλιός κωδικός να μην ήταν σωστός.", "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." : "Το παλαιό συνθηματικό δεν είναι σωστό, παρακαλώ δοκιμάστε ξανά.", + "The current log-in password was not correct, please try again." : "Το τρέχον συνθηματικό δεν είναι σωστό, παρακαλώ δοκιμάστε ξανά.", + "Private key password successfully updated." : "Το Προσωπικό κλειδί πρόσβασης ενημερώθηκε επιτυχώς", "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" : "Η εφαρμογή κρυπτογράφησης είναι ενεργοποιημένη αλλά τα κλειδιά σας δεν έχουν καταγραφεί, παρακαλώ αποσυνδεθείτε και επανασυνδεθείτε.", "ownCloud basic encryption module" : "Βασική μονάδα κρυπτογράφησης του ", diff --git a/apps/encryption/l10n/en_GB.js b/apps/encryption/l10n/en_GB.js index 9bd1bf36f70..518897fbbed 100644 --- a/apps/encryption/l10n/en_GB.js +++ b/apps/encryption/l10n/en_GB.js @@ -13,8 +13,15 @@ OC.L10N.register( "Please repeat the new recovery password" : "Please repeat the new recovery password", "Password successfully changed." : "Password changed successfully.", "Could not change the password. Maybe the old password was not correct." : "Could not change the password. Maybe the old password was incorrect.", + "Recovery Key enabled" : "Recovery Key enabled", + "Could not enable the recovery key, please try again or contact your administrator" : "Could not enable the recovery key, please try again or contact your administrator", + "Could not update the private key password." : "Could not update the private key password.", + "The old password was not correct, please try again." : "The old password was not correct, please try again.", + "The current log-in password was not correct, please try again." : "The current log-in password was not correct, please try again.", + "Private key password successfully updated." : "Private key password updated successfully.", "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "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 but your keys are not initialised, please log-out and log-in again", + "ownCloud basic encryption module" : "ownCloud basic encryption module", "Enable recovery key (allow to recover users files in case of password loss):" : "Enable recovery key (allow to recover users files in case of password loss):", "Recovery key password" : "Recovery key password", "Repeat Recovery key password" : "Repeat recovery key password", diff --git a/apps/encryption/l10n/en_GB.json b/apps/encryption/l10n/en_GB.json index a2b33b68a14..19575b67aff 100644 --- a/apps/encryption/l10n/en_GB.json +++ b/apps/encryption/l10n/en_GB.json @@ -11,8 +11,15 @@ "Please repeat the new recovery password" : "Please repeat the new recovery password", "Password successfully changed." : "Password changed successfully.", "Could not change the password. Maybe the old password was not correct." : "Could not change the password. Maybe the old password was incorrect.", + "Recovery Key enabled" : "Recovery Key enabled", + "Could not enable the recovery key, please try again or contact your administrator" : "Could not enable the recovery key, please try again or contact your administrator", + "Could not update the private key password." : "Could not update the private key password.", + "The old password was not correct, please try again." : "The old password was not correct, please try again.", + "The current log-in password was not correct, please try again." : "The current log-in password was not correct, please try again.", + "Private key password successfully updated." : "Private key password updated successfully.", "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "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 but your keys are not initialised, please log-out and log-in again", + "ownCloud basic encryption module" : "ownCloud basic encryption module", "Enable recovery key (allow to recover users files in case of password loss):" : "Enable recovery key (allow to recover users files in case of password loss):", "Recovery key password" : "Recovery key password", "Repeat Recovery key password" : "Repeat recovery key password", diff --git a/apps/encryption/l10n/eo.js b/apps/encryption/l10n/eo.js index de3e4e2ea40..b547556342c 100644 --- a/apps/encryption/l10n/eo.js +++ b/apps/encryption/l10n/eo.js @@ -3,6 +3,7 @@ OC.L10N.register( { "Password successfully changed." : "La pasvorto sukcese ŝanĝiĝis.", "Could not change the password. Maybe the old password was not correct." : "Ne eblis ŝanĝi la pasvorton. Eble la malnova pasvorto malĝustis.", + "Private key password successfully updated." : "La pasvorto de la malpublika klavo sukcese ĝisdatiĝis.", "Enabled" : "Kapabligita", "Disabled" : "Malkapabligita", "Change Password" : "Ŝarĝi pasvorton", diff --git a/apps/encryption/l10n/eo.json b/apps/encryption/l10n/eo.json index 60560f163a5..d907cc2a493 100644 --- a/apps/encryption/l10n/eo.json +++ b/apps/encryption/l10n/eo.json @@ -1,6 +1,7 @@ { "translations": { "Password successfully changed." : "La pasvorto sukcese ŝanĝiĝis.", "Could not change the password. Maybe the old password was not correct." : "Ne eblis ŝanĝi la pasvorton. Eble la malnova pasvorto malĝustis.", + "Private key password successfully updated." : "La pasvorto de la malpublika klavo sukcese ĝisdatiĝis.", "Enabled" : "Kapabligita", "Disabled" : "Malkapabligita", "Change Password" : "Ŝarĝi pasvorton", diff --git a/apps/encryption/l10n/es.js b/apps/encryption/l10n/es.js index d30432ecea3..6a682d1a209 100644 --- a/apps/encryption/l10n/es.js +++ b/apps/encryption/l10n/es.js @@ -1,11 +1,11 @@ OC.L10N.register( "encryption", { - "Missing recovery key password" : "Falta contraseña de recuperación.", + "Missing recovery key password" : "Falta contraseña de recuperación", "Please repeat the recovery key password" : "Por favor, repita la contraseña de recuperación", - "Repeated recovery key password does not match the provided recovery key password" : "La contraseña de recuperación reintroducida no coincide con la contraseña de recuperación proporcionada.", + "Repeated recovery key password does not match the provided recovery key password" : "La contraseña de recuperación reintroducida no coincide con la contraseña de recuperación proporcionada", "Recovery key successfully enabled" : "Se ha habilitado la recuperación de archivos", - "Could not enable recovery key. Please check your recovery key password!" : "No se pudo habilitar la clave de recuperación. Por favor compruebe su contraseña.", + "Could not enable recovery key. Please check your recovery key password!" : "No se pudo habilitar la contraseña de recuperación. Por favor compruebe su contraseña de recuperación!", "Recovery key successfully disabled" : "Clave de recuperación deshabilitada", "Could not disable recovery key. Please check your recovery key password!" : "No se pudo deshabilitar la clave de recuperación. Por favor, ¡compruebe su contraseña!", "Please provide the old recovery password" : "Por favor, ingrese su antigua contraseña de recuperación", @@ -15,9 +15,13 @@ OC.L10N.register( "Could not change the password. Maybe the old password was not correct." : "No se pudo cambiar la contraseña. Compruebe que la contraseña actual sea correcta.", "Recovery Key enabled" : "Recuperación de clave habilitada", "Could not enable the recovery key, please try again or contact your administrator" : "No se pudo habilitar la clave de recuperación, por favor vuelva a intentarlo o póngase en contacto con el administrador", + "Could not update the private key password." : "No se pudo actualizar la contraseña de la clave privada.", + "The old password was not correct, please try again." : "La antigua contraseña no es correcta, por favor intente de nuevo.", + "The current log-in password was not correct, please try again." : "La contraseña de inicio de sesión actual no es correcto, por favor intente de nuevo.", + "Private key password successfully updated." : "Contraseña de clave privada actualizada con éxito.", "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.", - "ownCloud basic encryption module" : "Módulo base de encriptación ownCloud", + "ownCloud basic encryption module" : "Módulo básico de encriptación ownCloud", "Enable recovery key (allow to recover users files in case of password loss):" : "Habilitar la clave de recuperación (permite recuperar los ficheros del usuario en caso de pérdida de la contraseña);", "Recovery key password" : "Contraseña de clave de recuperación", "Repeat Recovery key password" : "Repite la contraseña de clave de recuperación", diff --git a/apps/encryption/l10n/es.json b/apps/encryption/l10n/es.json index 282181c52e7..9aaedac1f10 100644 --- a/apps/encryption/l10n/es.json +++ b/apps/encryption/l10n/es.json @@ -1,9 +1,9 @@ { "translations": { - "Missing recovery key password" : "Falta contraseña de recuperación.", + "Missing recovery key password" : "Falta contraseña de recuperación", "Please repeat the recovery key password" : "Por favor, repita la contraseña de recuperación", - "Repeated recovery key password does not match the provided recovery key password" : "La contraseña de recuperación reintroducida no coincide con la contraseña de recuperación proporcionada.", + "Repeated recovery key password does not match the provided recovery key password" : "La contraseña de recuperación reintroducida no coincide con la contraseña de recuperación proporcionada", "Recovery key successfully enabled" : "Se ha habilitado la recuperación de archivos", - "Could not enable recovery key. Please check your recovery key password!" : "No se pudo habilitar la clave de recuperación. Por favor compruebe su contraseña.", + "Could not enable recovery key. Please check your recovery key password!" : "No se pudo habilitar la contraseña de recuperación. Por favor compruebe su contraseña de recuperación!", "Recovery key successfully disabled" : "Clave de recuperación deshabilitada", "Could not disable recovery key. Please check your recovery key password!" : "No se pudo deshabilitar la clave de recuperación. Por favor, ¡compruebe su contraseña!", "Please provide the old recovery password" : "Por favor, ingrese su antigua contraseña de recuperación", @@ -13,9 +13,13 @@ "Could not change the password. Maybe the old password was not correct." : "No se pudo cambiar la contraseña. Compruebe que la contraseña actual sea correcta.", "Recovery Key enabled" : "Recuperación de clave habilitada", "Could not enable the recovery key, please try again or contact your administrator" : "No se pudo habilitar la clave de recuperación, por favor vuelva a intentarlo o póngase en contacto con el administrador", + "Could not update the private key password." : "No se pudo actualizar la contraseña de la clave privada.", + "The old password was not correct, please try again." : "La antigua contraseña no es correcta, por favor intente de nuevo.", + "The current log-in password was not correct, please try again." : "La contraseña de inicio de sesión actual no es correcto, por favor intente de nuevo.", + "Private key password successfully updated." : "Contraseña de clave privada actualizada con éxito.", "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.", - "ownCloud basic encryption module" : "Módulo base de encriptación ownCloud", + "ownCloud basic encryption module" : "Módulo básico de encriptación ownCloud", "Enable recovery key (allow to recover users files in case of password loss):" : "Habilitar la clave de recuperación (permite recuperar los ficheros del usuario en caso de pérdida de la contraseña);", "Recovery key password" : "Contraseña de clave de recuperación", "Repeat Recovery key password" : "Repite la contraseña de clave de recuperación", diff --git a/apps/encryption/l10n/es_AR.js b/apps/encryption/l10n/es_AR.js index 4bdc684cf11..527536b26fb 100644 --- a/apps/encryption/l10n/es_AR.js +++ b/apps/encryption/l10n/es_AR.js @@ -7,6 +7,7 @@ OC.L10N.register( "Could not disable recovery key. Please check your recovery key password!" : "No fue posible deshabilitar la clave de recuperación. Por favor, comprobá tu contraseña.", "Password successfully changed." : "Tu contraseña fue cambiada", "Could not change the password. Maybe the old password was not correct." : "No se pudo cambiar la contraseña. Comprobá que la contraseña actual sea correcta.", + "Private key password successfully updated." : "Contraseña de clave privada actualizada con éxito.", "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", "Enable recovery key (allow to recover users files in case of password loss):" : "Habilitar clave de recuperación (te permite recuperar los archivos de usuario en el caso que pierdas la contraseña):", diff --git a/apps/encryption/l10n/es_AR.json b/apps/encryption/l10n/es_AR.json index a9874da1c3c..7b154b351e7 100644 --- a/apps/encryption/l10n/es_AR.json +++ b/apps/encryption/l10n/es_AR.json @@ -5,6 +5,7 @@ "Could not disable recovery key. Please check your recovery key password!" : "No fue posible deshabilitar la clave de recuperación. Por favor, comprobá tu contraseña.", "Password successfully changed." : "Tu contraseña fue cambiada", "Could not change the password. Maybe the old password was not correct." : "No se pudo cambiar la contraseña. Comprobá que la contraseña actual sea correcta.", + "Private key password successfully updated." : "Contraseña de clave privada actualizada con éxito.", "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", "Enable recovery key (allow to recover users files in case of password loss):" : "Habilitar clave de recuperación (te permite recuperar los archivos de usuario en el caso que pierdas la contraseña):", diff --git a/apps/encryption/l10n/es_MX.js b/apps/encryption/l10n/es_MX.js index cce2e0d213e..a3b4645040d 100644 --- a/apps/encryption/l10n/es_MX.js +++ b/apps/encryption/l10n/es_MX.js @@ -7,6 +7,7 @@ OC.L10N.register( "Could not disable recovery key. Please check your recovery key password!" : "No se pudo deshabilitar la clave de recuperación. Por favor compruebe su contraseña!", "Password successfully changed." : "Su contraseña ha sido cambiada", "Could not change the password. Maybe the old password was not correct." : "No se pudo cambiar la contraseña. Compruebe que la contraseña actual sea correcta.", + "Private key password successfully updated." : "Contraseña de clave privada actualizada con éxito.", "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.", "Enable recovery key (allow to recover users files in case of password loss):" : "Habilitar la clave de recuperación (permite recuperar los archivos del usuario en caso de pérdida de la contraseña);", diff --git a/apps/encryption/l10n/es_MX.json b/apps/encryption/l10n/es_MX.json index beb1b76cf2f..96d745e8f0d 100644 --- a/apps/encryption/l10n/es_MX.json +++ b/apps/encryption/l10n/es_MX.json @@ -5,6 +5,7 @@ "Could not disable recovery key. Please check your recovery key password!" : "No se pudo deshabilitar la clave de recuperación. Por favor compruebe su contraseña!", "Password successfully changed." : "Su contraseña ha sido cambiada", "Could not change the password. Maybe the old password was not correct." : "No se pudo cambiar la contraseña. Compruebe que la contraseña actual sea correcta.", + "Private key password successfully updated." : "Contraseña de clave privada actualizada con éxito.", "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.", "Enable recovery key (allow to recover users files in case of password loss):" : "Habilitar la clave de recuperación (permite recuperar los archivos del usuario en caso de pérdida de la contraseña);", diff --git a/apps/encryption/l10n/et_EE.js b/apps/encryption/l10n/et_EE.js index 667aabfc6bd..67e7993cdd6 100644 --- a/apps/encryption/l10n/et_EE.js +++ b/apps/encryption/l10n/et_EE.js @@ -13,6 +13,10 @@ 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.", + "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.", + "Private key password successfully updated." : "Privaatse võtme parool edukalt uuendatud.", "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.", "Enable recovery key (allow to recover users files in case of password loss):" : "Luba taastevõti (võimalda kasutaja failide taastamine parooli kaotuse puhul):", diff --git a/apps/encryption/l10n/et_EE.json b/apps/encryption/l10n/et_EE.json index 56c7d478628..00991bb6c88 100644 --- a/apps/encryption/l10n/et_EE.json +++ b/apps/encryption/l10n/et_EE.json @@ -11,6 +11,10 @@ "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.", + "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.", + "Private key password successfully updated." : "Privaatse võtme parool edukalt uuendatud.", "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.", "Enable recovery key (allow to recover users files in case of password loss):" : "Luba taastevõti (võimalda kasutaja failide taastamine parooli kaotuse puhul):", diff --git a/apps/encryption/l10n/eu.js b/apps/encryption/l10n/eu.js index 6567bdd2272..c8942314d38 100644 --- a/apps/encryption/l10n/eu.js +++ b/apps/encryption/l10n/eu.js @@ -13,6 +13,10 @@ OC.L10N.register( "Please repeat the new recovery password" : "Mesedez errepikatu berreskuratze pasahitz berria", "Password successfully changed." : "Pasahitza behar bezala aldatu da.", "Could not change the password. Maybe the old password was not correct." : "Ezin izan da pasahitza aldatu. Agian pasahitz zaharra okerrekoa da.", + "Could not update the private key password." : "Ezin izan da gako pribatu pasahitza eguneratu. ", + "The old password was not correct, please try again." : "Pasahitz zaharra ez da egokia. Mesedez, saiatu berriro.", + "The current log-in password was not correct, please try again." : "Oraingo pasahitza ez da egokia. Mesedez, saiatu berriro.", + "Private key password successfully updated." : "Gako pasahitz pribatu behar bezala eguneratu da.", "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", "Enable recovery key (allow to recover users files in case of password loss):" : "Gaitu berreskurapen gakoa (erabiltzaileen fitxategiak berreskuratzea ahalbidetzen du pasahitza galtzen badute ere):", diff --git a/apps/encryption/l10n/eu.json b/apps/encryption/l10n/eu.json index 9a586a8b088..4c83627f8df 100644 --- a/apps/encryption/l10n/eu.json +++ b/apps/encryption/l10n/eu.json @@ -11,6 +11,10 @@ "Please repeat the new recovery password" : "Mesedez errepikatu berreskuratze pasahitz berria", "Password successfully changed." : "Pasahitza behar bezala aldatu da.", "Could not change the password. Maybe the old password was not correct." : "Ezin izan da pasahitza aldatu. Agian pasahitz zaharra okerrekoa da.", + "Could not update the private key password." : "Ezin izan da gako pribatu pasahitza eguneratu. ", + "The old password was not correct, please try again." : "Pasahitz zaharra ez da egokia. Mesedez, saiatu berriro.", + "The current log-in password was not correct, please try again." : "Oraingo pasahitza ez da egokia. Mesedez, saiatu berriro.", + "Private key password successfully updated." : "Gako pasahitz pribatu behar bezala eguneratu da.", "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", "Enable recovery key (allow to recover users files in case of password loss):" : "Gaitu berreskurapen gakoa (erabiltzaileen fitxategiak berreskuratzea ahalbidetzen du pasahitza galtzen badute ere):", diff --git a/apps/encryption/l10n/fa.js b/apps/encryption/l10n/fa.js index c5c2e4efff6..24e91656aed 100644 --- a/apps/encryption/l10n/fa.js +++ b/apps/encryption/l10n/fa.js @@ -7,6 +7,7 @@ OC.L10N.register( "Could not disable recovery key. Please check your recovery key password!" : "کلید بازیابی را نمی تواند غیرفعال نماید. لطفا رمزعبور کلید بازیابی خود را بررسی کنید!", "Password successfully changed." : "رمزعبور با موفقیت تغییر یافت.", "Could not change the password. Maybe the old password was not correct." : "رمزعبور را نمیتواند تغییر دهد. شاید رمزعبورقدیمی صحیح نمی باشد.", + "Private key password successfully updated." : "رمزعبور کلید خصوصی با موفقیت به روز شد.", "Enable recovery key (allow to recover users files in case of password loss):" : "فعال کردن کلید بازیابی(اجازه بازیابی فایل های کاربران در صورت از دست دادن رمزعبور):", "Recovery key password" : "رمزعبور کلید بازیابی", "Enabled" : "فعال شده", diff --git a/apps/encryption/l10n/fa.json b/apps/encryption/l10n/fa.json index dcc010c3e1c..ad046fcda2b 100644 --- a/apps/encryption/l10n/fa.json +++ b/apps/encryption/l10n/fa.json @@ -5,6 +5,7 @@ "Could not disable recovery key. Please check your recovery key password!" : "کلید بازیابی را نمی تواند غیرفعال نماید. لطفا رمزعبور کلید بازیابی خود را بررسی کنید!", "Password successfully changed." : "رمزعبور با موفقیت تغییر یافت.", "Could not change the password. Maybe the old password was not correct." : "رمزعبور را نمیتواند تغییر دهد. شاید رمزعبورقدیمی صحیح نمی باشد.", + "Private key password successfully updated." : "رمزعبور کلید خصوصی با موفقیت به روز شد.", "Enable recovery key (allow to recover users files in case of password loss):" : "فعال کردن کلید بازیابی(اجازه بازیابی فایل های کاربران در صورت از دست دادن رمزعبور):", "Recovery key password" : "رمزعبور کلید بازیابی", "Enabled" : "فعال شده", diff --git a/apps/encryption/l10n/fi_FI.js b/apps/encryption/l10n/fi_FI.js index 8258b2e28ff..6589c4aa4c7 100644 --- a/apps/encryption/l10n/fi_FI.js +++ b/apps/encryption/l10n/fi_FI.js @@ -15,6 +15,10 @@ OC.L10N.register( "Could not change the password. Maybe the old password was not correct." : "Salasanan vaihto epäonnistui. Kenties vanha salasana oli väärin.", "Recovery Key enabled" : "Palautusavain käytössä", "Could not enable the recovery key, please try again or contact your administrator" : "Palautusavaimen käyttöönotto epäonnistui, yritä myöhemmin uudelleen tai ota yhteys ylläpitäjään", + "Could not update the private key password." : "Yksityisen avaimen salasanaa ei voitu päivittää.", + "The old password was not correct, please try again." : "Vanha salasana oli väärin, yritä uudelleen.", + "The current log-in password was not correct, please try again." : "Nykyinen kirjautumiseen käytettävä salasana oli väärin, yritä uudelleen.", + "Private key password successfully updated." : "Yksityisen avaimen salasana päivitettiin onnistuneesti.", "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.", "ownCloud basic encryption module" : "ownCloudin perussalausmoduuli", diff --git a/apps/encryption/l10n/fi_FI.json b/apps/encryption/l10n/fi_FI.json index 9e1205a77f3..de8159a61b2 100644 --- a/apps/encryption/l10n/fi_FI.json +++ b/apps/encryption/l10n/fi_FI.json @@ -13,6 +13,10 @@ "Could not change the password. Maybe the old password was not correct." : "Salasanan vaihto epäonnistui. Kenties vanha salasana oli väärin.", "Recovery Key enabled" : "Palautusavain käytössä", "Could not enable the recovery key, please try again or contact your administrator" : "Palautusavaimen käyttöönotto epäonnistui, yritä myöhemmin uudelleen tai ota yhteys ylläpitäjään", + "Could not update the private key password." : "Yksityisen avaimen salasanaa ei voitu päivittää.", + "The old password was not correct, please try again." : "Vanha salasana oli väärin, yritä uudelleen.", + "The current log-in password was not correct, please try again." : "Nykyinen kirjautumiseen käytettävä salasana oli väärin, yritä uudelleen.", + "Private key password successfully updated." : "Yksityisen avaimen salasana päivitettiin onnistuneesti.", "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.", "ownCloud basic encryption module" : "ownCloudin perussalausmoduuli", diff --git a/apps/encryption/l10n/fr.js b/apps/encryption/l10n/fr.js index 2d3d9be26e7..44e571d88c0 100644 --- a/apps/encryption/l10n/fr.js +++ b/apps/encryption/l10n/fr.js @@ -5,7 +5,7 @@ OC.L10N.register( "Please repeat the recovery key password" : "Répétez le mot de passe de la clef de récupération", "Repeated recovery key password does not match the provided recovery key password" : "Le mot de passe de la clef de récupération et sa répétition ne sont pas identiques.", "Recovery key successfully enabled" : "Clef de récupération activée avec succès", - "Could not enable recovery key. Please check your recovery key password!" : "Impossible d'activer la clé de récupération. Veuillez vérifier votre mot de passe de clé de récupération !", + "Could not enable recovery key. Please check your recovery key password!" : "Impossible d'activer la clef de récupération. Veuillez vérifier le mot de passe de votre clé de récupération !", "Recovery key successfully disabled" : "Clef de récupération désactivée avec succès", "Could not disable recovery key. Please check your recovery key password!" : "Impossible de désactiver la clef de récupération. Veuillez vérifier le mot de passe de votre clef de récupération !", "Please provide the old recovery password" : "Veuillez entrer l'ancien mot de passe de récupération", @@ -13,8 +13,12 @@ OC.L10N.register( "Please repeat the new recovery password" : "Veuillez répéter le nouveau mot de passe de récupération", "Password successfully changed." : "Mot de passe changé avec succès.", "Could not change the password. Maybe the old password was not correct." : "Erreur lors du changement de mot de passe. L'ancien mot de passe est peut-être incorrect.", - "Recovery Key enabled" : "Clé de récupération activée", - "Could not enable the recovery key, please try again or contact your administrator" : "Impossible d'activer la clé de récupération. Veuillez essayer à nouveau ou contacter votre administrateur", + "Recovery Key enabled" : "Clef de récupération activée", + "Could not enable the recovery key, please try again or contact your administrator" : "Impossible d'activer la clef de récupération. Veuillez essayer à nouveau ou contacter votre administrateur", + "Could not update the private key password." : "Impossible de mettre à jour le mot de passe de la clef privée.", + "The old password was not correct, please try again." : "L'ancien mot de passe est incorrect. Veuillez réessayer.", + "The current log-in password was not correct, please try again." : "Le mot de passe de connexion actuel n'est pas correct, veuillez réessayer.", + "Private key password successfully updated." : "Mot de passe de la clef privée mis à jour avec succès.", "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 pour le chiffrement n'est pas valide ! Veuillez mettre à jour le mot de passe de votre 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.", "ownCloud basic encryption module" : "Module de chiffrement de base d'ownCloud", diff --git a/apps/encryption/l10n/fr.json b/apps/encryption/l10n/fr.json index 5367350ffeb..9f8f41ad80f 100644 --- a/apps/encryption/l10n/fr.json +++ b/apps/encryption/l10n/fr.json @@ -3,7 +3,7 @@ "Please repeat the recovery key password" : "Répétez le mot de passe de la clef de récupération", "Repeated recovery key password does not match the provided recovery key password" : "Le mot de passe de la clef de récupération et sa répétition ne sont pas identiques.", "Recovery key successfully enabled" : "Clef de récupération activée avec succès", - "Could not enable recovery key. Please check your recovery key password!" : "Impossible d'activer la clé de récupération. Veuillez vérifier votre mot de passe de clé de récupération !", + "Could not enable recovery key. Please check your recovery key password!" : "Impossible d'activer la clef de récupération. Veuillez vérifier le mot de passe de votre clé de récupération !", "Recovery key successfully disabled" : "Clef de récupération désactivée avec succès", "Could not disable recovery key. Please check your recovery key password!" : "Impossible de désactiver la clef de récupération. Veuillez vérifier le mot de passe de votre clef de récupération !", "Please provide the old recovery password" : "Veuillez entrer l'ancien mot de passe de récupération", @@ -11,8 +11,12 @@ "Please repeat the new recovery password" : "Veuillez répéter le nouveau mot de passe de récupération", "Password successfully changed." : "Mot de passe changé avec succès.", "Could not change the password. Maybe the old password was not correct." : "Erreur lors du changement de mot de passe. L'ancien mot de passe est peut-être incorrect.", - "Recovery Key enabled" : "Clé de récupération activée", - "Could not enable the recovery key, please try again or contact your administrator" : "Impossible d'activer la clé de récupération. Veuillez essayer à nouveau ou contacter votre administrateur", + "Recovery Key enabled" : "Clef de récupération activée", + "Could not enable the recovery key, please try again or contact your administrator" : "Impossible d'activer la clef de récupération. Veuillez essayer à nouveau ou contacter votre administrateur", + "Could not update the private key password." : "Impossible de mettre à jour le mot de passe de la clef privée.", + "The old password was not correct, please try again." : "L'ancien mot de passe est incorrect. Veuillez réessayer.", + "The current log-in password was not correct, please try again." : "Le mot de passe de connexion actuel n'est pas correct, veuillez réessayer.", + "Private key password successfully updated." : "Mot de passe de la clef privée mis à jour avec succès.", "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 pour le chiffrement n'est pas valide ! Veuillez mettre à jour le mot de passe de votre 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.", "ownCloud basic encryption module" : "Module de chiffrement de base d'ownCloud", diff --git a/apps/encryption/l10n/gl.js b/apps/encryption/l10n/gl.js index 79d17247a23..b4598ecbb19 100644 --- a/apps/encryption/l10n/gl.js +++ b/apps/encryption/l10n/gl.js @@ -14,7 +14,11 @@ OC.L10N.register( "Password successfully changed." : "O contrasinal foi cambiado satisfactoriamente", "Could not change the password. Maybe the old password was not correct." : "Non foi posíbel cambiar o contrasinal. Probabelmente o contrasinal antigo non é o correcto.", "Recovery Key enabled" : "Activada a chave de recuperación", - "Could not enable the recovery key, please try again or contact your administrator" : "Non foi posíbel activar a chave de recuperación, tenteo de novo ou póñase en contacto co administrador.", + "Could not enable the recovery key, please try again or contact your administrator" : "Non foi posíbel activar a chave de recuperación, ténteo de novo ou póñase en contacto co administrador.", + "Could not update the private key password." : "Non foi posíbel actualizar o contrasinal da chave privada.", + "The old password was not correct, please try again." : "O contrasinal antigo non é correcto, ténteo de novo.", + "The current log-in password was not correct, please try again." : "O actual contrasinal de acceso non é correcto, ténteo de novo.", + "Private key password successfully updated." : "A chave privada foi actualizada correctamente.", "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "A chave privada para a aplicación de cifrado non é correcta. Actualice o contrasinal da súa chave privada nos seus axustes persoais para recuperar o acceso aos seus ficheiros cifrados.", "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "A aplicación de cifrado está activada, mais as chaves non foron preparadas, saia da sesión e volva a acceder de novo", "ownCloud basic encryption module" : "Módulo básico de cifrado de ownCloud", diff --git a/apps/encryption/l10n/gl.json b/apps/encryption/l10n/gl.json index 7557d2b8bae..64033763059 100644 --- a/apps/encryption/l10n/gl.json +++ b/apps/encryption/l10n/gl.json @@ -12,7 +12,11 @@ "Password successfully changed." : "O contrasinal foi cambiado satisfactoriamente", "Could not change the password. Maybe the old password was not correct." : "Non foi posíbel cambiar o contrasinal. Probabelmente o contrasinal antigo non é o correcto.", "Recovery Key enabled" : "Activada a chave de recuperación", - "Could not enable the recovery key, please try again or contact your administrator" : "Non foi posíbel activar a chave de recuperación, tenteo de novo ou póñase en contacto co administrador.", + "Could not enable the recovery key, please try again or contact your administrator" : "Non foi posíbel activar a chave de recuperación, ténteo de novo ou póñase en contacto co administrador.", + "Could not update the private key password." : "Non foi posíbel actualizar o contrasinal da chave privada.", + "The old password was not correct, please try again." : "O contrasinal antigo non é correcto, ténteo de novo.", + "The current log-in password was not correct, please try again." : "O actual contrasinal de acceso non é correcto, ténteo de novo.", + "Private key password successfully updated." : "A chave privada foi actualizada correctamente.", "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "A chave privada para a aplicación de cifrado non é correcta. Actualice o contrasinal da súa chave privada nos seus axustes persoais para recuperar o acceso aos seus ficheiros cifrados.", "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "A aplicación de cifrado está activada, mais as chaves non foron preparadas, saia da sesión e volva a acceder de novo", "ownCloud basic encryption module" : "Módulo básico de cifrado de ownCloud", diff --git a/apps/encryption/l10n/hr.js b/apps/encryption/l10n/hr.js index ebdc362c7cb..18e4ae65ddd 100644 --- a/apps/encryption/l10n/hr.js +++ b/apps/encryption/l10n/hr.js @@ -7,6 +7,7 @@ OC.L10N.register( "Could not disable recovery key. Please check your recovery key password!" : "Ključ za oporavak nije moguće deaktivirati. Molimo provjerite svoju lozinku ključa za oporavak!", "Password successfully changed." : "Lozinka uspješno promijenjena.", "Could not change the password. Maybe the old password was not correct." : "Lozinku nije moguće promijeniti. Možda je stara lozinka bila neispravna.", + "Private key password successfully updated." : "Lozinka privatnog ključa uspješno ažurirana.", "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.", "Enable recovery key (allow to recover users files in case of password loss):" : "Aktivirajte ključ za oporavak (u slučaju gubitka lozinke dozvolite oporavak korisničkih datoteka):", diff --git a/apps/encryption/l10n/hr.json b/apps/encryption/l10n/hr.json index 5b8e335f501..20b45588c7e 100644 --- a/apps/encryption/l10n/hr.json +++ b/apps/encryption/l10n/hr.json @@ -5,6 +5,7 @@ "Could not disable recovery key. Please check your recovery key password!" : "Ključ za oporavak nije moguće deaktivirati. Molimo provjerite svoju lozinku ključa za oporavak!", "Password successfully changed." : "Lozinka uspješno promijenjena.", "Could not change the password. Maybe the old password was not correct." : "Lozinku nije moguće promijeniti. Možda je stara lozinka bila neispravna.", + "Private key password successfully updated." : "Lozinka privatnog ključa uspješno ažurirana.", "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.", "Enable recovery key (allow to recover users files in case of password loss):" : "Aktivirajte ključ za oporavak (u slučaju gubitka lozinke dozvolite oporavak korisničkih datoteka):", diff --git a/apps/encryption/l10n/hu_HU.js b/apps/encryption/l10n/hu_HU.js index 259d82d68a9..3895af355b9 100644 --- a/apps/encryption/l10n/hu_HU.js +++ b/apps/encryption/l10n/hu_HU.js @@ -7,6 +7,7 @@ OC.L10N.register( "Could not disable recovery key. Please check your recovery key password!" : "A helyreállítási kulcsot nem lehetett kikapcsolni. Ellenőrizze a helyreállítási kulcsa jelszavát!", "Password successfully changed." : "A jelszót sikeresen megváltoztattuk.", "Could not change the password. Maybe the old password was not correct." : "A jelszót nem lehet megváltoztatni! Lehet, hogy hibás volt a régi jelszó.", + "Private key password successfully updated." : "A személyes kulcsának jelszava frissítésre került.", "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!", "Enable recovery key (allow to recover users files in case of password loss):" : "A helyreállítási kulcs beállítása (lehetővé teszi a felhasználók állományainak visszaállítását, ha elfelejtik a jelszavukat):", diff --git a/apps/encryption/l10n/hu_HU.json b/apps/encryption/l10n/hu_HU.json index a44cb2df4b1..f7b04188138 100644 --- a/apps/encryption/l10n/hu_HU.json +++ b/apps/encryption/l10n/hu_HU.json @@ -5,6 +5,7 @@ "Could not disable recovery key. Please check your recovery key password!" : "A helyreállítási kulcsot nem lehetett kikapcsolni. Ellenőrizze a helyreállítási kulcsa jelszavát!", "Password successfully changed." : "A jelszót sikeresen megváltoztattuk.", "Could not change the password. Maybe the old password was not correct." : "A jelszót nem lehet megváltoztatni! Lehet, hogy hibás volt a régi jelszó.", + "Private key password successfully updated." : "A személyes kulcsának jelszava frissítésre került.", "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!", "Enable recovery key (allow to recover users files in case of password loss):" : "A helyreállítási kulcs beállítása (lehetővé teszi a felhasználók állományainak visszaállítását, ha elfelejtik a jelszavukat):", diff --git a/apps/encryption/l10n/id.js b/apps/encryption/l10n/id.js index 2067ed10f2c..fe4b8bb139b 100644 --- a/apps/encryption/l10n/id.js +++ b/apps/encryption/l10n/id.js @@ -13,6 +13,10 @@ OC.L10N.register( "Please repeat the new recovery password" : "Silakan ulangi sandi pemulihan baru", "Password successfully changed." : "Sandi berhasil diubah", "Could not change the password. Maybe the old password was not correct." : "Tidak dapat mengubah sandi. Kemungkinan sandi lama yang dimasukkan salah.", + "Could not update the private key password." : "Tidak dapat memperbarui sandi kunci private.", + "The old password was not correct, please try again." : "Sandi lama salah, mohon coba lagi.", + "The current log-in password was not correct, please try again." : "Sandi masuk saat ini salah, mohon coba lagi.", + "Private key password successfully updated." : "Sandi kunci privat berhasil diperbarui.", "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", "Enable recovery key (allow to recover users files in case of password loss):" : "Aktifkan kunci pemulihan (memungkinkan pengguna untuk memulihkan berkas dalam kasus kehilangan sandi):", diff --git a/apps/encryption/l10n/id.json b/apps/encryption/l10n/id.json index 1cfb9e55d01..dcbe7c1cdf0 100644 --- a/apps/encryption/l10n/id.json +++ b/apps/encryption/l10n/id.json @@ -11,6 +11,10 @@ "Please repeat the new recovery password" : "Silakan ulangi sandi pemulihan baru", "Password successfully changed." : "Sandi berhasil diubah", "Could not change the password. Maybe the old password was not correct." : "Tidak dapat mengubah sandi. Kemungkinan sandi lama yang dimasukkan salah.", + "Could not update the private key password." : "Tidak dapat memperbarui sandi kunci private.", + "The old password was not correct, please try again." : "Sandi lama salah, mohon coba lagi.", + "The current log-in password was not correct, please try again." : "Sandi masuk saat ini salah, mohon coba lagi.", + "Private key password successfully updated." : "Sandi kunci privat berhasil diperbarui.", "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", "Enable recovery key (allow to recover users files in case of password loss):" : "Aktifkan kunci pemulihan (memungkinkan pengguna untuk memulihkan berkas dalam kasus kehilangan sandi):", diff --git a/apps/encryption/l10n/it.js b/apps/encryption/l10n/it.js index 82f05e22ebf..efcc6cd4564 100644 --- a/apps/encryption/l10n/it.js +++ b/apps/encryption/l10n/it.js @@ -15,6 +15,10 @@ OC.L10N.register( "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 enabled" : "Chiave di ripristino abilitata", "Could not enable the recovery key, please try again or contact your administrator" : "Impossibile abilitare la chiave di ripristino, prova ancora o contatta il tuo amministratore", + "Could not update the private key password." : "Impossibile aggiornare la password della chiave privata.", + "The old password was not correct, please try again." : "La vecchia password non era corretta, prova di nuovo.", + "The current log-in password was not correct, please try again." : "La password di accesso attuale non era corretta, prova ancora.", + "Private key password successfully updated." : "Password della chiave privata aggiornata correttamente.", "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", "ownCloud basic encryption module" : "Modulo di cifratura di base di ownCloud", diff --git a/apps/encryption/l10n/it.json b/apps/encryption/l10n/it.json index 9e7ae7086ef..e93035b88df 100644 --- a/apps/encryption/l10n/it.json +++ b/apps/encryption/l10n/it.json @@ -13,6 +13,10 @@ "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 enabled" : "Chiave di ripristino abilitata", "Could not enable the recovery key, please try again or contact your administrator" : "Impossibile abilitare la chiave di ripristino, prova ancora o contatta il tuo amministratore", + "Could not update the private key password." : "Impossibile aggiornare la password della chiave privata.", + "The old password was not correct, please try again." : "La vecchia password non era corretta, prova di nuovo.", + "The current log-in password was not correct, please try again." : "La password di accesso attuale non era corretta, prova ancora.", + "Private key password successfully updated." : "Password della chiave privata aggiornata correttamente.", "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", "ownCloud basic encryption module" : "Modulo di cifratura di base di ownCloud", diff --git a/apps/encryption/l10n/ja.js b/apps/encryption/l10n/ja.js index 42f08010a20..c4e2443c1fb 100644 --- a/apps/encryption/l10n/ja.js +++ b/apps/encryption/l10n/ja.js @@ -13,6 +13,10 @@ OC.L10N.register( "Please repeat the new recovery password" : "新しい復旧キーのパスワードをもう一度入力", "Password successfully changed." : "パスワードを変更できました。", "Could not change the password. Maybe the old password was not correct." : "パスワードを変更できませんでした。古いパスワードが間違っているかもしれません。", + "Could not update the private key password." : "秘密鍵のパスワードを更新できませんでした。", + "The old password was not correct, please try again." : "古いパスワードが一致しませんでした。もう一度入力してください。", + "The current log-in password was not correct, please try again." : "ログインパスワードが一致しませんでした。もう一度入力してください。", + "Private key password successfully updated." : "秘密鍵のパスワードが正常に更新されました。", "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" : "暗号化アプリは有効ですが、あなたの暗号化キーは初期化されていません。ログアウトした後に、再度ログインしてください", "Enable recovery key (allow to recover users files in case of password loss):" : "リカバリキーを有効にする (パスワードを忘れた場合にユーザーのファイルを回復できます):", diff --git a/apps/encryption/l10n/ja.json b/apps/encryption/l10n/ja.json index a1fb308f456..622bf9bc42d 100644 --- a/apps/encryption/l10n/ja.json +++ b/apps/encryption/l10n/ja.json @@ -11,6 +11,10 @@ "Please repeat the new recovery password" : "新しい復旧キーのパスワードをもう一度入力", "Password successfully changed." : "パスワードを変更できました。", "Could not change the password. Maybe the old password was not correct." : "パスワードを変更できませんでした。古いパスワードが間違っているかもしれません。", + "Could not update the private key password." : "秘密鍵のパスワードを更新できませんでした。", + "The old password was not correct, please try again." : "古いパスワードが一致しませんでした。もう一度入力してください。", + "The current log-in password was not correct, please try again." : "ログインパスワードが一致しませんでした。もう一度入力してください。", + "Private key password successfully updated." : "秘密鍵のパスワードが正常に更新されました。", "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" : "暗号化アプリは有効ですが、あなたの暗号化キーは初期化されていません。ログアウトした後に、再度ログインしてください", "Enable recovery key (allow to recover users files in case of password loss):" : "リカバリキーを有効にする (パスワードを忘れた場合にユーザーのファイルを回復できます):", diff --git a/apps/encryption/l10n/ko.js b/apps/encryption/l10n/ko.js index bf325795523..80281648a9a 100644 --- a/apps/encryption/l10n/ko.js +++ b/apps/encryption/l10n/ko.js @@ -13,6 +13,10 @@ OC.L10N.register( "Please repeat the new recovery password" : "새 복구 암호를 다시 입력하십시오", "Password successfully changed." : "암호가 성공적으로 변경되었습니다", "Could not change the password. Maybe the old password was not correct." : "암호를 변경할 수 없습니다. 예전 암호가 정확하지 않은 것 같습니다.", + "Could not update the private key password." : "개인 키 암호를 업데이트할 수 없습니다", + "The old password was not correct, please try again." : "이전 암호가 잘못되었습니다. 다시 시도하십시오.", + "The current log-in password was not correct, please try again." : "현재 로그인 암호가 잘못되었습니다. 다시 시도하십시오.", + "Private key password successfully updated." : "개인 키 암호가 성공적으로 업데이트 되었습니다.", "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" : "암호화 앱이 활성화되어 있지만 키가 초기화되지 않았습니다. 로그아웃한 후 다시 로그인하십시오", "Enable recovery key (allow to recover users files in case of password loss):" : "복구 키 사용 (암호를 잊었을 때 파일을 복구할 수 있도록 함):", diff --git a/apps/encryption/l10n/ko.json b/apps/encryption/l10n/ko.json index b64632bf76b..3b0bb40460b 100644 --- a/apps/encryption/l10n/ko.json +++ b/apps/encryption/l10n/ko.json @@ -11,6 +11,10 @@ "Please repeat the new recovery password" : "새 복구 암호를 다시 입력하십시오", "Password successfully changed." : "암호가 성공적으로 변경되었습니다", "Could not change the password. Maybe the old password was not correct." : "암호를 변경할 수 없습니다. 예전 암호가 정확하지 않은 것 같습니다.", + "Could not update the private key password." : "개인 키 암호를 업데이트할 수 없습니다", + "The old password was not correct, please try again." : "이전 암호가 잘못되었습니다. 다시 시도하십시오.", + "The current log-in password was not correct, please try again." : "현재 로그인 암호가 잘못되었습니다. 다시 시도하십시오.", + "Private key password successfully updated." : "개인 키 암호가 성공적으로 업데이트 되었습니다.", "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" : "암호화 앱이 활성화되어 있지만 키가 초기화되지 않았습니다. 로그아웃한 후 다시 로그인하십시오", "Enable recovery key (allow to recover users files in case of password loss):" : "복구 키 사용 (암호를 잊었을 때 파일을 복구할 수 있도록 함):", diff --git a/apps/encryption/l10n/lt_LT.js b/apps/encryption/l10n/lt_LT.js index 85eed21f1a2..06d6478a572 100644 --- a/apps/encryption/l10n/lt_LT.js +++ b/apps/encryption/l10n/lt_LT.js @@ -7,6 +7,7 @@ OC.L10N.register( "Could not disable recovery key. Please check your recovery key password!" : "Neišėjo išjungti jūsų atkūrimo rakto. Prašome jį patikrinti!", "Password successfully changed." : "Slaptažodis sėkmingai pakeistas", "Could not change the password. Maybe the old password was not correct." : "Slaptažodis nebuvo pakeistas. Gali būti, kad buvo neteisingai suvestas senasis.", + "Private key password successfully updated." : "Privataus rakto slaptažodis buvo sėkmingai atnaujintas.", "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", "Enable recovery key (allow to recover users files in case of password loss):" : "Įjunkite atkūrimo raktą, (leisti atkurti naudotojų failus praradus slaptažodį):", diff --git a/apps/encryption/l10n/lt_LT.json b/apps/encryption/l10n/lt_LT.json index 55bf06fd6e4..2e6a199121f 100644 --- a/apps/encryption/l10n/lt_LT.json +++ b/apps/encryption/l10n/lt_LT.json @@ -5,6 +5,7 @@ "Could not disable recovery key. Please check your recovery key password!" : "Neišėjo išjungti jūsų atkūrimo rakto. Prašome jį patikrinti!", "Password successfully changed." : "Slaptažodis sėkmingai pakeistas", "Could not change the password. Maybe the old password was not correct." : "Slaptažodis nebuvo pakeistas. Gali būti, kad buvo neteisingai suvestas senasis.", + "Private key password successfully updated." : "Privataus rakto slaptažodis buvo sėkmingai atnaujintas.", "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", "Enable recovery key (allow to recover users files in case of password loss):" : "Įjunkite atkūrimo raktą, (leisti atkurti naudotojų failus praradus slaptažodį):", diff --git a/apps/encryption/l10n/nb_NO.js b/apps/encryption/l10n/nb_NO.js index 077903e43c1..ee3184a7f02 100644 --- a/apps/encryption/l10n/nb_NO.js +++ b/apps/encryption/l10n/nb_NO.js @@ -13,6 +13,10 @@ OC.L10N.register( "Please repeat the new recovery password" : "Gjenta det nye gjenopprettingspassordet", "Password successfully changed." : "Passordet ble endret.", "Could not change the password. Maybe the old password was not correct." : "Klarte ikke å endre passordet. Kanskje gammelt passord ikke var korrekt.", + "Could not update the private key password." : "Klarte ikke å oppdatere privatnøkkelpassordet.", + "The old password was not correct, please try again." : "Det gamle passordet var feil. Prøv igjen.", + "The current log-in password was not correct, please try again." : "Det nåværende innloggingspassordet var feil. Prøv igjen.", + "Private key password successfully updated." : "Passord for privat nøkkel ble oppdatert.", "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.", "Enable recovery key (allow to recover users files in case of password loss):" : "Aktiver gjenopprettingsnøkkel (tillat å gjenopprette brukerfiler i tilfelle tap av passord):", diff --git a/apps/encryption/l10n/nb_NO.json b/apps/encryption/l10n/nb_NO.json index 278b73cbf51..942eaf1855c 100644 --- a/apps/encryption/l10n/nb_NO.json +++ b/apps/encryption/l10n/nb_NO.json @@ -11,6 +11,10 @@ "Please repeat the new recovery password" : "Gjenta det nye gjenopprettingspassordet", "Password successfully changed." : "Passordet ble endret.", "Could not change the password. Maybe the old password was not correct." : "Klarte ikke å endre passordet. Kanskje gammelt passord ikke var korrekt.", + "Could not update the private key password." : "Klarte ikke å oppdatere privatnøkkelpassordet.", + "The old password was not correct, please try again." : "Det gamle passordet var feil. Prøv igjen.", + "The current log-in password was not correct, please try again." : "Det nåværende innloggingspassordet var feil. Prøv igjen.", + "Private key password successfully updated." : "Passord for privat nøkkel ble oppdatert.", "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.", "Enable recovery key (allow to recover users files in case of password loss):" : "Aktiver gjenopprettingsnøkkel (tillat å gjenopprette brukerfiler i tilfelle tap av passord):", diff --git a/apps/encryption/l10n/nl.js b/apps/encryption/l10n/nl.js index e994c8bfdfc..505cff99620 100644 --- a/apps/encryption/l10n/nl.js +++ b/apps/encryption/l10n/nl.js @@ -15,6 +15,10 @@ OC.L10N.register( "Could not change the password. Maybe the old password was not correct." : "Kon wachtwoord niet wijzigen. Wellicht oude wachtwoord niet juist ingevoerd.", "Recovery Key enabled" : "Herstelsleutel ingeschakeld", "Could not enable the recovery key, please try again or contact your administrator" : "Kon herstelsleutel niet inschakelen, probeer het opnieuw, of neem contact op met uw beheerder", + "Could not update the private key password." : "Kon het wachtwoord van de privésleutel niet bijwerken.", + "The old password was not correct, please try again." : "Het oude wachtwoord was onjuist, probeer het opnieuw.", + "The current log-in password was not correct, please try again." : "Het huidige inlogwachtwoord was niet juist, probeer het opnieuw.", + "Private key password successfully updated." : "Privésleutel succesvol bijgewerkt.", "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.", "ownCloud basic encryption module" : "ownCloud basis versleutelingsmodule", diff --git a/apps/encryption/l10n/nl.json b/apps/encryption/l10n/nl.json index 574cfac66f9..13d9747295e 100644 --- a/apps/encryption/l10n/nl.json +++ b/apps/encryption/l10n/nl.json @@ -13,6 +13,10 @@ "Could not change the password. Maybe the old password was not correct." : "Kon wachtwoord niet wijzigen. Wellicht oude wachtwoord niet juist ingevoerd.", "Recovery Key enabled" : "Herstelsleutel ingeschakeld", "Could not enable the recovery key, please try again or contact your administrator" : "Kon herstelsleutel niet inschakelen, probeer het opnieuw, of neem contact op met uw beheerder", + "Could not update the private key password." : "Kon het wachtwoord van de privésleutel niet bijwerken.", + "The old password was not correct, please try again." : "Het oude wachtwoord was onjuist, probeer het opnieuw.", + "The current log-in password was not correct, please try again." : "Het huidige inlogwachtwoord was niet juist, probeer het opnieuw.", + "Private key password successfully updated." : "Privésleutel succesvol bijgewerkt.", "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.", "ownCloud basic encryption module" : "ownCloud basis versleutelingsmodule", diff --git a/apps/encryption/l10n/pl.js b/apps/encryption/l10n/pl.js index e77e3be4199..5b94369ffd2 100644 --- a/apps/encryption/l10n/pl.js +++ b/apps/encryption/l10n/pl.js @@ -13,6 +13,10 @@ OC.L10N.register( "Please repeat the new recovery password" : "Proszę powtórz nowe hasło odzyskiwania", "Password successfully changed." : "Zmiana hasła udana.", "Could not change the password. Maybe the old password was not correct." : "Nie można zmienić hasła. Może stare hasło nie było poprawne.", + "Could not update the private key password." : "Nie można zmienić hasła klucza prywatnego.", + "The old password was not correct, please try again." : "Stare hasło nie było poprawne. Spróbuj jeszcze raz.", + "The current log-in password was not correct, please try again." : "Obecne hasło logowania nie było poprawne. Spróbuj ponownie.", + "Private key password successfully updated." : "Pomyślnie zaktualizowano hasło klucza prywatnego.", "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.", "Enable recovery key (allow to recover users files in case of password loss):" : "Włączhasło klucza odzyskiwania (pozwala odzyskać pliki użytkowników w przypadku utraty hasła):", diff --git a/apps/encryption/l10n/pl.json b/apps/encryption/l10n/pl.json index 4faa11eb398..7f173df628d 100644 --- a/apps/encryption/l10n/pl.json +++ b/apps/encryption/l10n/pl.json @@ -11,6 +11,10 @@ "Please repeat the new recovery password" : "Proszę powtórz nowe hasło odzyskiwania", "Password successfully changed." : "Zmiana hasła udana.", "Could not change the password. Maybe the old password was not correct." : "Nie można zmienić hasła. Może stare hasło nie było poprawne.", + "Could not update the private key password." : "Nie można zmienić hasła klucza prywatnego.", + "The old password was not correct, please try again." : "Stare hasło nie było poprawne. Spróbuj jeszcze raz.", + "The current log-in password was not correct, please try again." : "Obecne hasło logowania nie było poprawne. Spróbuj ponownie.", + "Private key password successfully updated." : "Pomyślnie zaktualizowano hasło klucza prywatnego.", "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.", "Enable recovery key (allow to recover users files in case of password loss):" : "Włączhasło klucza odzyskiwania (pozwala odzyskać pliki użytkowników w przypadku utraty hasła):", diff --git a/apps/encryption/l10n/pt_BR.js b/apps/encryption/l10n/pt_BR.js index e12da46f3b2..cbac8f72b48 100644 --- a/apps/encryption/l10n/pt_BR.js +++ b/apps/encryption/l10n/pt_BR.js @@ -15,6 +15,10 @@ OC.L10N.register( "Could not change the password. Maybe the old password was not correct." : "Não foi possível alterar a senha. Talvez a senha antiga não estava correta.", "Recovery Key enabled" : "Recuperar Chave habilitada", "Could not enable the recovery key, please try again or contact your administrator" : "Não foi possível habilitar a chave recuperada, por favor tente novamente ou entre em contato com seu administrador", + "Could not update the private key password." : "Não foi possível atualizar a senha da chave privada.", + "The old password was not correct, please try again." : "A senha antiga não estava correta, por favor, tente novamente.", + "The current log-in password was not correct, please try again." : "A senha atual do log-in não estava correta, por favor, tente novamente.", + "Private key password successfully updated." : "Senha de chave privada atualizada com sucesso.", "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", "ownCloud basic encryption module" : "Modo de criptografia básico ownCloud", diff --git a/apps/encryption/l10n/pt_BR.json b/apps/encryption/l10n/pt_BR.json index 05186d8636a..328a3194635 100644 --- a/apps/encryption/l10n/pt_BR.json +++ b/apps/encryption/l10n/pt_BR.json @@ -13,6 +13,10 @@ "Could not change the password. Maybe the old password was not correct." : "Não foi possível alterar a senha. Talvez a senha antiga não estava correta.", "Recovery Key enabled" : "Recuperar Chave habilitada", "Could not enable the recovery key, please try again or contact your administrator" : "Não foi possível habilitar a chave recuperada, por favor tente novamente ou entre em contato com seu administrador", + "Could not update the private key password." : "Não foi possível atualizar a senha da chave privada.", + "The old password was not correct, please try again." : "A senha antiga não estava correta, por favor, tente novamente.", + "The current log-in password was not correct, please try again." : "A senha atual do log-in não estava correta, por favor, tente novamente.", + "Private key password successfully updated." : "Senha de chave privada atualizada com sucesso.", "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", "ownCloud basic encryption module" : "Modo de criptografia básico ownCloud", diff --git a/apps/encryption/l10n/pt_PT.js b/apps/encryption/l10n/pt_PT.js index afe0e8d03d3..526c79f207b 100644 --- a/apps/encryption/l10n/pt_PT.js +++ b/apps/encryption/l10n/pt_PT.js @@ -15,6 +15,10 @@ OC.L10N.register( "Could not change the password. Maybe the old password was not correct." : "Não foi possível alterar a senha. Possivelmente a senha antiga não está correta.", "Recovery Key enabled" : "Chave de Recuperação ativada", "Could not enable the recovery key, please try again or contact your administrator" : "Não foi possível ativar a chave de recuperação, por favor, tente de novo ou contacte o seu administrador", + "Could not update the private key password." : "Não foi possível atualizar a senha da chave privada.", + "The old password was not correct, please try again." : "A senha antiga não estava correta, por favor, tente de novo.", + "The current log-in password was not correct, please try again." : "A senha de iniciar a sessão atual não estava correta, por favor, tente de novo.", + "Private key password successfully updated." : "A senha da chave privada foi atualizada com sucesso. ", "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Chave privada inválida da Aplicação de Encriptação. Por favor atualize a sua senha de chave privada nas definições pessoais, para recuperar o acesso aos seus ficheiros encriptados.", "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "A Aplicação de Encriptação está ativada, mas as suas chaves não inicializaram. Por favor termine e inicie a sessão novamente", "ownCloud basic encryption module" : "módulo de encriptação básico da ownCloud", diff --git a/apps/encryption/l10n/pt_PT.json b/apps/encryption/l10n/pt_PT.json index bede8c72bf0..24385809d25 100644 --- a/apps/encryption/l10n/pt_PT.json +++ b/apps/encryption/l10n/pt_PT.json @@ -13,6 +13,10 @@ "Could not change the password. Maybe the old password was not correct." : "Não foi possível alterar a senha. Possivelmente a senha antiga não está correta.", "Recovery Key enabled" : "Chave de Recuperação ativada", "Could not enable the recovery key, please try again or contact your administrator" : "Não foi possível ativar a chave de recuperação, por favor, tente de novo ou contacte o seu administrador", + "Could not update the private key password." : "Não foi possível atualizar a senha da chave privada.", + "The old password was not correct, please try again." : "A senha antiga não estava correta, por favor, tente de novo.", + "The current log-in password was not correct, please try again." : "A senha de iniciar a sessão atual não estava correta, por favor, tente de novo.", + "Private key password successfully updated." : "A senha da chave privada foi atualizada com sucesso. ", "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Chave privada inválida da Aplicação de Encriptação. Por favor atualize a sua senha de chave privada nas definições pessoais, para recuperar o acesso aos seus ficheiros encriptados.", "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "A Aplicação de Encriptação está ativada, mas as suas chaves não inicializaram. Por favor termine e inicie a sessão novamente", "ownCloud basic encryption module" : "módulo de encriptação básico da ownCloud", diff --git a/apps/encryption/l10n/ro.js b/apps/encryption/l10n/ro.js index d69ecfcd78c..60291bc3a4b 100644 --- a/apps/encryption/l10n/ro.js +++ b/apps/encryption/l10n/ro.js @@ -14,6 +14,7 @@ OC.L10N.register( "Could not change the password. Maybe the old password was not correct." : "Parola nu a putut fi schimbata. Poate ca parola veche este incorecta.", "Recovery Key enabled" : "Cheie de recuperare activată", "Could not enable the recovery key, please try again or contact your administrator" : "Nu poate fi activată cheia de recuperare, te rog încearcă din nou sau contactează administratorul", + "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", "ownCloud basic encryption module" : "modul de ecnriptie bazic ownCloud", diff --git a/apps/encryption/l10n/ro.json b/apps/encryption/l10n/ro.json index 80235b587ab..87f9134fc45 100644 --- a/apps/encryption/l10n/ro.json +++ b/apps/encryption/l10n/ro.json @@ -12,6 +12,7 @@ "Could not change the password. Maybe the old password was not correct." : "Parola nu a putut fi schimbata. Poate ca parola veche este incorecta.", "Recovery Key enabled" : "Cheie de recuperare activată", "Could not enable the recovery key, please try again or contact your administrator" : "Nu poate fi activată cheia de recuperare, te rog încearcă din nou sau contactează administratorul", + "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", "ownCloud basic encryption module" : "modul de ecnriptie bazic ownCloud", diff --git a/apps/encryption/l10n/ru.js b/apps/encryption/l10n/ru.js index f500c33c59c..c1104e7f589 100644 --- a/apps/encryption/l10n/ru.js +++ b/apps/encryption/l10n/ru.js @@ -15,6 +15,10 @@ OC.L10N.register( "Could not change the password. Maybe the old password was not correct." : "Невозможно изменить пароль. Возможно, указанный старый пароль не верен.", "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." : "Указан неверный старый пароль, повторите попытку.", + "The current log-in password was not correct, please try again." : "Текущий пароль для учётной записи введён неверно, пожалуйста повторите попытку.", + "Private key password successfully updated." : "Пароль закрытого ключа успешно обновлён.", "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" : "Приложение шифрования активно, но ваши ключи не инициализированы, выйдите из системы и войдите заново", "ownCloud basic encryption module" : "Базовый модуль шифрования ownCloud", diff --git a/apps/encryption/l10n/ru.json b/apps/encryption/l10n/ru.json index fc88ccfc34e..6d97a487786 100644 --- a/apps/encryption/l10n/ru.json +++ b/apps/encryption/l10n/ru.json @@ -13,6 +13,10 @@ "Could not change the password. Maybe the old password was not correct." : "Невозможно изменить пароль. Возможно, указанный старый пароль не верен.", "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." : "Указан неверный старый пароль, повторите попытку.", + "The current log-in password was not correct, please try again." : "Текущий пароль для учётной записи введён неверно, пожалуйста повторите попытку.", + "Private key password successfully updated." : "Пароль закрытого ключа успешно обновлён.", "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" : "Приложение шифрования активно, но ваши ключи не инициализированы, выйдите из системы и войдите заново", "ownCloud basic encryption module" : "Базовый модуль шифрования ownCloud", diff --git a/apps/encryption/l10n/sk_SK.js b/apps/encryption/l10n/sk_SK.js index e8719571710..763646a364f 100644 --- a/apps/encryption/l10n/sk_SK.js +++ b/apps/encryption/l10n/sk_SK.js @@ -13,6 +13,10 @@ OC.L10N.register( "Please repeat the new recovery password" : "Zopakujte prosím nové heslo pre obnovenie", "Password successfully changed." : "Heslo úspešne zmenené.", "Could not change the password. Maybe the old password was not correct." : "Nemožno zmeniť heslo. Pravdepodobne nebolo staré heslo zadané správne.", + "Could not update the private key password." : "Nemožno aktualizovať heslo súkromného kľúča.", + "The old password was not correct, please try again." : "Staré heslo nebolo zadané správne, prosím skúste to ešte raz.", + "The current log-in password was not correct, please try again." : "Toto heslo nebolo správne, prosím skúste to ešte raz.", + "Private key password successfully updated." : "Heslo súkromného kľúča je úspešne aktualizované.", "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.", "Enable recovery key (allow to recover users files in case of password loss):" : "Povoliť obnovovací kľúč (umožňuje obnoviť používateľské súbory v prípade straty hesla):", diff --git a/apps/encryption/l10n/sk_SK.json b/apps/encryption/l10n/sk_SK.json index 14fc49e0d72..dcc8cd48bbb 100644 --- a/apps/encryption/l10n/sk_SK.json +++ b/apps/encryption/l10n/sk_SK.json @@ -11,6 +11,10 @@ "Please repeat the new recovery password" : "Zopakujte prosím nové heslo pre obnovenie", "Password successfully changed." : "Heslo úspešne zmenené.", "Could not change the password. Maybe the old password was not correct." : "Nemožno zmeniť heslo. Pravdepodobne nebolo staré heslo zadané správne.", + "Could not update the private key password." : "Nemožno aktualizovať heslo súkromného kľúča.", + "The old password was not correct, please try again." : "Staré heslo nebolo zadané správne, prosím skúste to ešte raz.", + "The current log-in password was not correct, please try again." : "Toto heslo nebolo správne, prosím skúste to ešte raz.", + "Private key password successfully updated." : "Heslo súkromného kľúča je úspešne aktualizované.", "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.", "Enable recovery key (allow to recover users files in case of password loss):" : "Povoliť obnovovací kľúč (umožňuje obnoviť používateľské súbory v prípade straty hesla):", diff --git a/apps/encryption/l10n/sl.js b/apps/encryption/l10n/sl.js index 082e2ef5b61..e10a9b302da 100644 --- a/apps/encryption/l10n/sl.js +++ b/apps/encryption/l10n/sl.js @@ -13,6 +13,10 @@ OC.L10N.register( "Please repeat the new recovery password" : "Ponovno vpišite nov ključ za obnovitev", "Password successfully changed." : "Geslo je uspešno spremenjeno.", "Could not change the password. Maybe the old password was not correct." : "Gesla ni mogoče spremeniti. Morda vnos starega gesla ni pravilen.", + "Could not update the private key password." : "Ni mogoče posodobiti gesla zasebnega ključa.", + "The old password was not correct, please try again." : "Staro geslo ni vpisana pravilno. Poskusite znova.", + "The current log-in password was not correct, please try again." : "Trenutno geslo za prijavo ni vpisano pravilno. Poskusite znova.", + "Private key password successfully updated." : "Zasebni ključ za geslo je uspešno posodobljen.", "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.", "Enable recovery key (allow to recover users files in case of password loss):" : "Omogoči ključ za obnovitev datotek (v primeru izgube gesla):", diff --git a/apps/encryption/l10n/sl.json b/apps/encryption/l10n/sl.json index b26a21763a2..55a40653bd7 100644 --- a/apps/encryption/l10n/sl.json +++ b/apps/encryption/l10n/sl.json @@ -11,6 +11,10 @@ "Please repeat the new recovery password" : "Ponovno vpišite nov ključ za obnovitev", "Password successfully changed." : "Geslo je uspešno spremenjeno.", "Could not change the password. Maybe the old password was not correct." : "Gesla ni mogoče spremeniti. Morda vnos starega gesla ni pravilen.", + "Could not update the private key password." : "Ni mogoče posodobiti gesla zasebnega ključa.", + "The old password was not correct, please try again." : "Staro geslo ni vpisana pravilno. Poskusite znova.", + "The current log-in password was not correct, please try again." : "Trenutno geslo za prijavo ni vpisano pravilno. Poskusite znova.", + "Private key password successfully updated." : "Zasebni ključ za geslo je uspešno posodobljen.", "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.", "Enable recovery key (allow to recover users files in case of password loss):" : "Omogoči ključ za obnovitev datotek (v primeru izgube gesla):", diff --git a/apps/encryption/l10n/sr.js b/apps/encryption/l10n/sr.js index d6643b871b6..5d15b172dbf 100644 --- a/apps/encryption/l10n/sr.js +++ b/apps/encryption/l10n/sr.js @@ -15,6 +15,10 @@ OC.L10N.register( "Could not change the password. Maybe the old password was not correct." : "Не могу да променим лозинку. Можда стара лозинка није исправна.", "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." : "Стара лозинка није исправна, покушајте поново.", + "The current log-in password was not correct, please try again." : "Тренутна лозинка за пријаву није исправна, покушајте поново.", + "Private key password successfully updated." : "Лична кључ лозинка је успешно ажурирана.", "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" : "Апликација шифровања је укључена али ваши кључеви нису иницијализовани. Одјавите се и поново се пријавите.", "ownCloud basic encryption module" : "оунКлауд основни шифрарски модул", diff --git a/apps/encryption/l10n/sr.json b/apps/encryption/l10n/sr.json index 15f5980090d..9d0438f870c 100644 --- a/apps/encryption/l10n/sr.json +++ b/apps/encryption/l10n/sr.json @@ -13,6 +13,10 @@ "Could not change the password. Maybe the old password was not correct." : "Не могу да променим лозинку. Можда стара лозинка није исправна.", "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." : "Стара лозинка није исправна, покушајте поново.", + "The current log-in password was not correct, please try again." : "Тренутна лозинка за пријаву није исправна, покушајте поново.", + "Private key password successfully updated." : "Лична кључ лозинка је успешно ажурирана.", "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" : "Апликација шифровања је укључена али ваши кључеви нису иницијализовани. Одјавите се и поново се пријавите.", "ownCloud basic encryption module" : "оунКлауд основни шифрарски модул", diff --git a/apps/encryption/l10n/sv.js b/apps/encryption/l10n/sv.js index 75da65c8928..16898b8da67 100644 --- a/apps/encryption/l10n/sv.js +++ b/apps/encryption/l10n/sv.js @@ -13,6 +13,10 @@ OC.L10N.register( "Please repeat the new recovery password" : "Vänligen upprepa det nya återställningslösenordet", "Password successfully changed." : "Ändringen av lösenordet lyckades.", "Could not change the password. Maybe the old password was not correct." : "Kunde inte ändra lösenordet. Kanske det gamla lösenordet inte var rätt.", + "Could not update the private key password." : "Kunde inte uppdatera lösenord för den privata nyckeln", + "The old password was not correct, please try again." : "Det gamla lösenordet var inte korrekt. Vänligen försök igen.", + "The current log-in password was not correct, please try again." : "Det nuvarande inloggningslösenordet var inte korrekt. Vänligen försök igen.", + "Private key password successfully updated." : "Den privata nyckelns lösenord uppdaterades utan problem.", "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", "Enable recovery key (allow to recover users files in case of password loss):" : "Aktivera återställningsnyckel (för att kunna återfå användarens filer vid glömt eller förlorat lösenord):", diff --git a/apps/encryption/l10n/sv.json b/apps/encryption/l10n/sv.json index 4f650616067..537316161fb 100644 --- a/apps/encryption/l10n/sv.json +++ b/apps/encryption/l10n/sv.json @@ -11,6 +11,10 @@ "Please repeat the new recovery password" : "Vänligen upprepa det nya återställningslösenordet", "Password successfully changed." : "Ändringen av lösenordet lyckades.", "Could not change the password. Maybe the old password was not correct." : "Kunde inte ändra lösenordet. Kanske det gamla lösenordet inte var rätt.", + "Could not update the private key password." : "Kunde inte uppdatera lösenord för den privata nyckeln", + "The old password was not correct, please try again." : "Det gamla lösenordet var inte korrekt. Vänligen försök igen.", + "The current log-in password was not correct, please try again." : "Det nuvarande inloggningslösenordet var inte korrekt. Vänligen försök igen.", + "Private key password successfully updated." : "Den privata nyckelns lösenord uppdaterades utan problem.", "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", "Enable recovery key (allow to recover users files in case of password loss):" : "Aktivera återställningsnyckel (för att kunna återfå användarens filer vid glömt eller förlorat lösenord):", diff --git a/apps/encryption/l10n/tr.js b/apps/encryption/l10n/tr.js index d5829734831..ef00578b5dc 100644 --- a/apps/encryption/l10n/tr.js +++ b/apps/encryption/l10n/tr.js @@ -13,8 +13,15 @@ OC.L10N.register( "Please repeat the new recovery password" : "Lütfen yeni kurtarma parolasını yenileyin", "Password successfully changed." : "Parola başarıyla değiştirildi.", "Could not change the password. Maybe the old password was not correct." : "Parola değiştirilemedi. Eski parolanız doğru olmayabilir.", + "Recovery Key enabled" : "Kurtarma anahtarı etkin", + "Could not enable the recovery key, please try again or contact your administrator" : "Kurtarma anahtarını etkinleştirmek olmadı, tekrar deneyin ya da yöneticinize başvurun", + "Could not update the private key password." : "Özel anahtar parolası güncellenemedi", + "The old password was not correct, please try again." : "Eski parola doğru değil, lütfen yeniden deneyin.", + "The current log-in password was not correct, please try again." : "Geçerli oturum parolası doğru değil, lütfen yeniden deneyin.", + "Private key password successfully updated." : "Özel anahtar parolası başarıyla güncellendi.", "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", + "ownCloud basic encryption module" : "ownCloud basit şifreleme modülü", "Enable recovery key (allow to recover users files in case of password loss):" : "Kurtarma anahtarını etkinleştir (parola kaybı durumunda kullanıcı dosyalarının kurtarılmasına izin verir):", "Recovery key password" : "Kurtarma anahtarı parolası", "Repeat Recovery key password" : "Kurtarma anahtarı parolasını yineleyin", diff --git a/apps/encryption/l10n/tr.json b/apps/encryption/l10n/tr.json index 75aee1e2d7a..38fbc6898d9 100644 --- a/apps/encryption/l10n/tr.json +++ b/apps/encryption/l10n/tr.json @@ -11,8 +11,15 @@ "Please repeat the new recovery password" : "Lütfen yeni kurtarma parolasını yenileyin", "Password successfully changed." : "Parola başarıyla değiştirildi.", "Could not change the password. Maybe the old password was not correct." : "Parola değiştirilemedi. Eski parolanız doğru olmayabilir.", + "Recovery Key enabled" : "Kurtarma anahtarı etkin", + "Could not enable the recovery key, please try again or contact your administrator" : "Kurtarma anahtarını etkinleştirmek olmadı, tekrar deneyin ya da yöneticinize başvurun", + "Could not update the private key password." : "Özel anahtar parolası güncellenemedi", + "The old password was not correct, please try again." : "Eski parola doğru değil, lütfen yeniden deneyin.", + "The current log-in password was not correct, please try again." : "Geçerli oturum parolası doğru değil, lütfen yeniden deneyin.", + "Private key password successfully updated." : "Özel anahtar parolası başarıyla güncellendi.", "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", + "ownCloud basic encryption module" : "ownCloud basit şifreleme modülü", "Enable recovery key (allow to recover users files in case of password loss):" : "Kurtarma anahtarını etkinleştir (parola kaybı durumunda kullanıcı dosyalarının kurtarılmasına izin verir):", "Recovery key password" : "Kurtarma anahtarı parolası", "Repeat Recovery key password" : "Kurtarma anahtarı parolasını yineleyin", diff --git a/apps/encryption/l10n/uk.js b/apps/encryption/l10n/uk.js index f1b1f9a8b73..6abba2b9f9f 100644 --- a/apps/encryption/l10n/uk.js +++ b/apps/encryption/l10n/uk.js @@ -15,6 +15,10 @@ OC.L10N.register( "Could not change the password. Maybe the old password was not correct." : "Не вдалося змінити пароль. Можливо ви неправильно ввели старий пароль.", "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." : "Старий пароль введено не вірно, спробуйте ще раз.", + "The current log-in password was not correct, please try again." : "Невірний пароль входу, будь ласка, спробуйте ще раз.", + "Private key password successfully updated." : "Пароль секретного ключа оновлено.", "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" : "Доданок шифрування ввімкнено, але ваші ключі не ініціалізовано, вийдіть та зайдіть знову", "ownCloud basic encryption module" : "базовий модуль шифрування ownCloud", diff --git a/apps/encryption/l10n/uk.json b/apps/encryption/l10n/uk.json index 0fdefc95161..31918de0499 100644 --- a/apps/encryption/l10n/uk.json +++ b/apps/encryption/l10n/uk.json @@ -13,6 +13,10 @@ "Could not change the password. Maybe the old password was not correct." : "Не вдалося змінити пароль. Можливо ви неправильно ввели старий пароль.", "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." : "Старий пароль введено не вірно, спробуйте ще раз.", + "The current log-in password was not correct, please try again." : "Невірний пароль входу, будь ласка, спробуйте ще раз.", + "Private key password successfully updated." : "Пароль секретного ключа оновлено.", "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" : "Доданок шифрування ввімкнено, але ваші ключі не ініціалізовано, вийдіть та зайдіть знову", "ownCloud basic encryption module" : "базовий модуль шифрування ownCloud", diff --git a/apps/encryption/l10n/vi.js b/apps/encryption/l10n/vi.js index 0bd1e40794d..1e835e4b9ad 100644 --- a/apps/encryption/l10n/vi.js +++ b/apps/encryption/l10n/vi.js @@ -7,6 +7,7 @@ OC.L10N.register( "Could not disable recovery key. Please check your recovery key password!" : "Không thể vô hiệu hóa khóa khôi phục. Vui lòng kiểm tra mật khẩu khóa khôi phục!", "Password successfully changed." : "Đã đổi mật khẩu.", "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", "Enabled" : "Bật", "Disabled" : "Tắt", diff --git a/apps/encryption/l10n/vi.json b/apps/encryption/l10n/vi.json index 224870445aa..51973ceb65d 100644 --- a/apps/encryption/l10n/vi.json +++ b/apps/encryption/l10n/vi.json @@ -5,6 +5,7 @@ "Could not disable recovery key. Please check your recovery key password!" : "Không thể vô hiệu hóa khóa khôi phục. Vui lòng kiểm tra mật khẩu khóa khôi phục!", "Password successfully changed." : "Đã đổi mật khẩu.", "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", "Enabled" : "Bật", "Disabled" : "Tắt", diff --git a/apps/encryption/l10n/zh_CN.js b/apps/encryption/l10n/zh_CN.js index f65d6efb423..59d5b397435 100644 --- a/apps/encryption/l10n/zh_CN.js +++ b/apps/encryption/l10n/zh_CN.js @@ -12,6 +12,9 @@ OC.L10N.register( "Please repeat the new recovery password" : "请替换新的恢复密码", "Password successfully changed." : "密码修改成功。", "Could not change the password. Maybe the old password was not correct." : "不能修改密码。旧密码可能不正确。", + "Could not update the private key password." : "不能更新私有密钥。", + "The old password was not correct, please try again." : "原始密码错误,请重试。", + "Private key password successfully updated." : "私钥密码成功更新。", "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" : "加密应用被启用了,但是你的加密密钥没有初始化,请重新登出登录系统一次。", "Enable recovery key (allow to recover users files in case of password loss):" : "启用恢复密钥(允许你在密码丢失后恢复文件):", diff --git a/apps/encryption/l10n/zh_CN.json b/apps/encryption/l10n/zh_CN.json index aafd85baa08..590a6cf8471 100644 --- a/apps/encryption/l10n/zh_CN.json +++ b/apps/encryption/l10n/zh_CN.json @@ -10,6 +10,9 @@ "Please repeat the new recovery password" : "请替换新的恢复密码", "Password successfully changed." : "密码修改成功。", "Could not change the password. Maybe the old password was not correct." : "不能修改密码。旧密码可能不正确。", + "Could not update the private key password." : "不能更新私有密钥。", + "The old password was not correct, please try again." : "原始密码错误,请重试。", + "Private key password successfully updated." : "私钥密码成功更新。", "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" : "加密应用被启用了,但是你的加密密钥没有初始化,请重新登出登录系统一次。", "Enable recovery key (allow to recover users files in case of password loss):" : "启用恢复密钥(允许你在密码丢失后恢复文件):", diff --git a/apps/encryption/l10n/zh_TW.js b/apps/encryption/l10n/zh_TW.js index 7701a67e2c9..a3915f15a6f 100644 --- a/apps/encryption/l10n/zh_TW.js +++ b/apps/encryption/l10n/zh_TW.js @@ -7,6 +7,7 @@ OC.L10N.register( "Could not disable recovery key. Please check your recovery key password!" : "無法停用還原金鑰。請檢查您的還原金鑰密碼!", "Password successfully changed." : "成功變更密碼。", "Could not change the password. Maybe the old password was not correct." : "無法變更密碼,或許是輸入的舊密碼不正確。", + "Private key password successfully updated." : "私人金鑰密碼已成功更新。", "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" : "檔案加密已啓用,但是您的金鑰尚未初始化,請重新登入一次", "Enable recovery key (allow to recover users files in case of password loss):" : "啟用還原金鑰 (因忘記密碼仍允許還原使用者檔案):", diff --git a/apps/encryption/l10n/zh_TW.json b/apps/encryption/l10n/zh_TW.json index 607f7a70e17..61523cc06f5 100644 --- a/apps/encryption/l10n/zh_TW.json +++ b/apps/encryption/l10n/zh_TW.json @@ -5,6 +5,7 @@ "Could not disable recovery key. Please check your recovery key password!" : "無法停用還原金鑰。請檢查您的還原金鑰密碼!", "Password successfully changed." : "成功變更密碼。", "Could not change the password. Maybe the old password was not correct." : "無法變更密碼,或許是輸入的舊密碼不正確。", + "Private key password successfully updated." : "私人金鑰密碼已成功更新。", "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" : "檔案加密已啓用,但是您的金鑰尚未初始化,請重新登入一次", "Enable recovery key (allow to recover users files in case of password loss):" : "啟用還原金鑰 (因忘記密碼仍允許還原使用者檔案):", diff --git a/apps/encryption/lib/keymanager.php b/apps/encryption/lib/keymanager.php index b451b5c25a9..1e6f3d29be8 100644 --- a/apps/encryption/lib/keymanager.php +++ b/apps/encryption/lib/keymanager.php @@ -23,6 +23,7 @@ namespace OCA\Encryption; use OC\Encryption\Exceptions\DecryptionFailedException; +use OCA\Encryption\Crypto\Encryption; use OCA\Encryption\Exceptions\PrivateKeyMissingException; use OCA\Encryption\Exceptions\PublicKeyMissingException; use OCA\Encryption\Crypto\Crypt; @@ -136,7 +137,8 @@ class KeyManager { // Save public key $this->keyStorage->setSystemUserKey( - $this->publicShareKeyId . '.publicKey', $keyPair['publicKey']); + $this->publicShareKeyId . '.publicKey', $keyPair['publicKey'], + Encryption::ID); // Encrypt private key empty passphrase $encryptedKey = $this->crypt->symmetricEncryptFileContent($keyPair['privateKey'], ''); @@ -162,7 +164,7 @@ class KeyManager { * @return string */ public function getRecoveryKey() { - return $this->keyStorage->getSystemUserKey($this->recoveryKeyId . '.publicKey'); + return $this->keyStorage->getSystemUserKey($this->recoveryKeyId . '.publicKey', Encryption::ID); } /** @@ -179,7 +181,7 @@ class KeyManager { * @return bool */ public function checkRecoveryPassword($password) { - $recoveryKey = $this->keyStorage->getSystemUserKey($this->recoveryKeyId . '.privateKey'); + $recoveryKey = $this->keyStorage->getSystemUserKey($this->recoveryKeyId . '.privateKey', Encryption::ID); $decryptedRecoveryKey = $this->crypt->decryptPrivateKey($recoveryKey, $password); @@ -217,7 +219,10 @@ class KeyManager { */ public function setRecoveryKey($password, $keyPair) { // Save Public Key - $this->keyStorage->setSystemUserKey($this->getRecoveryKeyId(). '.publicKey', $keyPair['publicKey']); + $this->keyStorage->setSystemUserKey($this->getRecoveryKeyId(). + '.publicKey', + $keyPair['publicKey'], + Encryption::ID); $encryptedKey = $this->crypt->symmetricEncryptFileContent($keyPair['privateKey'], $password); @@ -236,7 +241,7 @@ class KeyManager { * @return bool */ public function setPublicKey($userId, $key) { - return $this->keyStorage->setUserKey($userId, $this->publicKeyId, $key); + return $this->keyStorage->setUserKey($userId, $this->publicKeyId, $key, Encryption::ID); } /** @@ -247,7 +252,8 @@ class KeyManager { public function setPrivateKey($userId, $key) { return $this->keyStorage->setUserKey($userId, $this->privateKeyId, - $key); + $key, + Encryption::ID); } /** @@ -258,7 +264,7 @@ class KeyManager { * @return boolean */ public function setFileKey($path, $key) { - return $this->keyStorage->setFileKey($path, $this->fileKeyId, $key); + return $this->keyStorage->setFileKey($path, $this->fileKeyId, $key, Encryption::ID); } /** @@ -284,7 +290,7 @@ class KeyManager { */ public function setShareKey($path, $uid, $key) { $keyId = $uid . '.' . $this->shareKeyId; - return $this->keyStorage->setFileKey($path, $keyId, $key); + return $this->keyStorage->setFileKey($path, $keyId, $key, Encryption::ID); } /** @@ -324,7 +330,7 @@ class KeyManager { */ public function getPrivateKey($userId) { $privateKey = $this->keyStorage->getUserKey($userId, - $this->privateKeyId); + $this->privateKeyId, Encryption::ID); if (strlen($privateKey) !== 0) { return $privateKey; @@ -338,12 +344,12 @@ class KeyManager { * @return string */ public function getFileKey($path, $uid) { - $encryptedFileKey = $this->keyStorage->getFileKey($path, $this->fileKeyId); + $encryptedFileKey = $this->keyStorage->getFileKey($path, $this->fileKeyId, Encryption::ID); if (is_null($uid)) { $uid = $this->getPublicShareKeyId(); $shareKey = $this->getShareKey($path, $uid); - $privateKey = $this->keyStorage->getSystemUserKey($this->publicShareKeyId . '.privateKey'); + $privateKey = $this->keyStorage->getSystemUserKey($this->publicShareKeyId . '.privateKey', Encryption::ID); $privateKey = $this->crypt->decryptPrivateKey($privateKey); } else { $shareKey = $this->getShareKey($path, $uid); @@ -367,7 +373,7 @@ class KeyManager { */ public function getEncryptedFileKey($path) { $encryptedFileKey = $this->keyStorage->getFileKey($path, - $this->fileKeyId); + $this->fileKeyId, Encryption::ID); return $encryptedFileKey; } @@ -380,7 +386,10 @@ class KeyManager { * @return boolean */ public function deleteShareKey($path, $keyId) { - return $this->keyStorage->deleteFileKey($path, $keyId . '.' . $this->shareKeyId); + return $this->keyStorage->deleteFileKey( + $path, + $keyId . '.' . $this->shareKeyId, + Encryption::ID); } @@ -391,7 +400,7 @@ class KeyManager { */ public function getShareKey($path, $uid) { $keyId = $uid . '.' . $this->shareKeyId; - return $this->keyStorage->getFileKey($path, $keyId); + return $this->keyStorage->getFileKey($path, $keyId, Encryption::ID); } /** @@ -416,7 +425,7 @@ class KeyManager { * @throws PublicKeyMissingException */ public function getPublicKey($userId) { - $publicKey = $this->keyStorage->getUserKey($userId, $this->publicKeyId); + $publicKey = $this->keyStorage->getUserKey($userId, $this->publicKeyId, Encryption::ID); if (strlen($publicKey) !== 0) { return $publicKey; @@ -434,7 +443,7 @@ class KeyManager { * @return string */ public function getPublicShareKey() { - return $this->keyStorage->getSystemUserKey($this->publicShareKeyId . '.publicKey'); + return $this->keyStorage->getSystemUserKey($this->publicShareKeyId . '.publicKey', Encryption::ID); } /** @@ -460,7 +469,7 @@ class KeyManager { * @return bool */ public function deletePublicKey($uid) { - return $this->keyStorage->deleteUserKey($uid, $this->publicKeyId); + return $this->keyStorage->deleteUserKey($uid, $this->publicKeyId, Encryption::ID); } /** @@ -468,11 +477,11 @@ class KeyManager { * @return bool */ private function deletePrivateKey($uid) { - return $this->keyStorage->deleteUserKey($uid, $this->privateKeyId); + return $this->keyStorage->deleteUserKey($uid, $this->privateKeyId, Encryption::ID); } public function deleteAllFileKeys($path) { - return $this->keyStorage->deleteAllFileKeys($path); + return $this->keyStorage->deleteAllFileKeys($path, Encryption::ID); } /** @@ -500,7 +509,7 @@ class KeyManager { * @return string returns openssl key */ public function getSystemPrivateKey($keyId) { - return $this->keyStorage->getSystemUserKey($keyId . '.' . $this->privateKeyId); + return $this->keyStorage->getSystemUserKey($keyId . '.' . $this->privateKeyId, Encryption::ID); } /** @@ -509,7 +518,10 @@ class KeyManager { * @return string returns openssl key */ public function setSystemPrivateKey($keyId, $key) { - return $this->keyStorage->setSystemUserKey($keyId . '.' . $this->privateKeyId, $key); + return $this->keyStorage->setSystemUserKey( + $keyId . '.' . $this->privateKeyId, + $key, + Encryption::ID); } /** diff --git a/apps/encryption/settings/settings-personal.php b/apps/encryption/settings/settings-personal.php index abbe62af615..01e1bdab0ea 100644 --- a/apps/encryption/settings/settings-personal.php +++ b/apps/encryption/settings/settings-personal.php @@ -38,7 +38,7 @@ $util = new \OCA\Encryption\Util( \OC::$server->getConfig()); $keyManager = new \OCA\Encryption\KeyManager( - \OC::$server->getEncryptionKeyStorage(\OCA\Encryption\Crypto\Encryption::ID), + \OC::$server->getEncryptionKeyStorage(), $crypt, \OC::$server->getConfig(), $userSession, diff --git a/apps/encryption/tests/controller/SettingsControllerTest.php b/apps/encryption/tests/controller/SettingsControllerTest.php new file mode 100644 index 00000000000..478bf8213b5 --- /dev/null +++ b/apps/encryption/tests/controller/SettingsControllerTest.php @@ -0,0 +1,222 @@ +<?php +/** + * @author Björn Schießle <schiessle@owncloud.com> + * + * @copyright Copyright (c) 2015, ownCloud, Inc. + * @license AGPL-3.0 + * + * This code is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License, version 3, + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License, version 3, + * along with this program. If not, see <http://www.gnu.org/licenses/> + * + */ + +namespace OCA\Encryption\Tests\Controller; + +use OCA\Encryption\Controller\SettingsController; +use OCA\Encryption\Session; +use OCP\AppFramework\Http; +use Test\TestCase; + +class SettingsControllerTest extends TestCase { + + /** @var SettingsController */ + private $controller; + + /** @var \PHPUnit_Framework_MockObject_MockObject */ + private $requestMock; + + /** @var \PHPUnit_Framework_MockObject_MockObject */ + private $l10nMock; + + /** @var \PHPUnit_Framework_MockObject_MockObject */ + private $userManagerMock; + + /** @var \PHPUnit_Framework_MockObject_MockObject */ + private $userSessionMock; + + /** @var \PHPUnit_Framework_MockObject_MockObject */ + private $keyManagerMock; + + /** @var \PHPUnit_Framework_MockObject_MockObject */ + private $cryptMock; + + /** @var \PHPUnit_Framework_MockObject_MockObject */ + private $sessionMock; + + protected function setUp() { + + parent::setUp(); + + $this->requestMock = $this->getMock('OCP\IRequest'); + + $this->l10nMock = $this->getMockBuilder('OCP\IL10N') + ->disableOriginalConstructor()->getMock(); + + $this->l10nMock->expects($this->any()) + ->method('t') + ->will($this->returnCallback(function($message) { + return $message; + })); + + $this->userManagerMock = $this->getMockBuilder('OCP\IUserManager') + ->disableOriginalConstructor()->getMock(); + + $this->keyManagerMock = $this->getMockBuilder('OCA\Encryption\KeyManager') + ->disableOriginalConstructor()->getMock(); + + $this->cryptMock = $this->getMockBuilder('OCA\Encryption\Crypto\Crypt') + ->disableOriginalConstructor()->getMock(); + + $this->userSessionMock = $this->getMockBuilder('OCP\IUserSession') + ->disableOriginalConstructor() + ->setMethods([ + 'isLoggedIn', + 'getUID', + 'login', + 'logout', + 'setUser', + 'getUser', + 'canChangePassword', + ]) + ->getMock(); + + $this->userSessionMock->expects($this->any()) + ->method('getUID') + ->willReturn('testUser'); + + $this->userSessionMock->expects($this->any()) + ->method($this->anything()) + ->will($this->returnSelf()); + + $this->sessionMock = $this->getMockBuilder('OCA\Encryption\Session') + ->disableOriginalConstructor()->getMock(); + + $this->controller = new SettingsController( + 'encryption', + $this->requestMock, + $this->l10nMock, + $this->userManagerMock, + $this->userSessionMock, + $this->keyManagerMock, + $this->cryptMock, + $this->sessionMock + ); + } + + /** + * test updatePrivateKeyPassword() if wrong new password was entered + */ + public function testUpdatePrivateKeyPasswordWrongNewPassword() { + + $oldPassword = 'old'; + $newPassword = 'new'; + + $this->userManagerMock + ->expects($this->once()) + ->method('checkPassword') + ->willReturn(false); + + $result = $this->controller->updatePrivateKeyPassword($oldPassword, $newPassword); + + $data = $result->getData(); + + $this->assertSame(Http::STATUS_BAD_REQUEST, $result->getStatus()); + $this->assertSame('The current log-in password was not correct, please try again.', + $data['message']); + } + + /** + * test updatePrivateKeyPassword() if wrong old password was entered + */ + public function testUpdatePrivateKeyPasswordWrongOldPassword() { + + $oldPassword = 'old'; + $newPassword = 'new'; + + $this->userManagerMock + ->expects($this->once()) + ->method('checkPassword') + ->willReturn(true); + + $this->cryptMock + ->expects($this->once()) + ->method('decryptPrivateKey') + ->willReturn(false); + + $result = $this->controller->updatePrivateKeyPassword($oldPassword, $newPassword); + + $data = $result->getData(); + + $this->assertSame(Http::STATUS_BAD_REQUEST, $result->getStatus()); + $this->assertSame('The old password was not correct, please try again.', + $data['message']); + } + + /** + * test updatePrivateKeyPassword() with the correct old and new password + */ + public function testUpdatePrivateKeyPassword() { + + $oldPassword = 'old'; + $newPassword = 'new'; + + $this->userSessionMock + ->expects($this->once()) + ->method('getUID') + ->willReturn('testUser'); + + $this->userManagerMock + ->expects($this->once()) + ->method('checkPassword') + ->willReturn(true); + + $this->cryptMock + ->expects($this->once()) + ->method('decryptPrivateKey') + ->willReturn('decryptedKey'); + + $this->cryptMock + ->expects($this->once()) + ->method('symmetricEncryptFileContent') + ->willReturn('encryptedKey'); + + $this->cryptMock + ->expects($this->once()) + ->method('generateHeader') + ->willReturn('header.'); + + // methods which must be called after successful changing the key password + $this->keyManagerMock + ->expects($this->once()) + ->method('setPrivateKey') + ->with($this->equalTo('testUser'), $this->equalTo('header.encryptedKey')); + + $this->sessionMock + ->expects($this->once()) + ->method('setPrivateKey') + ->with($this->equalTo('decryptedKey')); + + $this->sessionMock + ->expects($this->once()) + ->method('setStatus') + ->with($this->equalTo(Session::INIT_SUCCESSFUL)); + + $result = $this->controller->updatePrivateKeyPassword($oldPassword, $newPassword); + + $data = $result->getData(); + + $this->assertSame(Http::STATUS_OK, $result->getStatus()); + $this->assertSame('Private key password successfully updated.', + $data['message']); + } + +} diff --git a/apps/encryption_dummy/appinfo/app.php b/apps/encryption_dummy/appinfo/app.php index f04886f9f1f..51a535a9820 100644 --- a/apps/encryption_dummy/appinfo/app.php +++ b/apps/encryption_dummy/appinfo/app.php @@ -2,5 +2,7 @@ $manager = \OC::$server->getEncryptionManager(); $module = new \OCA\Encryption_Dummy\DummyModule(); -$manager->registerEncryptionModule('OC_DUMMY_MODULE', 'Dummy Encryption Module', $module); +$manager->registerEncryptionModule('OC_DUMMY_MODULE', 'Dummy Encryption Module', function() use ($module) { + return $module; +}); diff --git a/apps/encryption_dummy/lib/dummymodule.php b/apps/encryption_dummy/lib/dummymodule.php index 813b50edcbd..e974ee468e2 100644 --- a/apps/encryption_dummy/lib/dummymodule.php +++ b/apps/encryption_dummy/lib/dummymodule.php @@ -76,8 +76,8 @@ class DummyModule implements IEncryptionModule { public function end($path) { if ($this->isWriteOperation) { - $storage = \OC::$server->getEncryptionKeyStorage($this->getId()); - $storage->setFileKey($path, 'fileKey', 'foo'); + $storage = \OC::$server->getEncryptionKeyStorage(); + $storage->setFileKey($path, 'fileKey', 'foo', $this->getId()); } return ''; } diff --git a/apps/files/appinfo/remote.php b/apps/files/appinfo/remote.php index 1e54fc10efa..b8dc68f1f81 100644 --- a/apps/files/appinfo/remote.php +++ b/apps/files/appinfo/remote.php @@ -43,6 +43,7 @@ $server->setBaseUri($baseuri); // Load plugins $defaults = new OC_Defaults(); +$server->addPlugin(new \OC\Connector\Sabre\BlockLegacyClientPlugin(\OC::$server->getConfig())); $server->addPlugin(new \Sabre\DAV\Auth\Plugin($authBackend, $defaults->getName())); // FIXME: The following line is a workaround for legacy components relying on being able to send a GET to / $server->addPlugin(new \OC\Connector\Sabre\DummyGetResponsePlugin()); diff --git a/apps/files/css/files.css b/apps/files/css/files.css index 455ccae3f96..e4bf791761d 100644 --- a/apps/files/css/files.css +++ b/apps/files/css/files.css @@ -274,7 +274,16 @@ table.multiselect #headerName { position: relative; width: 9999px; /* when we use 100%, the styling breaks on mobile … table styling */ } -table td.selection, table th.selection, table td.fileaction { width:32px; text-align:center; } +table.multiselect #modified { + display: none; +} + +table td.selection, +table th.selection, +table td.fileaction { + width: 32px; + text-align: center; +} table td.filename a.name { position:relative; /* Firefox needs to explicitly have this default set … */ -moz-box-sizing: border-box; @@ -572,7 +581,9 @@ a.action>img { #fileList tr:hover a.action, #fileList a.action.permanent, #fileList tr:focus a.action, -#fileList a.action.permanent +#fileList a.action.permanent, +#fileList tr:hover a.action.no-permission:hover, +#fileList tr:focus a.action.no-permission:focus /*#fileList .name:focus .action*/ { -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=50)"; filter: alpha(opacity=50); @@ -593,18 +604,19 @@ a.action>img { -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=30)"; filter: alpha(opacity=30); opacity: .3; - height: 60px; + /* add whitespace to bottom of files list to correctly show dropdowns */ + height: 300px; } - .summary:hover, .summary:focus, .summary, table tr.summary td { background-color: transparent; } - .summary td { border-bottom: none; + vertical-align: top; + padding-top: 20px; } .summary .info { margin-left: 40px; diff --git a/apps/files/js/fileactions.js b/apps/files/js/fileactions.js index b335f1f6432..1956fda0077 100644 --- a/apps/files/js/fileactions.js +++ b/apps/files/js/fileactions.js @@ -288,9 +288,15 @@ } else if (mountType === 'shared-root') { deleteTitle = t('files', 'Unshare'); } + var cssClasses = 'action delete icon-delete'; + if((context.$file.data('permissions') & OC.PERMISSION_DELETE) === 0) { + // add css class no-permission to delete icon + cssClasses += ' no-permission'; + deleteTitle = t('files', 'No permission to delete'); + } var $actionLink = $('<a href="#" original-title="' + escapeHTML(deleteTitle) + - '" class="action delete icon-delete">' + + '" class="' +cssClasses + '">' + '<span class="hidden-visually">' + escapeHTML(deleteTitle) + '</span>' + '</a>' ); @@ -426,12 +432,17 @@ name: 'Delete', displayName: '', mime: 'all', - permissions: OC.PERMISSION_DELETE, + // permission is READ because we show a hint instead if there is no permission + permissions: OC.PERMISSION_READ, icon: function() { return OC.imagePath('core', 'actions/delete'); }, render: _.bind(this._renderDeleteAction, this), actionHandler: function(fileName, context) { + // if there is no permission to delete do nothing + if((context.$file.data('permissions') & OC.PERMISSION_DELETE) === 0) { + return; + } context.fileList.do_delete(fileName, context.dir); $('.tipsy').remove(); } diff --git a/apps/files/js/filelist.js b/apps/files/js/filelist.js index 9d60e77b0ac..0181acab596 100644 --- a/apps/files/js/filelist.js +++ b/apps/files/js/filelist.js @@ -1623,7 +1623,8 @@ updateEmptyContent: function() { var permissions = this.getDirectoryPermissions(); var isCreatable = (permissions & OC.PERMISSION_CREATE) !== 0; - this.$el.find('#emptycontent').toggleClass('hidden', !isCreatable || !this.isEmpty); + this.$el.find('#emptycontent').toggleClass('hidden', !this.isEmpty); + this.$el.find('#emptycontent .uploadmessage').toggleClass('hidden', !isCreatable || !this.isEmpty); this.$el.find('#filestable thead th').toggleClass('hidden', this.isEmpty); }, /** diff --git a/apps/files/l10n/ca.js b/apps/files/l10n/ca.js index ef55e399946..68eb57fb335 100644 --- a/apps/files/l10n/ca.js +++ b/apps/files/l10n/ca.js @@ -70,6 +70,7 @@ OC.L10N.register( "An error occurred while trying to update the tags" : "S'ha produït un error en tractar d'actualitzar les etiquetes", "A new file or folder has been <strong>created</strong>" : "S'ha <strong>creat</strong> un nou fitxer o una nova carpeta", "A file or folder has been <strong>changed</strong>" : "S'ha <strong>canviat</strong> un fitxer o una carpeta", + "Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "Limitar les notificacions sobre la creació i canvis dels seus <strong>arxius favorits</strong><em>(solament Stream)</em>", "A file or folder has been <strong>deleted</strong>" : "S'ha <strong>elminiat</strong> un fitxer o una carpeta", "A file or folder has been <strong>restored</strong>" : "S'ha <strong>restaurat</strong> un fitxer o una carpeta", "You created %1$s" : "Has creat %1$s", diff --git a/apps/files/l10n/ca.json b/apps/files/l10n/ca.json index f102b4f5fd3..8ca81cecdc7 100644 --- a/apps/files/l10n/ca.json +++ b/apps/files/l10n/ca.json @@ -68,6 +68,7 @@ "An error occurred while trying to update the tags" : "S'ha produït un error en tractar d'actualitzar les etiquetes", "A new file or folder has been <strong>created</strong>" : "S'ha <strong>creat</strong> un nou fitxer o una nova carpeta", "A file or folder has been <strong>changed</strong>" : "S'ha <strong>canviat</strong> un fitxer o una carpeta", + "Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "Limitar les notificacions sobre la creació i canvis dels seus <strong>arxius favorits</strong><em>(solament Stream)</em>", "A file or folder has been <strong>deleted</strong>" : "S'ha <strong>elminiat</strong> un fitxer o una carpeta", "A file or folder has been <strong>restored</strong>" : "S'ha <strong>restaurat</strong> un fitxer o una carpeta", "You created %1$s" : "Has creat %1$s", diff --git a/apps/files/l10n/cs_CZ.js b/apps/files/l10n/cs_CZ.js index 84444eb360e..9c0d27d9f44 100644 --- a/apps/files/l10n/cs_CZ.js +++ b/apps/files/l10n/cs_CZ.js @@ -42,6 +42,7 @@ OC.L10N.register( "Delete" : "Smazat", "Disconnect storage" : "Odpojit úložiště", "Unshare" : "Zrušit sdílení", + "No permission to delete" : "Chybí oprávnění mazat", "Download" : "Stáhnout", "Select" : "Vybrat", "Pending" : "Nevyřízené", diff --git a/apps/files/l10n/cs_CZ.json b/apps/files/l10n/cs_CZ.json index 24fa5840ad5..663161c5e42 100644 --- a/apps/files/l10n/cs_CZ.json +++ b/apps/files/l10n/cs_CZ.json @@ -40,6 +40,7 @@ "Delete" : "Smazat", "Disconnect storage" : "Odpojit úložiště", "Unshare" : "Zrušit sdílení", + "No permission to delete" : "Chybí oprávnění mazat", "Download" : "Stáhnout", "Select" : "Vybrat", "Pending" : "Nevyřízené", diff --git a/apps/files/l10n/de.js b/apps/files/l10n/de.js index 721495a7335..a0584c3a7d5 100644 --- a/apps/files/l10n/de.js +++ b/apps/files/l10n/de.js @@ -42,6 +42,7 @@ OC.L10N.register( "Delete" : "Löschen", "Disconnect storage" : "Speicher trennen", "Unshare" : "Freigabe aufheben", + "No permission to delete" : "Keine Berechtigung zum Löschen", "Download" : "Herunterladen", "Select" : "Auswählen", "Pending" : "Ausstehend", diff --git a/apps/files/l10n/de.json b/apps/files/l10n/de.json index 467cbda63ea..a767f6dc129 100644 --- a/apps/files/l10n/de.json +++ b/apps/files/l10n/de.json @@ -40,6 +40,7 @@ "Delete" : "Löschen", "Disconnect storage" : "Speicher trennen", "Unshare" : "Freigabe aufheben", + "No permission to delete" : "Keine Berechtigung zum Löschen", "Download" : "Herunterladen", "Select" : "Auswählen", "Pending" : "Ausstehend", diff --git a/apps/files/l10n/de_DE.js b/apps/files/l10n/de_DE.js index 34239019ea4..1877607d449 100644 --- a/apps/files/l10n/de_DE.js +++ b/apps/files/l10n/de_DE.js @@ -42,6 +42,7 @@ OC.L10N.register( "Delete" : "Löschen", "Disconnect storage" : "Speicher trennen", "Unshare" : "Freigabe aufheben", + "No permission to delete" : "Keine Berechtigung zum Löschen", "Download" : "Herunterladen", "Select" : "Auswählen", "Pending" : "Ausstehend", diff --git a/apps/files/l10n/de_DE.json b/apps/files/l10n/de_DE.json index 2a061bda5f0..ab58d02491a 100644 --- a/apps/files/l10n/de_DE.json +++ b/apps/files/l10n/de_DE.json @@ -40,6 +40,7 @@ "Delete" : "Löschen", "Disconnect storage" : "Speicher trennen", "Unshare" : "Freigabe aufheben", + "No permission to delete" : "Keine Berechtigung zum Löschen", "Download" : "Herunterladen", "Select" : "Auswählen", "Pending" : "Ausstehend", diff --git a/apps/files/l10n/el.js b/apps/files/l10n/el.js index 24ebdfbfc6c..284b92a0c18 100644 --- a/apps/files/l10n/el.js +++ b/apps/files/l10n/el.js @@ -42,6 +42,7 @@ OC.L10N.register( "Delete" : "Διαγραφή", "Disconnect storage" : "Αποσυνδεδεμένος αποθηκευτικός χώρος", "Unshare" : "Διακοπή διαμοιρασμού", + "No permission to delete" : "Δεν έχετε άδεια να το διαγράψετε", "Download" : "Λήψη", "Select" : "Επιλογή", "Pending" : "Εκκρεμεί", diff --git a/apps/files/l10n/el.json b/apps/files/l10n/el.json index c718e8323d2..9ff4a93567f 100644 --- a/apps/files/l10n/el.json +++ b/apps/files/l10n/el.json @@ -40,6 +40,7 @@ "Delete" : "Διαγραφή", "Disconnect storage" : "Αποσυνδεδεμένος αποθηκευτικός χώρος", "Unshare" : "Διακοπή διαμοιρασμού", + "No permission to delete" : "Δεν έχετε άδεια να το διαγράψετε", "Download" : "Λήψη", "Select" : "Επιλογή", "Pending" : "Εκκρεμεί", diff --git a/apps/files/l10n/en_GB.js b/apps/files/l10n/en_GB.js index fa0fa7307c8..80515d6890e 100644 --- a/apps/files/l10n/en_GB.js +++ b/apps/files/l10n/en_GB.js @@ -70,6 +70,7 @@ OC.L10N.register( "An error occurred while trying to update the tags" : "An error occurred whilst trying to update the tags", "A new file or folder has been <strong>created</strong>" : "A new file or folder has been <strong>created</strong>", "A file or folder has been <strong>changed</strong>" : "A file or folder has been <strong>changed</strong>", + "Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "Limit notifications about creation and changes to your <strong>favourite files</strong> <em>(Stream only)</em>", "A file or folder has been <strong>deleted</strong>" : "A file or folder has been <strong>deleted</strong>", "A file or folder has been <strong>restored</strong>" : "A file or folder has been <strong>restored</strong>", "You created %1$s" : "You created %1$s", @@ -99,6 +100,7 @@ OC.L10N.register( "Folder" : "Folder", "Upload" : "Upload", "Cancel upload" : "Cancel upload", + "No files in here" : "No files in here", "Upload some content or sync with your devices!" : "Upload some content or sync with your devices!", "No entries found in this folder" : "No entries found in this folder", "Select all" : "Select all", diff --git a/apps/files/l10n/en_GB.json b/apps/files/l10n/en_GB.json index 8f3a23a1639..e22b24ca829 100644 --- a/apps/files/l10n/en_GB.json +++ b/apps/files/l10n/en_GB.json @@ -68,6 +68,7 @@ "An error occurred while trying to update the tags" : "An error occurred whilst trying to update the tags", "A new file or folder has been <strong>created</strong>" : "A new file or folder has been <strong>created</strong>", "A file or folder has been <strong>changed</strong>" : "A file or folder has been <strong>changed</strong>", + "Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "Limit notifications about creation and changes to your <strong>favourite files</strong> <em>(Stream only)</em>", "A file or folder has been <strong>deleted</strong>" : "A file or folder has been <strong>deleted</strong>", "A file or folder has been <strong>restored</strong>" : "A file or folder has been <strong>restored</strong>", "You created %1$s" : "You created %1$s", @@ -97,6 +98,7 @@ "Folder" : "Folder", "Upload" : "Upload", "Cancel upload" : "Cancel upload", + "No files in here" : "No files in here", "Upload some content or sync with your devices!" : "Upload some content or sync with your devices!", "No entries found in this folder" : "No entries found in this folder", "Select all" : "Select all", diff --git a/apps/files/l10n/fi_FI.js b/apps/files/l10n/fi_FI.js index db7dbca8f12..39fa18bd8ae 100644 --- a/apps/files/l10n/fi_FI.js +++ b/apps/files/l10n/fi_FI.js @@ -42,6 +42,7 @@ OC.L10N.register( "Delete" : "Poista", "Disconnect storage" : "Katkaise yhteys tallennustilaan", "Unshare" : "Peru jakaminen", + "No permission to delete" : "Ei oikeutta poistaa", "Download" : "Lataa", "Select" : "Valitse", "Pending" : "Odottaa", diff --git a/apps/files/l10n/fi_FI.json b/apps/files/l10n/fi_FI.json index 8bfa09be9bc..82a1f64cc5b 100644 --- a/apps/files/l10n/fi_FI.json +++ b/apps/files/l10n/fi_FI.json @@ -40,6 +40,7 @@ "Delete" : "Poista", "Disconnect storage" : "Katkaise yhteys tallennustilaan", "Unshare" : "Peru jakaminen", + "No permission to delete" : "Ei oikeutta poistaa", "Download" : "Lataa", "Select" : "Valitse", "Pending" : "Odottaa", diff --git a/apps/files/l10n/gl.js b/apps/files/l10n/gl.js index c1c6ec11f45..cc1a61a32b6 100644 --- a/apps/files/l10n/gl.js +++ b/apps/files/l10n/gl.js @@ -42,6 +42,7 @@ OC.L10N.register( "Delete" : "Eliminar", "Disconnect storage" : "Desconectar o almacenamento", "Unshare" : "Deixar de compartir", + "No permission to delete" : "Non ten permisos para eliminar", "Download" : "Descargar", "Select" : "Seleccionar", "Pending" : "Pendentes", diff --git a/apps/files/l10n/gl.json b/apps/files/l10n/gl.json index 07c5efde382..e178d9ce831 100644 --- a/apps/files/l10n/gl.json +++ b/apps/files/l10n/gl.json @@ -40,6 +40,7 @@ "Delete" : "Eliminar", "Disconnect storage" : "Desconectar o almacenamento", "Unshare" : "Deixar de compartir", + "No permission to delete" : "Non ten permisos para eliminar", "Download" : "Descargar", "Select" : "Seleccionar", "Pending" : "Pendentes", diff --git a/apps/files/l10n/id.js b/apps/files/l10n/id.js index ffc8c909b91..97190ddf47a 100644 --- a/apps/files/l10n/id.js +++ b/apps/files/l10n/id.js @@ -67,8 +67,10 @@ OC.L10N.register( "{dirs} and {files}" : "{dirs} dan {files}", "Favorited" : "Difavoritkan", "Favorite" : "Favorit", + "An error occurred while trying to update the tags" : "Terjadi kesalahan saat mencoba untuk memperbarui label", "A new file or folder has been <strong>created</strong>" : "Sebuah berkas atau folder baru telah <strong>dibuat</strong>", "A file or folder has been <strong>changed</strong>" : "Sebuah berkas atau folder telah <strong>diubah</strong>", + "Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "Batas notifikasi tentang pembuatan dan perubahan <strong>berkas favorit</strong> Anda <em>(Hanya stream)</em>", "A file or folder has been <strong>deleted</strong>" : "Sebuah berkas atau folder telah <strong>dihapus</strong>", "A file or folder has been <strong>restored</strong>" : "Sebuah berkas atau folder telah <strong>dipulihkan</strong>", "You created %1$s" : "Anda membuat %1$s", @@ -87,6 +89,7 @@ OC.L10N.register( "Maximum upload size" : "Ukuran pengunggahan maksimum", "max. possible: " : "Kemungkinan maks.:", "Save" : "Simpan", + "Can not be edited from here due to insufficient permissions." : "Tidak dapat diidit dari sini karena tidak memiliki izin.", "Settings" : "Pengaturan", "WebDAV" : "WebDAV", "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Gunakan alamat ini untuk <a href=\"%s\" target=\"_blank\">mengakses Berkas via WebDAV</a>", @@ -97,6 +100,7 @@ OC.L10N.register( "Folder" : "Folder", "Upload" : "Unggah", "Cancel upload" : "Batal unggah", + "No files in here" : "Tidak ada berkas disini", "Upload some content or sync with your devices!" : "Unggah beberapa konten dan sinkronisasikan dengan perangkat Anda!", "No entries found in this folder" : "Tidak ada entri yang ditemukan dalam folder ini", "Select all" : "Pilih Semua", diff --git a/apps/files/l10n/id.json b/apps/files/l10n/id.json index 51d64896b0c..c3906da3c3d 100644 --- a/apps/files/l10n/id.json +++ b/apps/files/l10n/id.json @@ -65,8 +65,10 @@ "{dirs} and {files}" : "{dirs} dan {files}", "Favorited" : "Difavoritkan", "Favorite" : "Favorit", + "An error occurred while trying to update the tags" : "Terjadi kesalahan saat mencoba untuk memperbarui label", "A new file or folder has been <strong>created</strong>" : "Sebuah berkas atau folder baru telah <strong>dibuat</strong>", "A file or folder has been <strong>changed</strong>" : "Sebuah berkas atau folder telah <strong>diubah</strong>", + "Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "Batas notifikasi tentang pembuatan dan perubahan <strong>berkas favorit</strong> Anda <em>(Hanya stream)</em>", "A file or folder has been <strong>deleted</strong>" : "Sebuah berkas atau folder telah <strong>dihapus</strong>", "A file or folder has been <strong>restored</strong>" : "Sebuah berkas atau folder telah <strong>dipulihkan</strong>", "You created %1$s" : "Anda membuat %1$s", @@ -85,6 +87,7 @@ "Maximum upload size" : "Ukuran pengunggahan maksimum", "max. possible: " : "Kemungkinan maks.:", "Save" : "Simpan", + "Can not be edited from here due to insufficient permissions." : "Tidak dapat diidit dari sini karena tidak memiliki izin.", "Settings" : "Pengaturan", "WebDAV" : "WebDAV", "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Gunakan alamat ini untuk <a href=\"%s\" target=\"_blank\">mengakses Berkas via WebDAV</a>", @@ -95,6 +98,7 @@ "Folder" : "Folder", "Upload" : "Unggah", "Cancel upload" : "Batal unggah", + "No files in here" : "Tidak ada berkas disini", "Upload some content or sync with your devices!" : "Unggah beberapa konten dan sinkronisasikan dengan perangkat Anda!", "No entries found in this folder" : "Tidak ada entri yang ditemukan dalam folder ini", "Select all" : "Pilih Semua", diff --git a/apps/files/l10n/it.js b/apps/files/l10n/it.js index 13f2ecd4dcb..64faf5318e0 100644 --- a/apps/files/l10n/it.js +++ b/apps/files/l10n/it.js @@ -42,6 +42,7 @@ OC.L10N.register( "Delete" : "Elimina", "Disconnect storage" : "Disconnetti archiviazione", "Unshare" : "Rimuovi condivisione", + "No permission to delete" : "Nessun permesso per eliminare", "Download" : "Scarica", "Select" : "Seleziona", "Pending" : "In corso", diff --git a/apps/files/l10n/it.json b/apps/files/l10n/it.json index 40d3aa7f125..62861a64611 100644 --- a/apps/files/l10n/it.json +++ b/apps/files/l10n/it.json @@ -40,6 +40,7 @@ "Delete" : "Elimina", "Disconnect storage" : "Disconnetti archiviazione", "Unshare" : "Rimuovi condivisione", + "No permission to delete" : "Nessun permesso per eliminare", "Download" : "Scarica", "Select" : "Seleziona", "Pending" : "In corso", diff --git a/apps/files/l10n/lb.js b/apps/files/l10n/lb.js index 8dc8269c0cc..5e7ec175af7 100644 --- a/apps/files/l10n/lb.js +++ b/apps/files/l10n/lb.js @@ -29,6 +29,7 @@ OC.L10N.register( "Settings" : "Astellungen", "New" : "Nei", "Text file" : "Text Fichier", + "New folder" : "Neien Dossier", "Folder" : "Dossier", "Upload" : "Eroplueden", "Cancel upload" : "Upload ofbriechen", diff --git a/apps/files/l10n/lb.json b/apps/files/l10n/lb.json index 524bd0c1cc9..5fc987294c7 100644 --- a/apps/files/l10n/lb.json +++ b/apps/files/l10n/lb.json @@ -27,6 +27,7 @@ "Settings" : "Astellungen", "New" : "Nei", "Text file" : "Text Fichier", + "New folder" : "Neien Dossier", "Folder" : "Dossier", "Upload" : "Eroplueden", "Cancel upload" : "Upload ofbriechen", diff --git a/apps/files/l10n/nl.js b/apps/files/l10n/nl.js index 01363c80c27..84907aa2af7 100644 --- a/apps/files/l10n/nl.js +++ b/apps/files/l10n/nl.js @@ -42,6 +42,7 @@ OC.L10N.register( "Delete" : "Verwijderen", "Disconnect storage" : "Verbinding met opslag verbreken", "Unshare" : "Stop met delen", + "No permission to delete" : "Geen permissie om te verwijderen", "Download" : "Downloaden", "Select" : "Selecteer", "Pending" : "In behandeling", diff --git a/apps/files/l10n/nl.json b/apps/files/l10n/nl.json index 1b8a2381de6..cee8ce6886d 100644 --- a/apps/files/l10n/nl.json +++ b/apps/files/l10n/nl.json @@ -40,6 +40,7 @@ "Delete" : "Verwijderen", "Disconnect storage" : "Verbinding met opslag verbreken", "Unshare" : "Stop met delen", + "No permission to delete" : "Geen permissie om te verwijderen", "Download" : "Downloaden", "Select" : "Selecteer", "Pending" : "In behandeling", diff --git a/apps/files/l10n/ru.js b/apps/files/l10n/ru.js index e6f3b43bf04..19e71acd491 100644 --- a/apps/files/l10n/ru.js +++ b/apps/files/l10n/ru.js @@ -42,6 +42,7 @@ OC.L10N.register( "Delete" : "Удалить", "Disconnect storage" : "Отсоединить хранилище", "Unshare" : "Закрыть доступ", + "No permission to delete" : "Недостаточно прав для удаления", "Download" : "Скачать", "Select" : "Выбрать", "Pending" : "Ожидание", diff --git a/apps/files/l10n/ru.json b/apps/files/l10n/ru.json index 66e059a160e..99e7b91861d 100644 --- a/apps/files/l10n/ru.json +++ b/apps/files/l10n/ru.json @@ -40,6 +40,7 @@ "Delete" : "Удалить", "Disconnect storage" : "Отсоединить хранилище", "Unshare" : "Закрыть доступ", + "No permission to delete" : "Недостаточно прав для удаления", "Download" : "Скачать", "Select" : "Выбрать", "Pending" : "Ожидание", diff --git a/apps/files/l10n/sr.js b/apps/files/l10n/sr.js index 0064fd19818..eb0d35954e7 100644 --- a/apps/files/l10n/sr.js +++ b/apps/files/l10n/sr.js @@ -42,6 +42,7 @@ OC.L10N.register( "Delete" : "Обриши", "Disconnect storage" : "Искључи складиште", "Unshare" : "Не дели", + "No permission to delete" : "Без дозволе за брисање", "Download" : "Преузми", "Select" : "Изабери", "Pending" : "На чекању", diff --git a/apps/files/l10n/sr.json b/apps/files/l10n/sr.json index 7a27e3d89fb..5451caae81b 100644 --- a/apps/files/l10n/sr.json +++ b/apps/files/l10n/sr.json @@ -40,6 +40,7 @@ "Delete" : "Обриши", "Disconnect storage" : "Искључи складиште", "Unshare" : "Не дели", + "No permission to delete" : "Без дозволе за брисање", "Download" : "Преузми", "Select" : "Изабери", "Pending" : "На чекању", diff --git a/apps/files/templates/list.php b/apps/files/templates/list.php index 02137c7e446..32651b261da 100644 --- a/apps/files/templates/list.php +++ b/apps/files/templates/list.php @@ -54,7 +54,7 @@ <div id="emptycontent" class="hidden"> <div class="icon-folder"></div> <h2><?php p($l->t('No files in here')); ?></h2> - <p><?php p($l->t('Upload some content or sync with your devices!')); ?></p> + <p class="uploadmessage hidden"><?php p($l->t('Upload some content or sync with your devices!')); ?></p> </div> <div class="nofilterresults emptycontent hidden"> diff --git a/apps/files/tests/js/fileactionsSpec.js b/apps/files/tests/js/fileactionsSpec.js index 828aec9b6b9..53fa8707674 100644 --- a/apps/files/tests/js/fileactionsSpec.js +++ b/apps/files/tests/js/fileactionsSpec.js @@ -157,6 +157,48 @@ describe('OCA.Files.FileActions tests', function() { expect(deleteStub.getCall(0).args[1]).toEqual('/somepath/dir'); deleteStub.restore(); }); + it('shows delete hint when no permission to delete', function() { + var deleteStub = sinon.stub(fileList, 'do_delete'); + var fileData = { + id: 18, + type: 'file', + name: 'testName.txt', + path: '/somepath/dir', + mimetype: 'text/plain', + size: '1234', + etag: 'a01234c', + mtime: '123456', + permissions: OC.PERMISSION_READ + }; + var $tr = fileList.add(fileData); + FileActions.display($tr.find('td.filename'), true, fileList); + + var $action = $tr.find('.action.delete'); + + expect($action.hasClass('no-permission')).toEqual(true); + deleteStub.restore(); + }); + it('shows delete hint not when permission to delete', function() { + var deleteStub = sinon.stub(fileList, 'do_delete'); + var fileData = { + id: 18, + type: 'file', + name: 'testName.txt', + path: '/somepath/dir', + mimetype: 'text/plain', + size: '1234', + etag: 'a01234c', + mtime: '123456', + permissions: OC.PERMISSION_DELETE + }; + var $tr = fileList.add(fileData); + FileActions.display($tr.find('td.filename'), true, fileList); + + var $action = $tr.find('.action.delete'); + + expect($action.hasClass('no-permission')).toEqual(false); + deleteStub.restore(); + }); it('passes context to action handler', function() { var actionStub = sinon.stub(); var fileData = { diff --git a/apps/files/tests/js/filelistSpec.js b/apps/files/tests/js/filelistSpec.js index 153cbe52c10..aa44c92792d 100644 --- a/apps/files/tests/js/filelistSpec.js +++ b/apps/files/tests/js/filelistSpec.js @@ -87,7 +87,8 @@ describe('OCA.Files.FileList tests', function() { '<tbody id="fileList"></tbody>' + '<tfoot></tfoot>' + '</table>' + - '<div id="emptycontent">Empty content message</div>' + + // TODO: move to handlebars template + '<div id="emptycontent"><h2>Empty content message</h2><p class="uploadmessage">Upload message</p></div>' + '<div class="nofilterresults hidden"></div>' + '</div>' ); @@ -845,13 +846,15 @@ describe('OCA.Files.FileList tests', function() { fileList.setFiles([]); expect($('#filestable thead th').hasClass('hidden')).toEqual(true); expect($('#emptycontent').hasClass('hidden')).toEqual(false); + expect($('#emptycontent .uploadmessage').hasClass('hidden')).toEqual(false); expect(fileList.$el.find('.summary').hasClass('hidden')).toEqual(true); }); - it('hides headers, empty content message, and summary when list is empty and user has no creation permission', function(){ + it('hides headers, upload message, and summary when list is empty and user has no creation permission', function(){ $('#permissions').val(0); fileList.setFiles([]); expect($('#filestable thead th').hasClass('hidden')).toEqual(true); - expect($('#emptycontent').hasClass('hidden')).toEqual(true); + expect($('#emptycontent').hasClass('hidden')).toEqual(false); + expect($('#emptycontent .uploadmessage').hasClass('hidden')).toEqual(true); expect(fileList.$el.find('.summary').hasClass('hidden')).toEqual(true); }); it('calling findFileEl() can find existing file element', function() { diff --git a/apps/files_external/3rdparty/composer.json b/apps/files_external/3rdparty/composer.json index 8992220d843..9680d92e548 100644 --- a/apps/files_external/3rdparty/composer.json +++ b/apps/files_external/3rdparty/composer.json @@ -6,7 +6,7 @@ "vendor-dir": "." }, "require": { - "icewind/smb": "1.0.0", + "icewind/smb": "1.0.1", "icewind/streams": "0.2" } } diff --git a/apps/files_external/3rdparty/composer.lock b/apps/files_external/3rdparty/composer.lock index ffd5c7c3c65..84fbb046d5a 100644 --- a/apps/files_external/3rdparty/composer.lock +++ b/apps/files_external/3rdparty/composer.lock @@ -4,24 +4,24 @@ "Read more about it at http://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", "This file is @generated automatically" ], - "hash": "2554253c9f91c67cd0db753a69105bc0", + "hash": "7b46d64e33feb600c5f0ec830b211e6f", "packages": [ { "name": "icewind/smb", - "version": "v1.0.0", + "version": "v1.0.1", "source": { "type": "git", "url": "https://github.com/icewind1991/SMB.git", - "reference": "4f5d9db3a9397e30476f92eb753751b54d6d4fa5" + "reference": "8041bc1960bf2da94e60b88b34e5c78300eac476" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/icewind1991/SMB/zipball/4f5d9db3a9397e30476f92eb753751b54d6d4fa5", - "reference": "4f5d9db3a9397e30476f92eb753751b54d6d4fa5", + "url": "https://api.github.com/repos/icewind1991/SMB/zipball/8041bc1960bf2da94e60b88b34e5c78300eac476", + "reference": "8041bc1960bf2da94e60b88b34e5c78300eac476", "shasum": "" }, "require": { - "icewind/streams": "0.2.x", + "icewind/streams": "0.2.*", "php": ">=5.3" }, "require-dev": { @@ -45,7 +45,7 @@ } ], "description": "php wrapper for smbclient and libsmbclient-php", - "time": "2015-04-10 12:10:08" + "time": "2015-04-20 11:16:24" }, { "name": "icewind/streams", diff --git a/apps/files_external/3rdparty/composer/installed.json b/apps/files_external/3rdparty/composer/installed.json index 441ed1f14fa..42e8fdd29db 100644 --- a/apps/files_external/3rdparty/composer/installed.json +++ b/apps/files_external/3rdparty/composer/installed.json @@ -43,27 +43,27 @@ }, { "name": "icewind/smb", - "version": "v1.0.0", - "version_normalized": "1.0.0.0", + "version": "v1.0.1", + "version_normalized": "1.0.1.0", "source": { "type": "git", "url": "https://github.com/icewind1991/SMB.git", - "reference": "4f5d9db3a9397e30476f92eb753751b54d6d4fa5" + "reference": "8041bc1960bf2da94e60b88b34e5c78300eac476" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/icewind1991/SMB/zipball/4f5d9db3a9397e30476f92eb753751b54d6d4fa5", - "reference": "4f5d9db3a9397e30476f92eb753751b54d6d4fa5", + "url": "https://api.github.com/repos/icewind1991/SMB/zipball/8041bc1960bf2da94e60b88b34e5c78300eac476", + "reference": "8041bc1960bf2da94e60b88b34e5c78300eac476", "shasum": "" }, "require": { - "icewind/streams": "0.2.x", + "icewind/streams": "0.2.*", "php": ">=5.3" }, "require-dev": { "satooshi/php-coveralls": "dev-master" }, - "time": "2015-04-10 12:10:08", + "time": "2015-04-20 11:16:24", "type": "library", "installation-source": "source", "autoload": { diff --git a/apps/files_external/3rdparty/icewind/smb/composer.json b/apps/files_external/3rdparty/icewind/smb/composer.json index 92f4280d775..593eb728716 100644 --- a/apps/files_external/3rdparty/icewind/smb/composer.json +++ b/apps/files_external/3rdparty/icewind/smb/composer.json @@ -10,7 +10,7 @@ ], "require" : { "php": ">=5.3", - "icewind/streams": "0.2.x" + "icewind/streams": "0.2.*" }, "require-dev": { "satooshi/php-coveralls" : "dev-master" diff --git a/apps/files_external/3rdparty/icewind/smb/src/Parser.php b/apps/files_external/3rdparty/icewind/smb/src/Parser.php index 8b4de7825e4..6af70143c52 100644 --- a/apps/files_external/3rdparty/icewind/smb/src/Parser.php +++ b/apps/files_external/3rdparty/icewind/smb/src/Parser.php @@ -91,7 +91,6 @@ class Parser { $mode = 0; $size = 0; foreach ($output as $line) { - list($name, $value) = explode(':', $line, 2); // A line = explode statement may not fill all array elements // properly. May happen when accessing non Windows Fileservers $words = explode(':', $line, 2); diff --git a/apps/files_external/l10n/en_GB.js b/apps/files_external/l10n/en_GB.js index 4f9bf8adc3c..e4dfb3effcc 100644 --- a/apps/files_external/l10n/en_GB.js +++ b/apps/files_external/l10n/en_GB.js @@ -64,6 +64,7 @@ OC.L10N.register( "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it.", "<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it.", "No external storage configured" : "No external storage configured", + "You can add external storages in the personal settings" : "You can add external storages in the personal settings", "Name" : "Name", "Storage type" : "Storage type", "Scope" : "Scope", @@ -72,6 +73,7 @@ OC.L10N.register( "Configuration" : "Configuration", "Available for" : "Available for", "Add storage" : "Add storage", + "Advanced settings" : "Advanced settings", "Delete" : "Delete", "Enable User External Storage" : "Enable User External Storage", "Allow users to mount the following external storage" : "Allow users to mount the following external storage" diff --git a/apps/files_external/l10n/en_GB.json b/apps/files_external/l10n/en_GB.json index ca49348ab72..6b66198cef4 100644 --- a/apps/files_external/l10n/en_GB.json +++ b/apps/files_external/l10n/en_GB.json @@ -62,6 +62,7 @@ "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it.", "<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it.", "No external storage configured" : "No external storage configured", + "You can add external storages in the personal settings" : "You can add external storages in the personal settings", "Name" : "Name", "Storage type" : "Storage type", "Scope" : "Scope", @@ -70,6 +71,7 @@ "Configuration" : "Configuration", "Available for" : "Available for", "Add storage" : "Add storage", + "Advanced settings" : "Advanced settings", "Delete" : "Delete", "Enable User External Storage" : "Enable User External Storage", "Allow users to mount the following external storage" : "Allow users to mount the following external storage" diff --git a/apps/files_external/l10n/fr.js b/apps/files_external/l10n/fr.js index f63553fe50a..4b6b3b7d305 100644 --- a/apps/files_external/l10n/fr.js +++ b/apps/files_external/l10n/fr.js @@ -37,7 +37,7 @@ OC.L10N.register( "Password (required for OpenStack Object Storage)" : "Mot de passe (requis pour OpenStack Object Storage)", "Service Name (required for OpenStack Object Storage)" : "Nom du service (requis pour le stockage OpenStack)", "URL of identity endpoint (required for OpenStack Object Storage)" : "URL du point d'accès d'identité (requis pour le stockage OpenStack)", - "Timeout of HTTP requests in seconds" : "Temps maximal de requête HTTP en seconde", + "Timeout of HTTP requests in seconds" : "Délai d'attente maximal des requêtes HTTP en secondes", "Share" : "Partager", "SMB / CIFS using OC login" : "SMB / CIFS en utilisant les identifiants OC", "Username as share" : "Nom d'utilisateur comme nom de partage", diff --git a/apps/files_external/l10n/fr.json b/apps/files_external/l10n/fr.json index af99c2c935a..add46dd3021 100644 --- a/apps/files_external/l10n/fr.json +++ b/apps/files_external/l10n/fr.json @@ -35,7 +35,7 @@ "Password (required for OpenStack Object Storage)" : "Mot de passe (requis pour OpenStack Object Storage)", "Service Name (required for OpenStack Object Storage)" : "Nom du service (requis pour le stockage OpenStack)", "URL of identity endpoint (required for OpenStack Object Storage)" : "URL du point d'accès d'identité (requis pour le stockage OpenStack)", - "Timeout of HTTP requests in seconds" : "Temps maximal de requête HTTP en seconde", + "Timeout of HTTP requests in seconds" : "Délai d'attente maximal des requêtes HTTP en secondes", "Share" : "Partager", "SMB / CIFS using OC login" : "SMB / CIFS en utilisant les identifiants OC", "Username as share" : "Nom d'utilisateur comme nom de partage", diff --git a/apps/files_external/lib/dropbox.php b/apps/files_external/lib/dropbox.php index b685f635aea..78219f8f06e 100644 --- a/apps/files_external/lib/dropbox.php +++ b/apps/files_external/lib/dropbox.php @@ -77,7 +77,7 @@ class Dropbox extends \OC\Files\Storage\Common { * @return mixed directory contents if $list is true, file metadata if $list is * false, null if the file doesn't exist or "false" if the operation failed */ - private function getMetaData($path, $list = false) { + private function getDropBoxMetaData($path, $list = false) { $path = $this->root.$path; if ( ! $list && isset($this->metaData[$path])) { return $this->metaData[$path]; @@ -150,7 +150,7 @@ class Dropbox extends \OC\Files\Storage\Common { } public function opendir($path) { - $contents = $this->getMetaData($path, true); + $contents = $this->getDropBoxMetaData($path, true); if ($contents !== false) { $files = array(); foreach ($contents as $file) { @@ -163,7 +163,7 @@ class Dropbox extends \OC\Files\Storage\Common { } public function stat($path) { - $metaData = $this->getMetaData($path); + $metaData = $this->getDropBoxMetaData($path); if ($metaData) { $stat['size'] = $metaData['bytes']; $stat['atime'] = time(); @@ -177,7 +177,7 @@ class Dropbox extends \OC\Files\Storage\Common { if ($path == '' || $path == '/') { return 'dir'; } else { - $metaData = $this->getMetaData($path); + $metaData = $this->getDropBoxMetaData($path); if ($metaData) { if ($metaData['is_dir'] == 'true') { return 'dir'; @@ -193,7 +193,7 @@ class Dropbox extends \OC\Files\Storage\Common { if ($path == '' || $path == '/') { return true; } - if ($this->getMetaData($path)) { + if ($this->getDropBoxMetaData($path)) { return true; } return false; @@ -213,7 +213,7 @@ class Dropbox extends \OC\Files\Storage\Common { public function rename($path1, $path2) { try { // overwrite if target file exists and is not a directory - $destMetaData = $this->getMetaData($path2); + $destMetaData = $this->getDropBoxMetaData($path2); if (isset($destMetaData) && $destMetaData !== false && !$destMetaData['is_dir']) { $this->unlink($path2); } @@ -297,7 +297,7 @@ class Dropbox extends \OC\Files\Storage\Common { if ($this->filetype($path) == 'dir') { return 'httpd/unix-directory'; } else { - $metaData = $this->getMetaData($path); + $metaData = $this->getDropBoxMetaData($path); if ($metaData) { return $metaData['mime_type']; } diff --git a/apps/files_external/tests/js/mountsfilelistSpec.js b/apps/files_external/tests/js/mountsfilelistSpec.js index a4e4fec1177..c7ea819d2fe 100644 --- a/apps/files_external/tests/js/mountsfilelistSpec.js +++ b/apps/files_external/tests/js/mountsfilelistSpec.js @@ -128,7 +128,7 @@ describe('OCA.External.FileList tests', function() { '?dir=/another%20mount%20points/sftp%20mount' ); expect($tr.find('.nametext').text().trim()).toEqual('sftp mount'); - expect($tr.find('.column-scope').text().trim()).toEqual('System'); + expect($tr.find('.column-scope > span').text().trim()).toEqual('System'); expect($tr.find('.column-backend').text().trim()).toEqual('SFTP'); $tr = $rows.eq(1); diff --git a/apps/files_sharing/js/public.js b/apps/files_sharing/js/public.js index bec43a4fb57..41bfeba031f 100644 --- a/apps/files_sharing/js/public.js +++ b/apps/files_sharing/js/public.js @@ -150,6 +150,13 @@ OCA.Sharing.PublicApp = { return OC.generateUrl('/apps/files_sharing/ajax/publicpreview.php?') + $.param(urlSpec); }; + this.fileList.updateEmptyContent = function() { + this.$el.find('#emptycontent .uploadmessage').text( + t('files_sharing', 'You can upload into this folder') + ); + OCA.Files.FileList.prototype.updateEmptyContent.apply(this, arguments); + }; + var file_upload_start = $('#file_upload_start'); file_upload_start.on('fileuploadadd', function (e, data) { var fileDirectory = ''; diff --git a/apps/files_sharing/l10n/cs_CZ.js b/apps/files_sharing/l10n/cs_CZ.js index d6bd498ce52..d1d89a15999 100644 --- a/apps/files_sharing/l10n/cs_CZ.js +++ b/apps/files_sharing/l10n/cs_CZ.js @@ -21,6 +21,7 @@ OC.L10N.register( "Remote share password" : "Heslo ke vzdálenému úložišti", "Cancel" : "Zrušit", "Add remote share" : "Přidat vzdálené úložiště", + "You can upload into this folder" : "Můžete nahrávat do tohoto adresáře", "No ownCloud installation (7 or higher) found at {remote}" : "Nebyla nalezena instalace ownCloud (7 nebo vyšší) na {remote}", "Invalid ownCloud url" : "Neplatná ownCloud url", "Share" : "Sdílet", diff --git a/apps/files_sharing/l10n/cs_CZ.json b/apps/files_sharing/l10n/cs_CZ.json index be42df94b7b..95fea4806cf 100644 --- a/apps/files_sharing/l10n/cs_CZ.json +++ b/apps/files_sharing/l10n/cs_CZ.json @@ -19,6 +19,7 @@ "Remote share password" : "Heslo ke vzdálenému úložišti", "Cancel" : "Zrušit", "Add remote share" : "Přidat vzdálené úložiště", + "You can upload into this folder" : "Můžete nahrávat do tohoto adresáře", "No ownCloud installation (7 or higher) found at {remote}" : "Nebyla nalezena instalace ownCloud (7 nebo vyšší) na {remote}", "Invalid ownCloud url" : "Neplatná ownCloud url", "Share" : "Sdílet", diff --git a/apps/files_sharing/l10n/de.js b/apps/files_sharing/l10n/de.js index 8022b53bc97..e5b7b7bcb32 100644 --- a/apps/files_sharing/l10n/de.js +++ b/apps/files_sharing/l10n/de.js @@ -21,6 +21,7 @@ OC.L10N.register( "Remote share password" : "Passwort für die entfernte Freigabe", "Cancel" : "Abbrechen", "Add remote share" : "Entfernte Freigabe hinzufügen", + "You can upload into this folder" : "Du kannst in diesen Ordner hochladen", "No ownCloud installation (7 or higher) found at {remote}" : "Keine OwnCloud-Installation (7 oder höher) auf {remote} gefunden", "Invalid ownCloud url" : "Ungültige OwnCloud-URL", "Share" : "Teilen", diff --git a/apps/files_sharing/l10n/de.json b/apps/files_sharing/l10n/de.json index 4bc9eaee223..a323072083d 100644 --- a/apps/files_sharing/l10n/de.json +++ b/apps/files_sharing/l10n/de.json @@ -19,6 +19,7 @@ "Remote share password" : "Passwort für die entfernte Freigabe", "Cancel" : "Abbrechen", "Add remote share" : "Entfernte Freigabe hinzufügen", + "You can upload into this folder" : "Du kannst in diesen Ordner hochladen", "No ownCloud installation (7 or higher) found at {remote}" : "Keine OwnCloud-Installation (7 oder höher) auf {remote} gefunden", "Invalid ownCloud url" : "Ungültige OwnCloud-URL", "Share" : "Teilen", diff --git a/apps/files_sharing/l10n/de_DE.js b/apps/files_sharing/l10n/de_DE.js index c95941de665..b75864375e2 100644 --- a/apps/files_sharing/l10n/de_DE.js +++ b/apps/files_sharing/l10n/de_DE.js @@ -21,6 +21,7 @@ OC.L10N.register( "Remote share password" : "Passwort für die entfernte Freigabe", "Cancel" : "Abbrechen", "Add remote share" : "Entfernte Freigabe hinzufügen", + "You can upload into this folder" : "Sie können in diesen Ordner hochladen", "No ownCloud installation (7 or higher) found at {remote}" : "Keine OwnCloud-Installation (7 oder höher) auf {remote} gefunden", "Invalid ownCloud url" : "Ungültige OwnCloud-Adresse", "Share" : "Teilen", diff --git a/apps/files_sharing/l10n/de_DE.json b/apps/files_sharing/l10n/de_DE.json index 75d99afb019..730ec010017 100644 --- a/apps/files_sharing/l10n/de_DE.json +++ b/apps/files_sharing/l10n/de_DE.json @@ -19,6 +19,7 @@ "Remote share password" : "Passwort für die entfernte Freigabe", "Cancel" : "Abbrechen", "Add remote share" : "Entfernte Freigabe hinzufügen", + "You can upload into this folder" : "Sie können in diesen Ordner hochladen", "No ownCloud installation (7 or higher) found at {remote}" : "Keine OwnCloud-Installation (7 oder höher) auf {remote} gefunden", "Invalid ownCloud url" : "Ungültige OwnCloud-Adresse", "Share" : "Teilen", diff --git a/apps/files_sharing/l10n/el.js b/apps/files_sharing/l10n/el.js index 293641b8a08..9e3cbf9621a 100644 --- a/apps/files_sharing/l10n/el.js +++ b/apps/files_sharing/l10n/el.js @@ -21,6 +21,7 @@ OC.L10N.register( "Remote share password" : "Κωδικός πρόσβασης απομακρυσμένου κοινόχρηστου φακέλου", "Cancel" : "Άκυρο", "Add remote share" : "Προσθήκη απομακρυσμένου κοινόχρηστου φακέλου", + "You can upload into this folder" : "Μπορείτε να μεταφορτώσετε σε αυτόν τον φάκελο", "No ownCloud installation (7 or higher) found at {remote}" : "Δεν βρέθηκε εγκατάστση ownCloud (7 ή νεώτερη) στο {remote}", "Invalid ownCloud url" : "Άκυρη url ownCloud ", "Share" : "Διαμοιράστε", diff --git a/apps/files_sharing/l10n/el.json b/apps/files_sharing/l10n/el.json index 702ef8fc650..3a796c25ae4 100644 --- a/apps/files_sharing/l10n/el.json +++ b/apps/files_sharing/l10n/el.json @@ -19,6 +19,7 @@ "Remote share password" : "Κωδικός πρόσβασης απομακρυσμένου κοινόχρηστου φακέλου", "Cancel" : "Άκυρο", "Add remote share" : "Προσθήκη απομακρυσμένου κοινόχρηστου φακέλου", + "You can upload into this folder" : "Μπορείτε να μεταφορτώσετε σε αυτόν τον φάκελο", "No ownCloud installation (7 or higher) found at {remote}" : "Δεν βρέθηκε εγκατάστση ownCloud (7 ή νεώτερη) στο {remote}", "Invalid ownCloud url" : "Άκυρη url ownCloud ", "Share" : "Διαμοιράστε", diff --git a/apps/files_sharing/l10n/en_GB.js b/apps/files_sharing/l10n/en_GB.js index 6ba75c4fc30..75956e85025 100644 --- a/apps/files_sharing/l10n/en_GB.js +++ b/apps/files_sharing/l10n/en_GB.js @@ -21,6 +21,7 @@ OC.L10N.register( "Remote share password" : "Remote share password", "Cancel" : "Cancel", "Add remote share" : "Add remote share", + "You can upload into this folder" : "You can upload into this folder", "No ownCloud installation (7 or higher) found at {remote}" : "No ownCloud installation (7 or higher) found at {remote}", "Invalid ownCloud url" : "Invalid ownCloud URL", "Share" : "Share", @@ -56,6 +57,7 @@ OC.L10N.register( "Download %s" : "Download %s", "Direct link" : "Direct link", "Federated Cloud Sharing" : "Federated Cloud Sharing", + "Open documentation" : "Open documentation", "Allow users on this server to send shares to other servers" : "Allow users on this server to send shares to other servers", "Allow users on this server to receive shares from other servers" : "Allow users on this server to receive shares from other servers" }, diff --git a/apps/files_sharing/l10n/en_GB.json b/apps/files_sharing/l10n/en_GB.json index 94bb78cfb66..85d6ac5a2f8 100644 --- a/apps/files_sharing/l10n/en_GB.json +++ b/apps/files_sharing/l10n/en_GB.json @@ -19,6 +19,7 @@ "Remote share password" : "Remote share password", "Cancel" : "Cancel", "Add remote share" : "Add remote share", + "You can upload into this folder" : "You can upload into this folder", "No ownCloud installation (7 or higher) found at {remote}" : "No ownCloud installation (7 or higher) found at {remote}", "Invalid ownCloud url" : "Invalid ownCloud URL", "Share" : "Share", @@ -54,6 +55,7 @@ "Download %s" : "Download %s", "Direct link" : "Direct link", "Federated Cloud Sharing" : "Federated Cloud Sharing", + "Open documentation" : "Open documentation", "Allow users on this server to send shares to other servers" : "Allow users on this server to send shares to other servers", "Allow users on this server to receive shares from other servers" : "Allow users on this server to receive shares from other servers" },"pluralForm" :"nplurals=2; plural=(n != 1);" diff --git a/apps/files_sharing/l10n/es.js b/apps/files_sharing/l10n/es.js index 4f9e5e7c823..c361a450343 100644 --- a/apps/files_sharing/l10n/es.js +++ b/apps/files_sharing/l10n/es.js @@ -21,6 +21,7 @@ OC.L10N.register( "Remote share password" : "Contraseña del compartido remoto", "Cancel" : "Cancelar", "Add remote share" : "Añadir recurso compartido remoto", + "You can upload into this folder" : "Usted puede cargar a este folder", "No ownCloud installation (7 or higher) found at {remote}" : "No se encontró una instalación de ownCloud (7 o mayor) en {remote}", "Invalid ownCloud url" : "URL de ownCloud inválida", "Share" : "Compartir", diff --git a/apps/files_sharing/l10n/es.json b/apps/files_sharing/l10n/es.json index 08f13f113c9..dfe9367fef1 100644 --- a/apps/files_sharing/l10n/es.json +++ b/apps/files_sharing/l10n/es.json @@ -19,6 +19,7 @@ "Remote share password" : "Contraseña del compartido remoto", "Cancel" : "Cancelar", "Add remote share" : "Añadir recurso compartido remoto", + "You can upload into this folder" : "Usted puede cargar a este folder", "No ownCloud installation (7 or higher) found at {remote}" : "No se encontró una instalación de ownCloud (7 o mayor) en {remote}", "Invalid ownCloud url" : "URL de ownCloud inválida", "Share" : "Compartir", diff --git a/apps/files_sharing/l10n/fi_FI.js b/apps/files_sharing/l10n/fi_FI.js index 951ca5338c3..7d9cc87dcba 100644 --- a/apps/files_sharing/l10n/fi_FI.js +++ b/apps/files_sharing/l10n/fi_FI.js @@ -21,6 +21,7 @@ OC.L10N.register( "Remote share password" : "Etäjaon salasana", "Cancel" : "Peru", "Add remote share" : "Lisää etäjako", + "You can upload into this folder" : "Voit lähettää tiedostoja tähän kansioon", "No ownCloud installation (7 or higher) found at {remote}" : "ownCloud-asennusta (versiota 7 tai uudempaa) ei löytynyt osoitteesta {remote}", "Invalid ownCloud url" : "Virheellinen ownCloud-osoite", "Share" : "Jaa", diff --git a/apps/files_sharing/l10n/fi_FI.json b/apps/files_sharing/l10n/fi_FI.json index f2ae2c47418..3c7f40bd76c 100644 --- a/apps/files_sharing/l10n/fi_FI.json +++ b/apps/files_sharing/l10n/fi_FI.json @@ -19,6 +19,7 @@ "Remote share password" : "Etäjaon salasana", "Cancel" : "Peru", "Add remote share" : "Lisää etäjako", + "You can upload into this folder" : "Voit lähettää tiedostoja tähän kansioon", "No ownCloud installation (7 or higher) found at {remote}" : "ownCloud-asennusta (versiota 7 tai uudempaa) ei löytynyt osoitteesta {remote}", "Invalid ownCloud url" : "Virheellinen ownCloud-osoite", "Share" : "Jaa", diff --git a/apps/files_sharing/l10n/fr.js b/apps/files_sharing/l10n/fr.js index 0ed5c63a209..6fd7bf4a9d9 100644 --- a/apps/files_sharing/l10n/fr.js +++ b/apps/files_sharing/l10n/fr.js @@ -21,13 +21,14 @@ OC.L10N.register( "Remote share password" : "Mot de passe du partage distant", "Cancel" : "Annuler", "Add remote share" : "Ajouter un partage distant", + "You can upload into this folder" : "Vous pouvez téléverser dans ce dossier", "No ownCloud installation (7 or higher) found at {remote}" : "Aucune installation ownCloud (7 ou supérieur) trouvée sur {remote}", "Invalid ownCloud url" : "URL ownCloud non valide", "Share" : "Partager", "Shared by" : "Partagé par", "A file or folder has been <strong>shared</strong>" : "Un fichier ou un répertoire a été <strong>partagé</strong>", "A file or folder was shared from <strong>another server</strong>" : "Un fichier ou un répertoire a été partagé depuis <strong>un autre serveur</strong>", - "A public shared file or folder was <strong>downloaded</strong>" : "Un fichier ou un répertoire partagé a été <strong>téléchargé</strong>", + "A public shared file or folder was <strong>downloaded</strong>" : "Un fichier ou un répertoire partagé publiquement a été <strong>téléchargé</strong>", "You received a new remote share from %s" : "Vous avez reçu un partage distant de %s", "%1$s accepted remote share %2$s" : "%1$s a accepté le partage distant %2$s", "%1$s declined remote share %2$s" : "%1$s a refusé le partage distant %2$s", diff --git a/apps/files_sharing/l10n/fr.json b/apps/files_sharing/l10n/fr.json index b997b89ae57..07629def1d3 100644 --- a/apps/files_sharing/l10n/fr.json +++ b/apps/files_sharing/l10n/fr.json @@ -19,13 +19,14 @@ "Remote share password" : "Mot de passe du partage distant", "Cancel" : "Annuler", "Add remote share" : "Ajouter un partage distant", + "You can upload into this folder" : "Vous pouvez téléverser dans ce dossier", "No ownCloud installation (7 or higher) found at {remote}" : "Aucune installation ownCloud (7 ou supérieur) trouvée sur {remote}", "Invalid ownCloud url" : "URL ownCloud non valide", "Share" : "Partager", "Shared by" : "Partagé par", "A file or folder has been <strong>shared</strong>" : "Un fichier ou un répertoire a été <strong>partagé</strong>", "A file or folder was shared from <strong>another server</strong>" : "Un fichier ou un répertoire a été partagé depuis <strong>un autre serveur</strong>", - "A public shared file or folder was <strong>downloaded</strong>" : "Un fichier ou un répertoire partagé a été <strong>téléchargé</strong>", + "A public shared file or folder was <strong>downloaded</strong>" : "Un fichier ou un répertoire partagé publiquement a été <strong>téléchargé</strong>", "You received a new remote share from %s" : "Vous avez reçu un partage distant de %s", "%1$s accepted remote share %2$s" : "%1$s a accepté le partage distant %2$s", "%1$s declined remote share %2$s" : "%1$s a refusé le partage distant %2$s", diff --git a/apps/files_sharing/l10n/gl.js b/apps/files_sharing/l10n/gl.js index 6198fd4365c..11cc0348f34 100644 --- a/apps/files_sharing/l10n/gl.js +++ b/apps/files_sharing/l10n/gl.js @@ -21,6 +21,7 @@ OC.L10N.register( "Remote share password" : "Contrasinal da compartición remota", "Cancel" : "Cancelar", "Add remote share" : "Engadir unha compartición remota", + "You can upload into this folder" : "Pode envialo a este cartafol", "No ownCloud installation (7 or higher) found at {remote}" : "Non se atopa unha instalación de ownCloud (7 ou superior) en {remote}", "Invalid ownCloud url" : "URL incorrecto do ownCloud", "Share" : "Compartir", diff --git a/apps/files_sharing/l10n/gl.json b/apps/files_sharing/l10n/gl.json index 6bb428cb372..01972ddee16 100644 --- a/apps/files_sharing/l10n/gl.json +++ b/apps/files_sharing/l10n/gl.json @@ -19,6 +19,7 @@ "Remote share password" : "Contrasinal da compartición remota", "Cancel" : "Cancelar", "Add remote share" : "Engadir unha compartición remota", + "You can upload into this folder" : "Pode envialo a este cartafol", "No ownCloud installation (7 or higher) found at {remote}" : "Non se atopa unha instalación de ownCloud (7 ou superior) en {remote}", "Invalid ownCloud url" : "URL incorrecto do ownCloud", "Share" : "Compartir", diff --git a/apps/files_sharing/l10n/it.js b/apps/files_sharing/l10n/it.js index 720902b8764..33cb2e81bcf 100644 --- a/apps/files_sharing/l10n/it.js +++ b/apps/files_sharing/l10n/it.js @@ -21,6 +21,7 @@ OC.L10N.register( "Remote share password" : "Password della condivisione remota", "Cancel" : "Annulla", "Add remote share" : "Aggiungi condivisione remota", + "You can upload into this folder" : "Puoi caricare in questa cartella", "No ownCloud installation (7 or higher) found at {remote}" : "Nessuna installazione di ownCloud (7 o superiore) trovata su {remote}", "Invalid ownCloud url" : "URL di ownCloud non valido", "Share" : "Condividi", diff --git a/apps/files_sharing/l10n/it.json b/apps/files_sharing/l10n/it.json index a2e73bd8949..a738a79154e 100644 --- a/apps/files_sharing/l10n/it.json +++ b/apps/files_sharing/l10n/it.json @@ -19,6 +19,7 @@ "Remote share password" : "Password della condivisione remota", "Cancel" : "Annulla", "Add remote share" : "Aggiungi condivisione remota", + "You can upload into this folder" : "Puoi caricare in questa cartella", "No ownCloud installation (7 or higher) found at {remote}" : "Nessuna installazione di ownCloud (7 o superiore) trovata su {remote}", "Invalid ownCloud url" : "URL di ownCloud non valido", "Share" : "Condividi", diff --git a/apps/files_sharing/l10n/nl.js b/apps/files_sharing/l10n/nl.js index 73e0ef6a802..5bebbcfdae0 100644 --- a/apps/files_sharing/l10n/nl.js +++ b/apps/files_sharing/l10n/nl.js @@ -21,6 +21,7 @@ OC.L10N.register( "Remote share password" : "Wachtwoord externe share", "Cancel" : "Annuleren", "Add remote share" : "Toevoegen externe share", + "You can upload into this folder" : "U kunt uploaden naar deze map", "No ownCloud installation (7 or higher) found at {remote}" : "Geen recente ownCloud installatie (7 of hoger) gevonden op {remote}", "Invalid ownCloud url" : "Ongeldige ownCloud url", "Share" : "Deel", diff --git a/apps/files_sharing/l10n/nl.json b/apps/files_sharing/l10n/nl.json index 30446fbb20b..e5d1d7c3a7f 100644 --- a/apps/files_sharing/l10n/nl.json +++ b/apps/files_sharing/l10n/nl.json @@ -19,6 +19,7 @@ "Remote share password" : "Wachtwoord externe share", "Cancel" : "Annuleren", "Add remote share" : "Toevoegen externe share", + "You can upload into this folder" : "U kunt uploaden naar deze map", "No ownCloud installation (7 or higher) found at {remote}" : "Geen recente ownCloud installatie (7 of hoger) gevonden op {remote}", "Invalid ownCloud url" : "Ongeldige ownCloud url", "Share" : "Deel", diff --git a/apps/files_sharing/l10n/pt_BR.js b/apps/files_sharing/l10n/pt_BR.js index ece7742d2ce..308cdc4a161 100644 --- a/apps/files_sharing/l10n/pt_BR.js +++ b/apps/files_sharing/l10n/pt_BR.js @@ -21,6 +21,7 @@ OC.L10N.register( "Remote share password" : "Senha do compartilhamento remoto", "Cancel" : "Cancelar", "Add remote share" : "Adicionar compartilhamento remoto", + "You can upload into this folder" : "Você não pode enviar arquivos para esta pasta", "No ownCloud installation (7 or higher) found at {remote}" : "Nenhuma instalação ownCloud (7 ou superior) foi encontrada em {remote}", "Invalid ownCloud url" : "Url invalida para ownCloud", "Share" : "Compartilhar", diff --git a/apps/files_sharing/l10n/pt_BR.json b/apps/files_sharing/l10n/pt_BR.json index b2c4db8007f..9941074430a 100644 --- a/apps/files_sharing/l10n/pt_BR.json +++ b/apps/files_sharing/l10n/pt_BR.json @@ -19,6 +19,7 @@ "Remote share password" : "Senha do compartilhamento remoto", "Cancel" : "Cancelar", "Add remote share" : "Adicionar compartilhamento remoto", + "You can upload into this folder" : "Você não pode enviar arquivos para esta pasta", "No ownCloud installation (7 or higher) found at {remote}" : "Nenhuma instalação ownCloud (7 ou superior) foi encontrada em {remote}", "Invalid ownCloud url" : "Url invalida para ownCloud", "Share" : "Compartilhar", diff --git a/apps/files_sharing/l10n/sr.js b/apps/files_sharing/l10n/sr.js index a71286a10c3..bbb29b8ff8e 100644 --- a/apps/files_sharing/l10n/sr.js +++ b/apps/files_sharing/l10n/sr.js @@ -21,8 +21,9 @@ OC.L10N.register( "Remote share password" : "Лозинка удаљеног дељења", "Cancel" : "Одустани", "Add remote share" : "Додај удаљено дељење", - "No ownCloud installation (7 or higher) found at {remote}" : "Нема ОунКлауд инсталације верзије 7 или више на {remote}", - "Invalid ownCloud url" : "Неисправан ОунКлауд УРЛ", + "You can upload into this folder" : "Можете да отпремате у ову фасциклу", + "No ownCloud installation (7 or higher) found at {remote}" : "Нема оунКлауд инсталације верзије 7 или више на {remote}", + "Invalid ownCloud url" : "Неисправан оунКлауд УРЛ", "Share" : "Дељење", "Shared by" : "Дели", "A file or folder has been <strong>shared</strong>" : "Фајл или фасцикла је <strong>дељен</strong>", @@ -51,7 +52,7 @@ OC.L10N.register( "the link expired" : "веза је истекла", "sharing is disabled" : "дељење је искључено", "For more info, please ask the person who sent this link." : "За више информација, питајте особу која вам је послала везу.", - "Add to your ownCloud" : "Додај у свој ОунКлауд", + "Add to your ownCloud" : "Додај у свој оунКлауд", "Download" : "Преузми", "Download %s" : "Преузми %s", "Direct link" : "Директна веза", diff --git a/apps/files_sharing/l10n/sr.json b/apps/files_sharing/l10n/sr.json index 711ceade23f..624449a5885 100644 --- a/apps/files_sharing/l10n/sr.json +++ b/apps/files_sharing/l10n/sr.json @@ -19,8 +19,9 @@ "Remote share password" : "Лозинка удаљеног дељења", "Cancel" : "Одустани", "Add remote share" : "Додај удаљено дељење", - "No ownCloud installation (7 or higher) found at {remote}" : "Нема ОунКлауд инсталације верзије 7 или више на {remote}", - "Invalid ownCloud url" : "Неисправан ОунКлауд УРЛ", + "You can upload into this folder" : "Можете да отпремате у ову фасциклу", + "No ownCloud installation (7 or higher) found at {remote}" : "Нема оунКлауд инсталације верзије 7 или више на {remote}", + "Invalid ownCloud url" : "Неисправан оунКлауд УРЛ", "Share" : "Дељење", "Shared by" : "Дели", "A file or folder has been <strong>shared</strong>" : "Фајл или фасцикла је <strong>дељен</strong>", @@ -49,7 +50,7 @@ "the link expired" : "веза је истекла", "sharing is disabled" : "дељење је искључено", "For more info, please ask the person who sent this link." : "За више информација, питајте особу која вам је послала везу.", - "Add to your ownCloud" : "Додај у свој ОунКлауд", + "Add to your ownCloud" : "Додај у свој оунКлауд", "Download" : "Преузми", "Download %s" : "Преузми %s", "Direct link" : "Директна веза", diff --git a/apps/files_sharing/lib/readonlycache.php b/apps/files_sharing/lib/readonlycache.php deleted file mode 100644 index ebef1634757..00000000000 --- a/apps/files_sharing/lib/readonlycache.php +++ /dev/null @@ -1,42 +0,0 @@ -<?php -/** - * @author Joas Schilling <nickvergessen@owncloud.com> - * @author Morris Jobke <hey@morrisjobke.de> - * @author Robin Appelman <icewind@owncloud.com> - * - * @copyright Copyright (c) 2015, ownCloud, Inc. - * @license AGPL-3.0 - * - * This code is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License, version 3, - * as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License, version 3, - * along with this program. If not, see <http://www.gnu.org/licenses/> - * - */ - -namespace OCA\Files_Sharing; - -use OC\Files\Cache\Cache; - -class ReadOnlyCache extends Cache { - public function get($path) { - $data = parent::get($path); - $data['permissions'] &= (\OCP\Constants::PERMISSION_READ | \OCP\Constants::PERMISSION_SHARE); - return $data; - } - - public function getFolderContents($path) { - $content = parent::getFolderContents($path); - foreach ($content as &$data) { - $data['permissions'] &= (\OCP\Constants::PERMISSION_READ | \OCP\Constants::PERMISSION_SHARE); - } - return $content; - } -} diff --git a/apps/files_sharing/lib/readonlywrapper.php b/apps/files_sharing/lib/readonlywrapper.php index 067000ff47c..a5d84f7f5a2 100644 --- a/apps/files_sharing/lib/readonlywrapper.php +++ b/apps/files_sharing/lib/readonlywrapper.php @@ -23,7 +23,9 @@ namespace OCA\Files_Sharing; +use OC\Files\Cache\Wrapper\CachePermissionsMask; use OC\Files\Storage\Wrapper\Wrapper; +use OCP\Constants; class ReadOnlyWrapper extends Wrapper { public function isUpdatable($path) { @@ -66,6 +68,7 @@ class ReadOnlyWrapper extends Wrapper { if (!$storage) { $storage = $this; } - return new ReadOnlyCache($storage); + $sourceCache = $this->storage->getCache($path, $storage); + return new CachePermissionsMask($sourceCache, Constants::PERMISSION_READ | Constants::PERMISSION_SHARE); } } diff --git a/apps/files_sharing/publicwebdav.php b/apps/files_sharing/publicwebdav.php index 3a961f5d757..3be464c64f0 100644 --- a/apps/files_sharing/publicwebdav.php +++ b/apps/files_sharing/publicwebdav.php @@ -56,7 +56,8 @@ $server->addPlugin(new \OC\Connector\Sabre\ExceptionLoggerPlugin('webdav', \OC:: // wait with registering these until auth is handled and the filesystem is setup $server->on('beforeMethod', function () use ($server, $objectTree, $authBackend) { $share = $authBackend->getShare(); - $owner = $share['uid_owner']; + $rootShare = \OCP\Share::resolveReShare($share); + $owner = $rootShare['uid_owner']; $isWritable = $share['permissions'] & (\OCP\Constants::PERMISSION_UPDATE | \OCP\Constants::PERMISSION_CREATE); $fileId = $share['file_source']; diff --git a/apps/files_trashbin/command/expire.php b/apps/files_trashbin/command/expire.php index f0526d42830..e617fa47c90 100644 --- a/apps/files_trashbin/command/expire.php +++ b/apps/files_trashbin/command/expire.php @@ -52,5 +52,6 @@ class Expire implements ICommand { \OC_Util::tearDownFS(); \OC_Util::setupFS($this->user); Trashbin::expire($this->trashBinSize, $this->user); + \OC_Util::tearDownFS(); } } diff --git a/apps/files_trashbin/lib/storage.php b/apps/files_trashbin/lib/storage.php index 61e0816fd24..418d7d2f1fd 100644 --- a/apps/files_trashbin/lib/storage.php +++ b/apps/files_trashbin/lib/storage.php @@ -84,7 +84,10 @@ class Storage extends Wrapper { * @param string $path */ public function unlink($path) { - if (self::$disableTrash || !\OC_App::isEnabled('files_trashbin')) { + if (self::$disableTrash + || !\OC_App::isEnabled('files_trashbin') + || (pathinfo($path, PATHINFO_EXTENSION) === 'part') + ) { return $this->storage->unlink($path); } $normalized = Filesystem::normalizePath($this->mountPoint . '/' . $path); diff --git a/apps/user_ldap/css/settings.css b/apps/user_ldap/css/settings.css index b351f9ae2af..8648246247d 100644 --- a/apps/user_ldap/css/settings.css +++ b/apps/user_ldap/css/settings.css @@ -66,7 +66,6 @@ width: 100%; margin-left: 0; margin-right: 0; - border: 0; } .tableCellInput { diff --git a/apps/user_ldap/l10n/cs_CZ.js b/apps/user_ldap/l10n/cs_CZ.js index 98c3312f665..3a07a48e1a5 100644 --- a/apps/user_ldap/l10n/cs_CZ.js +++ b/apps/user_ldap/l10n/cs_CZ.js @@ -30,7 +30,18 @@ OC.L10N.register( "Mappings cleared successfully!" : "Mapování úspěšně vyčištěno!", "Error while clearing the mappings." : "Chyba při čištění mapování.", "Saving failed. Please make sure the database is in Operation. Reload before continuing." : "Ukládání selhalo. Ujistěte se, že databáze funguje. Načtěte znovu, než budete pokračovat.", + "Switching the mode will enable automatic LDAP queries. Depending on your LDAP size they may take a while. Do you still want to switch the mode?" : "Přepnutí módu povolí automatické LDAP dotazy. V závislosti na velikosti vašeho LDAP může vyhledávání chvíli trvat. Opravdu si přejete přepnout mód?", + "Mode switch" : "Přepnutí módu", "Select attributes" : "Vyberte atributy", + "User not found. Please check your login attributes and username. Effective filter (to copy-and-paste for command line validation): <br/>" : "Uživatel nenalezen. Zkontrolujte prosím své přihlašovací údaje a jméno. Použitý filtr (pro zkopírování a ověření v příkazovém řádku): <br/>", + "User found and settings verified." : "Uživatel nalezen a nastavení ověřeno.", + "Settings verified, but one user found. Only the first will be able to login. Consider a more narrow filter." : "Nastavení ověřena, nalezen jeden uživatel. Pouze první se bude moci přihlásit. Zvažte nasazení užšího filtru.", + "An unspecified error occurred. Please check the settings and the log." : "Došlo k nespecifikované chybě. Zkontrolujte prosím nastavení a soubor logu.", + "The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "Filtr vyhledávání je neplatný, pravděpodobně z důvodu chybné syntax jako třeba neuzavřené závorky. Ověřte to.", + "A connection error to LDAP / AD occurred, please check host, port and credentials." : "Došlo k chybě připojení k LDAP / AD, zkontrolujte prosím host, port a přihlašovací údaje.", + "The %uid placeholder is missing. It will be replaced with the login name when querying LDAP / AD." : "Chybí zástupný znak %uid. Bude nahrazen přihlašovacím jménem při dotazování LDAP / AD.", + "Please provide a login name to test against" : "Zadejte prosím přihlašovací jméno pro otestování", + "The group box was disabled, because the LDAP / AD server does not support memberOf." : "Skupinové pole bylo vypnuto, protože LDAP / AD server nepodporuje memberOf.", "_%s group found_::_%s groups found_" : ["nalezena %s skupina","nalezeny %s skupiny","nalezeno %s skupin"], "_%s user found_::_%s users found_" : ["nalezen %s uživatel","nalezeni %s uživatelé","nalezeno %s uživatelů"], "Could not detect user display name attribute. Please specify it yourself in advanced ldap settings." : "Nelze detekovat atribut pro zobrazení jména uživatele. Upřesněte ho prosím sami v rozšířeném nastavení LDAP.", @@ -38,29 +49,50 @@ OC.L10N.register( "Invalid Host" : "Neplatný hostitel", "Server" : "Server", "Users" : "Uživatelé", + "Login Attributes" : "Přihlašovací atributy", "Groups" : "Skupiny", "Test Configuration" : "Vyzkoušet nastavení", "Help" : "Nápověda", "Groups meeting these criteria are available in %s:" : "Skupiny splňující tyto podmínky jsou k dispozici v %s:", + "Only these object classes:" : "Pouze tyto třídy objektů:", + "Only from these groups:" : "Pouze z těchto skupin:", + "Search groups" : "Prohledat skupiny", + "Available groups" : "Dostupné skupiny", + "Selected groups" : "Vybrané skupiny", + "Edit LDAP Query" : "Upravit LDAP požadavek", + "LDAP Filter:" : "LDAP filtr:", "The filter specifies which LDAP groups shall have access to the %s instance." : "Filtr určuje, kteří uživatelé LDAP mají mít přístup k instanci %s.", "Test Filter" : "Otestovat filtr", + "Verify settings and count groups" : "Ověřit nastavení a spočítat skupiny", + "When logging in, %s will find the user based on the following attributes:" : "Při přihlašování, %s bude hledat uživatele na základě následujících atributů:", + "LDAP / AD Username:" : "LDAP / AD uživatelské jméno:", + "Allows login against the LDAP / AD username, which is either uid or samaccountname and will be detected." : "Umožňuje přihlášení s LDAP / AD uživatelským jménem, které má rozpoznatelnou hodnotu pro uid nebo samaccountname.", + "LDAP / AD Email Address:" : "LDAP / AD emailová adresa:", + "Allows login against an email attribute. Mail and mailPrimaryAddress will be allowed." : "Umožňuje přihlášení s atributem emailu. Jsou povoleny Mail a mailPrimaryAddress.", "Other Attributes:" : "Další atributy:", "Defines the filter to apply, when login is attempted. %%uid replaces the username in the login action. Example: \"uid=%%uid\"" : "Určuje použitý filtr při pokusu o přihlášení. %%uid nahrazuje uživatelské jméno v činnosti přihlášení. Příklad: \"uid=%%uid\"", + "Test Loginname" : "Testovací přihlašovací jméno", + "Verify settings" : "Ověřit nastavení", "1. Server" : "1. Server", "%s. Server:" : "%s. Server:", "Host" : "Počítač", "You can omit the protocol, except you require SSL. Then start with ldaps://" : "Můžete vynechat protokol, vyjma pokud požadujete SSL. Tehdy začněte s ldaps://", "Port" : "Port", + "Detect Port" : "Detekovat port", "User DN" : "Uživatelské DN", "The DN of the client user with which the bind shall be done, e.g. uid=agent,dc=example,dc=com. For anonymous access, leave DN and Password empty." : "DN klientského uživatele, ke kterému tvoříte vazbu, např. uid=agent,dc=example,dc=com. Pro anonymní přístup ponechte DN a heslo prázdné.", "Password" : "Heslo", "For anonymous access, leave DN and Password empty." : "Pro anonymní přístup ponechte údaje DN and heslo prázdné.", "One Base DN per line" : "Jedna základní DN na řádku", "You can specify Base DN for users and groups in the Advanced tab" : "V rozšířeném nastavení můžete určit základní DN pro uživatele a skupiny", + "Detect Base DN" : "Detekovat Base DN", + "Test Base DN" : "Otestovat Base DN", "Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." : "Zabraňuje automatickým LDAP požadavkům. Výhodné pro objemná nastavení, ale vyžaduje znalosti o LDAP.", "Manually enter LDAP filters (recommended for large directories)" : "Ručně vložit LDAP filtry (doporučeno pro obsáhlé adresáře)", "Limit %s access to users meeting these criteria:" : "Omezit přístup %s uživatelům splňujícím tyto podmínky:", + "The most common object classes for users are organizationalPerson, person, user, and inetOrgPerson. If you are not sure which object class to select, please consult your directory admin." : "Nejčastější třídy objektů pro uživatele jsou organizationalPerson, person, user a inetOrgPerson. Pokud si nejste jisti které třídy objektů zvolit, obraťte se na svého adresářového správce.", "The filter specifies which LDAP users shall have access to the %s instance." : "Filtr určuje, kteří uživatelé LDAP mají mít přístup k instanci %s.", + "Verify settings and count users" : "Ověřit nastavení a spočítat uživatele", "Saving" : "Ukládá se", "Back" : "Zpět", "Continue" : "Pokračovat", diff --git a/apps/user_ldap/l10n/cs_CZ.json b/apps/user_ldap/l10n/cs_CZ.json index be8caeb0c08..38f91f97f9d 100644 --- a/apps/user_ldap/l10n/cs_CZ.json +++ b/apps/user_ldap/l10n/cs_CZ.json @@ -28,7 +28,18 @@ "Mappings cleared successfully!" : "Mapování úspěšně vyčištěno!", "Error while clearing the mappings." : "Chyba při čištění mapování.", "Saving failed. Please make sure the database is in Operation. Reload before continuing." : "Ukládání selhalo. Ujistěte se, že databáze funguje. Načtěte znovu, než budete pokračovat.", + "Switching the mode will enable automatic LDAP queries. Depending on your LDAP size they may take a while. Do you still want to switch the mode?" : "Přepnutí módu povolí automatické LDAP dotazy. V závislosti na velikosti vašeho LDAP může vyhledávání chvíli trvat. Opravdu si přejete přepnout mód?", + "Mode switch" : "Přepnutí módu", "Select attributes" : "Vyberte atributy", + "User not found. Please check your login attributes and username. Effective filter (to copy-and-paste for command line validation): <br/>" : "Uživatel nenalezen. Zkontrolujte prosím své přihlašovací údaje a jméno. Použitý filtr (pro zkopírování a ověření v příkazovém řádku): <br/>", + "User found and settings verified." : "Uživatel nalezen a nastavení ověřeno.", + "Settings verified, but one user found. Only the first will be able to login. Consider a more narrow filter." : "Nastavení ověřena, nalezen jeden uživatel. Pouze první se bude moci přihlásit. Zvažte nasazení užšího filtru.", + "An unspecified error occurred. Please check the settings and the log." : "Došlo k nespecifikované chybě. Zkontrolujte prosím nastavení a soubor logu.", + "The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "Filtr vyhledávání je neplatný, pravděpodobně z důvodu chybné syntax jako třeba neuzavřené závorky. Ověřte to.", + "A connection error to LDAP / AD occurred, please check host, port and credentials." : "Došlo k chybě připojení k LDAP / AD, zkontrolujte prosím host, port a přihlašovací údaje.", + "The %uid placeholder is missing. It will be replaced with the login name when querying LDAP / AD." : "Chybí zástupný znak %uid. Bude nahrazen přihlašovacím jménem při dotazování LDAP / AD.", + "Please provide a login name to test against" : "Zadejte prosím přihlašovací jméno pro otestování", + "The group box was disabled, because the LDAP / AD server does not support memberOf." : "Skupinové pole bylo vypnuto, protože LDAP / AD server nepodporuje memberOf.", "_%s group found_::_%s groups found_" : ["nalezena %s skupina","nalezeny %s skupiny","nalezeno %s skupin"], "_%s user found_::_%s users found_" : ["nalezen %s uživatel","nalezeni %s uživatelé","nalezeno %s uživatelů"], "Could not detect user display name attribute. Please specify it yourself in advanced ldap settings." : "Nelze detekovat atribut pro zobrazení jména uživatele. Upřesněte ho prosím sami v rozšířeném nastavení LDAP.", @@ -36,29 +47,50 @@ "Invalid Host" : "Neplatný hostitel", "Server" : "Server", "Users" : "Uživatelé", + "Login Attributes" : "Přihlašovací atributy", "Groups" : "Skupiny", "Test Configuration" : "Vyzkoušet nastavení", "Help" : "Nápověda", "Groups meeting these criteria are available in %s:" : "Skupiny splňující tyto podmínky jsou k dispozici v %s:", + "Only these object classes:" : "Pouze tyto třídy objektů:", + "Only from these groups:" : "Pouze z těchto skupin:", + "Search groups" : "Prohledat skupiny", + "Available groups" : "Dostupné skupiny", + "Selected groups" : "Vybrané skupiny", + "Edit LDAP Query" : "Upravit LDAP požadavek", + "LDAP Filter:" : "LDAP filtr:", "The filter specifies which LDAP groups shall have access to the %s instance." : "Filtr určuje, kteří uživatelé LDAP mají mít přístup k instanci %s.", "Test Filter" : "Otestovat filtr", + "Verify settings and count groups" : "Ověřit nastavení a spočítat skupiny", + "When logging in, %s will find the user based on the following attributes:" : "Při přihlašování, %s bude hledat uživatele na základě následujících atributů:", + "LDAP / AD Username:" : "LDAP / AD uživatelské jméno:", + "Allows login against the LDAP / AD username, which is either uid or samaccountname and will be detected." : "Umožňuje přihlášení s LDAP / AD uživatelským jménem, které má rozpoznatelnou hodnotu pro uid nebo samaccountname.", + "LDAP / AD Email Address:" : "LDAP / AD emailová adresa:", + "Allows login against an email attribute. Mail and mailPrimaryAddress will be allowed." : "Umožňuje přihlášení s atributem emailu. Jsou povoleny Mail a mailPrimaryAddress.", "Other Attributes:" : "Další atributy:", "Defines the filter to apply, when login is attempted. %%uid replaces the username in the login action. Example: \"uid=%%uid\"" : "Určuje použitý filtr při pokusu o přihlášení. %%uid nahrazuje uživatelské jméno v činnosti přihlášení. Příklad: \"uid=%%uid\"", + "Test Loginname" : "Testovací přihlašovací jméno", + "Verify settings" : "Ověřit nastavení", "1. Server" : "1. Server", "%s. Server:" : "%s. Server:", "Host" : "Počítač", "You can omit the protocol, except you require SSL. Then start with ldaps://" : "Můžete vynechat protokol, vyjma pokud požadujete SSL. Tehdy začněte s ldaps://", "Port" : "Port", + "Detect Port" : "Detekovat port", "User DN" : "Uživatelské DN", "The DN of the client user with which the bind shall be done, e.g. uid=agent,dc=example,dc=com. For anonymous access, leave DN and Password empty." : "DN klientského uživatele, ke kterému tvoříte vazbu, např. uid=agent,dc=example,dc=com. Pro anonymní přístup ponechte DN a heslo prázdné.", "Password" : "Heslo", "For anonymous access, leave DN and Password empty." : "Pro anonymní přístup ponechte údaje DN and heslo prázdné.", "One Base DN per line" : "Jedna základní DN na řádku", "You can specify Base DN for users and groups in the Advanced tab" : "V rozšířeném nastavení můžete určit základní DN pro uživatele a skupiny", + "Detect Base DN" : "Detekovat Base DN", + "Test Base DN" : "Otestovat Base DN", "Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." : "Zabraňuje automatickým LDAP požadavkům. Výhodné pro objemná nastavení, ale vyžaduje znalosti o LDAP.", "Manually enter LDAP filters (recommended for large directories)" : "Ručně vložit LDAP filtry (doporučeno pro obsáhlé adresáře)", "Limit %s access to users meeting these criteria:" : "Omezit přístup %s uživatelům splňujícím tyto podmínky:", + "The most common object classes for users are organizationalPerson, person, user, and inetOrgPerson. If you are not sure which object class to select, please consult your directory admin." : "Nejčastější třídy objektů pro uživatele jsou organizationalPerson, person, user a inetOrgPerson. Pokud si nejste jisti které třídy objektů zvolit, obraťte se na svého adresářového správce.", "The filter specifies which LDAP users shall have access to the %s instance." : "Filtr určuje, kteří uživatelé LDAP mají mít přístup k instanci %s.", + "Verify settings and count users" : "Ověřit nastavení a spočítat uživatele", "Saving" : "Ukládá se", "Back" : "Zpět", "Continue" : "Pokračovat", diff --git a/apps/user_ldap/l10n/en_GB.js b/apps/user_ldap/l10n/en_GB.js index 4cfbae15ced..9cf7824c8ac 100644 --- a/apps/user_ldap/l10n/en_GB.js +++ b/apps/user_ldap/l10n/en_GB.js @@ -10,15 +10,38 @@ OC.L10N.register( "No configuration specified" : "No configuration specified", "No data specified" : "No data specified", " Could not set configuration %s" : " Could not set configuration %s", + "Action does not exist" : "Action does not exist", "Configuration incorrect" : "Configuration incorrect", "Configuration incomplete" : "Configuration incomplete", "Configuration OK" : "Configuration OK", "Select groups" : "Select groups", "Select object classes" : "Select object classes", + "Please check the credentials, they seem to be wrong." : "Please check the credentials, they seem to be wrong.", + "Please specify the port, it could not be auto-detected." : "Please specify the port, it could not be auto-detected.", + "Base DN could not be auto-detected, please revise credentials, host and port." : "Base DN could not be auto-detected, please revise credentials, host and port.", + "Could not detect Base DN, please enter it manually." : "Could not detect Base DN, please enter it manually.", "{nthServer}. Server" : "{nthServer}. Server", + "No object found in the given Base DN. Please revise." : "No object found in the given Base DN. Please revise.", + "More then 1.000 directory entries available." : "More than 1,000 directory entries available.", + " entries available within the provided Base DN" : " entries available within the provided Base DN", + "An error occurred. Please check the Base DN, as well as connection settings and credentials." : "An error occurred. Please check the Base DN, as well as connection settings and credentials.", "Do you really want to delete the current Server Configuration?" : "Do you really want to delete the current Server Configuration?", "Confirm Deletion" : "Confirm Deletion", + "Mappings cleared successfully!" : "Mappings cleared successfully!", + "Error while clearing the mappings." : "Error whilst clearing the mappings.", + "Saving failed. Please make sure the database is in Operation. Reload before continuing." : "Saving failed. Please make sure the database is in operation. Reload before continuing.", + "Switching the mode will enable automatic LDAP queries. Depending on your LDAP size they may take a while. Do you still want to switch the mode?" : "Switching the mode will enable automatic LDAP queries. Depending on your LDAP size they may take a while. Do you still want to switch the mode?", + "Mode switch" : "Mode switch", "Select attributes" : "Select attributes", + "User not found. Please check your login attributes and username. Effective filter (to copy-and-paste for command line validation): <br/>" : "User not found. Please check your login attributes and username. Effective filter (to copy-and-paste for command line validation): <br/>", + "User found and settings verified." : "User found and settings verified.", + "Settings verified, but one user found. Only the first will be able to login. Consider a more narrow filter." : "Settings verified, but one user found. Only the first will be able to login. Consider a more narrow filter.", + "An unspecified error occurred. Please check the settings and the log." : "An unspecified error occurred. Please check the settings and the log.", + "The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "The search filter is invalid, probably due to syntax issues like an uneven number of opened and closed brackets. Please revise.", + "A connection error to LDAP / AD occurred, please check host, port and credentials." : "A connection error to LDAP / AD occurred, please check host, port and credentials.", + "The %uid placeholder is missing. It will be replaced with the login name when querying LDAP / AD." : "The %uid placeholder is missing. It will be replaced with the login name when querying LDAP / AD.", + "Please provide a login name to test against" : "Please provide a login name to test against", + "The group box was disabled, because the LDAP / AD server does not support memberOf." : "The group box was disabled, because the LDAP / AD server does not support memberOf.", "_%s group found_::_%s groups found_" : ["%s group found","%s groups found"], "_%s user found_::_%s users found_" : ["%s user found","%s users found"], "Could not detect user display name attribute. Please specify it yourself in advanced ldap settings." : "Could not detect user display name attribute. Please specify it yourself in advanced ldap settings.", @@ -26,29 +49,50 @@ OC.L10N.register( "Invalid Host" : "Invalid Host", "Server" : "Server", "Users" : "Users", + "Login Attributes" : "Login Attributes", "Groups" : "Groups", "Test Configuration" : "Test Configuration", "Help" : "Help", "Groups meeting these criteria are available in %s:" : "Groups meeting these criteria are available in %s:", + "Only these object classes:" : "Only these object classes:", + "Only from these groups:" : "Only from these groups:", + "Search groups" : "Search groups", + "Available groups" : "Available groups", + "Selected groups" : "Selected groups", + "Edit LDAP Query" : "Edit LDAP Query", + "LDAP Filter:" : "LDAP Filter:", "The filter specifies which LDAP groups shall have access to the %s instance." : "The filter specifies which LDAP groups shall have access to the %s instance.", "Test Filter" : "Test Filter", + "Verify settings and count groups" : "Verify settings and count groups", + "When logging in, %s will find the user based on the following attributes:" : "When logging in, %s will find the user based on the following attributes:", + "LDAP / AD Username:" : "LDAP / AD Username:", + "Allows login against the LDAP / AD username, which is either uid or samaccountname and will be detected." : "Allows login against the LDAP / AD username, which is either uid or samaccountname and will be detected.", + "LDAP / AD Email Address:" : "LDAP / AD Email Address:", + "Allows login against an email attribute. Mail and mailPrimaryAddress will be allowed." : "Allows login against an email attribute. Mail and mailPrimaryAddress will be allowed.", "Other Attributes:" : "Other Attributes:", "Defines the filter to apply, when login is attempted. %%uid replaces the username in the login action. Example: \"uid=%%uid\"" : "Defines the filter to apply, when login is attempted. %%uid replaces the username in the login action. Example: \"uid=%%uid\"", + "Test Loginname" : "Test Loginname", + "Verify settings" : "Verify settings", "1. Server" : "1. Server", "%s. Server:" : "%s. Server:", "Host" : "Host", "You can omit the protocol, except you require SSL. Then start with ldaps://" : "You can omit the protocol, except you require SSL. Then start with ldaps://", "Port" : "Port", + "Detect Port" : "Detect Port", "User DN" : "User DN", "The DN of the client user with which the bind shall be done, e.g. uid=agent,dc=example,dc=com. For anonymous access, leave DN and Password empty." : "The DN of the client user with which the bind shall be done, e.g. uid=agent,dc=example,dc=com. For anonymous access, leave DN and Password empty.", "Password" : "Password", "For anonymous access, leave DN and Password empty." : "For anonymous access, leave DN and Password empty.", "One Base DN per line" : "One Base DN per line", "You can specify Base DN for users and groups in the Advanced tab" : "You can specify Base DN for users and groups in the Advanced tab", + "Detect Base DN" : "Detect Base DN", + "Test Base DN" : "Test Base DN", "Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." : "Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge.", "Manually enter LDAP filters (recommended for large directories)" : "Manually enter LDAP filters (recommended for large directories)", "Limit %s access to users meeting these criteria:" : "Limit %s access to users meeting these criteria:", + "The most common object classes for users are organizationalPerson, person, user, and inetOrgPerson. If you are not sure which object class to select, please consult your directory admin." : "The most common object classes for users are organizationalPerson, person, user, and inetOrgPerson. If you are not sure which object class to select, please consult your directory admin.", "The filter specifies which LDAP users shall have access to the %s instance." : "The filter specifies which LDAP users shall have access to the %s instance.", + "Verify settings and count users" : "Verify settings and count users", "Saving" : "Saving", "Back" : "Back", "Continue" : "Continue", diff --git a/apps/user_ldap/l10n/en_GB.json b/apps/user_ldap/l10n/en_GB.json index 5a352c0ffa6..f5a46aa6b51 100644 --- a/apps/user_ldap/l10n/en_GB.json +++ b/apps/user_ldap/l10n/en_GB.json @@ -8,15 +8,38 @@ "No configuration specified" : "No configuration specified", "No data specified" : "No data specified", " Could not set configuration %s" : " Could not set configuration %s", + "Action does not exist" : "Action does not exist", "Configuration incorrect" : "Configuration incorrect", "Configuration incomplete" : "Configuration incomplete", "Configuration OK" : "Configuration OK", "Select groups" : "Select groups", "Select object classes" : "Select object classes", + "Please check the credentials, they seem to be wrong." : "Please check the credentials, they seem to be wrong.", + "Please specify the port, it could not be auto-detected." : "Please specify the port, it could not be auto-detected.", + "Base DN could not be auto-detected, please revise credentials, host and port." : "Base DN could not be auto-detected, please revise credentials, host and port.", + "Could not detect Base DN, please enter it manually." : "Could not detect Base DN, please enter it manually.", "{nthServer}. Server" : "{nthServer}. Server", + "No object found in the given Base DN. Please revise." : "No object found in the given Base DN. Please revise.", + "More then 1.000 directory entries available." : "More than 1,000 directory entries available.", + " entries available within the provided Base DN" : " entries available within the provided Base DN", + "An error occurred. Please check the Base DN, as well as connection settings and credentials." : "An error occurred. Please check the Base DN, as well as connection settings and credentials.", "Do you really want to delete the current Server Configuration?" : "Do you really want to delete the current Server Configuration?", "Confirm Deletion" : "Confirm Deletion", + "Mappings cleared successfully!" : "Mappings cleared successfully!", + "Error while clearing the mappings." : "Error whilst clearing the mappings.", + "Saving failed. Please make sure the database is in Operation. Reload before continuing." : "Saving failed. Please make sure the database is in operation. Reload before continuing.", + "Switching the mode will enable automatic LDAP queries. Depending on your LDAP size they may take a while. Do you still want to switch the mode?" : "Switching the mode will enable automatic LDAP queries. Depending on your LDAP size they may take a while. Do you still want to switch the mode?", + "Mode switch" : "Mode switch", "Select attributes" : "Select attributes", + "User not found. Please check your login attributes and username. Effective filter (to copy-and-paste for command line validation): <br/>" : "User not found. Please check your login attributes and username. Effective filter (to copy-and-paste for command line validation): <br/>", + "User found and settings verified." : "User found and settings verified.", + "Settings verified, but one user found. Only the first will be able to login. Consider a more narrow filter." : "Settings verified, but one user found. Only the first will be able to login. Consider a more narrow filter.", + "An unspecified error occurred. Please check the settings and the log." : "An unspecified error occurred. Please check the settings and the log.", + "The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "The search filter is invalid, probably due to syntax issues like an uneven number of opened and closed brackets. Please revise.", + "A connection error to LDAP / AD occurred, please check host, port and credentials." : "A connection error to LDAP / AD occurred, please check host, port and credentials.", + "The %uid placeholder is missing. It will be replaced with the login name when querying LDAP / AD." : "The %uid placeholder is missing. It will be replaced with the login name when querying LDAP / AD.", + "Please provide a login name to test against" : "Please provide a login name to test against", + "The group box was disabled, because the LDAP / AD server does not support memberOf." : "The group box was disabled, because the LDAP / AD server does not support memberOf.", "_%s group found_::_%s groups found_" : ["%s group found","%s groups found"], "_%s user found_::_%s users found_" : ["%s user found","%s users found"], "Could not detect user display name attribute. Please specify it yourself in advanced ldap settings." : "Could not detect user display name attribute. Please specify it yourself in advanced ldap settings.", @@ -24,29 +47,50 @@ "Invalid Host" : "Invalid Host", "Server" : "Server", "Users" : "Users", + "Login Attributes" : "Login Attributes", "Groups" : "Groups", "Test Configuration" : "Test Configuration", "Help" : "Help", "Groups meeting these criteria are available in %s:" : "Groups meeting these criteria are available in %s:", + "Only these object classes:" : "Only these object classes:", + "Only from these groups:" : "Only from these groups:", + "Search groups" : "Search groups", + "Available groups" : "Available groups", + "Selected groups" : "Selected groups", + "Edit LDAP Query" : "Edit LDAP Query", + "LDAP Filter:" : "LDAP Filter:", "The filter specifies which LDAP groups shall have access to the %s instance." : "The filter specifies which LDAP groups shall have access to the %s instance.", "Test Filter" : "Test Filter", + "Verify settings and count groups" : "Verify settings and count groups", + "When logging in, %s will find the user based on the following attributes:" : "When logging in, %s will find the user based on the following attributes:", + "LDAP / AD Username:" : "LDAP / AD Username:", + "Allows login against the LDAP / AD username, which is either uid or samaccountname and will be detected." : "Allows login against the LDAP / AD username, which is either uid or samaccountname and will be detected.", + "LDAP / AD Email Address:" : "LDAP / AD Email Address:", + "Allows login against an email attribute. Mail and mailPrimaryAddress will be allowed." : "Allows login against an email attribute. Mail and mailPrimaryAddress will be allowed.", "Other Attributes:" : "Other Attributes:", "Defines the filter to apply, when login is attempted. %%uid replaces the username in the login action. Example: \"uid=%%uid\"" : "Defines the filter to apply, when login is attempted. %%uid replaces the username in the login action. Example: \"uid=%%uid\"", + "Test Loginname" : "Test Loginname", + "Verify settings" : "Verify settings", "1. Server" : "1. Server", "%s. Server:" : "%s. Server:", "Host" : "Host", "You can omit the protocol, except you require SSL. Then start with ldaps://" : "You can omit the protocol, except you require SSL. Then start with ldaps://", "Port" : "Port", + "Detect Port" : "Detect Port", "User DN" : "User DN", "The DN of the client user with which the bind shall be done, e.g. uid=agent,dc=example,dc=com. For anonymous access, leave DN and Password empty." : "The DN of the client user with which the bind shall be done, e.g. uid=agent,dc=example,dc=com. For anonymous access, leave DN and Password empty.", "Password" : "Password", "For anonymous access, leave DN and Password empty." : "For anonymous access, leave DN and Password empty.", "One Base DN per line" : "One Base DN per line", "You can specify Base DN for users and groups in the Advanced tab" : "You can specify Base DN for users and groups in the Advanced tab", + "Detect Base DN" : "Detect Base DN", + "Test Base DN" : "Test Base DN", "Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." : "Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge.", "Manually enter LDAP filters (recommended for large directories)" : "Manually enter LDAP filters (recommended for large directories)", "Limit %s access to users meeting these criteria:" : "Limit %s access to users meeting these criteria:", + "The most common object classes for users are organizationalPerson, person, user, and inetOrgPerson. If you are not sure which object class to select, please consult your directory admin." : "The most common object classes for users are organizationalPerson, person, user, and inetOrgPerson. If you are not sure which object class to select, please consult your directory admin.", "The filter specifies which LDAP users shall have access to the %s instance." : "The filter specifies which LDAP users shall have access to the %s instance.", + "Verify settings and count users" : "Verify settings and count users", "Saving" : "Saving", "Back" : "Back", "Continue" : "Continue", diff --git a/apps/user_ldap/l10n/it.js b/apps/user_ldap/l10n/it.js index 6b381f72e76..7a1833f0e2e 100644 --- a/apps/user_ldap/l10n/it.js +++ b/apps/user_ldap/l10n/it.js @@ -27,6 +27,8 @@ OC.L10N.register( "An error occurred. Please check the Base DN, as well as connection settings and credentials." : "Si è verificato un errore. Controlla il DN base, così come le impostazioni di connessione e le credenziali.", "Do you really want to delete the current Server Configuration?" : "Vuoi davvero eliminare la configurazione attuale del server?", "Confirm Deletion" : "Conferma l'eliminazione", + "Mappings cleared successfully!" : "Associazioni cancellate correttamente!", + "Error while clearing the mappings." : "Errore durante la cancellazione delle associazioni.", "Saving failed. Please make sure the database is in Operation. Reload before continuing." : "Salvataggio non riuscito. Assicurati che il database sia operativo. Ricarica prima di continuare.", "Switching the mode will enable automatic LDAP queries. Depending on your LDAP size they may take a while. Do you still want to switch the mode?" : "Il cambio di modalità abiliterà le query LDAP automatiche. In base alla dimensione di LDAP, potrebbero richiedere del tempo. Vuoi ancora cambiare modalità?", "Mode switch" : "Cambio modalità", diff --git a/apps/user_ldap/l10n/it.json b/apps/user_ldap/l10n/it.json index 534c60a50a8..1e12daa1c28 100644 --- a/apps/user_ldap/l10n/it.json +++ b/apps/user_ldap/l10n/it.json @@ -25,6 +25,8 @@ "An error occurred. Please check the Base DN, as well as connection settings and credentials." : "Si è verificato un errore. Controlla il DN base, così come le impostazioni di connessione e le credenziali.", "Do you really want to delete the current Server Configuration?" : "Vuoi davvero eliminare la configurazione attuale del server?", "Confirm Deletion" : "Conferma l'eliminazione", + "Mappings cleared successfully!" : "Associazioni cancellate correttamente!", + "Error while clearing the mappings." : "Errore durante la cancellazione delle associazioni.", "Saving failed. Please make sure the database is in Operation. Reload before continuing." : "Salvataggio non riuscito. Assicurati che il database sia operativo. Ricarica prima di continuare.", "Switching the mode will enable automatic LDAP queries. Depending on your LDAP size they may take a while. Do you still want to switch the mode?" : "Il cambio di modalità abiliterà le query LDAP automatiche. In base alla dimensione di LDAP, potrebbero richiedere del tempo. Vuoi ancora cambiare modalità?", "Mode switch" : "Cambio modalità", diff --git a/apps/user_ldap/l10n/nl.js b/apps/user_ldap/l10n/nl.js index 43cf25d010a..32314097c49 100644 --- a/apps/user_ldap/l10n/nl.js +++ b/apps/user_ldap/l10n/nl.js @@ -35,6 +35,13 @@ OC.L10N.register( "Select attributes" : "Selecteer attributen", "User not found. Please check your login attributes and username. Effective filter (to copy-and-paste for command line validation): <br/>" : "Gebruiker niet gevonden. Verifieer de inloggegevens en gebruikersnaam. Effectief filter (kopiëren en plakken voor commandoregel validatie): <br/>", "User found and settings verified." : "Gebruiker gevonden en instellingen geverifieerd.", + "Settings verified, but one user found. Only the first will be able to login. Consider a more narrow filter." : "Instellingen geverifieerd, slechts één gebruiker gevonden. Alleen de eerste kan inloggen. Overweeg een krapper filter.", + "An unspecified error occurred. Please check the settings and the log." : "Er trad een ongedefinieerde fout op. Controleer de instellingen en de logging.", + "The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "Het zoekfilter is ongeldig, waarschijnlijk door syntax problemen zoals een ongelijk aantal open- en sluithaakjes. Graag aanpassen.", + "A connection error to LDAP / AD occurred, please check host, port and credentials." : "Er trad een verbindingsfout naar LDAP / AD op, verifieer servernaam, poort en inloggegevens.", + "The %uid placeholder is missing. It will be replaced with the login name when querying LDAP / AD." : "De %uid opvultekst ontbreekt. Die wordt vervangen door de inlognaam bij het bevragen van LDAP / AD.", + "Please provide a login name to test against" : "Geef een inlognaam op om opnieuw tegen te testen", + "The group box was disabled, because the LDAP / AD server does not support memberOf." : "De groepsbox was uitgeschakeld omdat de LDAP / AD server het attribuut memberOf niet ondersteunt.", "_%s group found_::_%s groups found_" : ["%s groep gevonden","%s groepen gevonden"], "_%s user found_::_%s users found_" : ["%s gebruiker gevonden","%s gebruikers gevonden"], "Could not detect user display name attribute. Please specify it yourself in advanced ldap settings." : "Kon het weergavenaam attribuut van de gebruiker niet vinden. Geef het zelf op in de geavanceerde ldap instellingen.", @@ -56,8 +63,12 @@ OC.L10N.register( "LDAP Filter:" : "LDAP Filter:", "The filter specifies which LDAP groups shall have access to the %s instance." : "Dit filter geeft aan welke LDAP groepen toegang hebben tot %s.", "Test Filter" : "Testfilter", + "Verify settings and count groups" : "Verifiëren instellingen en tel groepen", + "When logging in, %s will find the user based on the following attributes:" : "Bij inloggen vindt %s de gebruiker gebaseerd op de volgende attributen:", "LDAP / AD Username:" : "LDAP / AD gebruikersnaam:", + "Allows login against the LDAP / AD username, which is either uid or samaccountname and will be detected." : "Maakt inloggen tegen de LDAP / AD gebruikersnaam mogelijk, ofwel uid of samaccountname en wordt gedetecteerd.", "LDAP / AD Email Address:" : "LDAP / AD e-mailadres:", + "Allows login against an email attribute. Mail and mailPrimaryAddress will be allowed." : "Maak inloggen tegen een e-mailattribuut mogelijk. E-mail en mailPrimaryAddress zijn mogelijk.", "Other Attributes:" : "Overige attributen:", "Defines the filter to apply, when login is attempted. %%uid replaces the username in the login action. Example: \"uid=%%uid\"" : "Definiëert het toe te passen filter als er geprobeerd wordt in te loggen. %%uid vervangt de gebruikersnaam bij het inloggen. Bijvoorbeeld: \"uid=%%uid\"", "Test Loginname" : "Test inlognaam", @@ -79,6 +90,7 @@ OC.L10N.register( "Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." : "Voorkom automatische LDAP opvragingen. Weliswaar beter voor grote installaties, maar vergt LDAP kennis.", "Manually enter LDAP filters (recommended for large directories)" : "Handmatig invoeren LDAP filters (aanbevolen voor grote directories)", "Limit %s access to users meeting these criteria:" : "Beperk %s toegang tot gebruikers die voldoen aan deze criteria:", + "The most common object classes for users are organizationalPerson, person, user, and inetOrgPerson. If you are not sure which object class to select, please consult your directory admin." : "De meest gebruikeliujke objectklassen voor gebruikers zijn organizationalPerson, persoon, gebruiker, en inetOrgPerson. Als u niet zeker weet welke objectklasse moet worden geselecteerd, raadpleeg dan uw directorybeheerder.", "The filter specifies which LDAP users shall have access to the %s instance." : "Dit filter geeft aan welke LDAP gebruikers toegang hebben tot %s.", "Verify settings and count users" : "Verifiëren instellingen en tellen gebruikers", "Saving" : "Opslaan", diff --git a/apps/user_ldap/l10n/nl.json b/apps/user_ldap/l10n/nl.json index d18c303cf04..00063196346 100644 --- a/apps/user_ldap/l10n/nl.json +++ b/apps/user_ldap/l10n/nl.json @@ -33,6 +33,13 @@ "Select attributes" : "Selecteer attributen", "User not found. Please check your login attributes and username. Effective filter (to copy-and-paste for command line validation): <br/>" : "Gebruiker niet gevonden. Verifieer de inloggegevens en gebruikersnaam. Effectief filter (kopiëren en plakken voor commandoregel validatie): <br/>", "User found and settings verified." : "Gebruiker gevonden en instellingen geverifieerd.", + "Settings verified, but one user found. Only the first will be able to login. Consider a more narrow filter." : "Instellingen geverifieerd, slechts één gebruiker gevonden. Alleen de eerste kan inloggen. Overweeg een krapper filter.", + "An unspecified error occurred. Please check the settings and the log." : "Er trad een ongedefinieerde fout op. Controleer de instellingen en de logging.", + "The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "Het zoekfilter is ongeldig, waarschijnlijk door syntax problemen zoals een ongelijk aantal open- en sluithaakjes. Graag aanpassen.", + "A connection error to LDAP / AD occurred, please check host, port and credentials." : "Er trad een verbindingsfout naar LDAP / AD op, verifieer servernaam, poort en inloggegevens.", + "The %uid placeholder is missing. It will be replaced with the login name when querying LDAP / AD." : "De %uid opvultekst ontbreekt. Die wordt vervangen door de inlognaam bij het bevragen van LDAP / AD.", + "Please provide a login name to test against" : "Geef een inlognaam op om opnieuw tegen te testen", + "The group box was disabled, because the LDAP / AD server does not support memberOf." : "De groepsbox was uitgeschakeld omdat de LDAP / AD server het attribuut memberOf niet ondersteunt.", "_%s group found_::_%s groups found_" : ["%s groep gevonden","%s groepen gevonden"], "_%s user found_::_%s users found_" : ["%s gebruiker gevonden","%s gebruikers gevonden"], "Could not detect user display name attribute. Please specify it yourself in advanced ldap settings." : "Kon het weergavenaam attribuut van de gebruiker niet vinden. Geef het zelf op in de geavanceerde ldap instellingen.", @@ -54,8 +61,12 @@ "LDAP Filter:" : "LDAP Filter:", "The filter specifies which LDAP groups shall have access to the %s instance." : "Dit filter geeft aan welke LDAP groepen toegang hebben tot %s.", "Test Filter" : "Testfilter", + "Verify settings and count groups" : "Verifiëren instellingen en tel groepen", + "When logging in, %s will find the user based on the following attributes:" : "Bij inloggen vindt %s de gebruiker gebaseerd op de volgende attributen:", "LDAP / AD Username:" : "LDAP / AD gebruikersnaam:", + "Allows login against the LDAP / AD username, which is either uid or samaccountname and will be detected." : "Maakt inloggen tegen de LDAP / AD gebruikersnaam mogelijk, ofwel uid of samaccountname en wordt gedetecteerd.", "LDAP / AD Email Address:" : "LDAP / AD e-mailadres:", + "Allows login against an email attribute. Mail and mailPrimaryAddress will be allowed." : "Maak inloggen tegen een e-mailattribuut mogelijk. E-mail en mailPrimaryAddress zijn mogelijk.", "Other Attributes:" : "Overige attributen:", "Defines the filter to apply, when login is attempted. %%uid replaces the username in the login action. Example: \"uid=%%uid\"" : "Definiëert het toe te passen filter als er geprobeerd wordt in te loggen. %%uid vervangt de gebruikersnaam bij het inloggen. Bijvoorbeeld: \"uid=%%uid\"", "Test Loginname" : "Test inlognaam", @@ -77,6 +88,7 @@ "Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." : "Voorkom automatische LDAP opvragingen. Weliswaar beter voor grote installaties, maar vergt LDAP kennis.", "Manually enter LDAP filters (recommended for large directories)" : "Handmatig invoeren LDAP filters (aanbevolen voor grote directories)", "Limit %s access to users meeting these criteria:" : "Beperk %s toegang tot gebruikers die voldoen aan deze criteria:", + "The most common object classes for users are organizationalPerson, person, user, and inetOrgPerson. If you are not sure which object class to select, please consult your directory admin." : "De meest gebruikeliujke objectklassen voor gebruikers zijn organizationalPerson, persoon, gebruiker, en inetOrgPerson. Als u niet zeker weet welke objectklasse moet worden geselecteerd, raadpleeg dan uw directorybeheerder.", "The filter specifies which LDAP users shall have access to the %s instance." : "Dit filter geeft aan welke LDAP gebruikers toegang hebben tot %s.", "Verify settings and count users" : "Verifiëren instellingen en tellen gebruikers", "Saving" : "Opslaan", diff --git a/apps/user_ldap/l10n/sr@latin.js b/apps/user_ldap/l10n/sr@latin.js index 4a2f45db5c7..7769a4b6bda 100644 --- a/apps/user_ldap/l10n/sr@latin.js +++ b/apps/user_ldap/l10n/sr@latin.js @@ -1,6 +1,7 @@ OC.L10N.register( "user_ldap", { + "Server" : "Server", "Users" : "Korisnici", "Groups" : "Grupe", "Help" : "Pomoć", diff --git a/apps/user_ldap/l10n/sr@latin.json b/apps/user_ldap/l10n/sr@latin.json index 8cf62805869..ad4492827f7 100644 --- a/apps/user_ldap/l10n/sr@latin.json +++ b/apps/user_ldap/l10n/sr@latin.json @@ -1,4 +1,5 @@ { "translations": { + "Server" : "Server", "Users" : "Korisnici", "Groups" : "Grupe", "Help" : "Pomoć", diff --git a/apps/user_ldap/l10n/tr.js b/apps/user_ldap/l10n/tr.js index 15b474a5225..449ad9334cc 100644 --- a/apps/user_ldap/l10n/tr.js +++ b/apps/user_ldap/l10n/tr.js @@ -10,14 +10,19 @@ OC.L10N.register( "No configuration specified" : "Yapılandırma belirtilmemiş", "No data specified" : "Veri belirtilmemiş", " Could not set configuration %s" : "%s yapılandırması ayarlanamadı", + "Action does not exist" : "Aksiyon yok", "Configuration incorrect" : "Yapılandırma geçersiz", "Configuration incomplete" : "Yapılandırma tamamlanmamış", "Configuration OK" : "Yapılandırma tamam", "Select groups" : "Grupları seç", "Select object classes" : "Nesne sınıflarını seç", + "Please check the credentials, they seem to be wrong." : "Kimlik bilgilerini kontrol edin, onlar yanlış görünüyor.", + "Please specify the port, it could not be auto-detected." : "Port belirtin, bu otomatik olarak algılana madı.", "{nthServer}. Server" : "{nthServer}. Sunucu", "Do you really want to delete the current Server Configuration?" : "Şu anki sunucu yapılandırmasını silmek istediğinizden emin misiniz?", "Confirm Deletion" : "Silmeyi onayla", + "Mappings cleared successfully!" : "Dönüşümler temizleme basarildi", + "Error while clearing the mappings." : "Eşlemelerini takas ederken hata oluştu.", "Select attributes" : "Nitelikleri seç", "_%s group found_::_%s groups found_" : ["%s grup bulundu","%s grup bulundu"], "_%s user found_::_%s users found_" : ["%s kullanıcı bulundu","%s kullanıcı bulundu"], diff --git a/apps/user_ldap/l10n/tr.json b/apps/user_ldap/l10n/tr.json index f4a3e37cde9..45945eb009f 100644 --- a/apps/user_ldap/l10n/tr.json +++ b/apps/user_ldap/l10n/tr.json @@ -8,14 +8,19 @@ "No configuration specified" : "Yapılandırma belirtilmemiş", "No data specified" : "Veri belirtilmemiş", " Could not set configuration %s" : "%s yapılandırması ayarlanamadı", + "Action does not exist" : "Aksiyon yok", "Configuration incorrect" : "Yapılandırma geçersiz", "Configuration incomplete" : "Yapılandırma tamamlanmamış", "Configuration OK" : "Yapılandırma tamam", "Select groups" : "Grupları seç", "Select object classes" : "Nesne sınıflarını seç", + "Please check the credentials, they seem to be wrong." : "Kimlik bilgilerini kontrol edin, onlar yanlış görünüyor.", + "Please specify the port, it could not be auto-detected." : "Port belirtin, bu otomatik olarak algılana madı.", "{nthServer}. Server" : "{nthServer}. Sunucu", "Do you really want to delete the current Server Configuration?" : "Şu anki sunucu yapılandırmasını silmek istediğinizden emin misiniz?", "Confirm Deletion" : "Silmeyi onayla", + "Mappings cleared successfully!" : "Dönüşümler temizleme basarildi", + "Error while clearing the mappings." : "Eşlemelerini takas ederken hata oluştu.", "Select attributes" : "Nitelikleri seç", "_%s group found_::_%s groups found_" : ["%s grup bulundu","%s grup bulundu"], "_%s user found_::_%s users found_" : ["%s kullanıcı bulundu","%s kullanıcı bulundu"], diff --git a/config/config.sample.php b/config/config.sample.php index 61ae59542d4..45aaf6a107d 100644 --- a/config/config.sample.php +++ b/config/config.sample.php @@ -799,6 +799,17 @@ $CONFIG = array( */ 'cipher' => 'AES-256-CFB', +/** + * The minimum ownCloud desktop client version that will be allowed to sync with + * this server instance. All connections made from earlier clients will be denied + * by the server. Defaults to the minimum officially supported ownCloud version at + * the time of release of this server version. + * + * When changing this, note that older unsupported versions of the ownCloud desktop + * client may not function as expected, and could lead to permanent data loss for + * clients or other unexpected results. + */ +'minimum.supported.desktop.version' => '1.7.0', /** * Memory caching backend configuration diff --git a/core/command/app/listapps.php b/core/command/app/listapps.php index 37a1d645ed4..e30baddb745 100644 --- a/core/command/app/listapps.php +++ b/core/command/app/listapps.php @@ -55,12 +55,12 @@ class ListApps extends Base { sort($enabledApps); foreach ($enabledApps as $app) { - $apps['enabled'][$app] = (isset($versions[$app])) ? $versions[$app] : ''; + $apps['enabled'][$app] = (isset($versions[$app])) ? $versions[$app] : true; } sort($disabledApps); foreach ($disabledApps as $app) { - $apps['disabled'][$app] = (isset($versions[$app])) ? $versions[$app] : ''; + $apps['disabled'][$app] = null; } $this->writeAppList($input, $output, $apps); diff --git a/core/command/base.php b/core/command/base.php index c2d5cf97f02..f84dcb1aeaf 100644 --- a/core/command/base.php +++ b/core/command/base.php @@ -54,9 +54,30 @@ class Base extends Command { break; default: foreach ($items as $key => $item) { - $output->writeln(' - ' . (!is_int($key) ? $key . ': ' : '') . $item); + if (!is_int($key)) { + $value = $this->valueToString($item); + if (!is_null($value)) { + $output->writeln(' - ' . $key . ': ' . $value); + } else { + $output->writeln(' - ' . $key); + } + } else { + $output->writeln(' - ' . $this->valueToString($item)); + } } break; } } + + protected function valueToString($value) { + if ($value === false) { + return 'false'; + } else if ($value === true) { + return 'true'; + } else if ($value === null) { + null; + } else { + return $value; + } + } } diff --git a/core/command/encryption/disable.php b/core/command/encryption/disable.php new file mode 100644 index 00000000000..b5fce5cbd90 --- /dev/null +++ b/core/command/encryption/disable.php @@ -0,0 +1,56 @@ +<?php +/** + * @author Joas Schilling <nickvergessen@owncloud.com> + * + * @copyright Copyright (c) 2015, ownCloud, Inc. + * @license AGPL-3.0 + * + * This code is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License, version 3, + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License, version 3, + * along with this program. If not, see <http://www.gnu.org/licenses/> + * + */ + +namespace OC\Core\Command\Encryption; + +use OCP\IConfig; +use Symfony\Component\Console\Command\Command; +use Symfony\Component\Console\Input\InputInterface; +use Symfony\Component\Console\Output\OutputInterface; + +class Disable extends Command { + /** @var IConfig */ + protected $config; + + /** + * @param IConfig $config + */ + public function __construct(IConfig $config) { + parent::__construct(); + $this->config = $config; + } + + protected function configure() { + $this + ->setName('encryption:disable') + ->setDescription('Disable encryption') + ; + } + + protected function execute(InputInterface $input, OutputInterface $output) { + if ($this->config->getAppValue('core', 'encryption_enabled', 'no') !== 'yes') { + $output->writeln('Encryption is already disabled'); + } else { + $this->config->setAppValue('core', 'encryption_enabled', 'no'); + $output->writeln('Encryption disabled'); + } + } +} diff --git a/core/command/encryption/enable.php b/core/command/encryption/enable.php new file mode 100644 index 00000000000..0b403f86a68 --- /dev/null +++ b/core/command/encryption/enable.php @@ -0,0 +1,58 @@ +<?php +/** + * @author Joas Schilling <nickvergessen@owncloud.com> + * + * @copyright Copyright (c) 2015, ownCloud, Inc. + * @license AGPL-3.0 + * + * This code is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License, version 3, + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License, version 3, + * along with this program. If not, see <http://www.gnu.org/licenses/> + * + */ + +namespace OC\Core\Command\Encryption; + +use OCP\IConfig; +use Symfony\Component\Console\Command\Command; +use Symfony\Component\Console\Input\InputInterface; +use Symfony\Component\Console\Output\OutputInterface; + +class Enable extends Command { + /** @var IConfig */ + protected $config; + + /** + * @param IConfig $config + */ + public function __construct(IConfig $config) { + parent::__construct(); + $this->config = $config; + } + + protected function configure() { + $this + ->setName('encryption:enable') + ->setDescription('Enable encryption') + ; + } + + protected function execute(InputInterface $input, OutputInterface $output) { + if ($this->config->getAppValue('core', 'encryption_enabled', 'no') === 'yes') { + $output->writeln('Encryption is already enabled'); + } else { + $this->config->setAppValue('core', 'encryption_enabled', 'yes'); + $output->writeln('Encryption enabled'); + } + + $output->writeln('Default module: ' . $this->config->getAppValue('core', 'default_encryption_module', 'OC_DEFAULT_MODULE')); + } +} diff --git a/core/command/encryption/listmodules.php b/core/command/encryption/listmodules.php new file mode 100644 index 00000000000..d55480def87 --- /dev/null +++ b/core/command/encryption/listmodules.php @@ -0,0 +1,80 @@ +<?php +/** + * @author Joas Schilling <nickvergessen@owncloud.com> + * + * @copyright Copyright (c) 2015, ownCloud, Inc. + * @license AGPL-3.0 + * + * This code is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License, version 3, + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License, version 3, + * along with this program. If not, see <http://www.gnu.org/licenses/> + * + */ + +namespace OC\Core\Command\Encryption; + +use OC\Core\Command\Base; +use OCP\Encryption\IManager; +use Symfony\Component\Console\Input\InputInterface; +use Symfony\Component\Console\Output\OutputInterface; + +class ListModules extends Base { + /** @var IManager */ + protected $encryptionManager; + + /** + * @param IManager $encryptionManager + */ + public function __construct(IManager $encryptionManager) { + parent::__construct(); + $this->encryptionManager = $encryptionManager; + } + + protected function configure() { + parent::configure(); + + $this + ->setName('encryption:list-modules') + ->setDescription('List all available encryption modules') + ; + } + + protected function execute(InputInterface $input, OutputInterface $output) { + $encryptionModules = $this->encryptionManager->getEncryptionModules(); + $defaultEncryptionModuleId = $this->encryptionManager->getDefaultEncryptionModuleId(); + + $encModules = array(); + foreach ($encryptionModules as $module) { + $encModules[$module['id']]['displayName'] = $module['displayName']; + $encModules[$module['id']]['default'] = $module['id'] === $defaultEncryptionModuleId; + } + $this->writeModuleList($input, $output, $encModules); + } + + /** + * @param InputInterface $input + * @param OutputInterface $output + * @param array $items + */ + protected function writeModuleList(InputInterface $input, OutputInterface $output, $items) { + if ($input->getOption('output') === 'plain') { + array_walk($items, function(&$item) { + if (!$item['default']) { + $item = $item['displayName']; + } else { + $item = $item['displayName'] . ' [default*]'; + } + }); + } + + $this->writeArrayInOutputFormat($input, $output, $items); + } +} diff --git a/core/command/encryption/setdefaultmodule.php b/core/command/encryption/setdefaultmodule.php new file mode 100644 index 00000000000..a605b470d43 --- /dev/null +++ b/core/command/encryption/setdefaultmodule.php @@ -0,0 +1,68 @@ +<?php +/** + * @author Joas Schilling <nickvergessen@owncloud.com> + * + * @copyright Copyright (c) 2015, ownCloud, Inc. + * @license AGPL-3.0 + * + * This code is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License, version 3, + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License, version 3, + * along with this program. If not, see <http://www.gnu.org/licenses/> + * + */ + +namespace OC\Core\Command\Encryption; + + +use OCP\Encryption\IManager; +use Symfony\Component\Console\Command\Command; +use Symfony\Component\Console\Input\InputArgument; +use Symfony\Component\Console\Input\InputInterface; +use Symfony\Component\Console\Output\OutputInterface; + +class SetDefaultModule extends Command { + /** @var IManager */ + protected $encryptionManager; + + /** + * @param IManager $encryptionManager + */ + public function __construct(IManager $encryptionManager) { + parent::__construct(); + $this->encryptionManager = $encryptionManager; + } + + protected function configure() { + parent::configure(); + + $this + ->setName('encryption:set-default-module') + ->setDescription('Set the encryption default module') + ->addArgument( + 'module', + InputArgument::REQUIRED, + 'ID of the encryption module that should be used' + ) + ; + } + + protected function execute(InputInterface $input, OutputInterface $output) { + $moduleId = $input->getArgument('module'); + + if ($moduleId === $this->encryptionManager->getDefaultEncryptionModuleId()) { + $output->writeln('"' . $moduleId . '"" is already the default module'); + } else if ($this->encryptionManager->setDefaultEncryptionModule($moduleId)) { + $output->writeln('<info>Set default module to "' . $moduleId . '"</info>'); + } else { + $output->writeln('<error>The specified module "' . $moduleId . '" does not exist</error>'); + } + } +} diff --git a/core/command/status.php b/core/command/status.php index 3859f69febc..737113d4f85 100644 --- a/core/command/status.php +++ b/core/command/status.php @@ -37,7 +37,7 @@ class Status extends Base { protected function execute(InputInterface $input, OutputInterface $output) { $values = array( - 'installed' => \OC_Config::getValue('installed') ? 'true' : 'false', + 'installed' => (bool) \OC_Config::getValue('installed'), 'version' => implode('.', \OC_Util::getVersion()), 'versionstring' => \OC_Util::getVersionString(), 'edition' => \OC_Util::getEditionString(), diff --git a/core/command/user/add.php b/core/command/user/add.php index 60c70bf13dd..c52ec4d0090 100644 --- a/core/command/user/add.php +++ b/core/command/user/add.php @@ -119,7 +119,7 @@ class Add extends Command { ); if ($user instanceof IUser) { - $output->writeln('The user "' . $user->getUID() . '" was created successfully'); + $output->writeln('<info>The user "' . $user->getUID() . '" was created successfully</info>'); } else { $output->writeln('<error>An error occurred while creating the user</error>'); return 1; diff --git a/core/command/user/delete.php b/core/command/user/delete.php index 53952ceb9e1..8cac03157eb 100644 --- a/core/command/user/delete.php +++ b/core/command/user/delete.php @@ -22,19 +22,20 @@ namespace OC\Core\Command\User; +use OCP\IUserManager; use Symfony\Component\Console\Command\Command; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Output\OutputInterface; use Symfony\Component\Console\Input\InputArgument; class Delete extends Command { - /** @var \OC\User\Manager */ + /** @var IUserManager */ protected $userManager; /** - * @param \OC\User\Manager $userManager + * @param IUserManager $userManager */ - public function __construct(\OC\User\Manager $userManager) { + public function __construct(IUserManager $userManager) { $this->userManager = $userManager; parent::__construct(); } @@ -51,11 +52,17 @@ class Delete extends Command { } protected function execute(InputInterface $input, OutputInterface $output) { - $wasSuccessful = $this->userManager->get($input->getArgument('uid'))->delete(); - if($wasSuccessful === true) { - $output->writeln('The specified user was deleted'); + $user = $this->userManager->get($input->getArgument('uid')); + if (is_null($user)) { + $output->writeln('<error>User does not exist</error>'); return; } + + if ($user->delete()) { + $output->writeln('<info>The specified user was deleted</info>'); + return; + } + $output->writeln('<error>The specified could not be deleted. Please check the logs.</error>'); } } diff --git a/core/command/user/lastseen.php b/core/command/user/lastseen.php index 308b3c67ddb..92fcb1d449b 100644 --- a/core/command/user/lastseen.php +++ b/core/command/user/lastseen.php @@ -22,12 +22,24 @@ namespace OC\Core\Command\User; +use OCP\IUserManager; use Symfony\Component\Console\Command\Command; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Output\OutputInterface; use Symfony\Component\Console\Input\InputArgument; class LastSeen extends Command { + /** @var IUserManager */ + protected $userManager; + + /** + * @param IUserManager $userManager + */ + public function __construct(IUserManager $userManager) { + $this->userManager = $userManager; + parent::__construct(); + } + protected function configure() { $this ->setName('user:lastseen') @@ -40,10 +52,9 @@ class LastSeen extends Command { } protected function execute(InputInterface $input, OutputInterface $output) { - $userManager = \OC::$server->getUserManager(); - $user = $userManager->get($input->getArgument('uid')); + $user = $this->userManager->get($input->getArgument('uid')); if(is_null($user)) { - $output->writeln('User does not exist'); + $output->writeln('<error>User does not exist</error>'); return; } diff --git a/core/command/user/report.php b/core/command/user/report.php index 13bb5df69f8..5d89c0ae549 100644 --- a/core/command/user/report.php +++ b/core/command/user/report.php @@ -23,11 +23,23 @@ namespace OC\Core\Command\User; +use OCP\IUserManager; use Symfony\Component\Console\Command\Command; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Output\OutputInterface; class Report extends Command { + /** @var IUserManager */ + protected $userManager; + + /** + * @param IUserManager $userManager + */ + public function __construct(IUserManager $userManager) { + $this->userManager = $userManager; + parent::__construct(); + } + protected function configure() { $this ->setName('user:report') @@ -35,6 +47,7 @@ class Report extends Command { } protected function execute(InputInterface $input, OutputInterface $output) { + /** @var \Symfony\Component\Console\Helper\TableHelper $table */ $table = $this->getHelperSet()->get('table'); $table->setHeaders(array('User Report', '')); $userCountArray = $this->countUsers(); @@ -61,8 +74,7 @@ class Report extends Command { } private function countUsers() { - $userManager = \OC::$server->getUserManager(); - return $userManager->countUsers(); + return $this->userManager->countUsers(); } private function countUserDirectories() { diff --git a/core/command/user/resetpassword.php b/core/command/user/resetpassword.php index 3e16c8f79a5..7c405592114 100644 --- a/core/command/user/resetpassword.php +++ b/core/command/user/resetpassword.php @@ -23,6 +23,7 @@ namespace OC\Core\Command\User; +use OCP\IUserManager; use Symfony\Component\Console\Command\Command; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Input\InputArgument; @@ -31,10 +32,10 @@ use Symfony\Component\Console\Output\OutputInterface; class ResetPassword extends Command { - /** @var \OC\User\Manager */ + /** @var IUserManager */ protected $userManager; - public function __construct(\OC\User\Manager $userManager) { + public function __construct(IUserManager $userManager) { $this->userManager = $userManager; parent::__construct(); } @@ -60,10 +61,10 @@ class ResetPassword extends Command { protected function execute(InputInterface $input, OutputInterface $output) { $username = $input->getArgument('user'); - /** @var $user \OC\User\User */ + /** @var $user \OCP\IUser */ $user = $this->userManager->get($username); if (is_null($user)) { - $output->writeln("<error>There is no user called " . $username . "</error>"); + $output->writeln('<error>User does not exist</error>'); return 1; } diff --git a/core/css/icons.css b/core/css/icons.css index 0f602515883..e44f9880052 100644 --- a/core/css/icons.css +++ b/core/css/icons.css @@ -56,7 +56,9 @@ background-image: url('../img/actions/confirm.svg'); } -.icon-delete { +.icon-delete, +.icon-delete.no-permission:hover, +.icon-delete.no-permission:focus { background-image: url('../img/actions/delete.svg'); } .icon-delete:hover, diff --git a/core/css/styles.css b/core/css/styles.css index 4cf5e4e18ca..aeca3b78234 100644 --- a/core/css/styles.css +++ b/core/css/styles.css @@ -213,6 +213,10 @@ input[type="submit"] img, input[type="button"] img, button img, .button img { cu border: none; box-shadow: none; } +/* fix layout for multiline buttons which are <a class="button"> */ +.button { + display: inline-block; +} /* disabled input fields and buttons */ input:disabled, input:disabled:hover, input:disabled:focus, @@ -1061,4 +1065,3 @@ fieldset.warning legend + p, fieldset.update legend + p { @-ms-viewport { width: device-width; } - diff --git a/core/js/share.js b/core/js/share.js index 2eae6fa49a2..45873ca870e 100644 --- a/core/js/share.js +++ b/core/js/share.js @@ -982,6 +982,10 @@ $(document).ready(function() { } if (this.checked) { + // Reset password placeholder + $('#linkPassText').attr('placeholder', t('core', 'Choose a password for the public link')); + // Reset link + $('#linkText').val(''); var expireDateString = ''; if (oc_appconfig.core.defaultExpireDateEnabled) { var date = new Date().getTime(); @@ -1009,7 +1013,7 @@ $(document).ready(function() { } else { $('#linkPass').slideToggle(OC.menuSpeed); // TODO drop with IE8 drop - if(html.hasClass('ie8')) { + if($('html').hasClass('ie8')) { $('#linkPassText').attr('placeholder', null); $('#linkPassText').val(''); } @@ -1116,7 +1120,6 @@ $(document).ready(function() { $(document).on('focusout keyup', '#dropdown #linkPassText', function(event) { var linkPassText = $('#linkPassText'); if ( linkPassText.val() != '' && (event.type == 'focusout' || event.keyCode == 13) ) { - var allowPublicUpload = $('#sharingDialogAllowPublicUpload').is(':checked'); var dropDown = $('#dropdown'); var itemType = dropDown.data('item-type'); diff --git a/core/js/tests/specs/shareSpec.js b/core/js/tests/specs/shareSpec.js index 4a2da645029..a16358b55c5 100644 --- a/core/js/tests/specs/shareSpec.js +++ b/core/js/tests/specs/shareSpec.js @@ -129,6 +129,100 @@ describe('OC.Share tests', function() { ); expect($('#dropdown #linkCheckbox').length).toEqual(0); }); + it('Reset link when password is enforced and link is toggled', function() { + var old = oc_appconfig.core.enforcePasswordForPublicLink; + oc_appconfig.core.enforcePasswordForPublicLink = true; + $('#allowShareWithLink').val('yes'); + + OC.Share.showDropDown( + 'file', + 123, + $container, + true, + 31, + 'shared_file_name.txt' + ); + + // Toggle linkshare + $('#dropdown [name=linkCheckbox]').click(); + expect($('#dropdown #linkText').val()).toEqual(''); + + // Set password + $('#dropdown #linkPassText').val('foo'); + $('#dropdown #linkPassText').trigger(new $.Event('keyup', {keyCode: 13})); + fakeServer.requests[0].respond( + 200, + { 'Content-Type': 'application/json' }, + JSON.stringify({data: {token: 'xyz'}, status: 'success'}) + ); + + // Remove link + $('#dropdown [name=linkCheckbox]').click(); + fakeServer.requests[1].respond( + 200, + { 'Content-Type': 'application/json' }, + JSON.stringify({status: 'success'}) + ); + + /* + * Try to share again + * The linkText should be emptied + */ + $('#dropdown [name=linkCheckbox]').click(); + expect($('#dropdown #linkText').val()).toEqual(''); + + /* + * Do not set password but untoggle + * Since there is no share this should not result in another request to the server + */ + $('#dropdown [name=linkCheckbox]').click(); + expect(fakeServer.requests.length).toEqual(2); + + oc_appconfig.core.enforcePasswordForPublicLink = old; + }); + + it('Reset password placeholder when password is enforced and link is toggled', function() { + var old = oc_appconfig.core.enforcePasswordForPublicLink; + oc_appconfig.core.enforcePasswordForPublicLink = true; + $('#allowShareWithLink').val('yes'); + + OC.Share.showDropDown( + 'file', + 123, + $container, + true, + 31, + 'shared_file_name.txt' + ); + + // Toggle linkshare + $('#dropdown [name=linkCheckbox]').click(); + expect($('#dropdown #linkPassText').attr('placeholder')).toEqual('Choose a password for the public link'); + + // Set password + $('#dropdown #linkPassText').val('foo'); + $('#dropdown #linkPassText').trigger(new $.Event('keyup', {keyCode: 13})); + fakeServer.requests[0].respond( + 200, + { 'Content-Type': 'application/json' }, + JSON.stringify({data: {token: 'xyz'}, status: 'success'}) + ); + expect($('#dropdown #linkPassText').attr('placeholder')).toEqual('**********'); + + // Remove link + $('#dropdown [name=linkCheckbox]').click(); + fakeServer.requests[1].respond( + 200, + { 'Content-Type': 'application/json' }, + JSON.stringify({status: 'success'}) + ); + + // Try to share again + $('#dropdown [name=linkCheckbox]').click(); + expect($('#dropdown #linkPassText').attr('placeholder')).toEqual('Choose a password for the public link'); + + oc_appconfig.core.enforcePasswordForPublicLink = old; + }); it('shows populated link share when a link share exists', function() { loadItemStub.returns({ reshare: [], diff --git a/core/l10n/ca.js b/core/l10n/ca.js index 8aadcf8b78a..bacde34924a 100644 --- a/core/l10n/ca.js +++ b/core/l10n/ca.js @@ -8,6 +8,10 @@ OC.L10N.register( "Checked database schema update" : "S'ha comprobat l'actualització de l'esquema de la base de dades", "Checked database schema update for apps" : "S'ha comprobat l'actualització de l'esquema de la base de dades per les apps", "Updated \"%s\" to %s" : "Actualitzat \"%s\" a %s", + "Repair warning: " : "Advertiment de reparació:", + "Following incompatible apps have been disabled: %s" : "Les següents apps incompatibles s'han deshabilitat: %s", + "Following 3rd party apps have been disabled: %s" : "Les següents aplicacions de tercers han estat deshabilitades: %s", + "Invalid file provided" : "L'arxiu proporcionat no és vàlid", "No image or file provided" : "No s'han proporcionat imatges o fitxers", "Unknown filetype" : "Tipus de fitxer desconegut", "Invalid image" : "Imatge no vàlida", @@ -63,6 +67,7 @@ OC.L10N.register( "Good password" : "Contrasenya bona", "Strong password" : "Contrasenya forta", "Error occurred while checking server setup" : "Hi ha hagut un error en comprovar la configuració del servidor", + "You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead." : "Vostè està accedint a aquest lloc a través d'HTTP . Li suggerim que configuri el seu servidor per requerir l'ús d'HTTPS .", "Shared" : "Compartit", "Shared with {recipients}" : "Compartit amb {recipients}", "Share" : "Comparteix", @@ -72,6 +77,9 @@ OC.L10N.register( "Error while changing permissions" : "Error en canviar els permisos", "Shared with you and the group {group} by {owner}" : "Compartit amb vos i amb el grup {group} per {owner}", "Shared with you by {owner}" : "Compartit amb vos per {owner}", + "Share with users or groups …" : "Comparteix amb usuaris o grups ...", + "Share with users, groups or remote users …" : "Comparteix amb usuaris, grups o usuaris remots ...", + "Share with people on other ownClouds using the syntax username@example.com/owncloud" : "Compartir amb la gent en altres ownClouds utilitzant la sintaxi username@example.com/owncloud", "Share link" : "Enllaç de compartició", "The public link will expire no later than {days} days after it is created" : "L'enllaç públic tindrà venciment abans de {days} dies després de crear-lo", "Link" : "Enllaç", @@ -84,6 +92,7 @@ OC.L10N.register( "Set expiration date" : "Estableix la data de venciment", "Expiration" : "Expiració", "Expiration date" : "Data de venciment", + "An error occured. Please try again" : "Va ocórrer un error. Per favor, intenta-ho de nou", "Adding user..." : "Afegint usuari...", "group" : "grup", "remote" : "remot", @@ -150,13 +159,19 @@ OC.L10N.register( "Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" : "Ei,\n\nnomés fer-te saber que %s ha compartit %s amb tu.\nMira-ho a: %s\n\n", "The share will expire on %s." : "La compartició venç el %s.", "Cheers!" : "Salut!", + "Internal Server Error" : "Error Intern del Servidor", "The server encountered an internal error and was unable to complete your request." : "El servidor ha trobat un error intern i no pot finalitzar la teva petició.", + "Please contact the server administrator if this error reappears multiple times, please include the technical details below in your report." : "Per favor, posi's en contacte amb l'administrador del servidor si aquest error torna a aparèixer diverses vegades, per favor inclogui els detalls tècnics de baix en el seu informe.", "More details can be found in the server log." : "Pots trobar més detalls al llistat del servidor.", "Technical details" : "Detalls tècnics", "Remote Address: %s" : "Adreça remota: %s", + "Request ID: %s" : "Sol·licitud ID: %s ", + "Type: %s" : "Tipus: %s", "Code: %s" : "Codi: %s", "Message: %s" : "Missatge: %s", "File: %s" : "Fitxer: %s", + "Line: %s" : "Línia: %s", + "Security warning" : "Advertiment de seguretat", "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "La carpeta de dades i els seus fitxers probablement són accessibles des d'internet perquè el fitxer .htaccess no funciona.", "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Per informació de com configurar el servidor, comproveu la <a href=\"%s\" target=\"_blank\">documentació</a>.", "Create an <strong>admin account</strong>" : "Crea un <strong>compte d'administrador</strong>", @@ -170,14 +185,21 @@ OC.L10N.register( "Database name" : "Nom de la base de dades", "Database tablespace" : "Espai de taula de la base de dades", "Database host" : "Ordinador central de la base de dades", + "SQLite will be used as database." : "SQLite s'utilitzarà com a base de dades.", + "For larger installations we recommend to choose a different database backend." : "Per a instal·lacions més grans es recomana triar una base de dades diferent.", "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "L'ús de SQLite està desaconsellat especialment quan s'usa el client d'escriptori per sincronitzar els fitxers.", "Finish setup" : "Acaba la configuració", "Finishing …" : "Acabant...", + "Need help?" : "Necessites ajuda?", + "See the documentation" : "Consulti la documentació", + "This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Aquesta aplicació requereix Javascript per al seu correcte funcionament . Per favor, {linkstart}habiliti Javascript{linkend} i torni a carregar la pàgina.", "%s is available. Get more information on how to update." : "%s està disponible. Obtingueu més informació de com actualitzar.", "Log out" : "Surt", "Search" : "Cerca", "Server side authentication failed!" : "L'autenticació del servidor ha fallat!", "Please contact your administrator." : "Contacteu amb l'administrador.", + "An internal error occured." : "S'ha produït un error intern.", + "Please try again or contact your administrator." : "Intenti-ho de nou o posi's en contacte amb el seu administrador.", "Forgot your password? Reset it!" : "Heu oblidat la contrasenya? Restabliu-la!", "remember" : "recorda'm", "Log in" : "Inici de sessió", @@ -196,6 +218,8 @@ OC.L10N.register( "The theme %s has been disabled." : "S'ha desactivat el tema %s", "Please make sure that the database, the config folder and the data folder have been backed up before proceeding." : "Assegureu-vos que heu fet una còpia de seguretat de la base de dades, del fitxer de configuració i de la carpeta de dades abans de continuar.", "Start update" : "Inicia l'actualització", - "To avoid timeouts with larger installations, you can instead run the following command from your installation directory:" : "Per evitar que s'esgoti el temps d'espera en instalacions grans, pots en el seu lloc fer córrer la següent comanda en el directori d'instalació. " + "To avoid timeouts with larger installations, you can instead run the following command from your installation directory:" : "Per evitar que s'esgoti el temps d'espera en instalacions grans, pots en el seu lloc fer córrer la següent comanda en el directori d'instalació. ", + "This %s instance is currently in maintenance mode, which may take a while." : "Aquesta instància %s està actualment en manteniment i podria trigar una estona.", + "This page will refresh itself when the %s instance is available again." : "Aquesta pàgina s'actualitzarà automàticament quan la instància %s estigui disponible de nou." }, "nplurals=2; plural=(n != 1);"); diff --git a/core/l10n/ca.json b/core/l10n/ca.json index be831133b93..92f7186558e 100644 --- a/core/l10n/ca.json +++ b/core/l10n/ca.json @@ -6,6 +6,10 @@ "Checked database schema update" : "S'ha comprobat l'actualització de l'esquema de la base de dades", "Checked database schema update for apps" : "S'ha comprobat l'actualització de l'esquema de la base de dades per les apps", "Updated \"%s\" to %s" : "Actualitzat \"%s\" a %s", + "Repair warning: " : "Advertiment de reparació:", + "Following incompatible apps have been disabled: %s" : "Les següents apps incompatibles s'han deshabilitat: %s", + "Following 3rd party apps have been disabled: %s" : "Les següents aplicacions de tercers han estat deshabilitades: %s", + "Invalid file provided" : "L'arxiu proporcionat no és vàlid", "No image or file provided" : "No s'han proporcionat imatges o fitxers", "Unknown filetype" : "Tipus de fitxer desconegut", "Invalid image" : "Imatge no vàlida", @@ -61,6 +65,7 @@ "Good password" : "Contrasenya bona", "Strong password" : "Contrasenya forta", "Error occurred while checking server setup" : "Hi ha hagut un error en comprovar la configuració del servidor", + "You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead." : "Vostè està accedint a aquest lloc a través d'HTTP . Li suggerim que configuri el seu servidor per requerir l'ús d'HTTPS .", "Shared" : "Compartit", "Shared with {recipients}" : "Compartit amb {recipients}", "Share" : "Comparteix", @@ -70,6 +75,9 @@ "Error while changing permissions" : "Error en canviar els permisos", "Shared with you and the group {group} by {owner}" : "Compartit amb vos i amb el grup {group} per {owner}", "Shared with you by {owner}" : "Compartit amb vos per {owner}", + "Share with users or groups …" : "Comparteix amb usuaris o grups ...", + "Share with users, groups or remote users …" : "Comparteix amb usuaris, grups o usuaris remots ...", + "Share with people on other ownClouds using the syntax username@example.com/owncloud" : "Compartir amb la gent en altres ownClouds utilitzant la sintaxi username@example.com/owncloud", "Share link" : "Enllaç de compartició", "The public link will expire no later than {days} days after it is created" : "L'enllaç públic tindrà venciment abans de {days} dies després de crear-lo", "Link" : "Enllaç", @@ -82,6 +90,7 @@ "Set expiration date" : "Estableix la data de venciment", "Expiration" : "Expiració", "Expiration date" : "Data de venciment", + "An error occured. Please try again" : "Va ocórrer un error. Per favor, intenta-ho de nou", "Adding user..." : "Afegint usuari...", "group" : "grup", "remote" : "remot", @@ -148,13 +157,19 @@ "Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" : "Ei,\n\nnomés fer-te saber que %s ha compartit %s amb tu.\nMira-ho a: %s\n\n", "The share will expire on %s." : "La compartició venç el %s.", "Cheers!" : "Salut!", + "Internal Server Error" : "Error Intern del Servidor", "The server encountered an internal error and was unable to complete your request." : "El servidor ha trobat un error intern i no pot finalitzar la teva petició.", + "Please contact the server administrator if this error reappears multiple times, please include the technical details below in your report." : "Per favor, posi's en contacte amb l'administrador del servidor si aquest error torna a aparèixer diverses vegades, per favor inclogui els detalls tècnics de baix en el seu informe.", "More details can be found in the server log." : "Pots trobar més detalls al llistat del servidor.", "Technical details" : "Detalls tècnics", "Remote Address: %s" : "Adreça remota: %s", + "Request ID: %s" : "Sol·licitud ID: %s ", + "Type: %s" : "Tipus: %s", "Code: %s" : "Codi: %s", "Message: %s" : "Missatge: %s", "File: %s" : "Fitxer: %s", + "Line: %s" : "Línia: %s", + "Security warning" : "Advertiment de seguretat", "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "La carpeta de dades i els seus fitxers probablement són accessibles des d'internet perquè el fitxer .htaccess no funciona.", "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Per informació de com configurar el servidor, comproveu la <a href=\"%s\" target=\"_blank\">documentació</a>.", "Create an <strong>admin account</strong>" : "Crea un <strong>compte d'administrador</strong>", @@ -168,14 +183,21 @@ "Database name" : "Nom de la base de dades", "Database tablespace" : "Espai de taula de la base de dades", "Database host" : "Ordinador central de la base de dades", + "SQLite will be used as database." : "SQLite s'utilitzarà com a base de dades.", + "For larger installations we recommend to choose a different database backend." : "Per a instal·lacions més grans es recomana triar una base de dades diferent.", "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "L'ús de SQLite està desaconsellat especialment quan s'usa el client d'escriptori per sincronitzar els fitxers.", "Finish setup" : "Acaba la configuració", "Finishing …" : "Acabant...", + "Need help?" : "Necessites ajuda?", + "See the documentation" : "Consulti la documentació", + "This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Aquesta aplicació requereix Javascript per al seu correcte funcionament . Per favor, {linkstart}habiliti Javascript{linkend} i torni a carregar la pàgina.", "%s is available. Get more information on how to update." : "%s està disponible. Obtingueu més informació de com actualitzar.", "Log out" : "Surt", "Search" : "Cerca", "Server side authentication failed!" : "L'autenticació del servidor ha fallat!", "Please contact your administrator." : "Contacteu amb l'administrador.", + "An internal error occured." : "S'ha produït un error intern.", + "Please try again or contact your administrator." : "Intenti-ho de nou o posi's en contacte amb el seu administrador.", "Forgot your password? Reset it!" : "Heu oblidat la contrasenya? Restabliu-la!", "remember" : "recorda'm", "Log in" : "Inici de sessió", @@ -194,6 +216,8 @@ "The theme %s has been disabled." : "S'ha desactivat el tema %s", "Please make sure that the database, the config folder and the data folder have been backed up before proceeding." : "Assegureu-vos que heu fet una còpia de seguretat de la base de dades, del fitxer de configuració i de la carpeta de dades abans de continuar.", "Start update" : "Inicia l'actualització", - "To avoid timeouts with larger installations, you can instead run the following command from your installation directory:" : "Per evitar que s'esgoti el temps d'espera en instalacions grans, pots en el seu lloc fer córrer la següent comanda en el directori d'instalació. " + "To avoid timeouts with larger installations, you can instead run the following command from your installation directory:" : "Per evitar que s'esgoti el temps d'espera en instalacions grans, pots en el seu lloc fer córrer la següent comanda en el directori d'instalació. ", + "This %s instance is currently in maintenance mode, which may take a while." : "Aquesta instància %s està actualment en manteniment i podria trigar una estona.", + "This page will refresh itself when the %s instance is available again." : "Aquesta pàgina s'actualitzarà automàticament quan la instància %s estigui disponible de nou." },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/core/l10n/en_GB.js b/core/l10n/en_GB.js index 0a66ef081bf..3710c36940f 100644 --- a/core/l10n/en_GB.js +++ b/core/l10n/en_GB.js @@ -72,7 +72,9 @@ OC.L10N.register( "Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Your web server is not yet set up properly to allow file synchronisation because the WebDAV interface seems to be broken.", "This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest enabling the Internet connection for this server.", "Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root.", + "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a href=\"{docLink}\">documentation</a>.", "Error occurred while checking server setup" : "Error occurred whilst checking server setup", + "The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting.", "The \"Strict-Transport-Security\" HTTP header is not configured to least \"2,678,400\" seconds. This is a potential security risk and we recommend adjusting this setting." : "The \"Strict-Transport-Security\" HTTP header is not configured to least \"2,678,400\" seconds. This is a potential security risk and we recommend adjusting this setting.", "You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead." : "You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead.", "Shared" : "Shared", @@ -84,6 +86,9 @@ OC.L10N.register( "Error while changing permissions" : "Error whilst changing permissions", "Shared with you and the group {group} by {owner}" : "Shared with you and the group {group} by {owner}", "Shared with you by {owner}" : "Shared with you by {owner}", + "Share with users or groups …" : "Share with users or groups …", + "Share with users, groups or remote users …" : "Share with users, groups or remote users …", + "Share with people on other ownClouds using the syntax username@example.com/owncloud" : "Share with people on other ownClouds using the syntax username@example.com/owncloud", "Share link" : "Share link", "The public link will expire no later than {days} days after it is created" : "The public link will expire no later than {days} days after it is created", "Link" : "Link", @@ -96,6 +101,7 @@ OC.L10N.register( "Set expiration date" : "Set expiration date", "Expiration" : "Expiration", "Expiration date" : "Expiration date", + "An error occured. Please try again" : "An error occured. Please try again", "Adding user..." : "Adding user...", "group" : "group", "remote" : "remote", @@ -175,6 +181,7 @@ OC.L10N.register( "File: %s" : "File: %s", "Line: %s" : "Line: %s", "Trace" : "Trace", + "Security warning" : "Security warning", "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Your data directory and files are probably accessible from the internet because the .htaccess file does not work.", "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>.", "Create an <strong>admin account</strong>" : "Create an <strong>admin account</strong>", @@ -188,17 +195,22 @@ OC.L10N.register( "Database name" : "Database name", "Database tablespace" : "Database tablespace", "Database host" : "Database host", + "Performance warning" : "Performance warning", "SQLite will be used as database." : "SQLite will be used as database.", "For larger installations we recommend to choose a different database backend." : "For larger installations we recommend to choose a different database backend.", "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "Especially when using the desktop client for file syncing, the use of SQLite is discouraged.", "Finish setup" : "Finish setup", "Finishing …" : "Finishing …", + "Need help?" : "Need help?", + "See the documentation" : "See the documentation", "This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page.", "%s is available. Get more information on how to update." : "%s is available. Get more information on how to update.", "Log out" : "Log out", "Search" : "Search", "Server side authentication failed!" : "Server side authentication failed!", "Please contact your administrator." : "Please contact your administrator.", + "An internal error occured." : "An internal error occured.", + "Please try again or contact your administrator." : "Please try again or contact your administrator.", "Forgot your password? Reset it!" : "Forgot your password? Reset it!", "remember" : "remember", "Log in" : "Log in", diff --git a/core/l10n/en_GB.json b/core/l10n/en_GB.json index 3d18003eda6..0890e6e6cdb 100644 --- a/core/l10n/en_GB.json +++ b/core/l10n/en_GB.json @@ -70,7 +70,9 @@ "Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Your web server is not yet set up properly to allow file synchronisation because the WebDAV interface seems to be broken.", "This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest enabling the Internet connection for this server.", "Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root.", + "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a href=\"{docLink}\">documentation</a>.", "Error occurred while checking server setup" : "Error occurred whilst checking server setup", + "The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting.", "The \"Strict-Transport-Security\" HTTP header is not configured to least \"2,678,400\" seconds. This is a potential security risk and we recommend adjusting this setting." : "The \"Strict-Transport-Security\" HTTP header is not configured to least \"2,678,400\" seconds. This is a potential security risk and we recommend adjusting this setting.", "You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead." : "You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead.", "Shared" : "Shared", @@ -82,6 +84,9 @@ "Error while changing permissions" : "Error whilst changing permissions", "Shared with you and the group {group} by {owner}" : "Shared with you and the group {group} by {owner}", "Shared with you by {owner}" : "Shared with you by {owner}", + "Share with users or groups …" : "Share with users or groups …", + "Share with users, groups or remote users …" : "Share with users, groups or remote users …", + "Share with people on other ownClouds using the syntax username@example.com/owncloud" : "Share with people on other ownClouds using the syntax username@example.com/owncloud", "Share link" : "Share link", "The public link will expire no later than {days} days after it is created" : "The public link will expire no later than {days} days after it is created", "Link" : "Link", @@ -94,6 +99,7 @@ "Set expiration date" : "Set expiration date", "Expiration" : "Expiration", "Expiration date" : "Expiration date", + "An error occured. Please try again" : "An error occured. Please try again", "Adding user..." : "Adding user...", "group" : "group", "remote" : "remote", @@ -173,6 +179,7 @@ "File: %s" : "File: %s", "Line: %s" : "Line: %s", "Trace" : "Trace", + "Security warning" : "Security warning", "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Your data directory and files are probably accessible from the internet because the .htaccess file does not work.", "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>.", "Create an <strong>admin account</strong>" : "Create an <strong>admin account</strong>", @@ -186,17 +193,22 @@ "Database name" : "Database name", "Database tablespace" : "Database tablespace", "Database host" : "Database host", + "Performance warning" : "Performance warning", "SQLite will be used as database." : "SQLite will be used as database.", "For larger installations we recommend to choose a different database backend." : "For larger installations we recommend to choose a different database backend.", "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "Especially when using the desktop client for file syncing, the use of SQLite is discouraged.", "Finish setup" : "Finish setup", "Finishing …" : "Finishing …", + "Need help?" : "Need help?", + "See the documentation" : "See the documentation", "This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page.", "%s is available. Get more information on how to update." : "%s is available. Get more information on how to update.", "Log out" : "Log out", "Search" : "Search", "Server side authentication failed!" : "Server side authentication failed!", "Please contact your administrator." : "Please contact your administrator.", + "An internal error occured." : "An internal error occured.", + "Please try again or contact your administrator." : "Please try again or contact your administrator.", "Forgot your password? Reset it!" : "Forgot your password? Reset it!", "remember" : "remember", "Log in" : "Log in", diff --git a/core/l10n/fr.js b/core/l10n/fr.js index 8b3f02c7bae..3d061389004 100644 --- a/core/l10n/fr.js +++ b/core/l10n/fr.js @@ -165,7 +165,7 @@ OC.L10N.register( "File not found" : "Fichier non trouvé", "The specified document has not been found on the server." : "Impossible de trouver le document spécifié sur le serveur.", "You can click here to return to %s." : "Vous pouvez cliquer ici pour retourner à %s.", - "Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" : "Bonjour,\n\nNous vous informons que %s a partagé %s avec vous.\nConsultez-le : %s\n", + "Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" : "Bonjour,\n\nNous vous informons que %s a partagé \"%s\" avec vous.\nVous pouvez y accéder à l'adresse suivante : %s\n", "The share will expire on %s." : "Le partage expirera le %s.", "Cheers!" : "À bientôt !", "Internal Server Error" : "Erreur interne du serveur", @@ -215,7 +215,7 @@ OC.L10N.register( "remember" : "se souvenir de moi", "Log in" : "Connexion", "Alternative Logins" : "Identifiants alternatifs", - "Hey there,<br><br>just letting you know that %s shared <strong>%s</strong> with you.<br><a href=\"%s\">View it!</a><br><br>" : "Bonjour,<br><br>Nous vous informons que %s a partagé <strong>%s</strong> avec vous.<br><a href=\"%s\">Consultez-le !</a><br><br>", + "Hey there,<br><br>just letting you know that %s shared <strong>%s</strong> with you.<br><a href=\"%s\">View it!</a><br><br>" : "Bonjour,<br><br>Nous vous informons que %s a partagé <strong>%s</strong> avec vous.<br><a href=\"%s\">Cliquez ici pour y accéder !</a><br><br>", "This ownCloud instance is currently in single user mode." : "Cette instance de ownCloud est actuellement en mode utilisateur unique.", "This means only administrators can use the instance." : "Cela signifie que seuls les administrateurs peuvent utiliser l'instance.", "Contact your system administrator if this message persists or appeared unexpectedly." : "Veuillez contacter votre administrateur système si ce message persiste ou apparaît de façon inattendue.", diff --git a/core/l10n/fr.json b/core/l10n/fr.json index 641c07bcf07..2799b2f664a 100644 --- a/core/l10n/fr.json +++ b/core/l10n/fr.json @@ -163,7 +163,7 @@ "File not found" : "Fichier non trouvé", "The specified document has not been found on the server." : "Impossible de trouver le document spécifié sur le serveur.", "You can click here to return to %s." : "Vous pouvez cliquer ici pour retourner à %s.", - "Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" : "Bonjour,\n\nNous vous informons que %s a partagé %s avec vous.\nConsultez-le : %s\n", + "Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" : "Bonjour,\n\nNous vous informons que %s a partagé \"%s\" avec vous.\nVous pouvez y accéder à l'adresse suivante : %s\n", "The share will expire on %s." : "Le partage expirera le %s.", "Cheers!" : "À bientôt !", "Internal Server Error" : "Erreur interne du serveur", @@ -213,7 +213,7 @@ "remember" : "se souvenir de moi", "Log in" : "Connexion", "Alternative Logins" : "Identifiants alternatifs", - "Hey there,<br><br>just letting you know that %s shared <strong>%s</strong> with you.<br><a href=\"%s\">View it!</a><br><br>" : "Bonjour,<br><br>Nous vous informons que %s a partagé <strong>%s</strong> avec vous.<br><a href=\"%s\">Consultez-le !</a><br><br>", + "Hey there,<br><br>just letting you know that %s shared <strong>%s</strong> with you.<br><a href=\"%s\">View it!</a><br><br>" : "Bonjour,<br><br>Nous vous informons que %s a partagé <strong>%s</strong> avec vous.<br><a href=\"%s\">Cliquez ici pour y accéder !</a><br><br>", "This ownCloud instance is currently in single user mode." : "Cette instance de ownCloud est actuellement en mode utilisateur unique.", "This means only administrators can use the instance." : "Cela signifie que seuls les administrateurs peuvent utiliser l'instance.", "Contact your system administrator if this message persists or appeared unexpectedly." : "Veuillez contacter votre administrateur système si ce message persiste ou apparaît de façon inattendue.", diff --git a/core/l10n/gl.js b/core/l10n/gl.js index ef1b2a9e564..789d24b13f3 100644 --- a/core/l10n/gl.js +++ b/core/l10n/gl.js @@ -101,7 +101,7 @@ OC.L10N.register( "Set expiration date" : "Definir a data de caducidade", "Expiration" : "Caducidade", "Expiration date" : "Data de caducidade", - "An error occured. Please try again" : "Produciuse un erro, tenteo de novo", + "An error occured. Please try again" : "Produciuse un erro, ténteo de novo", "Adding user..." : "Engadindo usuario...", "group" : "grupo", "remote" : "remoto", @@ -210,7 +210,7 @@ OC.L10N.register( "Server side authentication failed!" : "A autenticación fracasou do lado do servidor!", "Please contact your administrator." : "Contacte co administrador.", "An internal error occured." : "Produciuse un erro interno.", - "Please try again or contact your administrator." : "Tenteo de novo ou póñase en contacto co administrador.", + "Please try again or contact your administrator." : "Ténteo de novo ou póñase en contacto co administrador.", "Forgot your password? Reset it!" : "Esqueceu o contrasinal? Restabelézao!", "remember" : "lembrar", "Log in" : "Conectar", diff --git a/core/l10n/gl.json b/core/l10n/gl.json index 7e4826127cd..0800e96c699 100644 --- a/core/l10n/gl.json +++ b/core/l10n/gl.json @@ -99,7 +99,7 @@ "Set expiration date" : "Definir a data de caducidade", "Expiration" : "Caducidade", "Expiration date" : "Data de caducidade", - "An error occured. Please try again" : "Produciuse un erro, tenteo de novo", + "An error occured. Please try again" : "Produciuse un erro, ténteo de novo", "Adding user..." : "Engadindo usuario...", "group" : "grupo", "remote" : "remoto", @@ -208,7 +208,7 @@ "Server side authentication failed!" : "A autenticación fracasou do lado do servidor!", "Please contact your administrator." : "Contacte co administrador.", "An internal error occured." : "Produciuse un erro interno.", - "Please try again or contact your administrator." : "Tenteo de novo ou póñase en contacto co administrador.", + "Please try again or contact your administrator." : "Ténteo de novo ou póñase en contacto co administrador.", "Forgot your password? Reset it!" : "Esqueceu o contrasinal? Restabelézao!", "remember" : "lembrar", "Log in" : "Conectar", diff --git a/core/l10n/ja.js b/core/l10n/ja.js index c38735b8d52..73ee7ad6d92 100644 --- a/core/l10n/ja.js +++ b/core/l10n/ja.js @@ -83,6 +83,7 @@ OC.L10N.register( "Error while changing permissions" : "権限変更でエラー発生", "Shared with you and the group {group} by {owner}" : "あなたと {owner} のグループ {group} で共有中", "Shared with you by {owner}" : "{owner} と共有中", + "Share with people on other ownClouds using the syntax username@example.com/owncloud" : "次の形式で指定して他のownCloudのユーザーと、共有", "Share link" : "URLで共有", "The public link will expire no later than {days} days after it is created" : "URLによる共有は、作成してから {days} 日以内に有効期限切れになります", "Link" : "リンク", diff --git a/core/l10n/ja.json b/core/l10n/ja.json index 1391ae1235a..52476a3ed93 100644 --- a/core/l10n/ja.json +++ b/core/l10n/ja.json @@ -81,6 +81,7 @@ "Error while changing permissions" : "権限変更でエラー発生", "Shared with you and the group {group} by {owner}" : "あなたと {owner} のグループ {group} で共有中", "Shared with you by {owner}" : "{owner} と共有中", + "Share with people on other ownClouds using the syntax username@example.com/owncloud" : "次の形式で指定して他のownCloudのユーザーと、共有", "Share link" : "URLで共有", "The public link will expire no later than {days} days after it is created" : "URLによる共有は、作成してから {days} 日以内に有効期限切れになります", "Link" : "リンク", diff --git a/core/register_command.php b/core/register_command.php index 701fb10d1ba..b9c722860c1 100644 --- a/core/register_command.php +++ b/core/register_command.php @@ -42,14 +42,18 @@ if (\OC::$server->getConfig()->getSystemValue('installed', false)) { $application->add(new OC\Core\Command\App\Enable()); $application->add(new OC\Core\Command\App\ListApps()); $application->add(new OC\Core\Command\Maintenance\Repair($repair, \OC::$server->getConfig())); - $application->add(new OC\Core\Command\User\Report()); - $application->add(new OC\Core\Command\User\ResetPassword(\OC::$server->getUserManager())); - $application->add(new OC\Core\Command\User\LastSeen()); - $application->add(new OC\Core\Command\User\Delete(\OC::$server->getUserManager())); $application->add(new OC\Core\Command\User\Add(\OC::$server->getUserManager(), \OC::$server->getGroupManager())); + $application->add(new OC\Core\Command\User\Delete(\OC::$server->getUserManager())); + $application->add(new OC\Core\Command\User\LastSeen(\OC::$server->getUserManager())); + $application->add(new OC\Core\Command\User\Report(\OC::$server->getUserManager())); + $application->add(new OC\Core\Command\User\ResetPassword(\OC::$server->getUserManager())); $application->add(new OC\Core\Command\Background\Cron(\OC::$server->getConfig())); $application->add(new OC\Core\Command\Background\WebCron(\OC::$server->getConfig())); $application->add(new OC\Core\Command\Background\Ajax(\OC::$server->getConfig())); + $application->add(new OC\Core\Command\Encryption\Disable(\OC::$server->getConfig())); + $application->add(new OC\Core\Command\Encryption\Enable(\OC::$server->getConfig())); + $application->add(new OC\Core\Command\Encryption\ListModules(\OC::$server->getEncryptionManager())); + $application->add(new OC\Core\Command\Encryption\SetDefaultModule(\OC::$server->getEncryptionManager())); } else { $application->add(new OC\Core\Command\Maintenance\Install(\OC::$server->getConfig())); } diff --git a/lib/l10n/cs_CZ.js b/lib/l10n/cs_CZ.js index c4b48a9356f..bcda6608f3a 100644 --- a/lib/l10n/cs_CZ.js +++ b/lib/l10n/cs_CZ.js @@ -84,6 +84,7 @@ OC.L10N.register( "Set an admin password." : "Zadejte heslo správce.", "Can't create or write into the data directory %s" : "Nelze vytvořit nebo zapisovat do datového adresáře %s", "%s shared »%s« with you" : "%s s vámi sdílí »%s«", + "%s via %s" : "%s pomocí %s", "Sharing %s failed, because the backend does not allow shares from type %i" : "Sdílení %s selhalo, podpůrná vrstva nepodporuje typ sdílení %i", "Sharing %s failed, because the file does not exist" : "Sdílení %s selhalo, protože soubor neexistuje", "You are not allowed to share %s" : "Nemáte povoleno sdílet %s", diff --git a/lib/l10n/cs_CZ.json b/lib/l10n/cs_CZ.json index 2d419f3c5cd..75e2ed64840 100644 --- a/lib/l10n/cs_CZ.json +++ b/lib/l10n/cs_CZ.json @@ -82,6 +82,7 @@ "Set an admin password." : "Zadejte heslo správce.", "Can't create or write into the data directory %s" : "Nelze vytvořit nebo zapisovat do datového adresáře %s", "%s shared »%s« with you" : "%s s vámi sdílí »%s«", + "%s via %s" : "%s pomocí %s", "Sharing %s failed, because the backend does not allow shares from type %i" : "Sdílení %s selhalo, podpůrná vrstva nepodporuje typ sdílení %i", "Sharing %s failed, because the file does not exist" : "Sdílení %s selhalo, protože soubor neexistuje", "You are not allowed to share %s" : "Nemáte povoleno sdílet %s", diff --git a/lib/l10n/en_GB.js b/lib/l10n/en_GB.js index bc4836a0a7e..b06b00ac656 100644 --- a/lib/l10n/en_GB.js +++ b/lib/l10n/en_GB.js @@ -84,6 +84,7 @@ OC.L10N.register( "Set an admin password." : "Set an admin password.", "Can't create or write into the data directory %s" : "Can't create or write into the data directory %s", "%s shared »%s« with you" : "%s shared \"%s\" with you", + "%s via %s" : "%s via %s", "Sharing %s failed, because the backend does not allow shares from type %i" : "Sharing %s failed, because the backend does not allow shares from type %i", "Sharing %s failed, because the file does not exist" : "Sharing %s failed, because the file does not exist", "You are not allowed to share %s" : "You are not allowed to share %s", @@ -116,6 +117,8 @@ OC.L10N.register( "A valid password must be provided" : "A valid password must be provided", "The username is already being used" : "The username is already being used", "No database drivers (sqlite, mysql, or postgresql) installed." : "No database drivers (sqlite, mysql, or postgresql) installed.", + "Microsoft Windows Platform is not supported" : "Microsoft Windows Platform is not supported", + "Running ownCloud Server on the Microsoft Windows platform is not supported. We suggest you use a Linux server in a virtual machine if you have no option for migrating the server itself. Find Linux packages as well as easy to deploy virtual machine images on <a href=\"%s\">%s</a>. For migrating existing installations to Linux you can find some tips and a migration script in <a href=\"%s\">our documentation</a>." : "Running ownCloud Server on the Microsoft Windows platform is not supported. We suggest you use a Linux server in a virtual machine if you have no option for migrating the server itself. Find Linux packages as well as easy to deploy virtual machine images on <a href=\"%s\">%s</a>. For migrating existing installations to Linux you can find some tips and a migration script in <a href=\"%s\">our documentation</a>.", "Cannot write into \"config\" directory" : "Cannot write into \"config\" directory", "Cannot write into \"apps\" directory" : "Cannot write into \"apps\" directory", "This can usually be fixed by %sgiving the webserver write access to the apps directory%s or disabling the appstore in the config file." : "This can usually be fixed by %sgiving the webserver write access to the apps directory%s or disabling the appstore in the config file.", @@ -141,6 +144,8 @@ OC.L10N.register( "Please make sure you have PostgreSQL >= 9 or check the logs for more information about the error" : "Please make sure you have PostgreSQL >= 9 or check the logs for more information about the error", "Please change the permissions to 0770 so that the directory cannot be listed by other users." : "Please change the permissions to 0770 so that the directory cannot be listed by other users.", "Data directory (%s) is readable by other users" : "Data directory (%s) is readable by other users", + "Data directory (%s) must be an absolute path" : "Data directory (%s) must be an absolute path", + "Check the value of \"datadirectory\" in your configuration" : "Check the value of \"datadirectory\" in your configuration", "Data directory (%s) is invalid" : "Data directory (%s) is invalid", "Please check that the data directory contains a file \".ocdata\" in its root." : "Please check that the data directory contains a file \".ocdata\" in its root.", "Could not obtain lock type %d on \"%s\"." : "Could not obtain lock type %d on \"%s\"." diff --git a/lib/l10n/en_GB.json b/lib/l10n/en_GB.json index 896b9f19b92..18a448b9ed3 100644 --- a/lib/l10n/en_GB.json +++ b/lib/l10n/en_GB.json @@ -82,6 +82,7 @@ "Set an admin password." : "Set an admin password.", "Can't create or write into the data directory %s" : "Can't create or write into the data directory %s", "%s shared »%s« with you" : "%s shared \"%s\" with you", + "%s via %s" : "%s via %s", "Sharing %s failed, because the backend does not allow shares from type %i" : "Sharing %s failed, because the backend does not allow shares from type %i", "Sharing %s failed, because the file does not exist" : "Sharing %s failed, because the file does not exist", "You are not allowed to share %s" : "You are not allowed to share %s", @@ -114,6 +115,8 @@ "A valid password must be provided" : "A valid password must be provided", "The username is already being used" : "The username is already being used", "No database drivers (sqlite, mysql, or postgresql) installed." : "No database drivers (sqlite, mysql, or postgresql) installed.", + "Microsoft Windows Platform is not supported" : "Microsoft Windows Platform is not supported", + "Running ownCloud Server on the Microsoft Windows platform is not supported. We suggest you use a Linux server in a virtual machine if you have no option for migrating the server itself. Find Linux packages as well as easy to deploy virtual machine images on <a href=\"%s\">%s</a>. For migrating existing installations to Linux you can find some tips and a migration script in <a href=\"%s\">our documentation</a>." : "Running ownCloud Server on the Microsoft Windows platform is not supported. We suggest you use a Linux server in a virtual machine if you have no option for migrating the server itself. Find Linux packages as well as easy to deploy virtual machine images on <a href=\"%s\">%s</a>. For migrating existing installations to Linux you can find some tips and a migration script in <a href=\"%s\">our documentation</a>.", "Cannot write into \"config\" directory" : "Cannot write into \"config\" directory", "Cannot write into \"apps\" directory" : "Cannot write into \"apps\" directory", "This can usually be fixed by %sgiving the webserver write access to the apps directory%s or disabling the appstore in the config file." : "This can usually be fixed by %sgiving the webserver write access to the apps directory%s or disabling the appstore in the config file.", @@ -139,6 +142,8 @@ "Please make sure you have PostgreSQL >= 9 or check the logs for more information about the error" : "Please make sure you have PostgreSQL >= 9 or check the logs for more information about the error", "Please change the permissions to 0770 so that the directory cannot be listed by other users." : "Please change the permissions to 0770 so that the directory cannot be listed by other users.", "Data directory (%s) is readable by other users" : "Data directory (%s) is readable by other users", + "Data directory (%s) must be an absolute path" : "Data directory (%s) must be an absolute path", + "Check the value of \"datadirectory\" in your configuration" : "Check the value of \"datadirectory\" in your configuration", "Data directory (%s) is invalid" : "Data directory (%s) is invalid", "Please check that the data directory contains a file \".ocdata\" in its root." : "Please check that the data directory contains a file \".ocdata\" in its root.", "Could not obtain lock type %d on \"%s\"." : "Could not obtain lock type %d on \"%s\"." diff --git a/lib/l10n/fr.js b/lib/l10n/fr.js index b0c5f895228..357e7f86841 100644 --- a/lib/l10n/fr.js +++ b/lib/l10n/fr.js @@ -82,7 +82,7 @@ OC.L10N.register( "Set an admin username." : "Spécifiez un nom d'utilisateur pour l'administrateur.", "Set an admin password." : "Spécifiez un mot de passe pour l'administrateur.", "Can't create or write into the data directory %s" : "Impossible de créer ou d'écrire dans le répertoire des données %s", - "%s shared »%s« with you" : "%s partagé »%s« avec vous", + "%s shared »%s« with you" : "%s a partagé «%s» avec vous", "%s via %s" : "%s via %s", "Sharing %s failed, because the backend does not allow shares from type %i" : "Le partage de %s a échoué car l’infrastructure n'autorise pas les partages de type %i", "Sharing %s failed, because the file does not exist" : "Le partage de %s a échoué car le fichier n'existe pas", diff --git a/lib/l10n/fr.json b/lib/l10n/fr.json index b7759a26862..0cc3b379445 100644 --- a/lib/l10n/fr.json +++ b/lib/l10n/fr.json @@ -80,7 +80,7 @@ "Set an admin username." : "Spécifiez un nom d'utilisateur pour l'administrateur.", "Set an admin password." : "Spécifiez un mot de passe pour l'administrateur.", "Can't create or write into the data directory %s" : "Impossible de créer ou d'écrire dans le répertoire des données %s", - "%s shared »%s« with you" : "%s partagé »%s« avec vous", + "%s shared »%s« with you" : "%s a partagé «%s» avec vous", "%s via %s" : "%s via %s", "Sharing %s failed, because the backend does not allow shares from type %i" : "Le partage de %s a échoué car l’infrastructure n'autorise pas les partages de type %i", "Sharing %s failed, because the file does not exist" : "Le partage de %s a échoué car le fichier n'existe pas", diff --git a/lib/l10n/id.js b/lib/l10n/id.js index 05b958b1dd1..ba7a78d61e3 100644 --- a/lib/l10n/id.js +++ b/lib/l10n/id.js @@ -38,6 +38,11 @@ OC.L10N.register( "_%n minute ago_::_%n minutes ago_" : ["%n menit yang lalu"], "seconds ago" : "beberapa detik yang lalu", "web services under your control" : "layanan web dalam kendali anda", + "Empty filename is not allowed" : "Nama berkas kosong tidak diperbolehkan", + "Dot files are not allowed" : "Berkas titik tidak diperbolehkan", + "4-byte characters are not supported in file names" : "Karakter 4 byte tidak didukung dalam nama berkas", + "File name contains at least one invalid character" : "Nama berkas berisi setidaknya satu karakter yang tidak sah.", + "File name is too long" : "Nama berkas terlalu panjang", "App directory already exists" : "Direktori Apl sudah ada", "Can't create app folder. Please fix permissions. %s" : "Tidak dapat membuat folder apl. Silakan perbaiki perizinan. %s", "No source specified when installing app" : "Tidak ada sumber yang ditentukan saat menginstal apl", @@ -72,11 +77,13 @@ OC.L10N.register( "PostgreSQL username and/or password not valid" : "Nama pengguna dan/atau sandi PostgreSQL tidak valid", "Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OS X tidak didukung dan %s tidak akan bekerja dengan baik pada platform ini. Gunakan dengan resiko Anda sendiri!", "For the best results, please consider using a GNU/Linux server instead." : "Untuk hasil terbaik, pertimbangkan untuk menggunakan server GNU/Linux sebagai gantinya. ", + "It seems that this %s instance is running on a 32-bit PHP environment and the open_basedir has been configured in php.ini. This will lead to problems with files over 4 GB and is highly discouraged." : "Kelihatannya instansi %s ini berjalan di lingkungan PHP 32-bit dan open_basedir telah dikonfigurasi di php.ini. Hal ini akan menyebabkan masalah dengan berkas lebih dari 4 GB dan sangat tidak disarankan.", "Please remove the open_basedir setting within your php.ini or switch to 64-bit PHP." : "Mohon hapus pengaturan open_basedir didalam php.ini atau beralih ke PHP 64-bit.", "Set an admin username." : "Tetapkan nama pengguna admin.", "Set an admin password." : "Tetapkan sandi admin.", "Can't create or write into the data directory %s" : "Tidak dapat membuat atau menulis kedalam direktori data %s", "%s shared »%s« with you" : "%s membagikan »%s« dengan anda", + "%s via %s" : "%s melalui %s", "Sharing %s failed, because the backend does not allow shares from type %i" : "Gagal berbagi %s, karena backend tidak mengizinkan berbagi dengan tipe %i", "Sharing %s failed, because the file does not exist" : "Gagal membagikan %s, karena berkas tidak ada", "You are not allowed to share %s" : "Anda tidak diizinkan untuk membagikan %s", @@ -88,14 +95,20 @@ OC.L10N.register( "Sharing %s failed, because %s is not a member of the group %s" : "Gagal membagikan %s, karena %s bukan anggota dari grup %s", "You need to provide a password to create a public link, only protected links are allowed" : "Anda perlu memberikan sandi untuk membuat tautan publik, hanya tautan yang terlindungi yang diizinkan", "Sharing %s failed, because sharing with links is not allowed" : "Gagal membagikan %s, karena berbag dengan tautan tidak diizinkan", + "Sharing %s failed, could not find %s, maybe the server is currently unreachable." : "Berbagi %s gagal, tidak menemukan %s, kemungkinan saat ini server tidak dapat dijangkau.", "Share type %s is not valid for %s" : "Barbagi tipe %s tidak sah untuk %s", "Setting permissions for %s failed, because the permissions exceed permissions granted to %s" : "Pengaturan perizinan untuk %s gagal, karena karena izin melebihi izin yang diberikan untuk %s", "Setting permissions for %s failed, because the item was not found" : "Pengaturan perizinan untuk %s gagal, karena item tidak ditemukan", "Cannot set expiration date. Shares cannot expire later than %s after they have been shared" : "Tidak dapat menyetel tanggal kadaluarsa. Pembagian tidak dapat kadaluarsa lebih lambat dari %s setelah mereka dibagikan.", "Cannot set expiration date. Expiration date is in the past" : "Tidak dapat menyetel tanggal kadaluarsa. Tanggal kadaluarsa dimasa lalu", + "Cannot clear expiration date. Shares are required to have an expiration date." : "Tidak dapat mengosongkan tanggal berakhir. Berbagi harus memiliki tanggal berakhir.", + "Sharing backend %s must implement the interface OCP\\Share_Backend" : "Backend berbagi %s harus mengimplementasi antarmuka OCP\\Share_Backend", + "Sharing backend %s not found" : "Backend berbagi %s tidak ditemukan", + "Sharing backend for %s not found" : "Backend berbagi untuk %s tidak ditemukan", "Sharing %s failed, because the user %s is the original sharer" : "Gagal berbagi %s. karena pengguna %s adalah yang membagikan pertama", "Sharing %s failed, because the permissions exceed permissions granted to %s" : "Gagal membagikan %s, karena izin melebihi izin yang diberikan untuk %s", "Sharing %s failed, because resharing is not allowed" : "Gagal berbagi %s, karena membagikan ulang tidak diizinkan", + "Sharing %s failed, because the sharing backend for %s could not find its source" : "Berbagi %s gagal, karena backend berbagi untuk %s tidak menemukan sumbernya", "Sharing %s failed, because the file could not be found in the file cache" : "Gagal berbagi %s, karena berkas tidak ditemukan di berkas cache", "Could not find category \"%s\"" : "Tidak menemukan kategori \"%s\"", "Only the following characters are allowed in a username: \"a-z\", \"A-Z\", \"0-9\", and \"_.@-\"" : "Hanya karakter berikut yang diizinkan dalam nama pengguna: \"a-z\", \"A-Z\", \"0-9\", dan \"_.@-\"", @@ -103,6 +116,8 @@ OC.L10N.register( "A valid password must be provided" : "Tuliskan sandi yang valid", "The username is already being used" : "Nama pengguna ini telah digunakan", "No database drivers (sqlite, mysql, or postgresql) installed." : "Tidak ada driver (sqlite, mysql, or postgresql) yang terinstal.", + "Microsoft Windows Platform is not supported" : "Platform Microsoft Windows tidak didukung", + "Running ownCloud Server on the Microsoft Windows platform is not supported. We suggest you use a Linux server in a virtual machine if you have no option for migrating the server itself. Find Linux packages as well as easy to deploy virtual machine images on <a href=\"%s\">%s</a>. For migrating existing installations to Linux you can find some tips and a migration script in <a href=\"%s\">our documentation</a>." : "Menjalankan server ownCloud pada platform Microsoft Windows tidak didukung. Kami menyarankan Anda untuk menggunakan server Linux di mesin virtual jika Anda tidak memiliki pilihan untuk bermigrasi server itu sendiri. Temukan paket Linux atau menggunakan images mesin virtual di <a href=\"%s\">%s</a>. Untuk bermigrasi dari instalasi yang sudah ada ke Linux, Anda dapat menemukan beberapa tips dan script migrasi di <a href=\"%s\">dokumentasi kami</a>.", "Cannot write into \"config\" directory" : "Tidak dapat menulis kedalam direktori \"config\"", "Cannot write into \"apps\" directory" : "Tidak dapat menulis kedalam direktori \"apps\"", "This can usually be fixed by %sgiving the webserver write access to the apps directory%s or disabling the appstore in the config file." : "Hal ini biasanya dapat diperbaiki dengan %s memberikan akses tulis bagi situs web ke %s direktori apps atau menonaktifkan toko aplikasi didalam berkas config.", @@ -127,6 +142,7 @@ OC.L10N.register( "Please make sure you have PostgreSQL >= 9 or check the logs for more information about the error" : "Pastikan bahwa Anda memiliki PostgreSQL >= 9 atau periksa log untuk informasi lebih lanjut tentang kesalahan", "Please change the permissions to 0770 so that the directory cannot be listed by other users." : "Mohon ubah perizinan menjadi 0770 sehingga direktori tersebut tidak dapat dilihat oleh pengguna lain.", "Data directory (%s) is readable by other users" : "Direktori data (%s) dapat dibaca oleh pengguna lain", + "Check the value of \"datadirectory\" in your configuration" : "Periksa nilai \"datadirectory\" di konfigurasi Anda", "Data directory (%s) is invalid" : "Direktori data (%s) tidak sah", "Please check that the data directory contains a file \".ocdata\" in its root." : "Mohon periksa apakah direktori data berisi sebuah berkas \".ocdata\" di direktori induknya.", "Could not obtain lock type %d on \"%s\"." : "Tidak bisa memperoleh jenis kunci %d pada \"%s\"." diff --git a/lib/l10n/id.json b/lib/l10n/id.json index ae3e866a8bb..152948544ff 100644 --- a/lib/l10n/id.json +++ b/lib/l10n/id.json @@ -36,6 +36,11 @@ "_%n minute ago_::_%n minutes ago_" : ["%n menit yang lalu"], "seconds ago" : "beberapa detik yang lalu", "web services under your control" : "layanan web dalam kendali anda", + "Empty filename is not allowed" : "Nama berkas kosong tidak diperbolehkan", + "Dot files are not allowed" : "Berkas titik tidak diperbolehkan", + "4-byte characters are not supported in file names" : "Karakter 4 byte tidak didukung dalam nama berkas", + "File name contains at least one invalid character" : "Nama berkas berisi setidaknya satu karakter yang tidak sah.", + "File name is too long" : "Nama berkas terlalu panjang", "App directory already exists" : "Direktori Apl sudah ada", "Can't create app folder. Please fix permissions. %s" : "Tidak dapat membuat folder apl. Silakan perbaiki perizinan. %s", "No source specified when installing app" : "Tidak ada sumber yang ditentukan saat menginstal apl", @@ -70,11 +75,13 @@ "PostgreSQL username and/or password not valid" : "Nama pengguna dan/atau sandi PostgreSQL tidak valid", "Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OS X tidak didukung dan %s tidak akan bekerja dengan baik pada platform ini. Gunakan dengan resiko Anda sendiri!", "For the best results, please consider using a GNU/Linux server instead." : "Untuk hasil terbaik, pertimbangkan untuk menggunakan server GNU/Linux sebagai gantinya. ", + "It seems that this %s instance is running on a 32-bit PHP environment and the open_basedir has been configured in php.ini. This will lead to problems with files over 4 GB and is highly discouraged." : "Kelihatannya instansi %s ini berjalan di lingkungan PHP 32-bit dan open_basedir telah dikonfigurasi di php.ini. Hal ini akan menyebabkan masalah dengan berkas lebih dari 4 GB dan sangat tidak disarankan.", "Please remove the open_basedir setting within your php.ini or switch to 64-bit PHP." : "Mohon hapus pengaturan open_basedir didalam php.ini atau beralih ke PHP 64-bit.", "Set an admin username." : "Tetapkan nama pengguna admin.", "Set an admin password." : "Tetapkan sandi admin.", "Can't create or write into the data directory %s" : "Tidak dapat membuat atau menulis kedalam direktori data %s", "%s shared »%s« with you" : "%s membagikan »%s« dengan anda", + "%s via %s" : "%s melalui %s", "Sharing %s failed, because the backend does not allow shares from type %i" : "Gagal berbagi %s, karena backend tidak mengizinkan berbagi dengan tipe %i", "Sharing %s failed, because the file does not exist" : "Gagal membagikan %s, karena berkas tidak ada", "You are not allowed to share %s" : "Anda tidak diizinkan untuk membagikan %s", @@ -86,14 +93,20 @@ "Sharing %s failed, because %s is not a member of the group %s" : "Gagal membagikan %s, karena %s bukan anggota dari grup %s", "You need to provide a password to create a public link, only protected links are allowed" : "Anda perlu memberikan sandi untuk membuat tautan publik, hanya tautan yang terlindungi yang diizinkan", "Sharing %s failed, because sharing with links is not allowed" : "Gagal membagikan %s, karena berbag dengan tautan tidak diizinkan", + "Sharing %s failed, could not find %s, maybe the server is currently unreachable." : "Berbagi %s gagal, tidak menemukan %s, kemungkinan saat ini server tidak dapat dijangkau.", "Share type %s is not valid for %s" : "Barbagi tipe %s tidak sah untuk %s", "Setting permissions for %s failed, because the permissions exceed permissions granted to %s" : "Pengaturan perizinan untuk %s gagal, karena karena izin melebihi izin yang diberikan untuk %s", "Setting permissions for %s failed, because the item was not found" : "Pengaturan perizinan untuk %s gagal, karena item tidak ditemukan", "Cannot set expiration date. Shares cannot expire later than %s after they have been shared" : "Tidak dapat menyetel tanggal kadaluarsa. Pembagian tidak dapat kadaluarsa lebih lambat dari %s setelah mereka dibagikan.", "Cannot set expiration date. Expiration date is in the past" : "Tidak dapat menyetel tanggal kadaluarsa. Tanggal kadaluarsa dimasa lalu", + "Cannot clear expiration date. Shares are required to have an expiration date." : "Tidak dapat mengosongkan tanggal berakhir. Berbagi harus memiliki tanggal berakhir.", + "Sharing backend %s must implement the interface OCP\\Share_Backend" : "Backend berbagi %s harus mengimplementasi antarmuka OCP\\Share_Backend", + "Sharing backend %s not found" : "Backend berbagi %s tidak ditemukan", + "Sharing backend for %s not found" : "Backend berbagi untuk %s tidak ditemukan", "Sharing %s failed, because the user %s is the original sharer" : "Gagal berbagi %s. karena pengguna %s adalah yang membagikan pertama", "Sharing %s failed, because the permissions exceed permissions granted to %s" : "Gagal membagikan %s, karena izin melebihi izin yang diberikan untuk %s", "Sharing %s failed, because resharing is not allowed" : "Gagal berbagi %s, karena membagikan ulang tidak diizinkan", + "Sharing %s failed, because the sharing backend for %s could not find its source" : "Berbagi %s gagal, karena backend berbagi untuk %s tidak menemukan sumbernya", "Sharing %s failed, because the file could not be found in the file cache" : "Gagal berbagi %s, karena berkas tidak ditemukan di berkas cache", "Could not find category \"%s\"" : "Tidak menemukan kategori \"%s\"", "Only the following characters are allowed in a username: \"a-z\", \"A-Z\", \"0-9\", and \"_.@-\"" : "Hanya karakter berikut yang diizinkan dalam nama pengguna: \"a-z\", \"A-Z\", \"0-9\", dan \"_.@-\"", @@ -101,6 +114,8 @@ "A valid password must be provided" : "Tuliskan sandi yang valid", "The username is already being used" : "Nama pengguna ini telah digunakan", "No database drivers (sqlite, mysql, or postgresql) installed." : "Tidak ada driver (sqlite, mysql, or postgresql) yang terinstal.", + "Microsoft Windows Platform is not supported" : "Platform Microsoft Windows tidak didukung", + "Running ownCloud Server on the Microsoft Windows platform is not supported. We suggest you use a Linux server in a virtual machine if you have no option for migrating the server itself. Find Linux packages as well as easy to deploy virtual machine images on <a href=\"%s\">%s</a>. For migrating existing installations to Linux you can find some tips and a migration script in <a href=\"%s\">our documentation</a>." : "Menjalankan server ownCloud pada platform Microsoft Windows tidak didukung. Kami menyarankan Anda untuk menggunakan server Linux di mesin virtual jika Anda tidak memiliki pilihan untuk bermigrasi server itu sendiri. Temukan paket Linux atau menggunakan images mesin virtual di <a href=\"%s\">%s</a>. Untuk bermigrasi dari instalasi yang sudah ada ke Linux, Anda dapat menemukan beberapa tips dan script migrasi di <a href=\"%s\">dokumentasi kami</a>.", "Cannot write into \"config\" directory" : "Tidak dapat menulis kedalam direktori \"config\"", "Cannot write into \"apps\" directory" : "Tidak dapat menulis kedalam direktori \"apps\"", "This can usually be fixed by %sgiving the webserver write access to the apps directory%s or disabling the appstore in the config file." : "Hal ini biasanya dapat diperbaiki dengan %s memberikan akses tulis bagi situs web ke %s direktori apps atau menonaktifkan toko aplikasi didalam berkas config.", @@ -125,6 +140,7 @@ "Please make sure you have PostgreSQL >= 9 or check the logs for more information about the error" : "Pastikan bahwa Anda memiliki PostgreSQL >= 9 atau periksa log untuk informasi lebih lanjut tentang kesalahan", "Please change the permissions to 0770 so that the directory cannot be listed by other users." : "Mohon ubah perizinan menjadi 0770 sehingga direktori tersebut tidak dapat dilihat oleh pengguna lain.", "Data directory (%s) is readable by other users" : "Direktori data (%s) dapat dibaca oleh pengguna lain", + "Check the value of \"datadirectory\" in your configuration" : "Periksa nilai \"datadirectory\" di konfigurasi Anda", "Data directory (%s) is invalid" : "Direktori data (%s) tidak sah", "Please check that the data directory contains a file \".ocdata\" in its root." : "Mohon periksa apakah direktori data berisi sebuah berkas \".ocdata\" di direktori induknya.", "Could not obtain lock type %d on \"%s\"." : "Tidak bisa memperoleh jenis kunci %d pada \"%s\"." diff --git a/lib/private/app/codechecker.php b/lib/private/app/codechecker.php index c8c66d6dcab..75db9ab3560 100644 --- a/lib/private/app/codechecker.php +++ b/lib/private/app/codechecker.php @@ -99,7 +99,7 @@ class CodeChecker extends BasicEmitter { $excludes = array_map(function($item) use ($folder) { return $folder . '/' . $item; - }, ['vendor', '3rdparty', '.git', 'l10n']); + }, ['vendor', '3rdparty', '.git', 'l10n', 'tests', 'test']); $iterator = new RecursiveDirectoryIterator($folder, RecursiveDirectoryIterator::SKIP_DOTS); $iterator = new RecursiveCallbackFilterIterator($iterator, function($item) use ($folder, $excludes){ diff --git a/lib/private/connector/sabre/blocklegacyclientplugin.php b/lib/private/connector/sabre/blocklegacyclientplugin.php new file mode 100644 index 00000000000..9480cd1f06d --- /dev/null +++ b/lib/private/connector/sabre/blocklegacyclientplugin.php @@ -0,0 +1,79 @@ +<?php +/** + * @author Lukas Reschke <lukas@owncloud.com> + * + * @copyright Copyright (c) 2015, ownCloud, Inc. + * @license AGPL-3.0 + * + * This code is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License, version 3, + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License, version 3, + * along with this program. If not, see <http://www.gnu.org/licenses/> + * + */ + +namespace OC\Connector\Sabre; + +use OCP\IConfig; +use Sabre\HTTP\RequestInterface; +use Sabre\DAV\ServerPlugin; +use Sabre\DAV\Exception; + +/** + * Class BlockLegacyClientPlugin is used to detect old legacy sync clients and + * returns a 403 status to those clients + * + * @package OC\Connector\Sabre + */ +class BlockLegacyClientPlugin extends ServerPlugin { + /** @var \Sabre\DAV\Server */ + protected $server; + /** @var IConfig */ + protected $config; + + /** + * @param IConfig $config + */ + public function __construct(IConfig $config) { + $this->config = $config; + } + + /** + * @param \Sabre\DAV\Server $server + * @return void + */ + public function initialize(\Sabre\DAV\Server $server) { + $this->server = $server; + $this->server->on('beforeMethod', [$this, 'beforeHandler'], 200); + } + + /** + * Detects all unsupported clients and throws a \Sabre\DAV\Exception\Forbidden + * exception which will result in a 403 to them. + * @param RequestInterface $request + * @throws \Sabre\DAV\Exception\Forbidden If the client version is not supported + */ + public function beforeHandler(RequestInterface $request) { + $userAgent = $request->getHeader('User-Agent'); + if($userAgent === null) { + return; + } + + $minimumSupportedDesktopVersion = $this->config->getSystemValue('minimum.supported.desktop.version', '1.7.0'); + + // Match on the mirall version which is in scheme "Mozilla/5.0 (%1) mirall/%2" or + // "mirall/%1" for older releases + preg_match("/(?:mirall\\/)([\d.]+)/i", $userAgent, $versionMatches); + if(isset($versionMatches[1]) && + version_compare($versionMatches[1], $minimumSupportedDesktopVersion) === -1) { + throw new \Sabre\DAV\Exception\Forbidden('Unsupported client version.'); + } + } +} diff --git a/lib/private/connector/sabre/file.php b/lib/private/connector/sabre/file.php index dc678c0894f..100aba13668 100644 --- a/lib/private/connector/sabre/file.php +++ b/lib/private/connector/sabre/file.php @@ -117,7 +117,7 @@ class File extends Node implements IFile { $target = $storage->fopen($internalPartPath, 'wb'); if ($target === false) { \OC_Log::write('webdav', '\OC\Files\Filesystem::fopen() failed', \OC_Log::ERROR); - $this->fileView->unlink($partFilePath); + $storage->unlink($internalPartPath); // because we have no clue about the cause we can only throw back a 500/Internal Server Error throw new Exception('Could not write file contents'); } @@ -166,7 +166,7 @@ class File extends Node implements IFile { $fileExists = $storage->file_exists($internalPath); if ($renameOkay === false || $fileExists === false) { \OC_Log::write('webdav', '\OC\Files\Filesystem::rename() failed', \OC_Log::ERROR); - $this->fileView->unlink($partFilePath); + $storage->unlink($internalPartPath); throw new Exception('Could not rename part file to final file'); } } catch (\OCP\Files\LockNotAcquiredException $e) { diff --git a/lib/private/encryption/file.php b/lib/private/encryption/file.php index 48cd0d1187b..5a7357b9e28 100644 --- a/lib/private/encryption/file.php +++ b/lib/private/encryption/file.php @@ -36,7 +36,7 @@ class File implements \OCP\Encryption\IFile { * get list of users with access to the file * * @param string $path to the file - * @return array + * @return array ['users' => $uniqueUserIds, 'public' => $public] */ public function getAccessList($path) { @@ -46,7 +46,7 @@ class File implements \OCP\Encryption\IFile { // always add owner to the list of users with access to the file $userIds = array($owner); - if (!$this->util->isFile($ownerPath)) { + if (!$this->util->isFile($owner . '/' . $ownerPath)) { return array('users' => $userIds, 'public' => false); } diff --git a/lib/private/encryption/keys/factory.php b/lib/private/encryption/keys/factory.php deleted file mode 100644 index 0e2b0292a68..00000000000 --- a/lib/private/encryption/keys/factory.php +++ /dev/null @@ -1,50 +0,0 @@ -<?php -/** - * @author Björn Schießle <schiessle@owncloud.com> - * - * @copyright Copyright (c) 2015, ownCloud, Inc. - * @license AGPL-3.0 - * - * This code is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License, version 3, - * as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License, version 3, - * along with this program. If not, see <http://www.gnu.org/licenses/> - * - */ - -namespace OC\Encryption\Keys; - -use OC\Encryption\Util; -use OC\Files\View; -use OC\User; - -/** - * Factory provides KeyStorage for different encryption modules - */ -class Factory { - /** @var array */ - protected $instances = array(); - - /** - * get a KeyStorage instance - * - * @param string $encryptionModuleId - * @param View $view - * @param Util $util - * @return Storage - */ - public function get($encryptionModuleId,View $view, Util $util) { - if (!isset($this->instances[$encryptionModuleId])) { - $this->instances[$encryptionModuleId] = new Storage($encryptionModuleId, $view, $util); - } - return $this->instances[$encryptionModuleId]; - } - -} diff --git a/lib/private/encryption/keys/storage.php b/lib/private/encryption/keys/storage.php index 925c20c74c8..118c8dc920d 100644 --- a/lib/private/encryption/keys/storage.php +++ b/lib/private/encryption/keys/storage.php @@ -23,10 +23,12 @@ namespace OC\Encryption\Keys; use OC\Encryption\Util; +use OC\Files\Filesystem; use OC\Files\View; use OCP\Encryption\Exceptions\GenericEncryptionException; +use OCP\Encryption\Keys\IStorage; -class Storage implements \OCP\Encryption\Keys\IStorage { +class Storage implements IStorage { /** @var View */ private $view; @@ -35,171 +37,123 @@ class Storage implements \OCP\Encryption\Keys\IStorage { private $util; // base dir where all the file related keys are stored + /** @var string */ private $keys_base_dir; - private $encryption_base_dir; - - private $keyCache = array(); /** @var string */ - private $encryptionModuleId; + private $encryption_base_dir; + + /** @var array */ + private $keyCache = []; /** - * @param string $encryptionModuleId * @param View $view * @param Util $util */ - public function __construct($encryptionModuleId, View $view, Util $util) { + public function __construct(View $view, Util $util) { $this->view = $view; $this->util = $util; - $this->encryptionModuleId = $encryptionModuleId; $this->encryption_base_dir = '/files_encryption'; $this->keys_base_dir = $this->encryption_base_dir .'/keys'; } /** - * get user specific key - * - * @param string $uid ID if the user for whom we want the key - * @param string $keyId id of the key - * - * @return mixed key + * @inheritdoc */ - public function getUserKey($uid, $keyId) { - $path = $this->constructUserKeyPath($keyId, $uid); + public function getUserKey($uid, $keyId, $encryptionModuleId) { + $path = $this->constructUserKeyPath($encryptionModuleId, $keyId, $uid); return $this->getKey($path); } /** - * get file specific key - * - * @param string $path path to file - * @param string $keyId id of the key - * - * @return mixed key + * @inheritdoc */ - public function getFileKey($path, $keyId) { - $keyDir = $this->getFileKeyDir($path); + public function getFileKey($path, $keyId, $encryptionModuleId) { + $keyDir = $this->getFileKeyDir($encryptionModuleId, $path); return $this->getKey($keyDir . $keyId); } /** - * get system-wide encryption keys not related to a specific user, - * e.g something like a key for public link shares - * - * @param string $keyId id of the key - * - * @return mixed key + * @inheritdoc */ - public function getSystemUserKey($keyId) { - $path = $this->constructUserKeyPath($keyId); + public function getSystemUserKey($keyId, $encryptionModuleId) { + $path = $this->constructUserKeyPath($encryptionModuleId, $keyId, null); return $this->getKey($path); } /** - * set user specific key - * - * @param string $uid ID if the user for whom we want the key - * @param string $keyId id of the key - * @param mixed $key + * @inheritdoc */ - public function setUserKey($uid, $keyId, $key) { - $path = $this->constructUserKeyPath($keyId, $uid); + public function setUserKey($uid, $keyId, $key, $encryptionModuleId) { + $path = $this->constructUserKeyPath($encryptionModuleId, $keyId, $uid); return $this->setKey($path, $key); } /** - * set file specific key - * - * @param string $path path to file - * @param string $keyId id of the key - * @param boolean + * @inheritdoc */ - public function setFileKey($path, $keyId, $key) { - $keyDir = $this->getFileKeyDir($path); + public function setFileKey($path, $keyId, $key, $encryptionModuleId) { + $keyDir = $this->getFileKeyDir($encryptionModuleId, $path); return $this->setKey($keyDir . $keyId, $key); } /** - * set system-wide encryption keys not related to a specific user, - * e.g something like a key for public link shares - * - * @param string $keyId id of the key - * @param mixed $key - * - * @return mixed key + * @inheritdoc */ - public function setSystemUserKey($keyId, $key) { - $path = $this->constructUserKeyPath($keyId); + public function setSystemUserKey($keyId, $key, $encryptionModuleId) { + $path = $this->constructUserKeyPath($encryptionModuleId, $keyId, null); return $this->setKey($path, $key); } /** - * delete user specific key - * - * @param string $uid ID if the user for whom we want to delete the key - * @param string $keyId id of the key - * - * @return boolean False when the key could not be deleted + * @inheritdoc */ - public function deleteUserKey($uid, $keyId) { - $path = $this->constructUserKeyPath($keyId, $uid); + public function deleteUserKey($uid, $keyId, $encryptionModuleId) { + $path = $this->constructUserKeyPath($encryptionModuleId, $keyId, $uid); return !$this->view->file_exists($path) || $this->view->unlink($path); } /** - * delete file specific key - * - * @param string $path path to file - * @param string $keyId id of the key - * - * @return boolean False when the key could not be deleted + * @inheritdoc */ - public function deleteFileKey($path, $keyId) { - $keyDir = $this->getFileKeyDir($path); + public function deleteFileKey($path, $keyId, $encryptionModuleId) { + $keyDir = $this->getFileKeyDir($encryptionModuleId, $path); return !$this->view->file_exists($keyDir . $keyId) || $this->view->unlink($keyDir . $keyId); } /** - * delete all file keys for a given file - * - * @param string $path to the file - * @return boolean False when the key could not be deleted + * @inheritdoc */ - public function deleteAllFileKeys($path) { - $keyDir = $this->getFileKeyDir($path); + public function deleteAllFileKeys($path, $encryptionModuleId) { + $keyDir = $this->getFileKeyDir($encryptionModuleId, $path); $path = dirname($keyDir); return !$this->view->file_exists($path) || $this->view->deleteAll($path); } /** - * delete system-wide encryption keys not related to a specific user, - * e.g something like a key for public link shares - * - * @param string $keyId id of the key - * - * @return boolean False when the key could not be deleted + * @inheritdoc */ - public function deleteSystemUserKey($keyId) { - $path = $this->constructUserKeyPath($keyId); + public function deleteSystemUserKey($keyId, $encryptionModuleId) { + $path = $this->constructUserKeyPath($encryptionModuleId, $keyId, null); return !$this->view->file_exists($path) || $this->view->unlink($path); } - /** * construct path to users key * + * @param string $encryptionModuleId * @param string $keyId * @param string $uid * @return string */ - protected function constructUserKeyPath($keyId, $uid = null) { + protected function constructUserKeyPath($encryptionModuleId, $keyId, $uid) { if ($uid === null) { - $path = $this->encryption_base_dir . '/' . $this->encryptionModuleId . '/' . $keyId; + $path = $this->encryption_base_dir . '/' . $encryptionModuleId . '/' . $keyId; } else { $path = '/' . $uid . $this->encryption_base_dir . '/' - . $this->encryptionModuleId . '/' . $uid . '.' . $keyId; + . $encryptionModuleId . '/' . $uid . '.' . $keyId; } return $path; @@ -251,12 +205,13 @@ class Storage implements \OCP\Encryption\Keys\IStorage { /** * get path to key folder for a given file * + * @param string $encryptionModuleId * @param string $path path to the file, relative to data/ * @return string * @throws GenericEncryptionException * @internal param string $keyId */ - private function getFileKeyDir($path) { + private function getFileKeyDir($encryptionModuleId, $path) { if ($this->view->is_dir($path)) { throw new GenericEncryptionException("file was expected but directory was given: $path"); @@ -272,7 +227,7 @@ class Storage implements \OCP\Encryption\Keys\IStorage { $keyPath = '/' . $owner . $this->keys_base_dir . $filename . '/'; } - return \OC\Files\Filesystem::normalizePath($keyPath . $this->encryptionModuleId . '/', false); + return Filesystem::normalizePath($keyPath . $encryptionModuleId . '/', false); } /** @@ -280,8 +235,7 @@ class Storage implements \OCP\Encryption\Keys\IStorage { * * @param string $source * @param string $target - * @param string $owner - * @param bool $systemWide + * @return boolean */ public function renameKeys($source, $target) { @@ -300,7 +254,11 @@ class Storage implements \OCP\Encryption\Keys\IStorage { if ($this->view->file_exists($sourcePath)) { $this->keySetPreparation(dirname($targetPath)); $this->view->rename($sourcePath, $targetPath); + + return true; } + + return false; } /** @@ -308,8 +266,7 @@ class Storage implements \OCP\Encryption\Keys\IStorage { * * @param string $source * @param string $target - * @param string $owner - * @param bool $systemWide + * @return boolean */ public function copyKeys($source, $target) { @@ -328,11 +285,14 @@ class Storage implements \OCP\Encryption\Keys\IStorage { if ($this->view->file_exists($sourcePath)) { $this->keySetPreparation(dirname($targetPath)); $this->view->copy($sourcePath, $targetPath); + return true; } + + return false; } /** - * Make preparations to filesystem for saving a keyfile + * Make preparations to filesystem for saving a key file * * @param string $path relative to the views root */ diff --git a/lib/private/encryption/manager.php b/lib/private/encryption/manager.php index 7a3f17519fc..1a42646daf6 100644 --- a/lib/private/encryption/manager.php +++ b/lib/private/encryption/manager.php @@ -22,6 +22,7 @@ namespace OC\Encryption; +use OC\Files\Filesystem; use OC\Files\Storage\Shared; use OC\Files\Storage\Wrapper\Encryption; use OC\Files\View; @@ -100,17 +101,17 @@ class Manager implements IManager { throw new Exceptions\ModuleAlreadyExistsException($id, $displayName); } - $defaultEncryptionModuleId = $this->getDefaultEncryptionModuleId(); - - if (empty($defaultEncryptionModuleId)) { - $this->setDefaultEncryptionModule($id); - } - $this->encryptionModules[$id] = [ 'id' => $id, 'displayName' => $displayName, 'callback' => $callback, ]; + + $defaultEncryptionModuleId = $this->getDefaultEncryptionModuleId(); + + if (empty($defaultEncryptionModuleId)) { + $this->setDefaultEncryptionModule($id); + } } /** @@ -157,7 +158,7 @@ class Manager implements IManager { * @return \OCP\Encryption\IEncryptionModule * @throws Exceptions\ModuleDoesNotExistsException */ - public function getDefaultEncryptionModule() { + protected function getDefaultEncryptionModule() { $defaultModuleId = $this->getDefaultEncryptionModuleId(); if (!empty($defaultModuleId)) { if (isset($this->encryptionModules[$defaultModuleId])) { @@ -181,12 +182,13 @@ class Manager implements IManager { */ public function setDefaultEncryptionModule($moduleId) { try { - $this->config->setAppValue('core', 'default_encryption_module', $moduleId); - return true; + $this->getEncryptionModule($moduleId); } catch (\Exception $e) { return false; } + $this->config->setAppValue('core', 'default_encryption_module', $moduleId); + return true; } /** @@ -194,12 +196,8 @@ class Manager implements IManager { * * @return string */ - protected function getDefaultEncryptionModuleId() { - try { - return $this->config->getAppValue('core', 'default_encryption_module'); - } catch (\Exception $e) { - return ''; - } + public function getDefaultEncryptionModuleId() { + return $this->config->getAppValue('core', 'default_encryption_module'); } public static function setupStorage() { @@ -221,7 +219,25 @@ class Manager implements IManager { $logger = \OC::$server->getLogger(); $uid = $user ? $user->getUID() : null; $fileHelper = \OC::$server->getEncryptionFilesHelper(); - return new Encryption($parameters, $manager, $util, $logger, $fileHelper, $uid); + $keyStorage = \OC::$server->getEncryptionKeyStorage(); + $update = new Update( + new View(), + $util, + Filesystem::getMountManager(), + $manager, + $fileHelper, + $uid + ); + return new Encryption( + $parameters, + $manager, + $util, + $logger, + $fileHelper, + $uid, + $keyStorage, + $update + ); } else { return $storage; } diff --git a/lib/private/encryption/update.php b/lib/private/encryption/update.php index 7a170a03adc..a0b0af968c6 100644 --- a/lib/private/encryption/update.php +++ b/lib/private/encryption/update.php @@ -22,6 +22,7 @@ namespace OC\Encryption; +use OC\Files\Filesystem; use \OC\Files\Mount; use \OC\Files\View; @@ -74,46 +75,73 @@ class Update { $this->uid = $uid; } + /** + * hook after file was shared + * + * @param array $params + */ public function postShared($params) { if ($params['itemType'] === 'file' || $params['itemType'] === 'folder') { - $this->update($params['fileSource']); + $path = Filesystem::getPath($params['fileSource']); + list($owner, $ownerPath) = $this->getOwnerPath($path); + $absPath = '/' . $owner . '/files/' . $ownerPath; + $this->update($absPath); } } + /** + * hook after file was unshared + * + * @param array $params + */ public function postUnshared($params) { if ($params['itemType'] === 'file' || $params['itemType'] === 'folder') { - $this->update($params['fileSource']); + $path = Filesystem::getPath($params['fileSource']); + list($owner, $ownerPath) = $this->getOwnerPath($path); + $absPath = '/' . $owner . '/files/' . $ownerPath; + $this->update($absPath); } } /** - * update keyfiles and share keys recursively + * get owner and path relative to data/<owner>/files * - * @param int $fileSource file source id + * @param string $path path to file for current user + * @return array ['owner' => $owner, 'path' => $path] + * @throw \InvalidArgumentException */ - private function update($fileSource) { - $path = \OC\Files\Filesystem::getPath($fileSource); - $info = \OC\Files\Filesystem::getFileInfo($path); - $owner = \OC\Files\Filesystem::getOwner($path); - $view = new \OC\Files\View('/' . $owner . '/files'); - $ownerPath = $view->getPath($info->getId()); - $absPath = '/' . $owner . '/files' . $ownerPath; + private function getOwnerPath($path) { + $info = Filesystem::getFileInfo($path); + $owner = Filesystem::getOwner($path); + $view = new View('/' . $owner . '/files'); + $path = $view->getPath($info->getId()); + if ($path === null) { + throw new \InvalidArgumentException('No file found for ' . $info->getId()); + } + + return array($owner, $path); + } - $mount = $this->mountManager->find($path); - $mountPoint = $mount->getMountPoint(); + /** + * notify encryption module about added/removed users from a file/folder + * + * @param string $path relative to data/ + * @throws Exceptions\ModuleDoesNotExistsException + */ + public function update($path) { // if a folder was shared, get a list of all (sub-)folders - if ($this->view->is_dir($absPath)) { - $allFiles = $this->util->getAllFiles($absPath, $mountPoint); + if ($this->view->is_dir($path)) { + $allFiles = $this->util->getAllFiles($path); } else { - $allFiles = array($absPath); + $allFiles = array($path); } - $encryptionModule = $this->encryptionManager->getDefaultEncryptionModule(); + $encryptionModule = $this->encryptionManager->getEncryptionModule(); - foreach ($allFiles as $path) { - $usersSharing = $this->file->getAccessList($path); - $encryptionModule->update($path, $this->uid, $usersSharing); + foreach ($allFiles as $file) { + $usersSharing = $this->file->getAccessList($file); + $encryptionModule->update($file, $this->uid, $usersSharing); } } diff --git a/lib/private/encryption/util.php b/lib/private/encryption/util.php index 98a38012dba..032ac83f37e 100644 --- a/lib/private/encryption/util.php +++ b/lib/private/encryption/util.php @@ -25,6 +25,7 @@ namespace OC\Encryption; use OC\Encryption\Exceptions\EncryptionHeaderKeyExistsException; use OC\Encryption\Exceptions\EncryptionHeaderToLargeException; use OC\Encryption\Exceptions\ModuleDoesNotExistsException; +use OC\Files\Filesystem; use OC\Files\View; use OCP\Encryption\IEncryptionModule; use OCP\IConfig; @@ -181,10 +182,9 @@ class Util { * go recursively through a dir and collect all files and sub files. * * @param string $dir relative to the users files folder - * @param string $mountPoint * @return array with list of files relative to the users files folder */ - public function getAllFiles($dir, $mountPoint = '') { + public function getAllFiles($dir) { $result = array(); $dirList = array($dir); @@ -193,13 +193,10 @@ class Util { $content = $this->view->getDirectoryContent($dir); foreach ($content as $c) { - // getDirectoryContent() returns the paths relative to the mount points, so we need - // to re-construct the complete path - $path = ($mountPoint !== '') ? $mountPoint . '/' . $c->getPath() : $c->getPath(); - if ($c['type'] === 'dir') { - $dirList[] = \OC\Files\Filesystem::normalizePath($path); + if ($c->getType() === 'dir') { + $dirList[] = $c->getPath(); } else { - $result[] = \OC\Files\Filesystem::normalizePath($path); + $result[] = $c->getPath(); } } @@ -212,11 +209,12 @@ class Util { * check if it is a file uploaded by the user stored in data/user/files * or a metadata file * - * @param string $path + * @param string $path relative to the data/ folder * @return boolean */ public function isFile($path) { - if (substr($path, 0, strlen('/files/')) === '/files/') { + $parts = explode('/', Filesystem::normalizePath($path), 4); + if (isset($parts[2]) && $parts[2] === 'files') { return true; } return false; @@ -262,7 +260,7 @@ class Util { $ownerPath = implode('/', array_slice($parts, 2)); - return array($uid, \OC\Files\Filesystem::normalizePath($ownerPath)); + return array($uid, Filesystem::normalizePath($ownerPath)); } diff --git a/lib/private/files/cache/cache.php b/lib/private/files/cache/cache.php index f00177d9c5b..7d3738fdc73 100644 --- a/lib/private/files/cache/cache.php +++ b/lib/private/files/cache/cache.php @@ -306,10 +306,17 @@ class Cache { } list($queryParts, $params) = $this->buildParts($data); + // duplicate $params because we need the parts twice in the SQL statement + // once for the SET part, once in the WHERE clause + $params = array_merge($params, $params); $params[] = $id; - $sql = 'UPDATE `*PREFIX*filecache` SET ' . implode(' = ?, ', $queryParts) . '=? WHERE `fileid` = ?'; + // don't update if the data we try to set is the same as the one in the record + // some databases (Postgres) don't like superfluous updates + $sql = 'UPDATE `*PREFIX*filecache` SET ' . implode(' = ?, ', $queryParts) . '=? ' . + 'WHERE (' . implode(' <> ? OR ', $queryParts) . ' <> ? ) AND `fileid` = ? '; \OC_DB::executeAudited($sql, $params); + } /** diff --git a/lib/private/files/cache/scanner.php b/lib/private/files/cache/scanner.php index 0878b6c60a0..d253afbfa1d 100644 --- a/lib/private/files/cache/scanner.php +++ b/lib/private/files/cache/scanner.php @@ -103,23 +103,10 @@ class Scanner extends BasicEmitter { * @return array an array of metadata of the file */ public function getData($path) { - $permissions = $this->storage->getPermissions($path); - if (!$permissions & \OCP\PERMISSION_READ) { - //cant read, nothing we can do + $data = $this->storage->getMetaData($path); + if (is_null($data)) { \OCP\Util::writeLog('OC\Files\Cache\Scanner', "!!! Path '$path' is not accessible or present !!!", \OCP\Util::DEBUG); - return null; } - $data = array(); - $data['mimetype'] = $this->storage->getMimeType($path); - $data['mtime'] = $this->storage->filemtime($path); - if ($data['mimetype'] == 'httpd/unix-directory') { - $data['size'] = -1; //unknown - } else { - $data['size'] = $this->storage->filesize($path); - } - $data['etag'] = $this->storage->getETag($path); - $data['storage_mtime'] = $data['mtime']; - $data['permissions'] = $permissions; return $data; } diff --git a/lib/private/files/storage/common.php b/lib/private/files/storage/common.php index 66ed713e22d..06c61fe6931 100644 --- a/lib/private/files/storage/common.php +++ b/lib/private/files/storage/common.php @@ -580,4 +580,29 @@ abstract class Common implements Storage { } return $result; } + + /** + * @inheritdoc + */ + public function getMetaData($path) { + $permissions = $this->getPermissions($path); + if (!$permissions & \OCP\Constants::PERMISSION_READ) { + //cant read, nothing we can do + return null; + } + + $data = []; + $data['mimetype'] = $this->getMimeType($path); + $data['mtime'] = $this->filemtime($path); + if ($data['mimetype'] == 'httpd/unix-directory') { + $data['size'] = -1; //unknown + } else { + $data['size'] = $this->filesize($path); + } + $data['etag'] = $this->getETag($path); + $data['storage_mtime'] = $data['mtime']; + $data['permissions'] = $this->getPermissions($path); + + return $data; + } } diff --git a/lib/private/files/storage/storage.php b/lib/private/files/storage/storage.php index 4b75fa9da89..07b5633c908 100644 --- a/lib/private/files/storage/storage.php +++ b/lib/private/files/storage/storage.php @@ -70,4 +70,10 @@ interface Storage extends \OCP\Files\Storage { */ public function getStorageCache(); + /** + * @param string $path + * @return array + */ + public function getMetaData($path); + } diff --git a/lib/private/files/storage/wrapper/encryption.php b/lib/private/files/storage/wrapper/encryption.php index 01bd861e3a2..af48d3475c3 100644 --- a/lib/private/files/storage/wrapper/encryption.php +++ b/lib/private/files/storage/wrapper/encryption.php @@ -23,8 +23,15 @@ namespace OC\Files\Storage\Wrapper; use OC\Encryption\Exceptions\ModuleDoesNotExistsException; +use OC\Encryption\Update; +use OC\Encryption\Util; +use OC\Files\Filesystem; use OC\Files\Storage\LocalTempFileTrait; +use OCP\Encryption\IFile; +use OCP\Encryption\IManager; +use OCP\Encryption\Keys\IStorage; use OCP\Files\Mount\IMountPoint; +use OCP\ILogger; class Encryption extends Wrapper { @@ -36,10 +43,10 @@ class Encryption extends Wrapper { /** @var \OC\Encryption\Util */ private $util; - /** @var \OC\Encryption\Manager */ + /** @var \OCP\Encryption\IManager */ private $encryptionManager; - /** @var \OC\Log */ + /** @var \OCP\ILogger */ private $logger; /** @var string */ @@ -48,27 +55,37 @@ class Encryption extends Wrapper { /** @var array */ private $unencryptedSize; - /** @var \OC\Encryption\File */ + /** @var \OCP\Encryption\IFile */ private $fileHelper; /** @var IMountPoint */ private $mount; + /** @var \OCP\Encryption\Keys\IStorage */ + private $keyStorage; + + /** @var \OC\Encryption\Update */ + private $update; + /** * @param array $parameters - * @param \OC\Encryption\Manager $encryptionManager + * @param \OCP\Encryption\IManager $encryptionManager * @param \OC\Encryption\Util $util - * @param \OC\Log $logger - * @param \OC\Encryption\File $fileHelper + * @param \OCP\ILogger $logger + * @param \OCP\Encryption\IFile $fileHelper * @param string $uid user who perform the read/write operation (null for public access) + * @param IStorage $keyStorage + * @param Update $update */ public function __construct( $parameters, - \OC\Encryption\Manager $encryptionManager = null, - \OC\Encryption\Util $util = null, - \OC\Log $logger = null, - \OC\Encryption\File $fileHelper = null, - $uid = null + IManager $encryptionManager = null, + Util $util = null, + ILogger $logger = null, + IFile $fileHelper = null, + $uid = null, + IStorage $keyStorage = null, + Update $update = null ) { $this->mountPoint = $parameters['mountPoint']; @@ -78,7 +95,9 @@ class Encryption extends Wrapper { $this->logger = $logger; $this->uid = $uid; $this->fileHelper = $fileHelper; + $this->keyStorage = $keyStorage; $this->unencryptedSize = array(); + $this->update = $update; parent::__construct($parameters); } @@ -111,6 +130,30 @@ class Encryption extends Wrapper { } /** + * @param string $path + * @return array + */ + public function getMetaData($path) { + $data = $this->storage->getMetaData($path); + if (is_null($data)) { + return null; + } + $fullPath = $this->getFullPath($path); + + if (isset($this->unencryptedSize[$fullPath])) { + $data['encrypted'] = true; + $data['size'] = $this->unencryptedSize[$fullPath]; + } else { + $info = $this->getCache()->get($path); + if (isset($info['fileid']) && $info['encrypted']) { + $data['encrypted'] = true; + $data['size'] = $info['size']; + } + } + + return $data; + } + /** * see http://php.net/manual/en/function.file_get_contents.php * * @param string $path @@ -161,8 +204,8 @@ class Encryption extends Wrapper { $encryptionModule = $this->getEncryptionModule($path); if ($encryptionModule) { - $keyStorage = $this->getKeyStorage($encryptionModule->getId()); - $keyStorage->deleteAllFileKeys($this->getFullPath($path)); + $this->keyStorage->deleteAllFileKeys($this->getFullPath($path), + $encryptionModule->getId()); } return $this->storage->unlink($path); @@ -176,22 +219,23 @@ class Encryption extends Wrapper { * @return bool */ public function rename($path1, $path2) { - $fullPath1 = $this->getFullPath($path1); - if ($this->util->isExcluded($fullPath1)) { + $source = $this->getFullPath($path1); + if ($this->util->isExcluded($source)) { return $this->storage->rename($path1, $path2); } - $source = $this->getFullPath($path1); $result = $this->storage->rename($path1, $path2); if ($result) { $target = $this->getFullPath($path2); if (isset($this->unencryptedSize[$source])) { $this->unencryptedSize[$target] = $this->unencryptedSize[$source]; } - $encryptionModule = $this->getEncryptionModule($path2); - if ($encryptionModule) { - $keyStorage = $this->getKeyStorage($encryptionModule->getId()); - $keyStorage->renameKeys($source, $target); + $keysRenamed = $this->keyStorage->renameKeys($source, $target); + if ($keysRenamed && + dirname($source) !== dirname($target) && + $this->util->isFile($target) + ) { + $this->update->update($target); } } @@ -215,10 +259,12 @@ class Encryption extends Wrapper { $result = $this->storage->copy($path1, $path2); if ($result) { $target = $this->getFullPath($path2); - $encryptionModule = $this->getEncryptionModule($path2); - if ($encryptionModule) { - $keyStorage = $this->getKeyStorage($encryptionModule->getId()); - $keyStorage->copyKeys($source, $target); + $keysCopied = $this->keyStorage->copyKeys($source, $target); + if ($keysCopied && + dirname($source) !== dirname($target) && + $this->util->isFile($target) + ) { + $this->update->update($target); } } @@ -265,12 +311,10 @@ class Encryption extends Wrapper { || $mode === 'wb' || $mode === 'wb+' ) { - if (!empty($encryptionModuleId)) { + if ($encryptionEnabled) { + // if $encryptionModuleId is empty, the default module will be used $encryptionModule = $this->encryptionManager->getEncryptionModule($encryptionModuleId); $shouldEncrypt = $encryptionModule->shouldEncrypt($fullPath); - } elseif ($encryptionEnabled) { - $encryptionModule = $this->encryptionManager->getDefaultEncryptionModule(); - $shouldEncrypt = $encryptionModule->shouldEncrypt($fullPath); } } else { // only get encryption module if we found one in the header @@ -360,7 +404,7 @@ class Encryption extends Wrapper { * @return string full path including mount point */ protected function getFullPath($path) { - return \OC\Files\Filesystem::normalizePath($this->mountPoint . '/' . $path); + return Filesystem::normalizePath($this->mountPoint . '/' . $path); } /** @@ -405,14 +449,4 @@ class Encryption extends Wrapper { public function updateUnencryptedSize($path, $unencryptedSize) { $this->unencryptedSize[$path] = $unencryptedSize; } - - /** - * @param string $encryptionModuleId - * @return \OCP\Encryption\Keys\IStorage - */ - protected function getKeyStorage($encryptionModuleId) { - $keyStorage = \OC::$server->getEncryptionKeyStorage($encryptionModuleId); - return $keyStorage; - } - } diff --git a/lib/private/files/storage/wrapper/wrapper.php b/lib/private/files/storage/wrapper/wrapper.php index 2552c926e02..f3dc09db138 100644 --- a/lib/private/files/storage/wrapper/wrapper.php +++ b/lib/private/files/storage/wrapper/wrapper.php @@ -525,4 +525,12 @@ class Wrapper implements \OC\Files\Storage\Storage { public function moveFromStorage(\OCP\Files\Storage $sourceStorage, $sourceInternalPath, $targetInternalPath) { return $this->storage->moveFromStorage($sourceStorage, $sourceInternalPath, $targetInternalPath); } + + /** + * @param string $path + * @return array + */ + public function getMetaData($path) { + return $this->storage->getMetaData($path); + } } diff --git a/lib/private/files/stream/encryption.php b/lib/private/files/stream/encryption.php index 4a1df840105..5f39207db87 100644 --- a/lib/private/files/stream/encryption.php +++ b/lib/private/files/stream/encryption.php @@ -1,7 +1,7 @@ <?php /** * @author Björn Schießle <schiessle@owncloud.com> - * @author jknockaert <jasper@knockaert.nl> + * @author Jasper Knockaert <jasper@knockaert.nl> * @author Thomas Müller <thomas.mueller@tmit.eu> * * @copyright Copyright (c) 2015, ownCloud, Inc. @@ -221,11 +221,9 @@ class Encryption extends Wrapper { || $mode === 'w+' || $mode === 'wb' || $mode === 'wb+' + || $mode === 'r+' + || $mode === 'rb+' ) { - // We're writing a new file so start write counter with 0 bytes - // TODO can we remove this completely? - //$this->unencryptedSize = 0; - //$this->size = 0; $this->readOnly = false; } else { $this->readOnly = true; @@ -233,25 +231,38 @@ class Encryption extends Wrapper { $sharePath = $this->fullPath; if (!$this->storage->file_exists($this->internalPath)) { - $sharePath = dirname($path); + $sharePath = dirname($sharePath); } $accessList = $this->file->getAccessList($sharePath); $this->newHeader = $this->encryptionModule->begin($this->fullPath, $this->uid, $this->header, $accessList); + if ( + $mode === 'w' + || $mode === 'w+' + || $mode === 'wb' + || $mode === 'wb+' + ) { + // We're writing a new file so start write counter with 0 bytes + $this->unencryptedSize = 0; + $this->writeHeader(); + $this->size = $this->util->getHeaderSize(); + } else { + $this->skipHeader(); + } + return true; } + public function stream_eof() { + return $this->position >= $this->unencryptedSize; + } + public function stream_read($count) { $result = ''; - // skip the header if we read the file from the beginning - if ($this->position === 0) { - parent::stream_read($this->util->getHeaderSize()); - } - // $count = min($count, $this->unencryptedSize - $this->position); while ($count > 0) { $remainingLength = $count; @@ -278,11 +289,6 @@ class Encryption extends Wrapper { public function stream_write($data) { - if ($this->position === 0) { - $this->writeHeader(); - $this->size = $this->util->getHeaderSize(); - } - $length = 0; // loop over $data to fit it in 6126 sized unencrypted blocks while (strlen($data) > 0) { @@ -425,9 +431,16 @@ class Encryption extends Wrapper { * @return integer * @throws EncryptionHeaderKeyExistsException if header key is already in use */ - private function writeHeader() { + protected function writeHeader() { $header = $this->util->createHeader($this->newHeader, $this->encryptionModule); return parent::stream_write($header); } + /** + * read first block to skip the header + */ + protected function skipHeader() { + parent::stream_read($this->util->getHeaderSize()); + } + } diff --git a/lib/private/files/view.php b/lib/private/files/view.php index 3300998da35..162bf568de7 100644 --- a/lib/private/files/view.php +++ b/lib/private/files/view.php @@ -76,6 +76,9 @@ class View { * @throws \Exception If $root contains an invalid path */ public function __construct($root = '') { + if (is_null($root)) { + throw new \InvalidArgumentException('Root can\'t be null'); + } if(!Filesystem::isValidPath($root)) { throw new \Exception(); } @@ -85,6 +88,9 @@ class View { } public function getAbsolutePath($path = '/') { + if ($path === null) { + return null; + } $this->assertPathLength($path); if ($path === '') { $path = '/'; diff --git a/lib/private/server.php b/lib/private/server.php index d321ecb68bd..8fdeec5281c 100644 --- a/lib/private/server.php +++ b/lib/private/server.php @@ -97,8 +97,16 @@ class Server extends SimpleContainer implements IServerContainer { return new Encryption\File($util); }); - $this->registerService('EncryptionKeyStorageFactory', function ($c) { - return new Encryption\Keys\Factory(); + $this->registerService('EncryptionKeyStorage', function (Server $c) { + $view = new \OC\Files\View(); + $util = new \OC\Encryption\Util( + $view, + $c->getUserManager(), + $c->getGroupManager(), + $c->getConfig() + ); + + return new Encryption\Keys\Storage($view, $util); }); $this->registerService('TagMapper', function(Server $c) { return new TagMapper($c->getDatabaseConnection()); @@ -436,19 +444,10 @@ class Server extends SimpleContainer implements IServerContainer { } /** - * @param string $encryptionModuleId encryption module ID - * * @return \OCP\Encryption\Keys\IStorage */ - public function getEncryptionKeyStorage($encryptionModuleId) { - $view = new \OC\Files\View(); - $util = new \OC\Encryption\Util( - $view, - \OC::$server->getUserManager(), - \OC::$server->getGroupManager(), - \OC::$server->getConfig() - ); - return $this->query('EncryptionKeyStorageFactory')->get($encryptionModuleId, $view, $util); + public function getEncryptionKeyStorage() { + return $this->query('EncryptionKeyStorage'); } /** diff --git a/lib/private/template/resourcenotfoundexception.php b/lib/private/template/resourcenotfoundexception.php index a422563d541..26655b78eee 100644 --- a/lib/private/template/resourcenotfoundexception.php +++ b/lib/private/template/resourcenotfoundexception.php @@ -39,6 +39,6 @@ class ResourceNotFoundException extends \LogicException { * @return string */ public function getResourcePath() { - return $this->resource . '/' . $this->webPath; + return $this->webPath . '/' . $this->resource; } } diff --git a/lib/private/tempmanager.php b/lib/private/tempmanager.php index 5ab1427c505..eeffc6b339d 100644 --- a/lib/private/tempmanager.php +++ b/lib/private/tempmanager.php @@ -2,6 +2,7 @@ /** * @author Morris Jobke <hey@morrisjobke.de> * @author Robin Appelman <icewind@owncloud.com> + * @author Lukas Reschke <lukas@owncloud.com> * * @copyright Copyright (c) 2015, ownCloud, Inc. * @license AGPL-3.0 @@ -26,24 +27,14 @@ use OCP\ILogger; use OCP\ITempManager; class TempManager implements ITempManager { - /** - * Current temporary files and folders - * - * @var string[] - */ - protected $current = array(); - - /** - * i.e. /tmp on linux systems - * - * @var string - */ + /** @var string[] Current temporary files and folders, used for cleanup */ + protected $current = []; + /** @var string i.e. /tmp on linux systems */ protected $tmpBaseDir; - - /** - * @var \OCP\ILogger - */ + /** @var ILogger */ protected $log; + /** Prefix */ + const TMP_PREFIX = 'oc_tmp_'; /** * @param string $baseDir @@ -55,35 +46,55 @@ class TempManager implements ITempManager { } /** - * @param string $postFix + * Builds the filename with suffix and removes potential dangerous characters + * such as directory separators. + * + * @param string $absolutePath Absolute path to the file / folder + * @param string $postFix Postfix appended to the temporary file name, may be user controlled * @return string */ - protected function generatePath($postFix) { - if ($postFix) { + private function buildFileNameWithSuffix($absolutePath, $postFix = '') { + if($postFix !== '') { $postFix = '.' . ltrim($postFix, '.'); + $postFix = str_replace(['\\', '/'], '', $postFix); + $absolutePath .= '-'; } - $postFix = str_replace(['\\', '/'], '', $postFix); - return $this->tmpBaseDir . '/oc_tmp_' . md5(time() . rand()) . $postFix; + + return $absolutePath . $postFix; } /** * Create a temporary file and return the path * - * @param string $postFix + * @param string $postFix Postfix appended to the temporary file name * @return string */ public function getTemporaryFile($postFix = '') { - $file = $this->generatePath($postFix); if (is_writable($this->tmpBaseDir)) { - touch($file); + // To create an unique file and prevent the risk of race conditions + // or duplicated temporary files by other means such as collisions + // we need to create the file using `tempnam` and append a possible + // postfix to it later + $file = tempnam($this->tmpBaseDir, self::TMP_PREFIX); $this->current[] = $file; + + // If a postfix got specified sanitize it and create a postfixed + // temporary file + if($postFix !== '') { + $fileNameWithPostfix = $this->buildFileNameWithSuffix($file, $postFix); + touch($fileNameWithPostfix); + chmod($fileNameWithPostfix, 0600); + $this->current[] = $fileNameWithPostfix; + return $fileNameWithPostfix; + } + return $file; } else { $this->log->warning( 'Can not create a temporary file in directory {dir}. Check it exists and has correct permissions', - array( - 'dir' => $this->tmpBaseDir - ) + [ + 'dir' => $this->tmpBaseDir, + ] ); return false; } @@ -92,21 +103,30 @@ class TempManager implements ITempManager { /** * Create a temporary folder and return the path * - * @param string $postFix + * @param string $postFix Postfix appended to the temporary folder name * @return string */ public function getTemporaryFolder($postFix = '') { - $path = $this->generatePath($postFix); if (is_writable($this->tmpBaseDir)) { - mkdir($path); + // To create an unique directory and prevent the risk of race conditions + // or duplicated temporary files by other means such as collisions + // we need to create the file using `tempnam` and append a possible + // postfix to it later + $uniqueFileName = tempnam($this->tmpBaseDir, self::TMP_PREFIX); + $this->current[] = $uniqueFileName; + + // Build a name without postfix + $path = $this->buildFileNameWithSuffix($uniqueFileName . '-folder', $postFix); + mkdir($path, 0700); $this->current[] = $path; + return $path . '/'; } else { $this->log->warning( 'Can not create a temporary folder in directory {dir}. Check it exists and has correct permissions', - array( - 'dir' => $this->tmpBaseDir - ) + [ + 'dir' => $this->tmpBaseDir, + ] ); return false; } @@ -119,6 +139,9 @@ class TempManager implements ITempManager { $this->cleanFiles($this->current); } + /** + * @param string[] $files + */ protected function cleanFiles($files) { foreach ($files as $file) { if (file_exists($file)) { @@ -127,10 +150,10 @@ class TempManager implements ITempManager { } catch (\UnexpectedValueException $ex) { $this->log->warning( "Error deleting temporary file/folder: {file} - Reason: {error}", - array( + [ 'file' => $file, - 'error' => $ex->getMessage() - ) + 'error' => $ex->getMessage(), + ] ); } } @@ -151,11 +174,11 @@ class TempManager implements ITempManager { */ protected function getOldFiles() { $cutOfTime = time() - 3600; - $files = array(); + $files = []; $dh = opendir($this->tmpBaseDir); if ($dh) { while (($file = readdir($dh)) !== false) { - if (substr($file, 0, 7) === 'oc_tmp_') { + if (substr($file, 0, 7) === self::TMP_PREFIX) { $path = $this->tmpBaseDir . '/' . $file; $mtime = filemtime($path); if ($mtime < $cutOfTime) { diff --git a/lib/public/backgroundjob.php b/lib/public/backgroundjob.php index 176c1d6e1ae..42fcf76b876 100644 --- a/lib/public/backgroundjob.php +++ b/lib/public/backgroundjob.php @@ -83,6 +83,7 @@ class BackgroundJob { /** * @param string $job * @param mixed $argument + * @deprecated 8.1.0 Use \OC::$server->getJobList()->add() instead * @since 6.0.0 */ public static function registerJob($job, $argument = null) { diff --git a/lib/public/contacts.php b/lib/public/contacts.php index ee741678fcb..c66d1ba2ccf 100644 --- a/lib/public/contacts.php +++ b/lib/public/contacts.php @@ -46,6 +46,7 @@ namespace OCP { * For updating it is mandatory to keep the id. * Without an id a new contact will be created. * + * @deprecated 8.1.0 use methods of \OCP\Contacts\IManager - \OC::$server->getContactsManager(); * @since 5.0.0 */ class Contacts { @@ -91,6 +92,7 @@ namespace OCP { * @param array $searchProperties defines the properties within the query pattern should match * @param array $options - for future use. One should always have options! * @return array an array of contacts which are arrays of key-value-pairs + * @deprecated 8.1.0 use search() of \OCP\Contacts\IManager - \OC::$server->getContactsManager(); * @since 5.0.0 */ public static function search($pattern, $searchProperties = array(), $options = array()) { @@ -104,6 +106,7 @@ namespace OCP { * @param object $id the unique identifier to a contact * @param string $address_book_key * @return bool successful or not + * @deprecated 8.1.0 use delete() of \OCP\Contacts\IManager - \OC::$server->getContactsManager(); * @since 5.0.0 */ public static function delete($id, $address_book_key) { @@ -118,6 +121,7 @@ namespace OCP { * @param array $properties this array if key-value-pairs defines a contact * @param string $address_book_key identifier of the address book in which the contact shall be created or updated * @return array an array representing the contact just created or updated + * @deprecated 8.1.0 use createOrUpdate() of \OCP\Contacts\IManager - \OC::$server->getContactsManager(); * @since 5.0.0 */ public static function createOrUpdate($properties, $address_book_key) { @@ -129,6 +133,7 @@ namespace OCP { * Check if contacts are available (e.g. contacts app enabled) * * @return bool true if enabled, false if not + * @deprecated 8.1.0 use isEnabled() of \OCP\Contacts\IManager - \OC::$server->getContactsManager(); * @since 5.0.0 */ public static function isEnabled() { @@ -138,6 +143,7 @@ namespace OCP { /** * @param \OCP\IAddressBook $address_book + * @deprecated 8.1.0 use registerAddressBook() of \OCP\Contacts\IManager - \OC::$server->getContactsManager(); * @since 5.0.0 */ public static function registerAddressBook(\OCP\IAddressBook $address_book) { @@ -147,6 +153,7 @@ namespace OCP { /** * @param \OCP\IAddressBook $address_book + * @deprecated 8.1.0 use unregisterAddressBook() of \OCP\Contacts\IManager - \OC::$server->getContactsManager(); * @since 5.0.0 */ public static function unregisterAddressBook(\OCP\IAddressBook $address_book) { @@ -156,6 +163,7 @@ namespace OCP { /** * @return array + * @deprecated 8.1.0 use getAddressBooks() of \OCP\Contacts\IManager - \OC::$server->getContactsManager(); * @since 5.0.0 */ public static function getAddressBooks() { @@ -165,6 +173,7 @@ namespace OCP { /** * removes all registered address book instances + * @deprecated 8.1.0 use clear() of \OCP\Contacts\IManager - \OC::$server->getContactsManager(); * @since 5.0.0 */ public static function clear() { diff --git a/lib/public/db.php b/lib/public/db.php index 6e6c5222ec4..9c5f9424dcb 100644 --- a/lib/public/db.php +++ b/lib/public/db.php @@ -40,6 +40,7 @@ namespace OCP; /** * This class provides access to the internal database system. Use this class exlusively if you want to access databases + * @deprecated 8.1.0 use methods of \OCP\IDBConnection - \OC::$server->getDatabaseConnection() * @since 4.5.0 */ class DB { @@ -51,6 +52,7 @@ class DB { * @return \OC_DB_StatementWrapper prepared SQL query * * SQL query via Doctrine prepare(), needs to be execute()'d! + * @deprecated 8.1.0 use prepare() of \OCP\IDBConnection - \OC::$server->getDatabaseConnection() * @since 4.5.0 */ static public function prepare( $query, $limit=null, $offset=null ) { @@ -66,6 +68,7 @@ class DB { * If this is null or an empty array, all keys of $input will be compared * @return int number of inserted rows * @throws \Doctrine\DBAL\DBALException + * @deprecated 8.1.0 use insertIfNotExist() of \OCP\IDBConnection - \OC::$server->getDatabaseConnection() * @since 5.0.0 - parameter $compare was added in 8.1.0 * */ @@ -82,6 +85,7 @@ class DB { * * Call this method right after the insert command or other functions may * cause trouble! + * @deprecated 8.1.0 use lastInsertId() of \OCP\IDBConnection - \OC::$server->getDatabaseConnection() * @since 4.5.0 */ public static function insertid($table=null) { @@ -90,6 +94,7 @@ class DB { /** * Start a transaction + * @deprecated 8.1.0 use beginTransaction() of \OCP\IDBConnection - \OC::$server->getDatabaseConnection() * @since 4.5.0 */ public static function beginTransaction() { @@ -98,6 +103,7 @@ class DB { /** * Commit the database changes done during a transaction that is in progress + * @deprecated 8.1.0 use commit() of \OCP\IDBConnection - \OC::$server->getDatabaseConnection() * @since 4.5.0 */ public static function commit() { @@ -106,6 +112,7 @@ class DB { /** * Rollback the database changes done during a transaction that is in progress + * @deprecated 8.1.0 use rollback() of \OCP\IDBConnection - \OC::$server->getDatabaseConnection() * @since 8.0.0 */ public static function rollback() { @@ -116,6 +123,7 @@ class DB { * Check if a result is an error, works with Doctrine * @param mixed $result * @return bool + * @deprecated 8.1.0 Doctrine returns false on error (and throws an exception) * @since 4.5.0 */ public static function isError($result) { @@ -127,6 +135,7 @@ class DB { * returns the error code and message as a string for logging * works with DoctrineException * @return string + * @deprecated 8.1.0 use getError() of \OCP\IDBConnection - \OC::$server->getDatabaseConnection() * @since 6.0.0 */ public static function getErrorMessage() { diff --git a/lib/public/encryption/imanager.php b/lib/public/encryption/imanager.php index 3a370710781..0b12c7524d2 100644 --- a/lib/public/encryption/imanager.php +++ b/lib/public/encryption/imanager.php @@ -37,7 +37,7 @@ interface IManager { * @return bool true if enabled, false if not * @since 8.1.0 */ - function isEnabled(); + public function isEnabled(); /** * Registers an callback function which must return an encryption module instance @@ -48,7 +48,7 @@ interface IManager { * @throws ModuleAlreadyExistsException * @since 8.1.0 */ - function registerEncryptionModule($id, $displayName, callable $callback); + public function registerEncryptionModule($id, $displayName, callable $callback); /** * Unregisters an encryption module @@ -56,7 +56,7 @@ interface IManager { * @param string $moduleId * @since 8.1.0 */ - function unregisterEncryptionModule($moduleId); + public function unregisterEncryptionModule($moduleId); /** * get a list of all encryption modules @@ -64,27 +64,26 @@ interface IManager { * @return array [id => ['id' => $id, 'displayName' => $displayName, 'callback' => callback]] * @since 8.1.0 */ - function getEncryptionModules(); + public function getEncryptionModules(); /** * get a specific encryption module * - * @param string $moduleId + * @param string $moduleId Empty to get the default module * @return IEncryptionModule * @throws ModuleDoesNotExistsException * @since 8.1.0 */ - function getEncryptionModule($moduleId); + public function getEncryptionModule($moduleId = ''); /** - * get default encryption module + * get default encryption module Id * - * @return \OCP\Encryption\IEncryptionModule - * @throws ModuleDoesNotExistsException + * @return string * @since 8.1.0 */ - public function getDefaultEncryptionModule(); + public function getDefaultEncryptionModuleId(); /** * set default encryption module Id diff --git a/lib/public/encryption/keys/istorage.php b/lib/public/encryption/keys/istorage.php index 3e497ed2c75..752c073375d 100644 --- a/lib/public/encryption/keys/istorage.php +++ b/lib/public/encryption/keys/istorage.php @@ -35,33 +35,36 @@ interface IStorage { * * @param string $uid ID if the user for whom we want the key * @param string $keyId id of the key + * @param string $encryptionModuleId * * @return mixed key * @since 8.1.0 */ - public function getUserKey($uid, $keyId); + public function getUserKey($uid, $keyId, $encryptionModuleId); /** * get file specific key * * @param string $path path to file * @param string $keyId id of the key + * @param string $encryptionModuleId * * @return mixed key * @since 8.1.0 */ - public function getFileKey($path, $keyId); + public function getFileKey($path, $keyId, $encryptionModuleId); /** * get system-wide encryption keys not related to a specific user, * e.g something like a key for public link shares * * @param string $keyId id of the key + * @param string $encryptionModuleId * * @return mixed key * @since 8.1.0 */ - public function getSystemUserKey($keyId); + public function getSystemUserKey($keyId, $encryptionModuleId); /** * set user specific key @@ -69,19 +72,21 @@ interface IStorage { * @param string $uid ID if the user for whom we want the key * @param string $keyId id of the key * @param mixed $key + * @param string $encryptionModuleId * @since 8.1.0 */ - public function setUserKey($uid, $keyId, $key); + public function setUserKey($uid, $keyId, $key, $encryptionModuleId); /** * set file specific key * * @param string $path path to file * @param string $keyId id of the key - * @param boolean + * @param mixed $key + * @param string $encryptionModuleId * @since 8.1.0 */ - public function setFileKey($path, $keyId, $key); + public function setFileKey($path, $keyId, $key, $encryptionModuleId); /** * set system-wide encryption keys not related to a specific user, @@ -89,59 +94,66 @@ interface IStorage { * * @param string $keyId id of the key * @param mixed $key + * @param string $encryptionModuleId * * @return mixed key * @since 8.1.0 */ - public function setSystemUserKey($keyId, $key); + public function setSystemUserKey($keyId, $key, $encryptionModuleId); /** * delete user specific key * * @param string $uid ID if the user for whom we want to delete the key * @param string $keyId id of the key + * @param string $encryptionModuleId * * @return boolean False when the key could not be deleted * @since 8.1.0 */ - public function deleteUserKey($uid, $keyId); + public function deleteUserKey($uid, $keyId, $encryptionModuleId); /** * delete file specific key * * @param string $path path to file * @param string $keyId id of the key + * @param string $encryptionModuleId * * @return boolean False when the key could not be deleted * @since 8.1.0 */ - public function deleteFileKey($path, $keyId); + public function deleteFileKey($path, $keyId, $encryptionModuleId); /** * delete all file keys for a given file * * @param string $path to the file + * @param string $encryptionModuleId + * * @return boolean False when the keys could not be deleted * @since 8.1.0 */ - public function deleteAllFileKeys($path); + public function deleteAllFileKeys($path, $encryptionModuleId); /** * delete system-wide encryption keys not related to a specific user, * e.g something like a key for public link shares * * @param string $keyId id of the key + * @param string $encryptionModuleId * * @return boolean False when the key could not be deleted * @since 8.1.0 */ - public function deleteSystemUserKey($keyId); + public function deleteSystemUserKey($keyId, $encryptionModuleId); /** * copy keys if a file was renamed * * @param string $source * @param string $target + * @return boolean * @since 8.1.0 */ public function renameKeys($source, $target); @@ -151,6 +163,7 @@ interface IStorage { * * @param string $source * @param string $target + * @return boolean * @since 8.1.0 */ public function copyKeys($source, $target); diff --git a/lib/public/files.php b/lib/public/files.php index c9944b2919a..c1dcffcbefb 100644 --- a/lib/public/files.php +++ b/lib/public/files.php @@ -91,6 +91,7 @@ class Files { * @return string * * temporary files are automatically cleaned up after the script is finished + * @deprecated 8.1.0 use getTemporaryFile() of \OCP\ITempManager - \OC::$server->getTempManager() * @since 5.0.0 */ public static function tmpFile( $postfix='' ) { @@ -102,6 +103,7 @@ class Files { * @return string * * temporary files are automatically cleaned up after the script is finished + * @deprecated 8.1.0 use getTemporaryFolder() of \OCP\ITempManager - \OC::$server->getTempManager() * @since 5.0.0 */ public static function tmpFolder() { diff --git a/lib/public/iservercontainer.php b/lib/public/iservercontainer.php index 9af1582dae9..428c91429ef 100644 --- a/lib/public/iservercontainer.php +++ b/lib/public/iservercontainer.php @@ -211,12 +211,10 @@ interface IServerContainer { public function getEncryptionFilesHelper(); /** - * @param string $encryptionModuleId encryption module ID - * * @return \OCP\Encryption\Keys\IStorage * @since 8.1.0 */ - public function getEncryptionKeyStorage($encryptionModuleId); + public function getEncryptionKeyStorage(); /** * Returns the URL generator diff --git a/lib/public/iusermanager.php b/lib/public/iusermanager.php index 23fb84e6ada..212d21759b0 100644 --- a/lib/public/iusermanager.php +++ b/lib/public/iusermanager.php @@ -43,7 +43,7 @@ interface IUserManager { * register a user backend * * @param \OCP\UserInterface $backend - * @since 8.0.0 + * @since 8.0.0 */ public function registerBackend($backend); diff --git a/lib/public/user.php b/lib/public/user.php index 0b5fb9565e4..e2413e32783 100644 --- a/lib/public/user.php +++ b/lib/public/user.php @@ -61,6 +61,7 @@ class User { * @param int|null $limit * @param int|null $offset * @return array an array of all uids + * @deprecated 8.1.0 use method search() of \OCP\IUserManager - \OC::$server->getUserManager() * @since 5.0.0 */ public static function getUsers( $search = '', $limit = null, $offset = null ) { @@ -71,6 +72,8 @@ class User { * Get the user display name of the user currently logged in. * @param string|null $user user id or null for current user * @return string display name + * @deprecated 8.1.0 fetch \OCP\IUser (has getDisplayName()) by using method + * get() of \OCP\IUserManager - \OC::$server->getUserManager() * @since 5.0.0 */ public static function getDisplayName( $user = null ) { @@ -83,6 +86,7 @@ class User { * @param int|null $limit * @param int|null $offset * @return array an array of all display names (value) and the correspondig uids (key) + * @deprecated 8.1.0 use method searchDisplayName() of \OCP\IUserManager - \OC::$server->getUserManager() * @since 5.0.0 */ public static function getDisplayNames( $search = '', $limit = null, $offset = null ) { @@ -103,6 +107,7 @@ class User { * @param string $uid the username * @param string $excludingBackend (default none) * @return boolean + * @deprecated 8.1.0 use method userExists() of \OCP\IUserManager - \OC::$server->getUserManager() * @since 5.0.0 */ public static function userExists( $uid, $excludingBackend = null ) { diff --git a/settings/admin.php b/settings/admin.php index 94e48aab14e..b8d8c67d0f7 100644 --- a/settings/admin.php +++ b/settings/admin.php @@ -86,14 +86,10 @@ $backends = \OC::$server->getUserManager()->getBackends(); $externalBackends = (count($backends) > 1) ? true : false; $template->assign('encryptionReady', \OC::$server->getEncryptionManager()->isReady()); $template->assign('externalBackendsEnabled', $externalBackends); + $encryptionModules = \OC::$server->getEncryptionManager()->getEncryptionModules(); +$defaultEncryptionModuleId = \OC::$server->getEncryptionManager()->getDefaultEncryptionModuleId(); -try { - $defaultEncryptionModule = \OC::$server->getEncryptionManager()->getDefaultEncryptionModule(); - $defaultEncryptionModuleId = $defaultEncryptionModule->getId(); -} catch (Exception $e) { - $defaultEncryptionModuleId = null; -} $encModulues = array(); foreach ($encryptionModules as $module) { $encModulues[$module['id']]['displayName'] = $module['displayName']; @@ -123,6 +119,9 @@ $databaseOverload = (strpos(\OCP\Config::getSystemValue('dbtype'), 'sqlite') !== $template->assign('databaseOverload', $databaseOverload); $template->assign('cronErrors', $appConfig->getValue('core', 'cronErrors')); +// warn if php is not setup properly to get system variables with getenv +$template->assign('getenvServerNotWorking', empty(getenv('PATH'))); + // warn if Windows is used $template->assign('WindowsWarning', OC_Util::runningOnWindows()); diff --git a/settings/changepassword/controller.php b/settings/changepassword/controller.php index f041cb5b29f..4a68636d3f8 100644 --- a/settings/changepassword/controller.php +++ b/settings/changepassword/controller.php @@ -83,7 +83,7 @@ class Controller { \OC::$server->getLogger(), \OC::$server->getUserSession(), \OC::$server->getConfig()); - $keyStorage = \OC::$server->getEncryptionKeyStorage(\OCA\Encryption\Crypto\Encryption::ID); + $keyStorage = \OC::$server->getEncryptionKeyStorage(); $util = new \OCA\Encryption\Util( new \OC\Files\View(), $crypt, diff --git a/settings/js/apps.js b/settings/js/apps.js index 1bd7ffdf790..58a0a31ccd8 100644 --- a/settings/js/apps.js +++ b/settings/js/apps.js @@ -321,8 +321,10 @@ OC.Settings.Apps = OC.Settings.Apps || { var img= $('<img class="app-icon"/>').attr({ src: entry.icon}); var a=$('<a></a>').attr('href', entry.href); var filename=$('<span></span>'); + var loading = $('<div class="icon-loading-dark"></div>').css('display', 'none'); filename.text(entry.name); a.prepend(filename); + a.prepend(loading); a.prepend(img); li.append(a); diff --git a/settings/js/personal.js b/settings/js/personal.js index 165b55bcdae..f3fcf614bfa 100644 --- a/settings/js/personal.js +++ b/settings/js/personal.js @@ -330,8 +330,9 @@ $(document).ready(function () { $('#sslCertificate tbody').append(row); }, - fail: function (e, data) { - OC.Notification.showTemporary(t('settings', 'An error occured. Please upload an ASCII-encoded PEM certificate.')); + fail: function () { + OC.Notification.showTemporary( + t('settings', 'An error occurred. Please upload an ASCII-encoded PEM certificate.')); } }); @@ -340,8 +341,9 @@ $(document).ready(function () { }); }); -OC.Encryption = { -}; +if (!OC.Encryption) { + OC.Encryption = {}; +} OC.Encryption.msg = { start: function (selector, msg) { diff --git a/settings/l10n/cs_CZ.js b/settings/l10n/cs_CZ.js index 5ffadd910bc..edc9f676273 100644 --- a/settings/l10n/cs_CZ.js +++ b/settings/l10n/cs_CZ.js @@ -50,8 +50,12 @@ OC.L10N.register( "Email saved" : "Email uložen", "Are you really sure you want add \"{domain}\" as trusted domain?" : "Jste si jisti, že chcete přidat \"{domain}\" mezi důvěryhodné domény?", "Add trusted domain" : "Přidat důvěryhodnou doménu", + "Migration in progress. Please wait until the migration is finished" : "Migrace probíhá. Počkejte prosím než bude dokončena", + "Migration started …" : "Migrace spuštěna ...", "Sending..." : "Odesílání...", "All" : "Vše", + "Official apps are developed by and within the ownCloud community. They offer functionality central to ownCloud and are ready for production use." : "Oficiální aplikace jsou vyvíjeny komunitou ownCloud. Nabízejí funkce důležité pro ownCloud a jsou připraveny pro nasazení v produkčním prostředí.", + "Approved apps are developed by trusted developers and have passed a cursory security check. They are actively maintained in an open code repository and their maintainers deem them to be stable for casual to normal use." : "Schválené aplikace jsou vyvíjeny důvěryhodnými vývojáři a prošly zběžným bezpečnostním prověřením. Jsou aktivně udržovány v repozitáři s otevřeným kódem a jejich správci je považují za stabilní pro občasné až normální použití.", "This app is not checked for security issues and is new or known to be unstable. Install on your own risk." : "U této aplikace nebyla provedena kontrola bezpečnostních problémů. Aplikace je nová nebo nestabilní. Instalujete na vlastní nebezpečí.", "Please wait...." : "Čekejte prosím...", "Error while disabling app" : "Chyba při zakazování aplikace", @@ -72,6 +76,7 @@ OC.L10N.register( "Strong password" : "Silné heslo", "Valid until {date}" : "Platný do {date}", "Delete" : "Smazat", + "An error occurred. Please upload an ASCII-encoded PEM certificate." : "Došlo k chybě. Nahrajte prosím ASCII-kódovaný PEM certifikát.", "Groups" : "Skupiny", "Unable to delete {objName}" : "Nelze smazat {objName}", "Error creating group" : "Chyba při vytváření skupiny", @@ -102,6 +107,8 @@ OC.L10N.register( "NT LAN Manager" : "Správce NT LAN", "SSL" : "SSL", "TLS" : "TLS", + "php does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "php není nejspíše správně nastaveno pro dotazování na proměnné hodnoty systému. Test s getenv(\"PATH\") vrací pouze prázdnou odpověď.", + "Please check the installation documentation for php configuration notes and the php configuration of your server, especially when using php-fpm." : "Zkontrolujte prosím konfiguraci php podle instalační dokumentace a php konfiguraci na serveru, hlavně při použití php-fpm.", "The Read-Only config has been enabled. This prevents setting some configurations via the web-interface. Furthermore, the file needs to be made writable manually for every update." : "Konfigurace je nastavena pouze pro čtení. Toto znemožňuje některá nastavení přes webové rozhraní. Dále musí být pro každou změnu povolen zápis do konfiguračního souboru ručně.", "PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "PHP je patrně nastaveno tak, aby odstraňovalo bloky komentářů. Toto bude mít za následek nedostupnost množství hlavních aplikací.", "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Toto je pravděpodobně způsobeno aplikacemi pro urychlení načítání jako jsou Zend OPcache nebo eAccelerator.", @@ -135,6 +142,8 @@ OC.L10N.register( "Execute one task with each page loaded" : "Spustit jednu úlohu s každým načtením stránky", "cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "cron.php je registrován u služby webcron, aby volal cron.php jednou za 15 minut přes http.", "Use system's cron service to call the cron.php file every 15 minutes." : "Použít systémovou službu cron pro volání cron.php každých 15 minut.", + "Enable server-side encryption" : "Povolit šifrování na straně serveru", + "Start migration" : "Spustit migraci", "This is used for sending out notifications." : "Toto se používá pro odesílání upozornění.", "Send mode" : "Mód odesílání", "Encryption" : "Šifrování", @@ -167,6 +176,8 @@ OC.L10N.register( "Version" : "Verze", "More apps" : "Více aplikací", "Developer documentation" : "Vývojářská dokumentace", + "Experimental applications ahead" : "Experimentální aplikace v pořadí", + "Experimental apps are not checked for security issues, new or known to be unstable and under heavy development. Installing them can cause data loss or security breaches." : "Experimentální aplikace nejsou prověřovány na bezpečnostní chyby, mohou být nestabilní a velmi se měnit. Jejich instalací můžete způsobit ztrátu dat nebo bezpečnostní problémy.", "by" : "sdílí", "licensed" : "licencováno", "Documentation:" : "Dokumentace:", @@ -187,6 +198,7 @@ OC.L10N.register( "Administrator documentation" : "Dokumentace administrátora", "Online documentation" : "Online dokumentace", "Forum" : "Fórum", + "Issue tracker" : "Seznam chyb", "Commercial support" : "Placená podpora", "Get the apps to sync your files" : "Získat aplikace pro synchronizaci vašich souborů", "Desktop client" : "Aplikace pro počítač", diff --git a/settings/l10n/cs_CZ.json b/settings/l10n/cs_CZ.json index 3cc70bbaf0f..f9c923fbcc7 100644 --- a/settings/l10n/cs_CZ.json +++ b/settings/l10n/cs_CZ.json @@ -48,8 +48,12 @@ "Email saved" : "Email uložen", "Are you really sure you want add \"{domain}\" as trusted domain?" : "Jste si jisti, že chcete přidat \"{domain}\" mezi důvěryhodné domény?", "Add trusted domain" : "Přidat důvěryhodnou doménu", + "Migration in progress. Please wait until the migration is finished" : "Migrace probíhá. Počkejte prosím než bude dokončena", + "Migration started …" : "Migrace spuštěna ...", "Sending..." : "Odesílání...", "All" : "Vše", + "Official apps are developed by and within the ownCloud community. They offer functionality central to ownCloud and are ready for production use." : "Oficiální aplikace jsou vyvíjeny komunitou ownCloud. Nabízejí funkce důležité pro ownCloud a jsou připraveny pro nasazení v produkčním prostředí.", + "Approved apps are developed by trusted developers and have passed a cursory security check. They are actively maintained in an open code repository and their maintainers deem them to be stable for casual to normal use." : "Schválené aplikace jsou vyvíjeny důvěryhodnými vývojáři a prošly zběžným bezpečnostním prověřením. Jsou aktivně udržovány v repozitáři s otevřeným kódem a jejich správci je považují za stabilní pro občasné až normální použití.", "This app is not checked for security issues and is new or known to be unstable. Install on your own risk." : "U této aplikace nebyla provedena kontrola bezpečnostních problémů. Aplikace je nová nebo nestabilní. Instalujete na vlastní nebezpečí.", "Please wait...." : "Čekejte prosím...", "Error while disabling app" : "Chyba při zakazování aplikace", @@ -70,6 +74,7 @@ "Strong password" : "Silné heslo", "Valid until {date}" : "Platný do {date}", "Delete" : "Smazat", + "An error occurred. Please upload an ASCII-encoded PEM certificate." : "Došlo k chybě. Nahrajte prosím ASCII-kódovaný PEM certifikát.", "Groups" : "Skupiny", "Unable to delete {objName}" : "Nelze smazat {objName}", "Error creating group" : "Chyba při vytváření skupiny", @@ -100,6 +105,8 @@ "NT LAN Manager" : "Správce NT LAN", "SSL" : "SSL", "TLS" : "TLS", + "php does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "php není nejspíše správně nastaveno pro dotazování na proměnné hodnoty systému. Test s getenv(\"PATH\") vrací pouze prázdnou odpověď.", + "Please check the installation documentation for php configuration notes and the php configuration of your server, especially when using php-fpm." : "Zkontrolujte prosím konfiguraci php podle instalační dokumentace a php konfiguraci na serveru, hlavně při použití php-fpm.", "The Read-Only config has been enabled. This prevents setting some configurations via the web-interface. Furthermore, the file needs to be made writable manually for every update." : "Konfigurace je nastavena pouze pro čtení. Toto znemožňuje některá nastavení přes webové rozhraní. Dále musí být pro každou změnu povolen zápis do konfiguračního souboru ručně.", "PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "PHP je patrně nastaveno tak, aby odstraňovalo bloky komentářů. Toto bude mít za následek nedostupnost množství hlavních aplikací.", "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Toto je pravděpodobně způsobeno aplikacemi pro urychlení načítání jako jsou Zend OPcache nebo eAccelerator.", @@ -133,6 +140,8 @@ "Execute one task with each page loaded" : "Spustit jednu úlohu s každým načtením stránky", "cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "cron.php je registrován u služby webcron, aby volal cron.php jednou za 15 minut přes http.", "Use system's cron service to call the cron.php file every 15 minutes." : "Použít systémovou službu cron pro volání cron.php každých 15 minut.", + "Enable server-side encryption" : "Povolit šifrování na straně serveru", + "Start migration" : "Spustit migraci", "This is used for sending out notifications." : "Toto se používá pro odesílání upozornění.", "Send mode" : "Mód odesílání", "Encryption" : "Šifrování", @@ -165,6 +174,8 @@ "Version" : "Verze", "More apps" : "Více aplikací", "Developer documentation" : "Vývojářská dokumentace", + "Experimental applications ahead" : "Experimentální aplikace v pořadí", + "Experimental apps are not checked for security issues, new or known to be unstable and under heavy development. Installing them can cause data loss or security breaches." : "Experimentální aplikace nejsou prověřovány na bezpečnostní chyby, mohou být nestabilní a velmi se měnit. Jejich instalací můžete způsobit ztrátu dat nebo bezpečnostní problémy.", "by" : "sdílí", "licensed" : "licencováno", "Documentation:" : "Dokumentace:", @@ -185,6 +196,7 @@ "Administrator documentation" : "Dokumentace administrátora", "Online documentation" : "Online dokumentace", "Forum" : "Fórum", + "Issue tracker" : "Seznam chyb", "Commercial support" : "Placená podpora", "Get the apps to sync your files" : "Získat aplikace pro synchronizaci vašich souborů", "Desktop client" : "Aplikace pro počítač", diff --git a/settings/l10n/de.js b/settings/l10n/de.js index 08cea0056da..8eab3230f22 100644 --- a/settings/l10n/de.js +++ b/settings/l10n/de.js @@ -4,7 +4,9 @@ OC.L10N.register( "Security & setup warnings" : "Sicherheits- & Einrichtungswarnungen", "Sharing" : "Teilen", "External Storage" : "Externer Speicher", + "Server-side encryption" : "Serverseitige Verschlüsselung", "Cron" : "Cron", + "Email server" : "E-Mail-Server", "Log" : "Log", "Tips & tricks" : "Tipps & Tricks", "Updates" : "Updates", @@ -26,7 +28,7 @@ OC.L10N.register( "Unable to change password" : "Passwort konnte nicht geändert werden", "Enabled" : "Aktiviert", "Not enabled" : "Nicht aktiviert", - "A problem occurred, please check your log files (Error: %s)" : "Ein Problem ist aufgetreten, bitte prüfen sie ihre Log Dateien (Fehler: %s)", + "A problem occurred, please check your log files (Error: %s)" : "Es ist ein Problem aufgetreten, bitte überprüfe Deine Logdateien (Fehler: %s)", "Migration Completed" : "Migration komplett", "Group already exists." : "Gruppe existiert bereits.", "Unable to add group." : "Gruppe konnte nicht angelegt werden.", @@ -48,8 +50,8 @@ OC.L10N.register( "Email saved" : "E-Mail-Adresse gespeichert", "Are you really sure you want add \"{domain}\" as trusted domain?" : "Bist Du wirklich sicher, dass Du „{domain}“ als vertrauenswürdige Domain hinzufügen möchtest?", "Add trusted domain" : "Vertrauenswürdige Domain hinzufügen", - "Migration in progress. Please wait until the migration is finished" : "Migration in Arbeit. Bitte warten Sie bis die Migration beendet ist", - "Migration started …" : "Migration gestartet ...", + "Migration in progress. Please wait until the migration is finished" : "Migration in Arbeit. Bitte warte, bis die Migration beendet ist", + "Migration started …" : "Migration begonnen…", "Sending..." : "Senden…", "All" : "Alle", "Official apps are developed by and within the ownCloud community. They offer functionality central to ownCloud and are ready for production use." : "Offizielle Apps werden von und innerhalb der ownCloud-Community entwickelt. Sie stellen zentrale Funktionen von ownCloud bereit und sind auf den Produktiveinsatz vorbereitet.", @@ -74,6 +76,7 @@ OC.L10N.register( "Strong password" : "Starkes Passwort", "Valid until {date}" : "Gültig bis {date}", "Delete" : "Löschen", + "An error occurred. Please upload an ASCII-encoded PEM certificate." : "Es ist ein Fehler aufgetreten. Bitte lade ein ASCII-kodiertes PEM-Zertifikat hoch.", "Groups" : "Gruppen", "Unable to delete {objName}" : "Löschen von {objName} nicht möglich", "Error creating group" : "Fehler beim Erstellen der Gruppe", @@ -104,6 +107,8 @@ OC.L10N.register( "NT LAN Manager" : "NT LAN Manager", "SSL" : "SSL", "TLS" : "TLS", + "php does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "PHP scheint zur Abfrage von Systemumgebungsvariablen nicht richtig eingerichtet zu sein. Der Test mit getenv (\"PATH\") liefert nur eine leere Antwort zurück.", + "Please check the installation documentation for php configuration notes and the php configuration of your server, especially when using php-fpm." : "Bitten überprüfe die Installationsdokumentation auf Hinweise zur PHP-Konfiguration sowie die PHP-Konfiguration Deines Servers, insbesondere dann, wenn Du PHP-FPM einsetzt.", "The Read-Only config has been enabled. This prevents setting some configurations via the web-interface. Furthermore, the file needs to be made writable manually for every update." : "Die schreibgeschützte Konfiguration wurde aktiviert. Dies verhindert das Setzen einiger Einstellungen über die Web-Schnittstelle. Weiterhin muss bei jedem Update der Schreibzugriff auf die Datei händisch aktiviert werden.", "PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "PHP ist offenbar so konfiguriert, dass PHPDoc-Blöcke in der Anweisung entfernt werden. Dadurch sind mehrere Kern-Apps nicht erreichbar.", "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Dies wird wahrscheinlich durch Zwischenspeicher/Beschleuniger wie etwa Zend OPcache oder eAccelerator verursacht.", @@ -137,7 +142,8 @@ OC.L10N.register( "Execute one task with each page loaded" : "Führe eine Aufgabe mit jeder geladenen Seite aus", "cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "cron.php ist als Webcron-Dienst registriert, der die cron.php alle 15 Minuten per HTTP aufruft.", "Use system's cron service to call the cron.php file every 15 minutes." : "Benutze den systemeigenen Cron-Dienst, um die cron.php alle 15 Minuten aufzurufen.", - "Start migration" : "Starte die Migration", + "Enable server-side encryption" : "Serverseitige Verschlüsselung aktivieren", + "Start migration" : "Migration beginnen", "This is used for sending out notifications." : "Dies wird zum Senden von Benachrichtigungen verwendet.", "Send mode" : "Sendemodus", "Encryption" : "Verschlüsselung", diff --git a/settings/l10n/de.json b/settings/l10n/de.json index 7b4008d3415..c05f488bd74 100644 --- a/settings/l10n/de.json +++ b/settings/l10n/de.json @@ -2,7 +2,9 @@ "Security & setup warnings" : "Sicherheits- & Einrichtungswarnungen", "Sharing" : "Teilen", "External Storage" : "Externer Speicher", + "Server-side encryption" : "Serverseitige Verschlüsselung", "Cron" : "Cron", + "Email server" : "E-Mail-Server", "Log" : "Log", "Tips & tricks" : "Tipps & Tricks", "Updates" : "Updates", @@ -24,7 +26,7 @@ "Unable to change password" : "Passwort konnte nicht geändert werden", "Enabled" : "Aktiviert", "Not enabled" : "Nicht aktiviert", - "A problem occurred, please check your log files (Error: %s)" : "Ein Problem ist aufgetreten, bitte prüfen sie ihre Log Dateien (Fehler: %s)", + "A problem occurred, please check your log files (Error: %s)" : "Es ist ein Problem aufgetreten, bitte überprüfe Deine Logdateien (Fehler: %s)", "Migration Completed" : "Migration komplett", "Group already exists." : "Gruppe existiert bereits.", "Unable to add group." : "Gruppe konnte nicht angelegt werden.", @@ -46,8 +48,8 @@ "Email saved" : "E-Mail-Adresse gespeichert", "Are you really sure you want add \"{domain}\" as trusted domain?" : "Bist Du wirklich sicher, dass Du „{domain}“ als vertrauenswürdige Domain hinzufügen möchtest?", "Add trusted domain" : "Vertrauenswürdige Domain hinzufügen", - "Migration in progress. Please wait until the migration is finished" : "Migration in Arbeit. Bitte warten Sie bis die Migration beendet ist", - "Migration started …" : "Migration gestartet ...", + "Migration in progress. Please wait until the migration is finished" : "Migration in Arbeit. Bitte warte, bis die Migration beendet ist", + "Migration started …" : "Migration begonnen…", "Sending..." : "Senden…", "All" : "Alle", "Official apps are developed by and within the ownCloud community. They offer functionality central to ownCloud and are ready for production use." : "Offizielle Apps werden von und innerhalb der ownCloud-Community entwickelt. Sie stellen zentrale Funktionen von ownCloud bereit und sind auf den Produktiveinsatz vorbereitet.", @@ -72,6 +74,7 @@ "Strong password" : "Starkes Passwort", "Valid until {date}" : "Gültig bis {date}", "Delete" : "Löschen", + "An error occurred. Please upload an ASCII-encoded PEM certificate." : "Es ist ein Fehler aufgetreten. Bitte lade ein ASCII-kodiertes PEM-Zertifikat hoch.", "Groups" : "Gruppen", "Unable to delete {objName}" : "Löschen von {objName} nicht möglich", "Error creating group" : "Fehler beim Erstellen der Gruppe", @@ -102,6 +105,8 @@ "NT LAN Manager" : "NT LAN Manager", "SSL" : "SSL", "TLS" : "TLS", + "php does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "PHP scheint zur Abfrage von Systemumgebungsvariablen nicht richtig eingerichtet zu sein. Der Test mit getenv (\"PATH\") liefert nur eine leere Antwort zurück.", + "Please check the installation documentation for php configuration notes and the php configuration of your server, especially when using php-fpm." : "Bitten überprüfe die Installationsdokumentation auf Hinweise zur PHP-Konfiguration sowie die PHP-Konfiguration Deines Servers, insbesondere dann, wenn Du PHP-FPM einsetzt.", "The Read-Only config has been enabled. This prevents setting some configurations via the web-interface. Furthermore, the file needs to be made writable manually for every update." : "Die schreibgeschützte Konfiguration wurde aktiviert. Dies verhindert das Setzen einiger Einstellungen über die Web-Schnittstelle. Weiterhin muss bei jedem Update der Schreibzugriff auf die Datei händisch aktiviert werden.", "PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "PHP ist offenbar so konfiguriert, dass PHPDoc-Blöcke in der Anweisung entfernt werden. Dadurch sind mehrere Kern-Apps nicht erreichbar.", "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Dies wird wahrscheinlich durch Zwischenspeicher/Beschleuniger wie etwa Zend OPcache oder eAccelerator verursacht.", @@ -135,7 +140,8 @@ "Execute one task with each page loaded" : "Führe eine Aufgabe mit jeder geladenen Seite aus", "cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "cron.php ist als Webcron-Dienst registriert, der die cron.php alle 15 Minuten per HTTP aufruft.", "Use system's cron service to call the cron.php file every 15 minutes." : "Benutze den systemeigenen Cron-Dienst, um die cron.php alle 15 Minuten aufzurufen.", - "Start migration" : "Starte die Migration", + "Enable server-side encryption" : "Serverseitige Verschlüsselung aktivieren", + "Start migration" : "Migration beginnen", "This is used for sending out notifications." : "Dies wird zum Senden von Benachrichtigungen verwendet.", "Send mode" : "Sendemodus", "Encryption" : "Verschlüsselung", diff --git a/settings/l10n/de_DE.js b/settings/l10n/de_DE.js index f5bea44f4fb..88a688b5cd1 100644 --- a/settings/l10n/de_DE.js +++ b/settings/l10n/de_DE.js @@ -4,7 +4,9 @@ OC.L10N.register( "Security & setup warnings" : "Sicherheits- & Einrichtungswarnungen", "Sharing" : "Teilen", "External Storage" : "Externer Speicher", + "Server-side encryption" : "Serverseitige Verschlüsselung", "Cron" : "Cron", + "Email server" : "E-Mail-Server", "Log" : "Log", "Tips & tricks" : "Tipps & Tricks", "Updates" : "Updates", @@ -26,8 +28,8 @@ OC.L10N.register( "Unable to change password" : "Passwort konnte nicht geändert werden", "Enabled" : "Aktiviert", "Not enabled" : "Nicht aktiviert", - "A problem occurred, please check your log files (Error: %s)" : "Ein Problem ist aufgetreten, bitte prüfen sie ihre Log Dateien (Fehler: %s)", - "Migration Completed" : "Migration komplett", + "A problem occurred, please check your log files (Error: %s)" : "Es ist ein Problem aufgetreten, bitte überprüfe Deine Logdateien (Fehler: %s)", + "Migration Completed" : "Migration abgeschlossen", "Group already exists." : "Gruppe existiert bereits.", "Unable to add group." : "Gruppe konnte nicht angelegt werden.", "Unable to delete group." : "Gruppe konnte nicht gelöscht werden.", @@ -48,8 +50,8 @@ OC.L10N.register( "Email saved" : "E-Mail-Adresse gespeichert", "Are you really sure you want add \"{domain}\" as trusted domain?" : "Sind Sie sich wirklich sicher, dass Sie »{domain}« als vertrauenswürdige Domain hinzufügen möchten?", "Add trusted domain" : "Vertrauenswürdige Domain hinzufügen", - "Migration in progress. Please wait until the migration is finished" : "Migration in Arbeit. Bitte warten Sie bis die Migration beendet ist", - "Migration started …" : "Migration gestartet ...", + "Migration in progress. Please wait until the migration is finished" : "Migration in Arbeit. Bitte warten Sie, bis die Migration beendet ist", + "Migration started …" : "Migration begonnen…", "Sending..." : "Wird gesendet…", "All" : "Alle", "Official apps are developed by and within the ownCloud community. They offer functionality central to ownCloud and are ready for production use." : "Offizielle Apps werden von und innerhalb der ownCloud-Community entwickelt. Sie stellen zentrale Funktionen von ownCloud bereit und sind auf den Produktiveinsatz vorbereitet.", @@ -74,6 +76,7 @@ OC.L10N.register( "Strong password" : "Starkes Passwort", "Valid until {date}" : "Gültig bis {date}", "Delete" : "Löschen", + "An error occurred. Please upload an ASCII-encoded PEM certificate." : "Es ist ein Fehler aufgetreten. Bitte laden Sei ein ASCII-kodiertes PEM-Zertifikat hoch.", "Groups" : "Gruppen", "Unable to delete {objName}" : "Löschen von {objName} nicht möglich", "Error creating group" : "Fehler beim Erstellen der Gruppe", @@ -104,6 +107,8 @@ OC.L10N.register( "NT LAN Manager" : "NT LAN Manager", "SSL" : "SSL", "TLS" : "TLS", + "php does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "PHP scheint zur Abfrage von Systemumgebungsvariablen nicht richtig eingerichtet zu sein. Der Test mit getenv (\"PATH\") liefert nur eine leere Antwort zurück.", + "Please check the installation documentation for php configuration notes and the php configuration of your server, especially when using php-fpm." : "Bitten überprüfen Sie die Installationsdokumentation auf Hinweise zur PHP-Konfiguration sowie die PHP-Konfiguration Ihres Servers, insbesondere dann, wenn Sie PHP-FPM einsetzen.", "The Read-Only config has been enabled. This prevents setting some configurations via the web-interface. Furthermore, the file needs to be made writable manually for every update." : "Die schreibgeschützte Konfiguration wurde aktiviert. Dies verhindert das Setzen einiger Einstellungen über die Web-Schnittstelle. Weiterhin muss bei jedem Update der Schreibzugriff auf die Datei händisch aktiviert werden.", "PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "PHP ist offenbar so konfiguriert, dass PHPDoc-Blöcke in der Anweisung entfernt werden. Dadurch sind mehrere Kern-Apps nicht erreichbar.", "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Dies wird wahrscheinlich durch Zwischenspeicher/Beschleuniger wie etwa Zend OPcache oder eAccelerator verursacht.", @@ -137,7 +142,8 @@ OC.L10N.register( "Execute one task with each page loaded" : "Eine Aufgabe bei jedem Laden der Seite ausführen", "cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "cron.php ist als Webcron-Dienst registriert, der die cron.php alle 15 Minuten per HTTP aufruft.", "Use system's cron service to call the cron.php file every 15 minutes." : "Benutzen Sie den systemeigenen Cron-Dienst, um die cron.php alle 15 Minuten aufzurufen.", - "Start migration" : "Starte die Migration", + "Enable server-side encryption" : "Serverseitige Verschlüsselung aktivieren", + "Start migration" : "Migration beginnen", "This is used for sending out notifications." : "Dies wird für das Senden von Benachrichtigungen verwendet.", "Send mode" : "Sendemodus", "Encryption" : "Verschlüsselung", diff --git a/settings/l10n/de_DE.json b/settings/l10n/de_DE.json index c8521b6817b..c4958c78c9a 100644 --- a/settings/l10n/de_DE.json +++ b/settings/l10n/de_DE.json @@ -2,7 +2,9 @@ "Security & setup warnings" : "Sicherheits- & Einrichtungswarnungen", "Sharing" : "Teilen", "External Storage" : "Externer Speicher", + "Server-side encryption" : "Serverseitige Verschlüsselung", "Cron" : "Cron", + "Email server" : "E-Mail-Server", "Log" : "Log", "Tips & tricks" : "Tipps & Tricks", "Updates" : "Updates", @@ -24,8 +26,8 @@ "Unable to change password" : "Passwort konnte nicht geändert werden", "Enabled" : "Aktiviert", "Not enabled" : "Nicht aktiviert", - "A problem occurred, please check your log files (Error: %s)" : "Ein Problem ist aufgetreten, bitte prüfen sie ihre Log Dateien (Fehler: %s)", - "Migration Completed" : "Migration komplett", + "A problem occurred, please check your log files (Error: %s)" : "Es ist ein Problem aufgetreten, bitte überprüfe Deine Logdateien (Fehler: %s)", + "Migration Completed" : "Migration abgeschlossen", "Group already exists." : "Gruppe existiert bereits.", "Unable to add group." : "Gruppe konnte nicht angelegt werden.", "Unable to delete group." : "Gruppe konnte nicht gelöscht werden.", @@ -46,8 +48,8 @@ "Email saved" : "E-Mail-Adresse gespeichert", "Are you really sure you want add \"{domain}\" as trusted domain?" : "Sind Sie sich wirklich sicher, dass Sie »{domain}« als vertrauenswürdige Domain hinzufügen möchten?", "Add trusted domain" : "Vertrauenswürdige Domain hinzufügen", - "Migration in progress. Please wait until the migration is finished" : "Migration in Arbeit. Bitte warten Sie bis die Migration beendet ist", - "Migration started …" : "Migration gestartet ...", + "Migration in progress. Please wait until the migration is finished" : "Migration in Arbeit. Bitte warten Sie, bis die Migration beendet ist", + "Migration started …" : "Migration begonnen…", "Sending..." : "Wird gesendet…", "All" : "Alle", "Official apps are developed by and within the ownCloud community. They offer functionality central to ownCloud and are ready for production use." : "Offizielle Apps werden von und innerhalb der ownCloud-Community entwickelt. Sie stellen zentrale Funktionen von ownCloud bereit und sind auf den Produktiveinsatz vorbereitet.", @@ -72,6 +74,7 @@ "Strong password" : "Starkes Passwort", "Valid until {date}" : "Gültig bis {date}", "Delete" : "Löschen", + "An error occurred. Please upload an ASCII-encoded PEM certificate." : "Es ist ein Fehler aufgetreten. Bitte laden Sei ein ASCII-kodiertes PEM-Zertifikat hoch.", "Groups" : "Gruppen", "Unable to delete {objName}" : "Löschen von {objName} nicht möglich", "Error creating group" : "Fehler beim Erstellen der Gruppe", @@ -102,6 +105,8 @@ "NT LAN Manager" : "NT LAN Manager", "SSL" : "SSL", "TLS" : "TLS", + "php does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "PHP scheint zur Abfrage von Systemumgebungsvariablen nicht richtig eingerichtet zu sein. Der Test mit getenv (\"PATH\") liefert nur eine leere Antwort zurück.", + "Please check the installation documentation for php configuration notes and the php configuration of your server, especially when using php-fpm." : "Bitten überprüfen Sie die Installationsdokumentation auf Hinweise zur PHP-Konfiguration sowie die PHP-Konfiguration Ihres Servers, insbesondere dann, wenn Sie PHP-FPM einsetzen.", "The Read-Only config has been enabled. This prevents setting some configurations via the web-interface. Furthermore, the file needs to be made writable manually for every update." : "Die schreibgeschützte Konfiguration wurde aktiviert. Dies verhindert das Setzen einiger Einstellungen über die Web-Schnittstelle. Weiterhin muss bei jedem Update der Schreibzugriff auf die Datei händisch aktiviert werden.", "PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "PHP ist offenbar so konfiguriert, dass PHPDoc-Blöcke in der Anweisung entfernt werden. Dadurch sind mehrere Kern-Apps nicht erreichbar.", "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Dies wird wahrscheinlich durch Zwischenspeicher/Beschleuniger wie etwa Zend OPcache oder eAccelerator verursacht.", @@ -135,7 +140,8 @@ "Execute one task with each page loaded" : "Eine Aufgabe bei jedem Laden der Seite ausführen", "cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "cron.php ist als Webcron-Dienst registriert, der die cron.php alle 15 Minuten per HTTP aufruft.", "Use system's cron service to call the cron.php file every 15 minutes." : "Benutzen Sie den systemeigenen Cron-Dienst, um die cron.php alle 15 Minuten aufzurufen.", - "Start migration" : "Starte die Migration", + "Enable server-side encryption" : "Serverseitige Verschlüsselung aktivieren", + "Start migration" : "Migration beginnen", "This is used for sending out notifications." : "Dies wird für das Senden von Benachrichtigungen verwendet.", "Send mode" : "Sendemodus", "Encryption" : "Verschlüsselung", diff --git a/settings/l10n/el.js b/settings/l10n/el.js index c554075686b..f38184a3cfd 100644 --- a/settings/l10n/el.js +++ b/settings/l10n/el.js @@ -76,6 +76,7 @@ OC.L10N.register( "Strong password" : "Δυνατό συνθηματικό", "Valid until {date}" : "Έγκυρο έως {date}", "Delete" : "Διαγραφή", + "An error occurred. Please upload an ASCII-encoded PEM certificate." : "Προέκυψε σφάλμα. Παρακαλούμε μεταφορτώστε ένα πιστοποιητικό PEM κωδικοποιημένο κατά ASCII.", "Groups" : "Ομάδες", "Unable to delete {objName}" : "Αδυναμία διαγραφής του {objName}", "Error creating group" : "Σφάλμα δημιουργίας ομάδας", @@ -106,6 +107,8 @@ OC.L10N.register( "NT LAN Manager" : "Διαχειριστης NT LAN", "SSL" : "SSL", "TLS" : "TLS", + "php does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "Η php δεν φαίνεται να είναι σωστά ρυθμισμένη για ερωτήματα σε μεταβλητές περιβάλλοντος του συστήματος. Η δοκιμή με την εντολή getenv(\"PATH\") επιστρέφει κενή απάντηση.", + "Please check the installation documentation for php configuration notes and the php configuration of your server, especially when using php-fpm." : "Παρακαλούμε ελέγξτε την τεκμηρίωση της εγκατάστασης για τις σημειώσεις σχετικά με τη διαμόρφωση της php και τη διαμόρφωση της php στο διακομιστή σας, ειδικά όταν χρησιμοποιείτε php-fpm.", "The Read-Only config has been enabled. This prevents setting some configurations via the web-interface. Furthermore, the file needs to be made writable manually for every update." : "Η ρύθμιση \"μόνο ανάγνωση\" έχει ενεργοποιηθεί. Αυτό εμποδίζει τον καθορισμό κάποιων ρυθμίσεων μέσω της διεπαφής web. Επιπλέον, το αρχείο πρέπει να γίνει χειροκίνητα εγγράψιμο πριν από κάθε διαδικασία ενημέρωσης.", "PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "Ο PHP φαίνεται να είναι ρυθμισμένος ώστε να αφαιρεί μπλοκ εσωτερικών κειμένων (inline doc). Αυτό θα καταστήσει κύριες εφαρμογές μη-διαθέσιμες.", "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Αυτό πιθανόν προκλήθηκε από προσωρινή μνήμη (cache)/επιταχυντή όπως τη Zend OPcache ή τον eAccelerator.", diff --git a/settings/l10n/el.json b/settings/l10n/el.json index 79574e1ae72..c3df28bc3a1 100644 --- a/settings/l10n/el.json +++ b/settings/l10n/el.json @@ -74,6 +74,7 @@ "Strong password" : "Δυνατό συνθηματικό", "Valid until {date}" : "Έγκυρο έως {date}", "Delete" : "Διαγραφή", + "An error occurred. Please upload an ASCII-encoded PEM certificate." : "Προέκυψε σφάλμα. Παρακαλούμε μεταφορτώστε ένα πιστοποιητικό PEM κωδικοποιημένο κατά ASCII.", "Groups" : "Ομάδες", "Unable to delete {objName}" : "Αδυναμία διαγραφής του {objName}", "Error creating group" : "Σφάλμα δημιουργίας ομάδας", @@ -104,6 +105,8 @@ "NT LAN Manager" : "Διαχειριστης NT LAN", "SSL" : "SSL", "TLS" : "TLS", + "php does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "Η php δεν φαίνεται να είναι σωστά ρυθμισμένη για ερωτήματα σε μεταβλητές περιβάλλοντος του συστήματος. Η δοκιμή με την εντολή getenv(\"PATH\") επιστρέφει κενή απάντηση.", + "Please check the installation documentation for php configuration notes and the php configuration of your server, especially when using php-fpm." : "Παρακαλούμε ελέγξτε την τεκμηρίωση της εγκατάστασης για τις σημειώσεις σχετικά με τη διαμόρφωση της php και τη διαμόρφωση της php στο διακομιστή σας, ειδικά όταν χρησιμοποιείτε php-fpm.", "The Read-Only config has been enabled. This prevents setting some configurations via the web-interface. Furthermore, the file needs to be made writable manually for every update." : "Η ρύθμιση \"μόνο ανάγνωση\" έχει ενεργοποιηθεί. Αυτό εμποδίζει τον καθορισμό κάποιων ρυθμίσεων μέσω της διεπαφής web. Επιπλέον, το αρχείο πρέπει να γίνει χειροκίνητα εγγράψιμο πριν από κάθε διαδικασία ενημέρωσης.", "PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "Ο PHP φαίνεται να είναι ρυθμισμένος ώστε να αφαιρεί μπλοκ εσωτερικών κειμένων (inline doc). Αυτό θα καταστήσει κύριες εφαρμογές μη-διαθέσιμες.", "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Αυτό πιθανόν προκλήθηκε από προσωρινή μνήμη (cache)/επιταχυντή όπως τη Zend OPcache ή τον eAccelerator.", diff --git a/settings/l10n/en_GB.js b/settings/l10n/en_GB.js index 51a134063ca..7329098ec4c 100644 --- a/settings/l10n/en_GB.js +++ b/settings/l10n/en_GB.js @@ -1,10 +1,14 @@ OC.L10N.register( "settings", { + "Security & setup warnings" : "Security & setup warnings", "Sharing" : "Sharing", "External Storage" : "External Storage", + "Server-side encryption" : "Server-side encryption", "Cron" : "Cron", + "Email server" : "Email server", "Log" : "Log", + "Tips & tricks" : "Tips & tricks", "Updates" : "Updates", "Authentication error" : "Authentication error", "Your full name has been changed." : "Your full name has been changed.", @@ -24,6 +28,8 @@ OC.L10N.register( "Unable to change password" : "Unable to change password", "Enabled" : "Enabled", "Not enabled" : "Not enabled", + "A problem occurred, please check your log files (Error: %s)" : "A problem occurred, please check your log files (Error: %s)", + "Migration Completed" : "Migration Completed", "Group already exists." : "Group already exists.", "Unable to add group." : "Unable to add group.", "Unable to delete group." : "Unable to delete group.", @@ -44,8 +50,13 @@ OC.L10N.register( "Email saved" : "Email saved", "Are you really sure you want add \"{domain}\" as trusted domain?" : "Are you really sure you want add \"{domain}\" as a trusted domain?", "Add trusted domain" : "Add trusted domain", + "Migration in progress. Please wait until the migration is finished" : "Migration in progress. Please wait until the migration is finished", + "Migration started …" : "Migration started …", "Sending..." : "Sending...", "All" : "All", + "Official apps are developed by and within the ownCloud community. They offer functionality central to ownCloud and are ready for production use." : "Official apps are developed by and within the ownCloud community. They offer functionality central to ownCloud and are ready for production use.", + "Approved apps are developed by trusted developers and have passed a cursory security check. They are actively maintained in an open code repository and their maintainers deem them to be stable for casual to normal use." : "Approved apps are developed by trusted developers and have passed a cursory security check. They are actively maintained in an open code repository and their maintainers deem them to be stable for casual to normal use.", + "This app is not checked for security issues and is new or known to be unstable. Install on your own risk." : "This app is not checked for security issues and is new or known to be unstable. Install on your own risk.", "Please wait...." : "Please wait....", "Error while disabling app" : "Error whilst disabling app", "Disable" : "Disable", @@ -65,6 +76,7 @@ OC.L10N.register( "Strong password" : "Strong password", "Valid until {date}" : "Valid until {date}", "Delete" : "Delete", + "An error occurred. Please upload an ASCII-encoded PEM certificate." : "An error occurred. Please upload an ASCII-encoded PEM certificate.", "Groups" : "Groups", "Unable to delete {objName}" : "Unable to delete {objName}", "Error creating group" : "Error creating group", @@ -106,6 +118,7 @@ OC.L10N.register( "We strongly suggest installing the required packages on your system to support one of the following locales: %s." : "We strongly suggest installing the required packages on your system to support one of the following locales: %s.", "If your installation is not installed in the root of the domain and uses system cron, there can be issues with the URL generation. To avoid these problems, please set the \"overwrite.cli.url\" option in your config.php file to the webroot path of your installation (Suggested: \"%s\")" : "If your installation is not installed in the root of the domain and uses system cron, there can be issues with the URL generation. To avoid these problems, please set the \"overwrite.cli.url\" option in your config.php file to the webroot path of your installation (Suggested: \"%s\")", "It was not possible to execute the cronjob via CLI. The following technical errors have appeared:" : "It was not possible to execute the cronjob via CLI. The following technical errors have appeared:", + "Please double check the <a target=\"_blank\" href=\"%s\">installation guides ↗</a>, and check for any errors or warnings in the <a href=\"#log-section\">log</a>." : "Please double check the <a target=\"_blank\" href=\"%s\">installation guides ↗</a>, and check for any errors or warnings in the <a href=\"#log-section\">log</a>.", "Allow apps to use the Share API" : "Allow apps to use the Share API", "Allow users to share via link" : "Allow users to share via link", "Enforce password protection" : "Enforce password protection", @@ -123,9 +136,12 @@ OC.L10N.register( "Last cron job execution: %s." : "Last cron job execution: %s.", "Last cron job execution: %s. Something seems wrong." : "Last cron job execution: %s. Something seems wrong.", "Cron was not executed yet!" : "Cron was not executed yet!", + "Open documentation" : "Open documentation", "Execute one task with each page loaded" : "Execute one task with each page loaded", "cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "cron.php is registered at a webcron service to call cron.php every 15 minutes over http.", "Use system's cron service to call the cron.php file every 15 minutes." : "Use system's cron service to call the cron.php file every 15 minutes.", + "Enable server-side encryption" : "Enable server-side encryption", + "Start migration" : "Start migration", "This is used for sending out notifications." : "This is used for sending out notifications.", "Send mode" : "Send mode", "Encryption" : "Encryption", @@ -148,9 +164,18 @@ OC.L10N.register( "The logfile is bigger than 100 MB. Downloading it may take some time!" : "The logfile is larger than 100 MB. Downloading it may take some time!", "SQLite is used as database. For larger installations we recommend to switch to a different database backend." : "SQLite is used as database. For larger installations, we recommend you switch to a different database backend.", "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "Especially when using the desktop client for file syncing, the use of SQLite is discouraged.", + "To migrate to another database use the command line tool: 'occ db:convert-type', or see the <a target=\"_blank\" href=\"%s\">documentation ↗</a>." : "To migrate to another database use the command line tool: 'occ db:convert-type', or see the <a target=\"_blank\" href=\"%s\">documentation ↗</a>.", + "How to do backups" : "How to do backups", + "Advanced monitoring" : "Advanced monitoring", + "Performance tuning" : "Performance tuning", + "Improving the config.php" : "Improving the config.php", + "Theming" : "Theming", + "Hardening and security guidance" : "Hardening and security guidance", "Version" : "Version", "More apps" : "More apps", "Developer documentation" : "Developer documentation", + "Experimental applications ahead" : "Experimental applications ahead", + "Experimental apps are not checked for security issues, new or known to be unstable and under heavy development. Installing them can cause data loss or security breaches." : "Experimental apps are not checked for security issues, new or known to be unstable and under heavy development. Installing them can cause data loss or security breaches.", "by" : "by", "licensed" : "licensed", "Documentation:" : "Documentation:", @@ -162,10 +187,17 @@ OC.L10N.register( "Update to %s" : "Update to %s", "Enable only for specific groups" : "Enable only for specific groups", "Uninstall App" : "Uninstall App", + "Enable experimental apps" : "Enable experimental apps", + "No apps found for your version" : "No apps found for your version", "Hey there,<br><br>just letting you know that you now have an %s account.<br><br>Your username: %s<br>Access it: <a href=\"%s\">%s</a><br><br>" : "Hey there,<br><br>just letting you know that you now have an %s account.<br><br>Your username: %s<br>Access it: <a href=\"%s\">%s</a><br><br>", "Cheers!" : "Cheers!", "Hey there,\n\njust letting you know that you now have an %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Hey there,\n\njust letting you know that you now have an %s account.\n\nYour username: %s\nAccess it: %s\n\n", + "User documentation" : "User documentation", + "Administrator documentation" : "Administrator documentation", + "Online documentation" : "Online documentation", "Forum" : "Forum", + "Issue tracker" : "Issue tracker", + "Commercial support" : "Commercial support", "Get the apps to sync your files" : "Get the apps to sync your files", "Desktop client" : "Desktop client", "Android app" : "Android app", diff --git a/settings/l10n/en_GB.json b/settings/l10n/en_GB.json index 0de8369e68e..de4fdc0699c 100644 --- a/settings/l10n/en_GB.json +++ b/settings/l10n/en_GB.json @@ -1,8 +1,12 @@ { "translations": { + "Security & setup warnings" : "Security & setup warnings", "Sharing" : "Sharing", "External Storage" : "External Storage", + "Server-side encryption" : "Server-side encryption", "Cron" : "Cron", + "Email server" : "Email server", "Log" : "Log", + "Tips & tricks" : "Tips & tricks", "Updates" : "Updates", "Authentication error" : "Authentication error", "Your full name has been changed." : "Your full name has been changed.", @@ -22,6 +26,8 @@ "Unable to change password" : "Unable to change password", "Enabled" : "Enabled", "Not enabled" : "Not enabled", + "A problem occurred, please check your log files (Error: %s)" : "A problem occurred, please check your log files (Error: %s)", + "Migration Completed" : "Migration Completed", "Group already exists." : "Group already exists.", "Unable to add group." : "Unable to add group.", "Unable to delete group." : "Unable to delete group.", @@ -42,8 +48,13 @@ "Email saved" : "Email saved", "Are you really sure you want add \"{domain}\" as trusted domain?" : "Are you really sure you want add \"{domain}\" as a trusted domain?", "Add trusted domain" : "Add trusted domain", + "Migration in progress. Please wait until the migration is finished" : "Migration in progress. Please wait until the migration is finished", + "Migration started …" : "Migration started …", "Sending..." : "Sending...", "All" : "All", + "Official apps are developed by and within the ownCloud community. They offer functionality central to ownCloud and are ready for production use." : "Official apps are developed by and within the ownCloud community. They offer functionality central to ownCloud and are ready for production use.", + "Approved apps are developed by trusted developers and have passed a cursory security check. They are actively maintained in an open code repository and their maintainers deem them to be stable for casual to normal use." : "Approved apps are developed by trusted developers and have passed a cursory security check. They are actively maintained in an open code repository and their maintainers deem them to be stable for casual to normal use.", + "This app is not checked for security issues and is new or known to be unstable. Install on your own risk." : "This app is not checked for security issues and is new or known to be unstable. Install on your own risk.", "Please wait...." : "Please wait....", "Error while disabling app" : "Error whilst disabling app", "Disable" : "Disable", @@ -63,6 +74,7 @@ "Strong password" : "Strong password", "Valid until {date}" : "Valid until {date}", "Delete" : "Delete", + "An error occurred. Please upload an ASCII-encoded PEM certificate." : "An error occurred. Please upload an ASCII-encoded PEM certificate.", "Groups" : "Groups", "Unable to delete {objName}" : "Unable to delete {objName}", "Error creating group" : "Error creating group", @@ -104,6 +116,7 @@ "We strongly suggest installing the required packages on your system to support one of the following locales: %s." : "We strongly suggest installing the required packages on your system to support one of the following locales: %s.", "If your installation is not installed in the root of the domain and uses system cron, there can be issues with the URL generation. To avoid these problems, please set the \"overwrite.cli.url\" option in your config.php file to the webroot path of your installation (Suggested: \"%s\")" : "If your installation is not installed in the root of the domain and uses system cron, there can be issues with the URL generation. To avoid these problems, please set the \"overwrite.cli.url\" option in your config.php file to the webroot path of your installation (Suggested: \"%s\")", "It was not possible to execute the cronjob via CLI. The following technical errors have appeared:" : "It was not possible to execute the cronjob via CLI. The following technical errors have appeared:", + "Please double check the <a target=\"_blank\" href=\"%s\">installation guides ↗</a>, and check for any errors or warnings in the <a href=\"#log-section\">log</a>." : "Please double check the <a target=\"_blank\" href=\"%s\">installation guides ↗</a>, and check for any errors or warnings in the <a href=\"#log-section\">log</a>.", "Allow apps to use the Share API" : "Allow apps to use the Share API", "Allow users to share via link" : "Allow users to share via link", "Enforce password protection" : "Enforce password protection", @@ -121,9 +134,12 @@ "Last cron job execution: %s." : "Last cron job execution: %s.", "Last cron job execution: %s. Something seems wrong." : "Last cron job execution: %s. Something seems wrong.", "Cron was not executed yet!" : "Cron was not executed yet!", + "Open documentation" : "Open documentation", "Execute one task with each page loaded" : "Execute one task with each page loaded", "cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "cron.php is registered at a webcron service to call cron.php every 15 minutes over http.", "Use system's cron service to call the cron.php file every 15 minutes." : "Use system's cron service to call the cron.php file every 15 minutes.", + "Enable server-side encryption" : "Enable server-side encryption", + "Start migration" : "Start migration", "This is used for sending out notifications." : "This is used for sending out notifications.", "Send mode" : "Send mode", "Encryption" : "Encryption", @@ -146,9 +162,18 @@ "The logfile is bigger than 100 MB. Downloading it may take some time!" : "The logfile is larger than 100 MB. Downloading it may take some time!", "SQLite is used as database. For larger installations we recommend to switch to a different database backend." : "SQLite is used as database. For larger installations, we recommend you switch to a different database backend.", "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "Especially when using the desktop client for file syncing, the use of SQLite is discouraged.", + "To migrate to another database use the command line tool: 'occ db:convert-type', or see the <a target=\"_blank\" href=\"%s\">documentation ↗</a>." : "To migrate to another database use the command line tool: 'occ db:convert-type', or see the <a target=\"_blank\" href=\"%s\">documentation ↗</a>.", + "How to do backups" : "How to do backups", + "Advanced monitoring" : "Advanced monitoring", + "Performance tuning" : "Performance tuning", + "Improving the config.php" : "Improving the config.php", + "Theming" : "Theming", + "Hardening and security guidance" : "Hardening and security guidance", "Version" : "Version", "More apps" : "More apps", "Developer documentation" : "Developer documentation", + "Experimental applications ahead" : "Experimental applications ahead", + "Experimental apps are not checked for security issues, new or known to be unstable and under heavy development. Installing them can cause data loss or security breaches." : "Experimental apps are not checked for security issues, new or known to be unstable and under heavy development. Installing them can cause data loss or security breaches.", "by" : "by", "licensed" : "licensed", "Documentation:" : "Documentation:", @@ -160,10 +185,17 @@ "Update to %s" : "Update to %s", "Enable only for specific groups" : "Enable only for specific groups", "Uninstall App" : "Uninstall App", + "Enable experimental apps" : "Enable experimental apps", + "No apps found for your version" : "No apps found for your version", "Hey there,<br><br>just letting you know that you now have an %s account.<br><br>Your username: %s<br>Access it: <a href=\"%s\">%s</a><br><br>" : "Hey there,<br><br>just letting you know that you now have an %s account.<br><br>Your username: %s<br>Access it: <a href=\"%s\">%s</a><br><br>", "Cheers!" : "Cheers!", "Hey there,\n\njust letting you know that you now have an %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Hey there,\n\njust letting you know that you now have an %s account.\n\nYour username: %s\nAccess it: %s\n\n", + "User documentation" : "User documentation", + "Administrator documentation" : "Administrator documentation", + "Online documentation" : "Online documentation", "Forum" : "Forum", + "Issue tracker" : "Issue tracker", + "Commercial support" : "Commercial support", "Get the apps to sync your files" : "Get the apps to sync your files", "Desktop client" : "Desktop client", "Android app" : "Android app", diff --git a/settings/l10n/es.js b/settings/l10n/es.js index dfbbcb0566e..5565afb7163 100644 --- a/settings/l10n/es.js +++ b/settings/l10n/es.js @@ -4,7 +4,9 @@ OC.L10N.register( "Security & setup warnings" : "Avisos de seguidad y configuración", "Sharing" : "Compartiendo", "External Storage" : "Almacenamiento externo", + "Server-side encryption" : "Cifrado en el servidor", "Cron" : "Cron", + "Email server" : "Servidor de correo electrónico", "Log" : "Registro", "Tips & tricks" : "Sugerencias y trucos", "Updates" : "Actualizaciones", @@ -26,6 +28,8 @@ OC.L10N.register( "Unable to change password" : "No se ha podido cambiar la contraseña", "Enabled" : "Habilitado", "Not enabled" : "No habilitado", + "A problem occurred, please check your log files (Error: %s)" : "Ocurrió un problema, por favor verifique los archivos de registro (Error: %s)", + "Migration Completed" : "Migración finalizada", "Group already exists." : "El grupo ya existe.", "Unable to add group." : "No se pudo agregar el grupo.", "Unable to delete group." : "No se pudo eliminar el grupo.", @@ -46,6 +50,8 @@ OC.L10N.register( "Email saved" : "Correo electrónico guardado", "Are you really sure you want add \"{domain}\" as trusted domain?" : "¿Está seguro de querer agregar \"{domain}\" como un dominio de confianza?", "Add trusted domain" : "Agregar dominio de confianza", + "Migration in progress. Please wait until the migration is finished" : "Migración en curso. Por favor espere hasta que la migración esté finalizada.", + "Migration started …" : "Migración iniciada...", "Sending..." : "Enviando...", "All" : "Todos", "Official apps are developed by and within the ownCloud community. They offer functionality central to ownCloud and are ready for production use." : "Aplicaciones oficiales son desarrolladas por y dentro de la comunidad ownCloud. Estas ofrecen una funcionalidad central con ownCloud y están listas para su uso en producción. ", @@ -70,6 +76,7 @@ OC.L10N.register( "Strong password" : "Contraseña muy buena", "Valid until {date}" : "Válido hasta {date}", "Delete" : "Eliminar", + "An error occurred. Please upload an ASCII-encoded PEM certificate." : "Un error ha ocurrido. Por favor cargue un certificado PEM codificado en ASCII.", "Groups" : "Grupos", "Unable to delete {objName}" : "No es posible eliminar {objName}", "Error creating group" : "Error al crear un grupo", @@ -100,6 +107,8 @@ OC.L10N.register( "NT LAN Manager" : "Gestor de NT LAN", "SSL" : "SSL", "TLS" : "TLS", + "php does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "php parece que no esta configurado correctamente para solicitar las variables de entorno del sistema. La prueba con getenv(\"PATH\") solo retorna una respuesta vacía.", + "Please check the installation documentation for php configuration notes and the php configuration of your server, especially when using php-fpm." : "Por favor verifique la documentación de instalación para las notas de configuración de php y la configuración de php en tu servidor, específicamente donde se está usando php-fpm.", "The Read-Only config has been enabled. This prevents setting some configurations via the web-interface. Furthermore, the file needs to be made writable manually for every update." : "Se ha habilitado la configuración de sólo lectura. Esto evita que ajustar algunas configuraciones a través de la interfaz web. Además, el archivo debe hacerse modificable manualmente para cada actualización.", "PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "PHP está aparentemente configurado para eliminar bloques de documentos en línea. Esto hará que varias aplicaciones principales no estén accesibles.", "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Probablemente esto venga a causa de la caché o un acelerador, tales como Zend OPcache o eAccelerator.", @@ -133,6 +142,8 @@ OC.L10N.register( "Execute one task with each page loaded" : "Ejecutar una tarea con cada página cargada", "cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "cron.php se registra en un servicio webcron para llamar a cron.php cada 15 minutos a través de HTTP.", "Use system's cron service to call the cron.php file every 15 minutes." : "Usar el servicio cron del sistema para llamar al archivo cron.php cada 15 minutos.", + "Enable server-side encryption" : "Habilitar cifrado en el servidor", + "Start migration" : "Iniciar migración", "This is used for sending out notifications." : "Esto se usa para enviar notificaciones.", "Send mode" : "Modo de envío", "Encryption" : "Cifrado", diff --git a/settings/l10n/es.json b/settings/l10n/es.json index 7cefb5d83c4..42c926ed0bb 100644 --- a/settings/l10n/es.json +++ b/settings/l10n/es.json @@ -2,7 +2,9 @@ "Security & setup warnings" : "Avisos de seguidad y configuración", "Sharing" : "Compartiendo", "External Storage" : "Almacenamiento externo", + "Server-side encryption" : "Cifrado en el servidor", "Cron" : "Cron", + "Email server" : "Servidor de correo electrónico", "Log" : "Registro", "Tips & tricks" : "Sugerencias y trucos", "Updates" : "Actualizaciones", @@ -24,6 +26,8 @@ "Unable to change password" : "No se ha podido cambiar la contraseña", "Enabled" : "Habilitado", "Not enabled" : "No habilitado", + "A problem occurred, please check your log files (Error: %s)" : "Ocurrió un problema, por favor verifique los archivos de registro (Error: %s)", + "Migration Completed" : "Migración finalizada", "Group already exists." : "El grupo ya existe.", "Unable to add group." : "No se pudo agregar el grupo.", "Unable to delete group." : "No se pudo eliminar el grupo.", @@ -44,6 +48,8 @@ "Email saved" : "Correo electrónico guardado", "Are you really sure you want add \"{domain}\" as trusted domain?" : "¿Está seguro de querer agregar \"{domain}\" como un dominio de confianza?", "Add trusted domain" : "Agregar dominio de confianza", + "Migration in progress. Please wait until the migration is finished" : "Migración en curso. Por favor espere hasta que la migración esté finalizada.", + "Migration started …" : "Migración iniciada...", "Sending..." : "Enviando...", "All" : "Todos", "Official apps are developed by and within the ownCloud community. They offer functionality central to ownCloud and are ready for production use." : "Aplicaciones oficiales son desarrolladas por y dentro de la comunidad ownCloud. Estas ofrecen una funcionalidad central con ownCloud y están listas para su uso en producción. ", @@ -68,6 +74,7 @@ "Strong password" : "Contraseña muy buena", "Valid until {date}" : "Válido hasta {date}", "Delete" : "Eliminar", + "An error occurred. Please upload an ASCII-encoded PEM certificate." : "Un error ha ocurrido. Por favor cargue un certificado PEM codificado en ASCII.", "Groups" : "Grupos", "Unable to delete {objName}" : "No es posible eliminar {objName}", "Error creating group" : "Error al crear un grupo", @@ -98,6 +105,8 @@ "NT LAN Manager" : "Gestor de NT LAN", "SSL" : "SSL", "TLS" : "TLS", + "php does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "php parece que no esta configurado correctamente para solicitar las variables de entorno del sistema. La prueba con getenv(\"PATH\") solo retorna una respuesta vacía.", + "Please check the installation documentation for php configuration notes and the php configuration of your server, especially when using php-fpm." : "Por favor verifique la documentación de instalación para las notas de configuración de php y la configuración de php en tu servidor, específicamente donde se está usando php-fpm.", "The Read-Only config has been enabled. This prevents setting some configurations via the web-interface. Furthermore, the file needs to be made writable manually for every update." : "Se ha habilitado la configuración de sólo lectura. Esto evita que ajustar algunas configuraciones a través de la interfaz web. Además, el archivo debe hacerse modificable manualmente para cada actualización.", "PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "PHP está aparentemente configurado para eliminar bloques de documentos en línea. Esto hará que varias aplicaciones principales no estén accesibles.", "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Probablemente esto venga a causa de la caché o un acelerador, tales como Zend OPcache o eAccelerator.", @@ -131,6 +140,8 @@ "Execute one task with each page loaded" : "Ejecutar una tarea con cada página cargada", "cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "cron.php se registra en un servicio webcron para llamar a cron.php cada 15 minutos a través de HTTP.", "Use system's cron service to call the cron.php file every 15 minutes." : "Usar el servicio cron del sistema para llamar al archivo cron.php cada 15 minutos.", + "Enable server-side encryption" : "Habilitar cifrado en el servidor", + "Start migration" : "Iniciar migración", "This is used for sending out notifications." : "Esto se usa para enviar notificaciones.", "Send mode" : "Modo de envío", "Encryption" : "Cifrado", diff --git a/settings/l10n/fi_FI.js b/settings/l10n/fi_FI.js index 4476213e711..8e3f3983c34 100644 --- a/settings/l10n/fi_FI.js +++ b/settings/l10n/fi_FI.js @@ -76,6 +76,7 @@ OC.L10N.register( "Strong password" : "Vahva salasana", "Valid until {date}" : "Kelvollinen {date} asti", "Delete" : "Poista", + "An error occurred. Please upload an ASCII-encoded PEM certificate." : "Tapahtu virhe. Lähetä ASCII-koodattu PEM-varmenne.", "Groups" : "Ryhmät", "Unable to delete {objName}" : "Kohteen {objName} poistaminen epäonnistui", "Error creating group" : "Virhe ryhmää luotaessa", @@ -104,6 +105,7 @@ OC.L10N.register( "NT LAN Manager" : "NT LAN Manager", "SSL" : "SSL", "TLS" : "TLS", + "The Read-Only config has been enabled. This prevents setting some configurations via the web-interface. Furthermore, the file needs to be made writable manually for every update." : "Vain luku -asetukset on otettu käyttöön. Tämä estää joidenkin asetusten määrittämisen selainkäyttöliittymän kautta. Lisäksi kyseinen tiedostoon tulee asettaa kirjoitusoikeus käsin joka päivityksen yhteydessä.", "Your server is running on Microsoft Windows. We highly recommend Linux for optimal user experience." : "Palvelimesi käyttöjärjestelmä on Microsoft Windows. Suosittelemme käyttämään parhaan mahdollisen käyttökokemuksen saavuttamiseksi Linuxia.", "APCu below version 4.0.6 is installed, for stability and performance reasons we recommend to update to a newer APCu version." : "APCu alta version 4.0.6 on asennettu. Vakauden ja suorituskyvyn vuoksi suosittelemme päivittämään APCu:n uudempaan versioon.", "The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "PHP-moduuli \"fileinfo\" puuttuu. Sen käyttö on erittäin suositeltavaa, jotta MIME-tyypin havaitseminen onnistuu parhaalla mahdollisella tavalla.", @@ -167,6 +169,7 @@ OC.L10N.register( "More apps" : "Lisää sovelluksia", "Developer documentation" : "Kehittäjädokumentaatio", "Experimental applications ahead" : "Kokeellisia sovelluksia edessä", + "Experimental apps are not checked for security issues, new or known to be unstable and under heavy development. Installing them can cause data loss or security breaches." : "Kokeellisia sovelluksia ei ole tarkistettu tietoturvauhkien varalta. Sovellukset ovat uusia, ne saattavat olla epävakaita ja ovat nopean kehityksen alaisia. Kokeellisten sovellusten asentaminen saattaa aiheuttaa tietojen katoamista tai tietoturvauhkia.", "by" : " Kirjoittaja:", "licensed" : "lisensoitu", "Documentation:" : "Ohjeistus:", diff --git a/settings/l10n/fi_FI.json b/settings/l10n/fi_FI.json index 99cae5e8880..54da02c3291 100644 --- a/settings/l10n/fi_FI.json +++ b/settings/l10n/fi_FI.json @@ -74,6 +74,7 @@ "Strong password" : "Vahva salasana", "Valid until {date}" : "Kelvollinen {date} asti", "Delete" : "Poista", + "An error occurred. Please upload an ASCII-encoded PEM certificate." : "Tapahtu virhe. Lähetä ASCII-koodattu PEM-varmenne.", "Groups" : "Ryhmät", "Unable to delete {objName}" : "Kohteen {objName} poistaminen epäonnistui", "Error creating group" : "Virhe ryhmää luotaessa", @@ -102,6 +103,7 @@ "NT LAN Manager" : "NT LAN Manager", "SSL" : "SSL", "TLS" : "TLS", + "The Read-Only config has been enabled. This prevents setting some configurations via the web-interface. Furthermore, the file needs to be made writable manually for every update." : "Vain luku -asetukset on otettu käyttöön. Tämä estää joidenkin asetusten määrittämisen selainkäyttöliittymän kautta. Lisäksi kyseinen tiedostoon tulee asettaa kirjoitusoikeus käsin joka päivityksen yhteydessä.", "Your server is running on Microsoft Windows. We highly recommend Linux for optimal user experience." : "Palvelimesi käyttöjärjestelmä on Microsoft Windows. Suosittelemme käyttämään parhaan mahdollisen käyttökokemuksen saavuttamiseksi Linuxia.", "APCu below version 4.0.6 is installed, for stability and performance reasons we recommend to update to a newer APCu version." : "APCu alta version 4.0.6 on asennettu. Vakauden ja suorituskyvyn vuoksi suosittelemme päivittämään APCu:n uudempaan versioon.", "The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "PHP-moduuli \"fileinfo\" puuttuu. Sen käyttö on erittäin suositeltavaa, jotta MIME-tyypin havaitseminen onnistuu parhaalla mahdollisella tavalla.", @@ -165,6 +167,7 @@ "More apps" : "Lisää sovelluksia", "Developer documentation" : "Kehittäjädokumentaatio", "Experimental applications ahead" : "Kokeellisia sovelluksia edessä", + "Experimental apps are not checked for security issues, new or known to be unstable and under heavy development. Installing them can cause data loss or security breaches." : "Kokeellisia sovelluksia ei ole tarkistettu tietoturvauhkien varalta. Sovellukset ovat uusia, ne saattavat olla epävakaita ja ovat nopean kehityksen alaisia. Kokeellisten sovellusten asentaminen saattaa aiheuttaa tietojen katoamista tai tietoturvauhkia.", "by" : " Kirjoittaja:", "licensed" : "lisensoitu", "Documentation:" : "Ohjeistus:", diff --git a/settings/l10n/fr.js b/settings/l10n/fr.js index 4109a602df1..2fc62f9a1aa 100644 --- a/settings/l10n/fr.js +++ b/settings/l10n/fr.js @@ -76,6 +76,7 @@ OC.L10N.register( "Strong password" : "Mot de passe de forte sécurité", "Valid until {date}" : "Valide jusqu'au {date}", "Delete" : "Supprimer", + "An error occurred. Please upload an ASCII-encoded PEM certificate." : "Une erreur est survenue. Veuillez fournir un certificat PEM encodé au format ASCII.", "Groups" : "Groupes", "Unable to delete {objName}" : "Impossible de supprimer {objName}", "Error creating group" : "Erreur lors de la création du groupe", diff --git a/settings/l10n/fr.json b/settings/l10n/fr.json index 0a3902925bc..35b946756cc 100644 --- a/settings/l10n/fr.json +++ b/settings/l10n/fr.json @@ -74,6 +74,7 @@ "Strong password" : "Mot de passe de forte sécurité", "Valid until {date}" : "Valide jusqu'au {date}", "Delete" : "Supprimer", + "An error occurred. Please upload an ASCII-encoded PEM certificate." : "Une erreur est survenue. Veuillez fournir un certificat PEM encodé au format ASCII.", "Groups" : "Groupes", "Unable to delete {objName}" : "Impossible de supprimer {objName}", "Error creating group" : "Erreur lors de la création du groupe", diff --git a/settings/l10n/gl.js b/settings/l10n/gl.js index c681ce9fd0c..6387f387e2b 100644 --- a/settings/l10n/gl.js +++ b/settings/l10n/gl.js @@ -23,7 +23,7 @@ OC.L10N.register( "Wrong password" : "Contrasinal incorrecto", "No user supplied" : "Non subministrado polo usuario", "Please provide an admin recovery password, otherwise all user data will be lost" : "Forneza un contrasinal de recuperación do administrador de recuperación, senón perderanse todos os datos do usuario", - "Wrong admin recovery password. Please check the password and try again." : "Contrasinal de recuperación do administrador incorrecto. Comprobe o contrasinal e tenteo de novo.", + "Wrong admin recovery password. Please check the password and try again." : "Contrasinal de recuperación do administrador incorrecto. Comprobe o contrasinal e ténteo de novo.", "Backend doesn't support password change, but the user's encryption key was successfully updated." : "A infraestrutura non admite o cambio de contrasinal, mais a chave de cifrado do usuario foi actualizada correctamente.", "Unable to change password" : "Non é posíbel cambiar o contrasinal", "Enabled" : "Activado", @@ -76,6 +76,7 @@ OC.L10N.register( "Strong password" : "Contrasinal forte", "Valid until {date}" : "Válido ata {date}", "Delete" : "Eliminar", + "An error occurred. Please upload an ASCII-encoded PEM certificate." : "Produciuse un erro. Envíe un certificado PEM codificado en ASCII.", "Groups" : "Grupos", "Unable to delete {objName}" : "Non é posíbel eliminar {objName}", "Error creating group" : "Produciuse un erro ao crear o grupo", @@ -106,6 +107,8 @@ OC.L10N.register( "NT LAN Manager" : "Xestor NT LAN", "SSL" : "SSL", "TLS" : "TLS", + "php does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "Semella que PHP non está correctamente para consultar as variábeis de entorno do sistema. A proba con getenv(\"PATH\") só devolve unha resposta baleira.", + "Please check the installation documentation for php configuration notes and the php configuration of your server, especially when using php-fpm." : "Consulte a documentación de instalación para ver as notas de configuración de PHP e a configuración PHP do servidor, especialmente se emprega php-fpm.", "The Read-Only config has been enabled. This prevents setting some configurations via the web-interface. Furthermore, the file needs to be made writable manually for every update." : "Foi activada a restrición da configuración a só lectura. Isto impide o estabelecemento dalgunhas configuracións a través da interface web. Ademais, ten que facer escribíbel manualmente o ficheiro para cada actualización.", "PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "Parece que PHP foi configuración para substituír bloques de documentos en liña. Isto fará que varias aplicacións sexan inaccesíbeis.", "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Isto probabelmente se debe unha caché/acelerador como Zend OPcache ou eAccelerator.", diff --git a/settings/l10n/gl.json b/settings/l10n/gl.json index 91c62b05f0a..f44f40f8a49 100644 --- a/settings/l10n/gl.json +++ b/settings/l10n/gl.json @@ -21,7 +21,7 @@ "Wrong password" : "Contrasinal incorrecto", "No user supplied" : "Non subministrado polo usuario", "Please provide an admin recovery password, otherwise all user data will be lost" : "Forneza un contrasinal de recuperación do administrador de recuperación, senón perderanse todos os datos do usuario", - "Wrong admin recovery password. Please check the password and try again." : "Contrasinal de recuperación do administrador incorrecto. Comprobe o contrasinal e tenteo de novo.", + "Wrong admin recovery password. Please check the password and try again." : "Contrasinal de recuperación do administrador incorrecto. Comprobe o contrasinal e ténteo de novo.", "Backend doesn't support password change, but the user's encryption key was successfully updated." : "A infraestrutura non admite o cambio de contrasinal, mais a chave de cifrado do usuario foi actualizada correctamente.", "Unable to change password" : "Non é posíbel cambiar o contrasinal", "Enabled" : "Activado", @@ -74,6 +74,7 @@ "Strong password" : "Contrasinal forte", "Valid until {date}" : "Válido ata {date}", "Delete" : "Eliminar", + "An error occurred. Please upload an ASCII-encoded PEM certificate." : "Produciuse un erro. Envíe un certificado PEM codificado en ASCII.", "Groups" : "Grupos", "Unable to delete {objName}" : "Non é posíbel eliminar {objName}", "Error creating group" : "Produciuse un erro ao crear o grupo", @@ -104,6 +105,8 @@ "NT LAN Manager" : "Xestor NT LAN", "SSL" : "SSL", "TLS" : "TLS", + "php does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "Semella que PHP non está correctamente para consultar as variábeis de entorno do sistema. A proba con getenv(\"PATH\") só devolve unha resposta baleira.", + "Please check the installation documentation for php configuration notes and the php configuration of your server, especially when using php-fpm." : "Consulte a documentación de instalación para ver as notas de configuración de PHP e a configuración PHP do servidor, especialmente se emprega php-fpm.", "The Read-Only config has been enabled. This prevents setting some configurations via the web-interface. Furthermore, the file needs to be made writable manually for every update." : "Foi activada a restrición da configuración a só lectura. Isto impide o estabelecemento dalgunhas configuracións a través da interface web. Ademais, ten que facer escribíbel manualmente o ficheiro para cada actualización.", "PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "Parece que PHP foi configuración para substituír bloques de documentos en liña. Isto fará que varias aplicacións sexan inaccesíbeis.", "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Isto probabelmente se debe unha caché/acelerador como Zend OPcache ou eAccelerator.", diff --git a/settings/l10n/it.js b/settings/l10n/it.js index 117be757d98..26d8341ad3e 100644 --- a/settings/l10n/it.js +++ b/settings/l10n/it.js @@ -76,6 +76,7 @@ OC.L10N.register( "Strong password" : "Password forte", "Valid until {date}" : "Valido fino al {date}", "Delete" : "Elimina", + "An error occurred. Please upload an ASCII-encoded PEM certificate." : "Si è verificato un errore. Carica un certificato PEM codificato in ASCII.", "Groups" : "Gruppi", "Unable to delete {objName}" : "Impossibile eliminare {objName}", "Error creating group" : "Errore durante la creazione del gruppo", @@ -106,6 +107,8 @@ OC.L10N.register( "NT LAN Manager" : "Gestore NT LAN", "SSL" : "SSL", "TLS" : "TLS", + "php does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "php non sembra essere configurato correttamente per interrogare le variabili d'ambiente di sistema. Il test con getenv(\"PATH\") restituisce solo una risposta vuota.", + "Please check the installation documentation for php configuration notes and the php configuration of your server, especially when using php-fpm." : "Controlla la documentazione di installazione per le note di configurazione di php e la configurazione del tuo server, specialmente quando utilizzi php-fpm.", "The Read-Only config has been enabled. This prevents setting some configurations via the web-interface. Furthermore, the file needs to be made writable manually for every update." : "La configurazione di sola lettura è stata abilitata. Ciò impedisce l'impostazione di alcune configurazioni tramite l'interfaccia web. Inoltre, i file devono essere resi scrivibili manualmente per ogni aggiornamento.", "PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "Sembra che PHP sia configurato per rimuovere i blocchi di documentazione in linea. Ciò renderà inaccessibili diverse applicazioni principali.", "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Ciò è causato probabilmente da una cache/acceleratore come Zend OPcache o eAccelerator.", diff --git a/settings/l10n/it.json b/settings/l10n/it.json index c4844c17ff7..2fd23c272a3 100644 --- a/settings/l10n/it.json +++ b/settings/l10n/it.json @@ -74,6 +74,7 @@ "Strong password" : "Password forte", "Valid until {date}" : "Valido fino al {date}", "Delete" : "Elimina", + "An error occurred. Please upload an ASCII-encoded PEM certificate." : "Si è verificato un errore. Carica un certificato PEM codificato in ASCII.", "Groups" : "Gruppi", "Unable to delete {objName}" : "Impossibile eliminare {objName}", "Error creating group" : "Errore durante la creazione del gruppo", @@ -104,6 +105,8 @@ "NT LAN Manager" : "Gestore NT LAN", "SSL" : "SSL", "TLS" : "TLS", + "php does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "php non sembra essere configurato correttamente per interrogare le variabili d'ambiente di sistema. Il test con getenv(\"PATH\") restituisce solo una risposta vuota.", + "Please check the installation documentation for php configuration notes and the php configuration of your server, especially when using php-fpm." : "Controlla la documentazione di installazione per le note di configurazione di php e la configurazione del tuo server, specialmente quando utilizzi php-fpm.", "The Read-Only config has been enabled. This prevents setting some configurations via the web-interface. Furthermore, the file needs to be made writable manually for every update." : "La configurazione di sola lettura è stata abilitata. Ciò impedisce l'impostazione di alcune configurazioni tramite l'interfaccia web. Inoltre, i file devono essere resi scrivibili manualmente per ogni aggiornamento.", "PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "Sembra che PHP sia configurato per rimuovere i blocchi di documentazione in linea. Ciò renderà inaccessibili diverse applicazioni principali.", "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Ciò è causato probabilmente da una cache/acceleratore come Zend OPcache o eAccelerator.", diff --git a/settings/l10n/lb.js b/settings/l10n/lb.js index fb4dae552e7..0c061ae7d6e 100644 --- a/settings/l10n/lb.js +++ b/settings/l10n/lb.js @@ -8,6 +8,7 @@ OC.L10N.register( "Invalid request" : "Ongülteg Requête", "Admins can't remove themself from the admin group" : "Admins kennen sech selwer net aus enger Admin Group läschen.", "Unable to add user to group %s" : "Onmeiglech User an Grupp ze sätzen %s", + "Wrong password" : "Falscht Passwuert", "Email sent" : "Email geschéckt", "Email saved" : "E-mail gespäichert", "All" : "All", @@ -21,6 +22,7 @@ OC.L10N.register( "Login" : "Login", "Allow apps to use the Share API" : "Erlab Apps d'Share API ze benotzen", "Allow resharing" : "Resharing erlaben", + "Authentication required" : "Authentifizéierung néideg", "Server address" : "Server Adress", "More" : "Méi", "Less" : "Manner", diff --git a/settings/l10n/lb.json b/settings/l10n/lb.json index 5f63e95e167..10b63b5668d 100644 --- a/settings/l10n/lb.json +++ b/settings/l10n/lb.json @@ -6,6 +6,7 @@ "Invalid request" : "Ongülteg Requête", "Admins can't remove themself from the admin group" : "Admins kennen sech selwer net aus enger Admin Group läschen.", "Unable to add user to group %s" : "Onmeiglech User an Grupp ze sätzen %s", + "Wrong password" : "Falscht Passwuert", "Email sent" : "Email geschéckt", "Email saved" : "E-mail gespäichert", "All" : "All", @@ -19,6 +20,7 @@ "Login" : "Login", "Allow apps to use the Share API" : "Erlab Apps d'Share API ze benotzen", "Allow resharing" : "Resharing erlaben", + "Authentication required" : "Authentifizéierung néideg", "Server address" : "Server Adress", "More" : "Méi", "Less" : "Manner", diff --git a/settings/l10n/nl.js b/settings/l10n/nl.js index d4c532575c5..369601bfbd1 100644 --- a/settings/l10n/nl.js +++ b/settings/l10n/nl.js @@ -76,6 +76,7 @@ OC.L10N.register( "Strong password" : "Sterk wachtwoord", "Valid until {date}" : "Geldig tot {date}", "Delete" : "Verwijder", + "An error occurred. Please upload an ASCII-encoded PEM certificate." : "Er trad een fout op. Upload als een ASCII-gecodeerd PEM certificaat.", "Groups" : "Groepen", "Unable to delete {objName}" : "Kan {objName} niet verwijderen", "Error creating group" : "Fout bij aanmaken groep", @@ -106,6 +107,8 @@ OC.L10N.register( "NT LAN Manager" : "NT LAN Manager", "SSL" : "SSL", "TLS" : "TLS", + "php does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "php lijkt niet goed te zijn ingesteld om systeemomgevingsvariabelen te bevragen. De test met getenv(\"PATH\") gaf een leeg resultaat.", + "Please check the installation documentation for php configuration notes and the php configuration of your server, especially when using php-fpm." : "Verifieer de documentatie voor php configuratieinstellingen en de php configuratie van uw server, zeker als php-fpm wordt gebruikt.", "The Read-Only config has been enabled. This prevents setting some configurations via the web-interface. Furthermore, the file needs to be made writable manually for every update." : "De Alleen-lezen config is geactiveerd. Dit voorkomt het via de webinterface wijzigen van verschillende instellingen. Bovendien moet het bestand voor elke aanpassing handmatig op beschrijfbaar worden ingesteld.", "PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "PHP is blijkbaar zo ingesteld dat inline doc blokken worden gestript. Hierdoor worden verschillende kernmodules onbruikbaar.", "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Dit wordt vermoedelijk veroorzaakt door een cache/accelerator, zoals Zend OPcache of eAccelerator.", diff --git a/settings/l10n/nl.json b/settings/l10n/nl.json index 358740613b9..5532072a790 100644 --- a/settings/l10n/nl.json +++ b/settings/l10n/nl.json @@ -74,6 +74,7 @@ "Strong password" : "Sterk wachtwoord", "Valid until {date}" : "Geldig tot {date}", "Delete" : "Verwijder", + "An error occurred. Please upload an ASCII-encoded PEM certificate." : "Er trad een fout op. Upload als een ASCII-gecodeerd PEM certificaat.", "Groups" : "Groepen", "Unable to delete {objName}" : "Kan {objName} niet verwijderen", "Error creating group" : "Fout bij aanmaken groep", @@ -104,6 +105,8 @@ "NT LAN Manager" : "NT LAN Manager", "SSL" : "SSL", "TLS" : "TLS", + "php does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "php lijkt niet goed te zijn ingesteld om systeemomgevingsvariabelen te bevragen. De test met getenv(\"PATH\") gaf een leeg resultaat.", + "Please check the installation documentation for php configuration notes and the php configuration of your server, especially when using php-fpm." : "Verifieer de documentatie voor php configuratieinstellingen en de php configuratie van uw server, zeker als php-fpm wordt gebruikt.", "The Read-Only config has been enabled. This prevents setting some configurations via the web-interface. Furthermore, the file needs to be made writable manually for every update." : "De Alleen-lezen config is geactiveerd. Dit voorkomt het via de webinterface wijzigen van verschillende instellingen. Bovendien moet het bestand voor elke aanpassing handmatig op beschrijfbaar worden ingesteld.", "PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "PHP is blijkbaar zo ingesteld dat inline doc blokken worden gestript. Hierdoor worden verschillende kernmodules onbruikbaar.", "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Dit wordt vermoedelijk veroorzaakt door een cache/accelerator, zoals Zend OPcache of eAccelerator.", diff --git a/settings/l10n/pt_BR.js b/settings/l10n/pt_BR.js index aaecb907769..9e89869e9b6 100644 --- a/settings/l10n/pt_BR.js +++ b/settings/l10n/pt_BR.js @@ -4,7 +4,9 @@ OC.L10N.register( "Security & setup warnings" : "Segurança & avisos de configuração", "Sharing" : "Compartilhamento", "External Storage" : "Armazenamento Externo", + "Server-side encryption" : "Criptografia do lado do servidor", "Cron" : "Cron", + "Email server" : "Servidor de Email", "Log" : "Registro", "Tips & tricks" : "Dicas & Truques", "Updates" : "Atualizações", @@ -74,6 +76,7 @@ OC.L10N.register( "Strong password" : "Senha forte", "Valid until {date}" : "Vádido até {date}", "Delete" : "Excluir", + "An error occurred. Please upload an ASCII-encoded PEM certificate." : "Ocorreu um erro. Por favor envie um certificado ASCII-encoded PEM", "Groups" : "Grupos", "Unable to delete {objName}" : "Não é possível excluir {objName}", "Error creating group" : "Erro ao criar grupo", @@ -104,6 +107,8 @@ OC.L10N.register( "NT LAN Manager" : "Gerenciador NT LAN", "SSL" : "SSL", "TLS" : "TLS", + "php does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "O PHP não parecem esta configurado corretamente para consultar as variáveis de ambiente do sistema. O teste com getenv(\"PATH\") só retorna uma resposta vazia.", + "Please check the installation documentation for php configuration notes and the php configuration of your server, especially when using php-fpm." : "Por favor, verifique a documentação de instalação para as notas de configuração do PHP e a configuração do PHP do seu servidor, especialmente quando se utiliza php-fpm.", "The Read-Only config has been enabled. This prevents setting some configurations via the web-interface. Furthermore, the file needs to be made writable manually for every update." : "A configuração Somente-Leitura foi habilitada. Isso impede que algumas configurações sejam definidas via a interface web. Além disso, o arquivo precisa ter permissão de escrita manual para cada atualização.", "PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "PHP é, aparentemente, a configuração para retirar blocos doc inline. Isso fará com que vários aplicativos do núcleo fiquem inacessíveis.", "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Isso provavelmente é causado por uma cache/acelerador, como Zend OPcache ou eAccelerator.", @@ -137,6 +142,7 @@ OC.L10N.register( "Execute one task with each page loaded" : "Execute uma tarefa com cada página carregada", "cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "cron.php está registrado no serviço webcron para chamar cron.php a cada 15 minutos sobre http.", "Use system's cron service to call the cron.php file every 15 minutes." : "Usar o serviço cron do sistema para chamar o arquivo cron.php cada 15 minutos.", + "Enable server-side encryption" : "Habilitar a Criptografia do Lado do Servidor", "Start migration" : "Iniciar migração", "This is used for sending out notifications." : "Isto é usado para o envio de notificações.", "Send mode" : "Modo enviar", diff --git a/settings/l10n/pt_BR.json b/settings/l10n/pt_BR.json index 88132b7b0f5..507f2276104 100644 --- a/settings/l10n/pt_BR.json +++ b/settings/l10n/pt_BR.json @@ -2,7 +2,9 @@ "Security & setup warnings" : "Segurança & avisos de configuração", "Sharing" : "Compartilhamento", "External Storage" : "Armazenamento Externo", + "Server-side encryption" : "Criptografia do lado do servidor", "Cron" : "Cron", + "Email server" : "Servidor de Email", "Log" : "Registro", "Tips & tricks" : "Dicas & Truques", "Updates" : "Atualizações", @@ -72,6 +74,7 @@ "Strong password" : "Senha forte", "Valid until {date}" : "Vádido até {date}", "Delete" : "Excluir", + "An error occurred. Please upload an ASCII-encoded PEM certificate." : "Ocorreu um erro. Por favor envie um certificado ASCII-encoded PEM", "Groups" : "Grupos", "Unable to delete {objName}" : "Não é possível excluir {objName}", "Error creating group" : "Erro ao criar grupo", @@ -102,6 +105,8 @@ "NT LAN Manager" : "Gerenciador NT LAN", "SSL" : "SSL", "TLS" : "TLS", + "php does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "O PHP não parecem esta configurado corretamente para consultar as variáveis de ambiente do sistema. O teste com getenv(\"PATH\") só retorna uma resposta vazia.", + "Please check the installation documentation for php configuration notes and the php configuration of your server, especially when using php-fpm." : "Por favor, verifique a documentação de instalação para as notas de configuração do PHP e a configuração do PHP do seu servidor, especialmente quando se utiliza php-fpm.", "The Read-Only config has been enabled. This prevents setting some configurations via the web-interface. Furthermore, the file needs to be made writable manually for every update." : "A configuração Somente-Leitura foi habilitada. Isso impede que algumas configurações sejam definidas via a interface web. Além disso, o arquivo precisa ter permissão de escrita manual para cada atualização.", "PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "PHP é, aparentemente, a configuração para retirar blocos doc inline. Isso fará com que vários aplicativos do núcleo fiquem inacessíveis.", "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Isso provavelmente é causado por uma cache/acelerador, como Zend OPcache ou eAccelerator.", @@ -135,6 +140,7 @@ "Execute one task with each page loaded" : "Execute uma tarefa com cada página carregada", "cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "cron.php está registrado no serviço webcron para chamar cron.php a cada 15 minutos sobre http.", "Use system's cron service to call the cron.php file every 15 minutes." : "Usar o serviço cron do sistema para chamar o arquivo cron.php cada 15 minutos.", + "Enable server-side encryption" : "Habilitar a Criptografia do Lado do Servidor", "Start migration" : "Iniciar migração", "This is used for sending out notifications." : "Isto é usado para o envio de notificações.", "Send mode" : "Modo enviar", diff --git a/settings/l10n/ru.js b/settings/l10n/ru.js index e63bf95add1..5304780e7eb 100644 --- a/settings/l10n/ru.js +++ b/settings/l10n/ru.js @@ -76,6 +76,7 @@ OC.L10N.register( "Strong password" : "Стойкий пароль", "Valid until {date}" : "Действительно до {дата}", "Delete" : "Удалить", + "An error occurred. Please upload an ASCII-encoded PEM certificate." : "Произошла ошибка. Пожалуйста загрузите сертификат PEM в ASCII кодировке.", "Groups" : "Группы", "Unable to delete {objName}" : "Невозможно удалить {objName}", "Error creating group" : "Ошибка создания группы", @@ -106,6 +107,7 @@ OC.L10N.register( "NT LAN Manager" : "Менеджер NT LAN", "SSL" : "SSL", "TLS" : "TLS", + "php does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "PHP был установлен неверно. Запрос getenv(\"PATH\") возвращает пустые результаты.", "The Read-Only config has been enabled. This prevents setting some configurations via the web-interface. Furthermore, the file needs to be made writable manually for every update." : "Конфигурационный файл в режиме только для чтения. В связи с этим некоторые настройки веб-интерфейса невозможно изменить. Учтите, что для установки обновлений, вам потребуется самостоятельно разрешить запись в конфигурационный файл.", "PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "Очевидно, PHP настроен на вычищение блоков встроенной документации. Это сделает несколько центральных приложений недоступными.", "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Возможно это вызвано кешем/ускорителем вроде Zend OPcache или eAccelerator.", diff --git a/settings/l10n/ru.json b/settings/l10n/ru.json index 51f468d4d07..874ad602bb2 100644 --- a/settings/l10n/ru.json +++ b/settings/l10n/ru.json @@ -74,6 +74,7 @@ "Strong password" : "Стойкий пароль", "Valid until {date}" : "Действительно до {дата}", "Delete" : "Удалить", + "An error occurred. Please upload an ASCII-encoded PEM certificate." : "Произошла ошибка. Пожалуйста загрузите сертификат PEM в ASCII кодировке.", "Groups" : "Группы", "Unable to delete {objName}" : "Невозможно удалить {objName}", "Error creating group" : "Ошибка создания группы", @@ -104,6 +105,7 @@ "NT LAN Manager" : "Менеджер NT LAN", "SSL" : "SSL", "TLS" : "TLS", + "php does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "PHP был установлен неверно. Запрос getenv(\"PATH\") возвращает пустые результаты.", "The Read-Only config has been enabled. This prevents setting some configurations via the web-interface. Furthermore, the file needs to be made writable manually for every update." : "Конфигурационный файл в режиме только для чтения. В связи с этим некоторые настройки веб-интерфейса невозможно изменить. Учтите, что для установки обновлений, вам потребуется самостоятельно разрешить запись в конфигурационный файл.", "PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "Очевидно, PHP настроен на вычищение блоков встроенной документации. Это сделает несколько центральных приложений недоступными.", "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Возможно это вызвано кешем/ускорителем вроде Zend OPcache или eAccelerator.", diff --git a/settings/l10n/sr.js b/settings/l10n/sr.js index cc2ed54ea41..0a90138b34c 100644 --- a/settings/l10n/sr.js +++ b/settings/l10n/sr.js @@ -76,6 +76,7 @@ OC.L10N.register( "Strong password" : "Јака лозинка", "Valid until {date}" : "Важи до {date}", "Delete" : "Обриши", + "An error occurred. Please upload an ASCII-encoded PEM certificate." : "Дошло је до грешке. Отпремите АСКИ кодирани ПЕМ сертификат.", "Groups" : "Групе", "Unable to delete {objName}" : "Не могу да обришем {objName}", "Error creating group" : "Грешка при прављењу групе", @@ -106,6 +107,8 @@ OC.L10N.register( "NT LAN Manager" : "НТ ЛАН менаџер", "SSL" : "ССЛ", "TLS" : "ТЛС", + "php does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "ПХП није подешен да може да провери системске променљиве. Проба са getenv(\"PATH\") враћа празан одговор.", + "Please check the installation documentation for php configuration notes and the php configuration of your server, especially when using php-fpm." : "Погледајте инсталациону документацију за ПХП и серверска подешавања, посебно кад се користи php-fpm.", "The Read-Only config has been enabled. This prevents setting some configurations via the web-interface. Furthermore, the file needs to be made writable manually for every update." : "Омогућена је Само-читај конфигурација. То спречава постављање неке конфигурације преко веб-интерфејса. Осим тога, фајлу мора бити ручно омогућено уписивање код сваког освежавања.", "PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "ПХП је очигледно подешен да се скида уметнуте док блокова. То ће учинити неколико кључних апликација недоступним.", "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Ово је вероватно изазвано кешом или акцелератором као што су ЗендОПкеш или еАкцелератор.", diff --git a/settings/l10n/sr.json b/settings/l10n/sr.json index f753ad2199f..7a8702f8b5d 100644 --- a/settings/l10n/sr.json +++ b/settings/l10n/sr.json @@ -74,6 +74,7 @@ "Strong password" : "Јака лозинка", "Valid until {date}" : "Важи до {date}", "Delete" : "Обриши", + "An error occurred. Please upload an ASCII-encoded PEM certificate." : "Дошло је до грешке. Отпремите АСКИ кодирани ПЕМ сертификат.", "Groups" : "Групе", "Unable to delete {objName}" : "Не могу да обришем {objName}", "Error creating group" : "Грешка при прављењу групе", @@ -104,6 +105,8 @@ "NT LAN Manager" : "НТ ЛАН менаџер", "SSL" : "ССЛ", "TLS" : "ТЛС", + "php does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "ПХП није подешен да може да провери системске променљиве. Проба са getenv(\"PATH\") враћа празан одговор.", + "Please check the installation documentation for php configuration notes and the php configuration of your server, especially when using php-fpm." : "Погледајте инсталациону документацију за ПХП и серверска подешавања, посебно кад се користи php-fpm.", "The Read-Only config has been enabled. This prevents setting some configurations via the web-interface. Furthermore, the file needs to be made writable manually for every update." : "Омогућена је Само-читај конфигурација. То спречава постављање неке конфигурације преко веб-интерфејса. Осим тога, фајлу мора бити ручно омогућено уписивање код сваког освежавања.", "PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "ПХП је очигледно подешен да се скида уметнуте док блокова. То ће учинити неколико кључних апликација недоступним.", "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Ово је вероватно изазвано кешом или акцелератором као што су ЗендОПкеш или еАкцелератор.", diff --git a/settings/l10n/sr@latin.js b/settings/l10n/sr@latin.js index 60e8957d25b..baacd0efddb 100644 --- a/settings/l10n/sr@latin.js +++ b/settings/l10n/sr@latin.js @@ -2,6 +2,7 @@ OC.L10N.register( "settings", { "External Storage" : "Spoljašnje skladište", + "Updates" : "Ažuriranja", "Authentication error" : "Greška pri autentifikaciji", "Language changed" : "Jezik je izmenjen", "Invalid request" : "Neispravan zahtev", diff --git a/settings/l10n/sr@latin.json b/settings/l10n/sr@latin.json index 5f5b352809c..70392768da4 100644 --- a/settings/l10n/sr@latin.json +++ b/settings/l10n/sr@latin.json @@ -1,5 +1,6 @@ { "translations": { "External Storage" : "Spoljašnje skladište", + "Updates" : "Ažuriranja", "Authentication error" : "Greška pri autentifikaciji", "Language changed" : "Jezik je izmenjen", "Invalid request" : "Neispravan zahtev", diff --git a/settings/l10n/tr.js b/settings/l10n/tr.js index 7b89faba329..6c3f3dc9cd0 100644 --- a/settings/l10n/tr.js +++ b/settings/l10n/tr.js @@ -4,7 +4,9 @@ OC.L10N.register( "Security & setup warnings" : "Güvenlik ve kurulum uyarıları", "Sharing" : "Paylaşım", "External Storage" : "Harici Depolama", + "Server-side encryption" : "Sunucu taraflı şifreleme", "Cron" : "Cron", + "Email server" : "E-Posta sunucusu", "Log" : "Günlük", "Tips & tricks" : "İpuçları ve hileler", "Updates" : "Güncellemeler", diff --git a/settings/l10n/tr.json b/settings/l10n/tr.json index 440b67241c0..5503223e53d 100644 --- a/settings/l10n/tr.json +++ b/settings/l10n/tr.json @@ -2,7 +2,9 @@ "Security & setup warnings" : "Güvenlik ve kurulum uyarıları", "Sharing" : "Paylaşım", "External Storage" : "Harici Depolama", + "Server-side encryption" : "Sunucu taraflı şifreleme", "Cron" : "Cron", + "Email server" : "E-Posta sunucusu", "Log" : "Günlük", "Tips & tricks" : "İpuçları ve hileler", "Updates" : "Güncellemeler", diff --git a/settings/templates/admin.php b/settings/templates/admin.php index 4f60f7c16d9..587a3b6c66b 100644 --- a/settings/templates/admin.php +++ b/settings/templates/admin.php @@ -67,6 +67,16 @@ if ($_['mail_smtpmode'] == 'qmail') { <h2><?php p($l->t('Security & setup warnings'));?></h2> <ul> <?php +// is php setup properly to query system environment variables like getenv('PATH') +if ($_['getenvServerNotWorking']) { +?> + <li> + <?php p($l->t('php does not seem to be setup properly to query system environment variables. The test with getenv("PATH") only returns an empty response.')); ?><br> + <?php p($l->t('Please check the installation documentation for php configuration notes and the php configuration of your server, especially when using php-fpm.')); ?> + </li> +<?php +} + // is read only config enabled if ($_['readOnlyConfigEnabled']) { ?> diff --git a/tests/core/command/encryption/disabletest.php b/tests/core/command/encryption/disabletest.php new file mode 100644 index 00000000000..48a6539b243 --- /dev/null +++ b/tests/core/command/encryption/disabletest.php @@ -0,0 +1,85 @@ +<?php +/** + * @author Joas Schilling <nickvergessen@owncloud.com> + * + * @copyright Copyright (c) 2015, ownCloud, Inc. + * @license AGPL-3.0 + * + * This code is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License, version 3, + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License, version 3, + * along with this program. If not, see <http://www.gnu.org/licenses/> + * + */ + +namespace Tests\Core\Command\Encryption; + + +use OC\Core\Command\Encryption\Disable; +use Test\TestCase; + +class DisableTest extends TestCase { + /** @var \PHPUnit_Framework_MockObject_MockObject */ + protected $config; + /** @var \PHPUnit_Framework_MockObject_MockObject */ + protected $consoleInput; + /** @var \PHPUnit_Framework_MockObject_MockObject */ + protected $consoleOutput; + + /** @var \Symfony\Component\Console\Command\Command */ + protected $command; + + protected function setUp() { + parent::setUp(); + + $config = $this->config = $this->getMockBuilder('OCP\IConfig') + ->disableOriginalConstructor() + ->getMock(); + $this->consoleInput = $this->getMock('Symfony\Component\Console\Input\InputInterface'); + $this->consoleOutput = $this->getMock('Symfony\Component\Console\Output\OutputInterface'); + + /** @var \OCP\IConfig $config */ + $this->command = new Disable($config); + } + + + public function dataDisable() { + return [ + ['yes', true, 'Encryption disabled'], + ['no', false, 'Encryption is already disabled'], + ]; + } + + /** + * @dataProvider dataDisable + * + * @param string $oldStatus + * @param bool $isUpdating + * @param string $expectedString + */ + public function testDisable($oldStatus, $isUpdating, $expectedString) { + $this->config->expects($this->once()) + ->method('getAppValue') + ->with('core', 'encryption_enabled', $this->anything()) + ->willReturn($oldStatus); + + $this->consoleOutput->expects($this->once()) + ->method('writeln') + ->with($expectedString); + + if ($isUpdating) { + $this->config->expects($this->once()) + ->method('setAppValue') + ->with('core', 'encryption_enabled', 'no'); + } + + \Test_Helper::invokePrivate($this->command, 'execute', [$this->consoleInput, $this->consoleOutput]); + } +} diff --git a/tests/core/command/encryption/enabletest.php b/tests/core/command/encryption/enabletest.php new file mode 100644 index 00000000000..217329ca291 --- /dev/null +++ b/tests/core/command/encryption/enabletest.php @@ -0,0 +1,97 @@ +<?php +/** + * @author Joas Schilling <nickvergessen@owncloud.com> + * + * @copyright Copyright (c) 2015, ownCloud, Inc. + * @license AGPL-3.0 + * + * This code is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License, version 3, + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License, version 3, + * along with this program. If not, see <http://www.gnu.org/licenses/> + * + */ + +namespace Tests\Core\Command\Encryption; + + +use OC\Core\Command\Encryption\Enable; +use Test\TestCase; + +class EnableTest extends TestCase { + /** @var \PHPUnit_Framework_MockObject_MockObject */ + protected $config; + /** @var \PHPUnit_Framework_MockObject_MockObject */ + protected $consoleInput; + /** @var \PHPUnit_Framework_MockObject_MockObject */ + protected $consoleOutput; + + /** @var \Symfony\Component\Console\Command\Command */ + protected $command; + + protected function setUp() { + parent::setUp(); + + $config = $this->config = $this->getMockBuilder('OCP\IConfig') + ->disableOriginalConstructor() + ->getMock(); + $this->consoleInput = $this->getMock('Symfony\Component\Console\Input\InputInterface'); + $this->consoleOutput = $this->getMock('Symfony\Component\Console\Output\OutputInterface'); + + /** @var \OCP\IConfig $config */ + $this->command = new Enable($config); + } + + + public function dataEnable() { + return [ + ['no', true, 'Encryption enabled'], + ['yes', false, 'Encryption is already enabled'], + ]; + } + + /** + * @dataProvider dataEnable + * + * @param string $oldStatus + * @param bool $isUpdating + * @param string $expectedString + */ + public function testEnable($oldStatus, $isUpdating, $expectedString) { + $invoceCount = 0; + $this->config->expects($this->at($invoceCount)) + ->method('getAppValue') + ->with('core', 'encryption_enabled', $this->anything()) + ->willReturn($oldStatus); + $invoceCount++; + + if ($isUpdating) { + $this->config->expects($this->once()) + ->method('setAppValue') + ->with('core', 'encryption_enabled', 'yes'); + $invoceCount++; + } + + $this->config->expects($this->at($invoceCount)) + ->method('getAppValue') + ->with('core', 'default_encryption_module', $this->anything()) + ->willReturnArgument(2); + + $this->consoleOutput->expects($this->at(0)) + ->method('writeln') + ->with($expectedString); + + $this->consoleOutput->expects($this->at(1)) + ->method('writeln') + ->with($this->stringContains('Default module')); + + \Test_Helper::invokePrivate($this->command, 'execute', [$this->consoleInput, $this->consoleOutput]); + } +} diff --git a/tests/core/command/encryption/setdefaultmoduletest.php b/tests/core/command/encryption/setdefaultmoduletest.php new file mode 100644 index 00000000000..e2a61dd10f6 --- /dev/null +++ b/tests/core/command/encryption/setdefaultmoduletest.php @@ -0,0 +1,92 @@ +<?php +/** + * @author Joas Schilling <nickvergessen@owncloud.com> + * + * @copyright Copyright (c) 2015, ownCloud, Inc. + * @license AGPL-3.0 + * + * This code is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License, version 3, + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License, version 3, + * along with this program. If not, see <http://www.gnu.org/licenses/> + * + */ + +namespace Tests\Core\Command\Encryption; + + +use OC\Core\Command\Encryption\SetDefaultModule; +use Test\TestCase; + +class SetDefaultModuleTest extends TestCase { + /** @var \PHPUnit_Framework_MockObject_MockObject */ + protected $manager; + /** @var \PHPUnit_Framework_MockObject_MockObject */ + protected $consoleInput; + /** @var \PHPUnit_Framework_MockObject_MockObject */ + protected $consoleOutput; + + /** @var \Symfony\Component\Console\Command\Command */ + protected $command; + + protected function setUp() { + parent::setUp(); + + $manager = $this->manager = $this->getMockBuilder('OCP\Encryption\IManager') + ->disableOriginalConstructor() + ->getMock(); + $this->consoleInput = $this->getMock('Symfony\Component\Console\Input\InputInterface'); + $this->consoleOutput = $this->getMock('Symfony\Component\Console\Output\OutputInterface'); + + /** @var \OCP\Encryption\IManager $manager */ + $this->command = new SetDefaultModule($manager); + } + + + public function dataSetDefaultModule() { + return [ + ['ID0', 'ID0', null, null, 'already'], + ['ID0', 'ID1', 'ID1', true, 'info'], + ['ID0', 'ID1', 'ID1', false, 'error'], + ]; + } + + /** + * @dataProvider dataSetDefaultModule + * + * @param string $oldModule + * @param string $newModule + * @param string $updateModule + * @param bool $updateSuccess + * @param string $expectedString + */ + public function testSetDefaultModule($oldModule, $newModule, $updateModule, $updateSuccess, $expectedString) { + $this->consoleInput->expects($this->once()) + ->method('getArgument') + ->with('module') + ->willReturn($newModule); + + $this->manager->expects($this->once()) + ->method('getDefaultEncryptionModuleId') + ->willReturn($oldModule); + if ($updateModule) { + $this->manager->expects($this->once()) + ->method('setDefaultEncryptionModule') + ->with($updateModule) + ->willReturn($updateSuccess); + } + + $this->consoleOutput->expects($this->once()) + ->method('writeln') + ->with($this->stringContains($expectedString)); + + \Test_Helper::invokePrivate($this->command, 'execute', [$this->consoleInput, $this->consoleOutput]); + } +} diff --git a/tests/core/command/user/deletetest.php b/tests/core/command/user/deletetest.php new file mode 100644 index 00000000000..bfcf031b719 --- /dev/null +++ b/tests/core/command/user/deletetest.php @@ -0,0 +1,106 @@ +<?php +/** + * @author Joas Schilling <nickvergessen@owncloud.com> + * + * @copyright Copyright (c) 2015, ownCloud, Inc. + * @license AGPL-3.0 + * + * This code is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License, version 3, + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License, version 3, + * along with this program. If not, see <http://www.gnu.org/licenses/> + * + */ + +namespace Tests\Core\Command\User; + + +use OC\Core\Command\User\Delete; +use Test\TestCase; + +class DeleteTest extends TestCase { + /** @var \PHPUnit_Framework_MockObject_MockObject */ + protected $userManager; + /** @var \PHPUnit_Framework_MockObject_MockObject */ + protected $consoleInput; + /** @var \PHPUnit_Framework_MockObject_MockObject */ + protected $consoleOutput; + + /** @var \Symfony\Component\Console\Command\Command */ + protected $command; + + protected function setUp() { + parent::setUp(); + + $userManager = $this->userManager = $this->getMockBuilder('OCP\IUserManager') + ->disableOriginalConstructor() + ->getMock(); + $this->consoleInput = $this->getMock('Symfony\Component\Console\Input\InputInterface'); + $this->consoleOutput = $this->getMock('Symfony\Component\Console\Output\OutputInterface'); + + /** @var \OCP\IUserManager $userManager */ + $this->command = new Delete($userManager); + } + + + public function validUserLastSeen() { + return [ + [true, 'The specified user was deleted'], + [false, 'The specified could not be deleted'], + ]; + } + + /** + * @dataProvider validUserLastSeen + * + * @param bool $deleteSuccess + * @param string $expectedString + */ + public function testValidUser($deleteSuccess, $expectedString) { + $user = $this->getMock('OCP\IUser'); + $user->expects($this->once()) + ->method('delete') + ->willReturn($deleteSuccess); + + $this->userManager->expects($this->once()) + ->method('get') + ->with('user') + ->willReturn($user); + + $this->consoleInput->expects($this->once()) + ->method('getArgument') + ->with('uid') + ->willReturn('user'); + + $this->consoleOutput->expects($this->once()) + ->method('writeln') + ->with($this->stringContains($expectedString)); + + \Test_Helper::invokePrivate($this->command, 'execute', [$this->consoleInput, $this->consoleOutput]); + } + + public function testInvalidUser() { + $this->userManager->expects($this->once()) + ->method('get') + ->with('user') + ->willReturn(null); + + $this->consoleInput->expects($this->once()) + ->method('getArgument') + ->with('uid') + ->willReturn('user'); + + $this->consoleOutput->expects($this->once()) + ->method('writeln') + ->with($this->stringContains('User does not exist')); + + \Test_Helper::invokePrivate($this->command, 'execute', [$this->consoleInput, $this->consoleOutput]); + } +} diff --git a/tests/core/command/user/lastseentest.php b/tests/core/command/user/lastseentest.php new file mode 100644 index 00000000000..7eda6fb27ed --- /dev/null +++ b/tests/core/command/user/lastseentest.php @@ -0,0 +1,105 @@ +<?php +/** + * @author Joas Schilling <nickvergessen@owncloud.com> + * + * @copyright Copyright (c) 2015, ownCloud, Inc. + * @license AGPL-3.0 + * + * This code is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License, version 3, + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License, version 3, + * along with this program. If not, see <http://www.gnu.org/licenses/> + * + */ + +namespace Tests\Core\Command\User; + + +use OC\Core\Command\User\LastSeen; +use Test\TestCase; + +class LastSeenTest extends TestCase { + /** @var \PHPUnit_Framework_MockObject_MockObject */ + protected $userManager; + /** @var \PHPUnit_Framework_MockObject_MockObject */ + protected $consoleInput; + /** @var \PHPUnit_Framework_MockObject_MockObject */ + protected $consoleOutput; + + /** @var \Symfony\Component\Console\Command\Command */ + protected $command; + + protected function setUp() { + parent::setUp(); + + $userManager = $this->userManager = $this->getMockBuilder('OCP\IUserManager') + ->disableOriginalConstructor() + ->getMock(); + $this->consoleInput = $this->getMock('Symfony\Component\Console\Input\InputInterface'); + $this->consoleOutput = $this->getMock('Symfony\Component\Console\Output\OutputInterface'); + + /** @var \OCP\IUserManager $userManager */ + $this->command = new LastSeen($userManager); + } + + public function validUserLastSeen() { + return [ + [0, 'never logged in'], + [time(), 'last login'], + ]; + } + + /** + * @dataProvider validUserLastSeen + * + * @param int $lastSeen + * @param string $expectedString + */ + public function testValidUser($lastSeen, $expectedString) { + $user = $this->getMock('OCP\IUser'); + $user->expects($this->once()) + ->method('getLastLogin') + ->willReturn($lastSeen); + + $this->userManager->expects($this->once()) + ->method('get') + ->with('user') + ->willReturn($user); + + $this->consoleInput->expects($this->once()) + ->method('getArgument') + ->with('uid') + ->willReturn('user'); + + $this->consoleOutput->expects($this->once()) + ->method('writeln') + ->with($this->stringContains($expectedString)); + + \Test_Helper::invokePrivate($this->command, 'execute', [$this->consoleInput, $this->consoleOutput]); + } + + public function testInvalidUser() { + $this->userManager->expects($this->once()) + ->method('get') + ->with('user') + ->willReturn(null); + + $this->consoleInput->expects($this->once()) + ->method('getArgument') + ->with('uid') + ->willReturn('user'); + + $this->consoleOutput->expects($this->once()) + ->method('writeln') + ->with($this->stringContains('User does not exist')); + + \Test_Helper::invokePrivate($this->command, 'execute', [$this->consoleInput, $this->consoleOutput]); + } +} diff --git a/tests/data/block-aligned-plus-one.txt b/tests/data/block-aligned-plus-one.txt new file mode 100644 index 00000000000..17ee6136a29 --- /dev/null +++ b/tests/data/block-aligned-plus-one.txt @@ -0,0 +1,25 @@ +Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse id hendrerit felis. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Sed dictum dolor nec lobortis sagittis. Aliquam blandit lobortis ullamcorper. Donec malesuada ante ante, vel cursus purus suscipit ut. Sed a eros vitae lorem tristique hendrerit a a odio. Cras interdum mi lectus, sed molestie mauris tempus sit amet. Praesent auctor neque venenatis diam tincidunt sodales. Maecenas tincidunt ligula et ipsum dignissim, et molestie dui hendrerit. Nunc lobortis mauris vel tempor tristique. Sed consectetur bibendum nunc. Pellentesque augue velit, interdum ac posuere eu, eleifend et massa. Vestibulum ac mi eu mi viverra iaculis. Sed consequat leo adipiscing dui varius, sagittis vestibulum massa vehicula. + +Praesent imperdiet erat vitae dui placerat, sit amet vulputate tortor viverra. In laoreet elit lorem, at luctus est tempor ac. Nam elementum scelerisque nisl vitae accumsan. Curabitur cursus rutrum est, ut adipiscing ante elementum ut. Ut lectus sem, luctus ut massa non, dignissim vestibulum ipsum. Suspendisse non convallis enim, aliquam adipiscing velit. Donec pharetra non turpis hendrerit porttitor. Aliquam erat volutpat. + +Cras eget arcu eu dolor faucibus accumsan non eget orci. Integer quis quam tincidunt, faucibus neque in, imperdiet lacus. Aenean dui turpis, lacinia quis ligula non, semper adipiscing tellus. Curabitur vitae dui quis nisl malesuada commodo. Nunc eleifend metus enim, eu aliquet dui semper sit amet. Sed a odio sapien. Suspendisse vitae ante id sapien semper accumsan. Sed vestibulum erat quis laoreet pellentesque. Nullam placerat ligula eu odio faucibus, eget dictum orci tristique. Quisque sit amet pulvinar velit, lacinia dictum sem. + +Phasellus id sagittis lacus. Vivamus facilisis convallis metus, sit amet ultricies purus gravida quis. Vivamus eget egestas arcu, a euismod risus. Fusce metus arcu, molestie ut lacinia at, commodo eu nibh. In leo tortor, feugiat aliquet semper in, malesuada ac nulla. Fusce tempor ultricies blandit. Pellentesque et lorem quam. Suspendisse eros eros, mattis ut porttitor vitae, fermentum eget augue. Aliquam vitae justo sed est dictum lobortis. Cras lacinia commodo ligula sed ornare. Donec ut eros semper, sodales tellus quis, cursus quam. Quisque elementum ullamcorper pellentesque. Integer in rutrum ante, vel condimentum metus. Aliquam erat volutpat. + +Quisque convallis tempus eros, sit amet mattis ipsum eleifend in. Mauris volutpat, urna ut commodo tempus, est quam scelerisque erat, eget consequat nulla arcu id eros. Nam elementum nibh quis tincidunt adipiscing. Fusce tristique pretium mollis. Nulla quis ornare felis, vel lacinia diam. In et dui et mauris vestibulum commodo. In hac habitasse platea dictumst. Vestibulum viverra pellentesque tortor, tempor vehicula orci. Praesent rutrum turpis ipsum, ac commodo nisi vehicula ac. + +Nulla gravida ultrices mauris. Ut congue purus nec dolor euismod, vitae auctor elit condimentum. Nullam elementum velit lectus, fringilla pharetra sem hendrerit sit amet. Cras quis lobortis nisi, id interdum massa. Proin eget porttitor sapien. Vivamus quam odio, consectetur at rhoncus vel, posuere in nisi. Donec hendrerit urna ac massa tristique, pellentesque consequat orci dapibus. Mauris mi erat, aliquet id adipiscing ultricies, ultrices nec lacus. Proin imperdiet elit magna, ut suscipit metus faucibus eget. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas at leo lorem. Donec mi nibh, blandit ut mi quis, dictum adipiscing ante. Curabitur sodales blandit odio id viverra. Fusce sagittis rutrum nibh. Mauris risus lacus, placerat at dictum in, varius volutpat quam. + +Ut accumsan tincidunt dui, non semper lorem sodales nec. Curabitur pellentesque velit nec erat ultrices, in convallis diam suscipit. Curabitur pellentesque convallis mi. Phasellus iaculis orci quis nisi semper auctor. Vestibulum eleifend tortor quis odio feugiat, pulvinar congue turpis blandit. Sed viverra diam risus, vel mattis orci dignissim ut. Cras pellentesque dapibus dolor. Morbi tempor eleifend magna. Ut sodales ut sapien sed elementum. In hac habitasse platea dictumst. + +Nullam eget sagittis tellus. Donec a tellus id ligula viverra pellentesque. Pellentesque nulla turpis, pretium vel sem vel, placerat ultricies diam. Donec felis nibh, rhoncus id ornare at, lobortis vel massa. Nullam eu luctus ipsum. Mauris consequat dictum aliquam. Suspendisse ullamcorper aliquam mauris, viverra tincidunt augue suscipit at. Sed luctus scelerisque justo ut semper. Phasellus massa mauris, molestie at nulla eget, dictum ultricies nisi. Aliquam rhoncus nisl sed urna egestas, vel luctus lectus euismod. Mauris sagittis dapibus leo. Donec vitae dignissim risus, ac ultricies augue. Ut vulputate tortor sed dui consectetur placerat. Nullam viverra non diam vel dignissim. + +Suspendisse potenti. Integer facilisis neque vitae euismod adipiscing. Aenean dictum leo commodo dui sodales, sit amet volutpat mauris gravida. Proin tempus convallis eros at consectetur. Proin nisl purus, dictum vel euismod ut, imperdiet quis est. Etiam sollicitudin lobortis neque eget pulvinar. Etiam venenatis vel sem ut posuere. Aliquam consectetur rhoncus facilisis. Morbi a viverra orci. + +Praesent ut vehicula orci, vel convallis risus. Suspendisse consectetur varius interdum. Interdum et malesuada fames ac ante ipsum primis in faucibus. Proin vel sodales enim. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Curabitur suscipit tristique justo vel dapibus. Sed tincidunt mattis massa a auctor. Donec in tincidunt elit. Curabitur interdum neque at ante fringilla tempus. In hac habitasse platea dictumst. Vivamus luctus ligula ut nisl fermentum egestas. Praesent pulvinar accumsan neque. Sed nec leo sit amet arcu vehicula vehicula non ac diam. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; + +Morbi vel arcu quis neque dictum ullamcorper. Pellentesque condimentum consequat lacinia. Vestibulum eleifend placerat erat, eu hendrerit dui pulvinar eget. Vestibulum accumsan, lectus id vehicula fringilla, erat eros dictum massa, ut tristique libero mi eu ante. In at ante nunc. Praesent sodales ullamcorper porta. Curabitur egestas odio elit. Praesent et libero malesuada, venenatis lorem vitae, eleifend nisl. Donec dapibus euismod turpis, nec porttitor turpis dapibus ac. Fusce iaculis lacus eget dictum aliquam. Sed dictum eu enim ac posuere. Ut accumsan, ipsum et laoreet consectetur, ipsum quam dapibus diam, ac molestie ligula dui id massa. Nulla aliquam mauris congue nibh vestibulum imperdiet. + +Aenean ultricies, orci vel consectetur suscipit, ante nisi eleifend est, vitae suscipit risus erat dictum dui. Ut nisi diam, tristique sed nisl nec, aliquam gravida orci. Vestibulum in molestie sem. Ut eu molestie mi. Suspendisse potenti. Nunc sagittis lorem ut est vehicula, vitae imperdiet leo rutrum. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Donec pharetra urna pretium, faucibus orci cursus, sodales purus. Duis iaculis dignissim augue, non aliquet ligula elementum quis. Sed tempus a nisi et faucibus. Donec mattis ligula ac sem aliquam, sed sodales est ullamcorper. Cras vel orci est. Integer eget ultricies nisi. + +Quisque rhoncus, nisl vel auctor consectetur, sapien augue iaculis urna, quis suscipit arcu dolor ac est. Fusce sit amet quam lacinia, malesuada lorem vitae, dapibus justo. Mauris eget massa nec dolor volutpat tempor ut eu ante. Donec risus mi, aliquam at euismod vulputate, ullamcorper non leo. Etiam ac elit velit. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Vivamus sollicitudin enim sed felis pharetra, a convallis mi venenatis. Donec convallis non velit venenatis suscipit. Sed massa risus, dictum quis aliquam ut, placerat quis arcu. Donec at nisi neque. Nullam porta et mi vel ultricies. Donec vel aliquam sem. Mauris varius, ipsum interdum mattis rhoncus, nunc nisl vehicula tortor, quis condimentum nibh nisl vel ante. Sed vel pretium dui. Lorem ipsum dolor sit amet, consectetur adipisX diff --git a/tests/data/block-aligned.txt b/tests/data/block-aligned.txt new file mode 100644 index 00000000000..8d505cf1d0e --- /dev/null +++ b/tests/data/block-aligned.txt @@ -0,0 +1,25 @@ +Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse id hendrerit felis. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Sed dictum dolor nec lobortis sagittis. Aliquam blandit lobortis ullamcorper. Donec malesuada ante ante, vel cursus purus suscipit ut. Sed a eros vitae lorem tristique hendrerit a a odio. Cras interdum mi lectus, sed molestie mauris tempus sit amet. Praesent auctor neque venenatis diam tincidunt sodales. Maecenas tincidunt ligula et ipsum dignissim, et molestie dui hendrerit. Nunc lobortis mauris vel tempor tristique. Sed consectetur bibendum nunc. Pellentesque augue velit, interdum ac posuere eu, eleifend et massa. Vestibulum ac mi eu mi viverra iaculis. Sed consequat leo adipiscing dui varius, sagittis vestibulum massa vehicula. + +Praesent imperdiet erat vitae dui placerat, sit amet vulputate tortor viverra. In laoreet elit lorem, at luctus est tempor ac. Nam elementum scelerisque nisl vitae accumsan. Curabitur cursus rutrum est, ut adipiscing ante elementum ut. Ut lectus sem, luctus ut massa non, dignissim vestibulum ipsum. Suspendisse non convallis enim, aliquam adipiscing velit. Donec pharetra non turpis hendrerit porttitor. Aliquam erat volutpat. + +Cras eget arcu eu dolor faucibus accumsan non eget orci. Integer quis quam tincidunt, faucibus neque in, imperdiet lacus. Aenean dui turpis, lacinia quis ligula non, semper adipiscing tellus. Curabitur vitae dui quis nisl malesuada commodo. Nunc eleifend metus enim, eu aliquet dui semper sit amet. Sed a odio sapien. Suspendisse vitae ante id sapien semper accumsan. Sed vestibulum erat quis laoreet pellentesque. Nullam placerat ligula eu odio faucibus, eget dictum orci tristique. Quisque sit amet pulvinar velit, lacinia dictum sem. + +Phasellus id sagittis lacus. Vivamus facilisis convallis metus, sit amet ultricies purus gravida quis. Vivamus eget egestas arcu, a euismod risus. Fusce metus arcu, molestie ut lacinia at, commodo eu nibh. In leo tortor, feugiat aliquet semper in, malesuada ac nulla. Fusce tempor ultricies blandit. Pellentesque et lorem quam. Suspendisse eros eros, mattis ut porttitor vitae, fermentum eget augue. Aliquam vitae justo sed est dictum lobortis. Cras lacinia commodo ligula sed ornare. Donec ut eros semper, sodales tellus quis, cursus quam. Quisque elementum ullamcorper pellentesque. Integer in rutrum ante, vel condimentum metus. Aliquam erat volutpat. + +Quisque convallis tempus eros, sit amet mattis ipsum eleifend in. Mauris volutpat, urna ut commodo tempus, est quam scelerisque erat, eget consequat nulla arcu id eros. Nam elementum nibh quis tincidunt adipiscing. Fusce tristique pretium mollis. Nulla quis ornare felis, vel lacinia diam. In et dui et mauris vestibulum commodo. In hac habitasse platea dictumst. Vestibulum viverra pellentesque tortor, tempor vehicula orci. Praesent rutrum turpis ipsum, ac commodo nisi vehicula ac. + +Nulla gravida ultrices mauris. Ut congue purus nec dolor euismod, vitae auctor elit condimentum. Nullam elementum velit lectus, fringilla pharetra sem hendrerit sit amet. Cras quis lobortis nisi, id interdum massa. Proin eget porttitor sapien. Vivamus quam odio, consectetur at rhoncus vel, posuere in nisi. Donec hendrerit urna ac massa tristique, pellentesque consequat orci dapibus. Mauris mi erat, aliquet id adipiscing ultricies, ultrices nec lacus. Proin imperdiet elit magna, ut suscipit metus faucibus eget. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas at leo lorem. Donec mi nibh, blandit ut mi quis, dictum adipiscing ante. Curabitur sodales blandit odio id viverra. Fusce sagittis rutrum nibh. Mauris risus lacus, placerat at dictum in, varius volutpat quam. + +Ut accumsan tincidunt dui, non semper lorem sodales nec. Curabitur pellentesque velit nec erat ultrices, in convallis diam suscipit. Curabitur pellentesque convallis mi. Phasellus iaculis orci quis nisi semper auctor. Vestibulum eleifend tortor quis odio feugiat, pulvinar congue turpis blandit. Sed viverra diam risus, vel mattis orci dignissim ut. Cras pellentesque dapibus dolor. Morbi tempor eleifend magna. Ut sodales ut sapien sed elementum. In hac habitasse platea dictumst. + +Nullam eget sagittis tellus. Donec a tellus id ligula viverra pellentesque. Pellentesque nulla turpis, pretium vel sem vel, placerat ultricies diam. Donec felis nibh, rhoncus id ornare at, lobortis vel massa. Nullam eu luctus ipsum. Mauris consequat dictum aliquam. Suspendisse ullamcorper aliquam mauris, viverra tincidunt augue suscipit at. Sed luctus scelerisque justo ut semper. Phasellus massa mauris, molestie at nulla eget, dictum ultricies nisi. Aliquam rhoncus nisl sed urna egestas, vel luctus lectus euismod. Mauris sagittis dapibus leo. Donec vitae dignissim risus, ac ultricies augue. Ut vulputate tortor sed dui consectetur placerat. Nullam viverra non diam vel dignissim. + +Suspendisse potenti. Integer facilisis neque vitae euismod adipiscing. Aenean dictum leo commodo dui sodales, sit amet volutpat mauris gravida. Proin tempus convallis eros at consectetur. Proin nisl purus, dictum vel euismod ut, imperdiet quis est. Etiam sollicitudin lobortis neque eget pulvinar. Etiam venenatis vel sem ut posuere. Aliquam consectetur rhoncus facilisis. Morbi a viverra orci. + +Praesent ut vehicula orci, vel convallis risus. Suspendisse consectetur varius interdum. Interdum et malesuada fames ac ante ipsum primis in faucibus. Proin vel sodales enim. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Curabitur suscipit tristique justo vel dapibus. Sed tincidunt mattis massa a auctor. Donec in tincidunt elit. Curabitur interdum neque at ante fringilla tempus. In hac habitasse platea dictumst. Vivamus luctus ligula ut nisl fermentum egestas. Praesent pulvinar accumsan neque. Sed nec leo sit amet arcu vehicula vehicula non ac diam. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; + +Morbi vel arcu quis neque dictum ullamcorper. Pellentesque condimentum consequat lacinia. Vestibulum eleifend placerat erat, eu hendrerit dui pulvinar eget. Vestibulum accumsan, lectus id vehicula fringilla, erat eros dictum massa, ut tristique libero mi eu ante. In at ante nunc. Praesent sodales ullamcorper porta. Curabitur egestas odio elit. Praesent et libero malesuada, venenatis lorem vitae, eleifend nisl. Donec dapibus euismod turpis, nec porttitor turpis dapibus ac. Fusce iaculis lacus eget dictum aliquam. Sed dictum eu enim ac posuere. Ut accumsan, ipsum et laoreet consectetur, ipsum quam dapibus diam, ac molestie ligula dui id massa. Nulla aliquam mauris congue nibh vestibulum imperdiet. + +Aenean ultricies, orci vel consectetur suscipit, ante nisi eleifend est, vitae suscipit risus erat dictum dui. Ut nisi diam, tristique sed nisl nec, aliquam gravida orci. Vestibulum in molestie sem. Ut eu molestie mi. Suspendisse potenti. Nunc sagittis lorem ut est vehicula, vitae imperdiet leo rutrum. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Donec pharetra urna pretium, faucibus orci cursus, sodales purus. Duis iaculis dignissim augue, non aliquet ligula elementum quis. Sed tempus a nisi et faucibus. Donec mattis ligula ac sem aliquam, sed sodales est ullamcorper. Cras vel orci est. Integer eget ultricies nisi. + +Quisque rhoncus, nisl vel auctor consectetur, sapien augue iaculis urna, quis suscipit arcu dolor ac est. Fusce sit amet quam lacinia, malesuada lorem vitae, dapibus justo. Mauris eget massa nec dolor volutpat tempor ut eu ante. Donec risus mi, aliquam at euismod vulputate, ullamcorper non leo. Etiam ac elit velit. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Vivamus sollicitudin enim sed felis pharetra, a convallis mi venenatis. Donec convallis non velit venenatis suscipit. Sed massa risus, dictum quis aliquam ut, placerat quis arcu. Donec at nisi neque. Nullam porta et mi vel ultricies. Donec vel aliquam sem. Mauris varius, ipsum interdum mattis rhoncus, nunc nisl vehicula tortor, quis condimentum nibh nisl vel ante. Sed vel pretium dui. Lorem ipsum dolor sit amet, consectetur adipis diff --git a/tests/lib/connector/sabre/BlockLegacyClientPluginTest.php b/tests/lib/connector/sabre/BlockLegacyClientPluginTest.php new file mode 100644 index 00000000000..05488d9716a --- /dev/null +++ b/tests/lib/connector/sabre/BlockLegacyClientPluginTest.php @@ -0,0 +1,129 @@ +<?php +/** + * @author Lukas Reschke <lukas@owncloud.com> + * + * @copyright Copyright (c) 2015, ownCloud, Inc. + * @license AGPL-3.0 + * + * This code is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License, version 3, + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License, version 3, + * along with this program. If not, see <http://www.gnu.org/licenses/> + * + */ + +namespace Test\Connector\Sabre; + +use OC\Connector\Sabre\BlockLegacyClientPlugin; +use Test\TestCase; +use OCP\IConfig; + +/** + * Class BlockLegacyClientPluginTest + * + * @package Test\Connector\Sabre + */ +class BlockLegacyClientPluginTest extends TestCase { + /** @var IConfig */ + private $config; + /** @var BlockLegacyClientPlugin */ + private $blockLegacyClientVersionPlugin; + + public function setUp() { + parent::setUp(); + + $this->config = $this->getMock('\OCP\IConfig'); + $this->blockLegacyClientVersionPlugin = new BlockLegacyClientPlugin($this->config); + } + + /** + * @return array + */ + public function oldDesktopClientProvider() { + return [ + ['Mozilla/5.0 (1.5.0) mirall/1.5.0'], + ['mirall/1.5.0'], + ['mirall/1.5.4'], + ['mirall/1.6.0'], + ['Mozilla/5.0 (Bogus Text) mirall/1.6.9'], + ]; + } + + /** + * @dataProvider oldDesktopClientProvider + * @param string $userAgent + * @expectedException \Sabre\DAV\Exception\Forbidden + * @expectedExceptionMessage Unsupported client version. + */ + public function testBeforeHandlerException($userAgent) { + /** @var \Sabre\HTTP\RequestInterface $request */ + $request = $this->getMock('\Sabre\HTTP\RequestInterface'); + $request + ->expects($this->once()) + ->method('getHeader') + ->with('User-Agent') + ->will($this->returnValue($userAgent)); + + $this->config + ->expects($this->once()) + ->method('getSystemValue') + ->with('minimum.supported.desktop.version', '1.7.0') + ->will($this->returnValue('1.7.0')); + + $this->blockLegacyClientVersionPlugin->beforeHandler($request); + } + + /** + * @return array + */ + public function newAndAlternateDesktopClientProvider() { + return [ + ['Mozilla/5.0 (1.7.0) mirall/1.7.0'], + ['mirall/1.8.3'], + ['mirall/1.7.2'], + ['mirall/1.7.0'], + ['Mozilla/5.0 (Bogus Text) mirall/1.9.3'], + ]; + } + + /** + * @dataProvider newAndAlternateDesktopClientProvider + * @param string $userAgent + */ + public function testBeforeHandlerSuccess($userAgent) { + /** @var \Sabre\HTTP\RequestInterface $request */ + $request = $this->getMock('\Sabre\HTTP\RequestInterface'); + $request + ->expects($this->once()) + ->method('getHeader') + ->with('User-Agent') + ->will($this->returnValue($userAgent)); + + $this->config + ->expects($this->once()) + ->method('getSystemValue') + ->with('minimum.supported.desktop.version', '1.7.0') + ->will($this->returnValue('1.7.0')); + + $this->blockLegacyClientVersionPlugin->beforeHandler($request); + } + + public function testBeforeHandlerNoUserAgent() { + /** @var \Sabre\HTTP\RequestInterface $request */ + $request = $this->getMock('\Sabre\HTTP\RequestInterface'); + $request + ->expects($this->once()) + ->method('getHeader') + ->with('User-Agent') + ->will($this->returnValue(null)); + $this->blockLegacyClientVersionPlugin->beforeHandler($request); + } + +} diff --git a/tests/lib/encryption/keys/storage.php b/tests/lib/encryption/keys/storage.php index bcf1c0f7624..e67103fb6aa 100644 --- a/tests/lib/encryption/keys/storage.php +++ b/tests/lib/encryption/keys/storage.php @@ -48,8 +48,7 @@ class StorageTest extends TestCase { ->disableOriginalConstructor() ->getMock(); - $this->storage = new Storage('encModule', $this->view, $this->util); - + $this->storage = new Storage($this->view, $this->util); } public function testSetFileKey() { @@ -69,7 +68,7 @@ class StorageTest extends TestCase { ->willReturn(strlen('key')); $this->assertTrue( - $this->storage->setFileKey('user1/files/foo.txt', 'fileKey', 'key') + $this->storage->setFileKey('user1/files/foo.txt', 'fileKey', 'key', 'encModule') ); } @@ -93,7 +92,7 @@ class StorageTest extends TestCase { ->willReturn(true); $this->assertSame('key', - $this->storage->getFileKey('user1/files/foo.txt', 'fileKey') + $this->storage->getFileKey('user1/files/foo.txt', 'fileKey', 'encModule') ); } @@ -114,7 +113,7 @@ class StorageTest extends TestCase { ->willReturn(strlen('key')); $this->assertTrue( - $this->storage->setFileKey('user1/files/foo.txt', 'fileKey', 'key') + $this->storage->setFileKey('user1/files/foo.txt', 'fileKey', 'key', 'encModule') ); } @@ -138,7 +137,7 @@ class StorageTest extends TestCase { ->willReturn(true); $this->assertSame('key', - $this->storage->getFileKey('user1/files/foo.txt', 'fileKey') + $this->storage->getFileKey('user1/files/foo.txt', 'fileKey', 'encModule') ); } @@ -150,7 +149,7 @@ class StorageTest extends TestCase { ->willReturn(strlen('key')); $this->assertTrue( - $this->storage->setSystemUserKey('shareKey_56884', 'key') + $this->storage->setSystemUserKey('shareKey_56884', 'key', 'encModule') ); } @@ -162,7 +161,7 @@ class StorageTest extends TestCase { ->willReturn(strlen('key')); $this->assertTrue( - $this->storage->setUserKey('user1', 'publicKey', 'key') + $this->storage->setUserKey('user1', 'publicKey', 'key', 'encModule') ); } @@ -177,7 +176,7 @@ class StorageTest extends TestCase { ->willReturn(true); $this->assertSame('key', - $this->storage->getSystemUserKey('shareKey_56884') + $this->storage->getSystemUserKey('shareKey_56884', 'encModule') ); } @@ -192,7 +191,7 @@ class StorageTest extends TestCase { ->willReturn(true); $this->assertSame('key', - $this->storage->getUserKey('user1', 'publicKey') + $this->storage->getUserKey('user1', 'publicKey', 'encModule') ); } @@ -207,7 +206,7 @@ class StorageTest extends TestCase { ->willReturn(true); $this->assertTrue( - $this->storage->deleteUserKey('user1', 'publicKey') + $this->storage->deleteUserKey('user1', 'publicKey', 'encModule') ); } @@ -222,7 +221,7 @@ class StorageTest extends TestCase { ->willReturn(true); $this->assertTrue( - $this->storage->deleteSystemUserKey('shareKey_56884') + $this->storage->deleteSystemUserKey('shareKey_56884', 'encModule') ); } @@ -246,7 +245,7 @@ class StorageTest extends TestCase { ->willReturn(true); $this->assertTrue( - $this->storage->deleteFileKey('user1/files/foo.txt', 'fileKey') + $this->storage->deleteFileKey('user1/files/foo.txt', 'fileKey', 'encModule') ); } @@ -270,7 +269,7 @@ class StorageTest extends TestCase { ->willReturn(true); $this->assertTrue( - $this->storage->deleteFileKey('user1/files/foo.txt', 'fileKey') + $this->storage->deleteFileKey('user1/files/foo.txt', 'fileKey', 'encModule') ); } diff --git a/tests/lib/encryption/managertest.php b/tests/lib/encryption/managertest.php index 13f5d47b083..faca6474504 100644 --- a/tests/lib/encryption/managertest.php +++ b/tests/lib/encryption/managertest.php @@ -21,7 +21,6 @@ class ManagerTest extends TestCase { $this->config = $this->getMock('\OCP\IConfig'); $this->logger = $this->getMock('\OCP\ILogger'); $this->manager = new Manager($this->config, $this->logger); - } public function testManagerIsDisabled() { @@ -48,32 +47,30 @@ class ManagerTest extends TestCase { $this->assertTrue($this->manager->isEnabled()); } - /** - * @expectedException \OC\Encryption\Exceptions\ModuleAlreadyExistsException - * @expectedExceptionMessage Id "id" already used by encryption module "TestDummyModule0" - */ public function testModuleRegistration() { $this->config->expects($this->any())->method('getAppValue')->willReturn('yes'); - $em = $this->getMock('\OCP\Encryption\IEncryptionModule'); - $em->expects($this->any())->method('getId')->willReturn('id'); - $em->expects($this->any())->method('getDisplayName')->willReturn('TestDummyModule0'); - $this->manager->registerEncryptionModule('id', 'TestDummyModule0', function () use ($em) { return $em;}); - $this->assertSame(1, count($this->manager->getEncryptionModules())); - $this->manager->registerEncryptionModule('id', 'TestDummyModule0', function () use ($em) { return $em;}); + $this->addNewEncryptionModule($this->manager, 0); + $this->assertCount(1, $this->manager->getEncryptionModules()); + + return $this->manager; + } + + /** + * @depends testModuleRegistration + * @expectedException \OC\Encryption\Exceptions\ModuleAlreadyExistsException + * @expectedExceptionMessage Id "ID0" already used by encryption module "TestDummyModule0" + */ + public function testModuleReRegistration($manager) { + $this->addNewEncryptionModule($manager, 0); } public function testModuleUnRegistration() { $this->config->expects($this->any())->method('getAppValue')->willReturn(true); - $em = $this->getMock('\OCP\Encryption\IEncryptionModule'); - $em->expects($this->any())->method('getId')->willReturn('id'); - $em->expects($this->any())->method('getDisplayName')->willReturn('TestDummyModule0'); - $this->manager->registerEncryptionModule('id', 'TestDummyModule0', function () use ($em) { return $em;}); - $this->assertSame(1, - count($this->manager->getEncryptionModules()) - ); + $this->addNewEncryptionModule($this->manager, 0); + $this->assertCount(1, $this->manager->getEncryptionModules()); - $this->manager->unregisterEncryptionModule('id'); + $this->manager->unregisterEncryptionModule('ID0'); $this->assertEmpty($this->manager->getEncryptionModules()); } @@ -84,34 +81,83 @@ class ManagerTest extends TestCase { */ public function testGetEncryptionModuleUnknown() { $this->config->expects($this->any())->method('getAppValue')->willReturn(true); - $em = $this->getMock('\OCP\Encryption\IEncryptionModule'); - $em->expects($this->any())->method('getId')->willReturn('id'); - $em->expects($this->any())->method('getDisplayName')->willReturn('TestDummyModule0'); - $this->manager->registerEncryptionModule('id', 'TestDummyModule0', function () use ($em) { return $em;}); - $this->assertSame(1, count($this->manager->getEncryptionModules())); + $this->addNewEncryptionModule($this->manager, 0); + $this->assertCount(1, $this->manager->getEncryptionModules()); $this->manager->getEncryptionModule('unknown'); } + public function testGetEncryptionModuleEmpty() { + global $defaultId; + $defaultId = null; + + $this->config->expects($this->any()) + ->method('getAppValue') + ->with('core', 'default_encryption_module') + ->willReturnCallback(function() { global $defaultId; return $defaultId; }); + + $this->addNewEncryptionModule($this->manager, 0); + $this->assertCount(1, $this->manager->getEncryptionModules()); + $this->addNewEncryptionModule($this->manager, 1); + $this->assertCount(2, $this->manager->getEncryptionModules()); + + // Should return the default module + $defaultId = 'ID0'; + $this->assertEquals('ID0', $this->manager->getEncryptionModule()->getId()); + $defaultId = 'ID1'; + $this->assertEquals('ID1', $this->manager->getEncryptionModule()->getId()); + } + public function testGetEncryptionModule() { - $this->config->expects($this->any())->method('getAppValue')->willReturn(true); - $em = $this->getMock('\OCP\Encryption\IEncryptionModule'); - $em->expects($this->any())->method('getId')->willReturn('id'); - $em->expects($this->any())->method('getDisplayName')->willReturn('TestDummyModule0'); - $this->manager->registerEncryptionModule('id', 'TestDummyModule0', function () use ($em) { return $em;}); - $this->assertSame(1, count($this->manager->getEncryptionModules())); - $en0 = $this->manager->getEncryptionModule('id'); - $this->assertEquals('id', $en0->getId()); + global $defaultId; + $defaultId = null; + + $this->config->expects($this->any()) + ->method('getAppValue') + ->with('core', 'default_encryption_module') + ->willReturnCallback(function() { global $defaultId; return $defaultId; }); + + $this->addNewEncryptionModule($this->manager, 0); + $defaultId = 'ID0'; + $this->assertCount(1, $this->manager->getEncryptionModules()); + + $en0 = $this->manager->getEncryptionModule('ID0'); + $this->assertEquals('ID0', $en0->getId()); + + $en0 = \Test_Helper::invokePrivate($this->manager, 'getDefaultEncryptionModule'); + $this->assertEquals('ID0', $en0->getId()); + + $this->assertEquals('ID0', $this->manager->getDefaultEncryptionModuleId()); } - public function testGetDefaultEncryptionModule() { - $this->config->expects($this->any())->method('getAppValue')->willReturn(true); - $em = $this->getMock('\OCP\Encryption\IEncryptionModule'); - $em->expects($this->any())->method('getId')->willReturn('id'); - $em->expects($this->any())->method('getDisplayName')->willReturn('TestDummyModule0'); - $this->manager->registerEncryptionModule('id', 'TestDummyModule0', function () use ($em) { return $em;}); - $this->assertSame(1, count($this->manager->getEncryptionModules())); - $en0 = $this->manager->getEncryptionModule('id'); - $this->assertEquals('id', $en0->getId()); + public function testSetDefaultEncryptionModule() { + global $defaultId; + $defaultId = null; + + $this->config->expects($this->any()) + ->method('getAppValue') + ->with('core', 'default_encryption_module') + ->willReturnCallback(function() { global $defaultId; return $defaultId; }); + + $this->addNewEncryptionModule($this->manager, 0); + $this->assertCount(1, $this->manager->getEncryptionModules()); + $this->addNewEncryptionModule($this->manager, 1); + $this->assertCount(2, $this->manager->getEncryptionModules()); + + // Default module is the first we set + $defaultId = 'ID0'; + $this->assertEquals('ID0', $this->manager->getDefaultEncryptionModuleId()); + + // Set to an existing module + $this->config->expects($this->once()) + ->method('setAppValue') + ->with('core', 'default_encryption_module', 'ID1'); + $this->assertTrue($this->manager->setDefaultEncryptionModule('ID1')); + $defaultId = 'ID1'; + $this->assertEquals('ID1', $this->manager->getDefaultEncryptionModuleId()); + + // Set to an unexisting module + $this->assertFalse($this->manager->setDefaultEncryptionModule('ID2')); + $this->assertEquals('ID1', $this->manager->getDefaultEncryptionModuleId()); } // /** @@ -171,4 +217,18 @@ class ManagerTest extends TestCase { // $en0 = $m->getEncryptionModule(0); // $this->assertEquals(0, $en0->getId()); // } + + protected function addNewEncryptionModule(Manager $manager, $id) { + $encryptionModule = $this->getMock('\OCP\Encryption\IEncryptionModule'); + $encryptionModule->expects($this->any()) + ->method('getId') + ->willReturn('ID' . $id); + $encryptionModule->expects($this->any()) + ->method('getDisplayName') + ->willReturn('TestDummyModule' . $id); + /** @var \OCP\Encryption\IEncryptionModule $encryptionModule */ + $manager->registerEncryptionModule('ID' . $id, 'TestDummyModule' . $id, function() use ($encryptionModule) { + return $encryptionModule; + }); + } } diff --git a/tests/lib/encryption/updatetest.php b/tests/lib/encryption/updatetest.php new file mode 100644 index 00000000000..790d071aa68 --- /dev/null +++ b/tests/lib/encryption/updatetest.php @@ -0,0 +1,129 @@ +<?php +/** + * @author Björn Schießle <schiessle@owncloud.com> + * + * @copyright Copyright (c) 2015, ownCloud, Inc. + * @license AGPL-3.0 + * + * This code is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License, version 3, + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License, version 3, + * along with this program. If not, see <http://www.gnu.org/licenses/> + * + */ + + +namespace Test\Encryption; + + +use OC\Encryption\Update; +use Test\TestCase; + +class UpdateTest extends TestCase { + + /** @var \OC\Encryption\Update */ + private $update; + + /** @var string */ + private $uid; + + /** @var \OC\Files\View | \PHPUnit_Framework_MockObject_MockObject */ + private $view; + + /** @var \OC\Encryption\Util | \PHPUnit_Framework_MockObject_MockObject */ + private $util; + + /** @var \OC\Files\Mount\Manager | \PHPUnit_Framework_MockObject_MockObject */ + private $mountManager; + + /** @var \OC\Encryption\Manager | \PHPUnit_Framework_MockObject_MockObject */ + private $encryptionManager; + + /** @var \OCP\Encryption\IEncryptionModule | \PHPUnit_Framework_MockObject_MockObject */ + private $encryptionModule; + + /** @var \OC\Encryption\File | \PHPUnit_Framework_MockObject_MockObject */ + private $fileHelper; + + protected function setUp() { + parent::setUp(); + + $this->view = $this->getMockBuilder('\OC\Files\View') + ->disableOriginalConstructor()->getMock(); + $this->util = $this->getMockBuilder('\OC\Encryption\Util') + ->disableOriginalConstructor()->getMock(); + $this->mountManager = $this->getMockBuilder('\OC\Files\Mount\Manager') + ->disableOriginalConstructor()->getMock(); + $this->encryptionManager = $this->getMockBuilder('\OC\Encryption\Manager') + ->disableOriginalConstructor()->getMock(); + $this->fileHelper = $this->getMockBuilder('\OC\Encryption\File') + ->disableOriginalConstructor()->getMock(); + $this->encryptionModule = $this->getMockBuilder('\OCP\Encryption\IEncryptionModule') + ->disableOriginalConstructor()->getMock(); + + $this->encryptionManager->expects($this->once()) + ->method('getEncryptionModule') + ->willReturn($this->encryptionModule); + + $this->uid = 'testUser1'; + + $this->update = new Update( + $this->view, + $this->util, + $this->mountManager, + $this->encryptionManager, + $this->fileHelper, + $this->uid); + } + + /** + * @dataProvider dataTestUpdate + * + * @param string $path + * @param boolean $isDir + * @param array $allFiles + * @param integer $numberOfFiles + */ + public function testUpdate($path, $isDir, $allFiles, $numberOfFiles) { + + $this->view->expects($this->once()) + ->method('is_dir') + ->willReturn($isDir); + + if($isDir) { + $this->util->expects($this->once()) + ->method('getAllFiles') + ->willReturn($allFiles); + } + + $this->fileHelper->expects($this->exactly($numberOfFiles)) + ->method('getAccessList') + ->willReturn(['users' => [], 'public' => false]); + + $this->encryptionModule->expects($this->exactly($numberOfFiles)) + ->method('update') + ->willReturn(true); + + $this->update->update($path); + } + + /** + * data provider for testUpdate() + * + * @return array + */ + public function dataTestUpdate() { + return array( + array('/user/files/foo', true, ['/user/files/foo/file1.txt', '/user/files/foo/file1.txt'], 2), + array('/user/files/test.txt', false, [], 1), + ); + } + +} diff --git a/tests/lib/encryption/utiltest.php b/tests/lib/encryption/utiltest.php index dc6205e16fd..7de57043920 100644 --- a/tests/lib/encryption/utiltest.php +++ b/tests/lib/encryption/utiltest.php @@ -152,4 +152,25 @@ class UtilTest extends TestCase { return false; } + /** + * @dataProvider dataTestIsFile + */ + public function testIsFile($path, $expected) { + $this->assertSame($expected, + $this->util->isFile($path) + ); + } + + public function dataTestIsFile() { + return array( + array('/user/files/test.txt', true), + array('/user/files', true), + array('/user/files_versions/test.txt', false), + array('/user/foo/files/test.txt', false), + array('/files/foo/files/test.txt', false), + array('/user', false), + array('/user/test.txt', false), + ); + } + } diff --git a/tests/lib/files/storage/wrapper/encryption.php b/tests/lib/files/storage/wrapper/encryption.php index 3256f772df7..93bf8c13e9b 100644 --- a/tests/lib/files/storage/wrapper/encryption.php +++ b/tests/lib/files/storage/wrapper/encryption.php @@ -12,22 +12,51 @@ class Encryption extends \Test\Files\Storage\Storage { */ private $sourceStorage; - public function setUp() { + /** + * @var \OC\Files\Storage\Wrapper\Encryption + */ + protected $instance; + + /** + * @var \OC\Encryption\Keys\Storage | \PHPUnit_Framework_MockObject_MockObject + */ + private $keyStore; + + /** + * @var \OC\Encryption\Util | \PHPUnit_Framework_MockObject_MockObject + */ + private $util; + + + /** + * @var \OC\Encryption\Manager | \PHPUnit_Framework_MockObject_MockObject + */ + private $encryptionManager; + + /** + * @var \OCP\Encryption\IEncryptionModule | \PHPUnit_Framework_MockObject_MockObject + */ + private $encryptionModule; + + + /** + * @var \OC\Encryption\Update | \PHPUnit_Framework_MockObject_MockObject + */ + private $update; + + protected function setUp() { parent::setUp(); $mockModule = $this->buildMockModule(); - $encryptionManager = $this->getMockBuilder('\OC\Encryption\Manager') + $this->encryptionManager = $this->getMockBuilder('\OC\Encryption\Manager') ->disableOriginalConstructor() - ->setMethods(['getDefaultEncryptionModule', 'getEncryptionModule', 'isEnabled']) + ->setMethods(['getEncryptionModule', 'isEnabled']) ->getMock(); - $encryptionManager->expects($this->any()) - ->method('getDefaultEncryptionModule') - ->willReturn($mockModule); - $encryptionManager->expects($this->any()) + $this->encryptionManager->expects($this->any()) ->method('getEncryptionModule') ->willReturn($mockModule); - $encryptionManager->expects($this->any()) + $this->encryptionManager->expects($this->any()) ->method('isEnabled') ->willReturn(true); @@ -38,8 +67,8 @@ class Encryption extends \Test\Files\Storage\Storage { ->disableOriginalConstructor() ->getMock(); - $util = $this->getMock('\OC\Encryption\Util', ['getUidAndFilename'], [new View(), new \OC\User\Manager(), $groupManager, $config]); - $util->expects($this->any()) + $this->util = $this->getMock('\OC\Encryption\Util', ['getUidAndFilename', 'isFile'], [new View(), new \OC\User\Manager(), $groupManager, $config]); + $this->util->expects($this->any()) ->method('getUidAndFilename') ->willReturnCallback(function ($path) { return ['user1', $path]; @@ -54,20 +83,22 @@ class Encryption extends \Test\Files\Storage\Storage { $logger = $this->getMock('\OC\Log'); $this->sourceStorage = new Temporary(array()); - $keyStore = $this->getMockBuilder('\OC\Encryption\Keys\Storage') + $this->keyStore = $this->getMockBuilder('\OC\Encryption\Keys\Storage') + ->disableOriginalConstructor()->getMock(); + $this->update = $this->getMockBuilder('\OC\Encryption\Update') ->disableOriginalConstructor()->getMock(); $mount = $this->getMockBuilder('\OC\Files\Mount\MountPoint') ->disableOriginalConstructor() ->setMethods(['getOption']) ->getMock(); $mount->expects($this->any())->method('getOption')->willReturn(true); - $this->instance = new EncryptionWrapper([ + $this->instance = new \OC\Files\Storage\Wrapper\Encryption([ 'storage' => $this->sourceStorage, 'root' => 'foo', 'mountPoint' => '/', 'mount' => $mount ], - $encryptionManager, $util, $logger, $file, null, $keyStore + $this->encryptionManager, $this->util, $logger, $file, null, $this->keyStore, $this->update ); } @@ -75,45 +106,98 @@ class Encryption extends \Test\Files\Storage\Storage { * @return \PHPUnit_Framework_MockObject_MockObject */ protected function buildMockModule() { - $encryptionModule = $this->getMockBuilder('\OCP\Encryption\IEncryptionModule') + $this->encryptionModule = $this->getMockBuilder('\OCP\Encryption\IEncryptionModule') ->disableOriginalConstructor() ->setMethods(['getId', 'getDisplayName', 'begin', 'end', 'encrypt', 'decrypt', 'update', 'shouldEncrypt', 'getUnencryptedBlockSize']) ->getMock(); - $encryptionModule->expects($this->any())->method('getId')->willReturn('UNIT_TEST_MODULE'); - $encryptionModule->expects($this->any())->method('getDisplayName')->willReturn('Unit test module'); - $encryptionModule->expects($this->any())->method('begin')->willReturn([]); - $encryptionModule->expects($this->any())->method('end')->willReturn(''); - $encryptionModule->expects($this->any())->method('encrypt')->willReturnArgument(0); - $encryptionModule->expects($this->any())->method('decrypt')->willReturnArgument(0); - $encryptionModule->expects($this->any())->method('update')->willReturn(true); - $encryptionModule->expects($this->any())->method('shouldEncrypt')->willReturn(true); - $encryptionModule->expects($this->any())->method('getUnencryptedBlockSize')->willReturn(8192); - return $encryptionModule; + $this->encryptionModule->expects($this->any())->method('getId')->willReturn('UNIT_TEST_MODULE'); + $this->encryptionModule->expects($this->any())->method('getDisplayName')->willReturn('Unit test module'); + $this->encryptionModule->expects($this->any())->method('begin')->willReturn([]); + $this->encryptionModule->expects($this->any())->method('end')->willReturn(''); + $this->encryptionModule->expects($this->any())->method('encrypt')->willReturnArgument(0); + $this->encryptionModule->expects($this->any())->method('decrypt')->willReturnArgument(0); + $this->encryptionModule->expects($this->any())->method('update')->willReturn(true); + $this->encryptionModule->expects($this->any())->method('shouldEncrypt')->willReturn(true); + $this->encryptionModule->expects($this->any())->method('getUnencryptedBlockSize')->willReturn(8192); + return $this->encryptionModule; } -} -// -// FIXME: this is too bad and needs adjustment -// -class EncryptionWrapper extends \OC\Files\Storage\Wrapper\Encryption { - private $keyStore; + /** + * @dataProvider dataTestCopyAndRename + * + * @param string $source + * @param string $target + * @param boolean $renameKeysReturn + * @param boolean $shouldUpdate + */ + public function testRename($source, $target, $renameKeysReturn, $shouldUpdate) { + $this->keyStore + ->expects($this->once()) + ->method('renameKeys') + ->willReturn($renameKeysReturn); + $this->util->expects($this->any()) + ->method('isFile')->willReturn(true); + if ($shouldUpdate) { + $this->update->expects($this->once()) + ->method('update'); + } else { + $this->update->expects($this->never()) + ->method('update'); + } + + $this->instance->mkdir($source); + $this->instance->mkdir(dirname($target)); + $this->instance->rename($source, $target); + } - public function __construct( - $parameters, - \OC\Encryption\Manager $encryptionManager = null, - \OC\Encryption\Util $util = null, - \OC\Log $logger = null, - \OC\Encryption\File $fileHelper = null, - $uid = null, - $keyStore = null - ) { - $this->keyStore = $keyStore; - parent::__construct($parameters, $encryptionManager, $util, $logger, $fileHelper, $uid); + /** + * @dataProvider dataTestCopyAndRename + * + * @param string $source + * @param string $target + * @param boolean $copyKeysReturn + * @param boolean $shouldUpdate + */ + public function testCopyTesting($source, $target, $copyKeysReturn, $shouldUpdate) { + $this->keyStore + ->expects($this->once()) + ->method('copyKeys') + ->willReturn($copyKeysReturn); + $this->util->expects($this->any()) + ->method('isFile')->willReturn(true); + if ($shouldUpdate) { + $this->update->expects($this->once()) + ->method('update'); + } else { + $this->update->expects($this->never()) + ->method('update'); + } + + $this->instance->mkdir($source); + $this->instance->mkdir(dirname($target)); + $this->instance->copy($source, $target); } - protected function getKeyStorage($encryptionModuleId) { - return $this->keyStore; + /** + * @dataProvider copyAndMoveProvider + */ + public function testCopy($source, $target) { + $this->assertTrue(true, 'Replaced by testCopyTesting()'); + } + + /** + * data provider for testCopyTesting() and dataTestCopyAndRename() + * + * @return array + */ + public function dataTestCopyAndRename() { + return array( + array('source', 'target', false, false), + array('source', 'target', true, false), + array('source', '/subFolder/target', false, false), + array('source', '/subFolder/target', true, true), + ); } } diff --git a/tests/lib/files/stream/encryption.php b/tests/lib/files/stream/encryption.php index f52fd0e16cc..0b34de8ae12 100644 --- a/tests/lib/files/stream/encryption.php +++ b/tests/lib/files/stream/encryption.php @@ -8,11 +8,13 @@ use OCA\Encryption_Dummy\DummyModule; class Encryption extends \Test\TestCase { /** + * @param string $fileName * @param string $mode - * @param integer $limit + * @param integer $unencryptedSize + * @return resource */ protected function getStream($fileName, $mode, $unencryptedSize) { - + clearstatcache(); $size = filesize($fileName); $source = fopen($fileName, $mode); $internalPath = $fileName; @@ -45,6 +47,109 @@ class Encryption extends \Test\TestCase { $util, $file, $mode, $size, $unencryptedSize); } + /** + * @dataProvider dataProviderStreamOpen() + */ + public function testStreamOpen($mode, + $fullPath, + $fileExists, + $expectedSharePath, + $expectedSize, + $expectedUnencryptedSize, + $expectedReadOnly) { + + // build mocks + $encryptionModuleMock = $this->getMockBuilder('\OCP\Encryption\IEncryptionModule') + ->disableOriginalConstructor()->getMock(); + $encryptionModuleMock->expects($this->once()) + ->method('getUnencryptedBlockSize')->willReturn(99); + $encryptionModuleMock->expects($this->once()) + ->method('begin')->willReturn(true); + + $storageMock = $this->getMockBuilder('\OC\Files\Storage\Storage') + ->disableOriginalConstructor()->getMock(); + $storageMock->expects($this->once())->method('file_exists')->willReturn($fileExists); + + $fileMock = $this->getMockBuilder('\OC\Encryption\File') + ->disableOriginalConstructor()->getMock(); + $fileMock->expects($this->once())->method('getAccessList') + ->will($this->returnCallback(function($sharePath) use ($expectedSharePath) { + $this->assertSame($expectedSharePath, $sharePath); + return array(); + })); + + $utilMock = $this->getMockBuilder('\OC\Encryption\Util') + ->disableOriginalConstructor()->getMock(); + $utilMock->expects($this->any()) + ->method('getHeaderSize') + ->willReturn(8192); + + // get a instance of the stream wrapper + $streamWrapper = $this->getMockBuilder('\OC\Files\Stream\Encryption') + ->setMethods(['loadContext', 'writeHeader', 'skipHeader'])->disableOriginalConstructor()->getMock(); + + // set internal properties of the stream wrapper + $stream = new \ReflectionClass('\OC\Files\Stream\Encryption'); + $encryptionModule = $stream->getProperty('encryptionModule'); + $encryptionModule->setAccessible(true); + $encryptionModule->setValue($streamWrapper, $encryptionModuleMock); + $encryptionModule->setAccessible(false); + $storage = $stream->getProperty('storage'); + $storage->setAccessible(true); + $storage->setValue($streamWrapper, $storageMock); + $storage->setAccessible(false); + $file = $stream->getProperty('file'); + $file->setAccessible(true); + $file->setValue($streamWrapper, $fileMock); + $file->setAccessible(false); + $util = $stream->getProperty('util'); + $util->setAccessible(true); + $util->setValue($streamWrapper, $utilMock); + $util->setAccessible(false); + $fullPathP = $stream->getProperty('fullPath'); + $fullPathP->setAccessible(true); + $fullPathP->setValue($streamWrapper, $fullPath); + $fullPathP->setAccessible(false); + $header = $stream->getProperty('header'); + $header->setAccessible(true); + $header->setValue($streamWrapper, array()); + $header->setAccessible(false); + + // call stream_open, that's the method we want to test + $dummyVar = 'foo'; + $streamWrapper->stream_open('', $mode, '', $dummyVar); + + // check internal properties + $size = $stream->getProperty('size'); + $size->setAccessible(true); + $this->assertSame($expectedSize, + $size->getValue($streamWrapper) + ); + $size->setAccessible(false); + + $unencryptedSize = $stream->getProperty('unencryptedSize'); + $unencryptedSize->setAccessible(true); + $this->assertSame($expectedUnencryptedSize, + $unencryptedSize->getValue($streamWrapper) + ); + $unencryptedSize->setAccessible(false); + + $readOnly = $stream->getProperty('readOnly'); + $readOnly->setAccessible(true); + $this->assertSame($expectedReadOnly, + $readOnly->getValue($streamWrapper) + ); + $readOnly->setAccessible(false); + } + + public function dataProviderStreamOpen() { + return array( + array('r', '/foo/bar/test.txt', true, '/foo/bar/test.txt', null, null, true), + array('r', '/foo/bar/test.txt', false, '/foo/bar', null, null, true), + array('w', '/foo/bar/test.txt', true, '/foo/bar/test.txt', 8192, 0, false), + ); + } + public function testWriteRead() { $fileName = tempnam("/tmp", "FOO"); $stream = $this->getStream($fileName, 'w+', 0); @@ -54,6 +159,38 @@ class Encryption extends \Test\TestCase { $stream = $this->getStream($fileName, 'r', 6); $this->assertEquals('foobar', fread($stream, 100)); fclose($stream); + + unlink($fileName); + } + + public function testWriteWriteRead() { + $fileName = tempnam("/tmp", "FOO"); + $stream = $this->getStream($fileName, 'w+', 0); + $this->assertEquals(6, fwrite($stream, 'foobar')); + fclose($stream); + + $stream = $this->getStream($fileName, 'r+', 6); + $this->assertEquals(3, fwrite($stream, 'bar')); + fclose($stream); + + $stream = $this->getStream($fileName, 'r', 6); + $this->assertEquals('barbar', fread($stream, 100)); + fclose($stream); + } + + public function testRewind() { + $fileName = tempnam("/tmp", "FOO"); + $stream = $this->getStream($fileName, 'w+', 0); + $this->assertEquals(6, fwrite($stream, 'foobar')); + $this->assertEquals(TRUE, rewind($stream)); + $this->assertEquals('foobar', fread($stream, 100)); + $this->assertEquals(TRUE, rewind($stream)); + $this->assertEquals(3, fwrite($stream, 'bar')); + fclose($stream); + + $stream = $this->getStream($fileName, 'r', 6); + $this->assertEquals('barbar', fread($stream, 100)); + fclose($stream); } public function testSeek() { @@ -67,10 +204,23 @@ class Encryption extends \Test\TestCase { $stream = $this->getStream($fileName, 'r', 9); $this->assertEquals('foofoobar', fread($stream, 100)); fclose($stream); + + unlink($fileName); } - public function testWriteReadBigFile() { - $expectedData = file_get_contents(\OC::$SERVERROOT . '/tests/data/lorem-big.txt'); + function dataFilesProvider() { + return [ + ['lorem-big.txt'], + ['block-aligned.txt'], + ['block-aligned-plus-one.txt'], + ]; + } + + /** + * @dataProvider dataFilesProvider + */ + public function testWriteReadBigFile($testFile) { + $expectedData = file_get_contents(\OC::$SERVERROOT . '/tests/data/' . $testFile); // write it $fileName = tempnam("/tmp", "FOO"); $stream = $this->getStream($fileName, 'w+', 0); @@ -83,6 +233,18 @@ class Encryption extends \Test\TestCase { fclose($stream); $this->assertEquals($expectedData, $data); + + // another read test with a loop like we do in several places: + $stream = $this->getStream($fileName, 'r', strlen($expectedData)); + $data = ''; + while (!feof($stream)) { + $data .= fread($stream, 8192); + } + fclose($stream); + + $this->assertEquals($expectedData, $data); + + unlink($fileName); } /** @@ -98,11 +260,24 @@ class Encryption extends \Test\TestCase { $encryptionModule->expects($this->any())->method('getDisplayName')->willReturn('Unit test module'); $encryptionModule->expects($this->any())->method('begin')->willReturn([]); $encryptionModule->expects($this->any())->method('end')->willReturn(''); - $encryptionModule->expects($this->any())->method('encrypt')->willReturnArgument(0); - $encryptionModule->expects($this->any())->method('decrypt')->willReturnArgument(0); + $encryptionModule->expects($this->any())->method('encrypt')->willReturnCallback(function($data) { + // simulate different block size by adding some padding to the data + if (isset($data[6125])) { + return str_pad($data, 8192, 'X'); + } + // last block + return $data; + }); + $encryptionModule->expects($this->any())->method('decrypt')->willReturnCallback(function($data) { + if (isset($data[8191])) { + return substr($data, 0, 6126); + } + // last block + return $data; + }); $encryptionModule->expects($this->any())->method('update')->willReturn(true); $encryptionModule->expects($this->any())->method('shouldEncrypt')->willReturn(true); - $encryptionModule->expects($this->any())->method('getUnencryptedBlockSize')->willReturn(8192); + $encryptionModule->expects($this->any())->method('getUnencryptedBlockSize')->willReturn(6126); return $encryptionModule; } } diff --git a/tests/lib/files/view.php b/tests/lib/files/view.php index 269b8b23e7d..6bc63557138 100644 --- a/tests/lib/files/view.php +++ b/tests/lib/files/view.php @@ -30,7 +30,7 @@ class TemporaryNoCross extends \OC\Files\Storage\Temporary { class TemporaryNoLocal extends \OC\Files\Storage\Temporary { public function instanceOfStorage($className) { - if($className === '\OC\Files\Storage\Local') { + if ($className === '\OC\Files\Storage\Local') { return false; } else { return parent::instanceOfStorage($className); @@ -952,7 +952,7 @@ class View extends \Test\TestCase { $storage2->expects($this->any()) ->method('fopen') - ->will($this->returnCallback(function($path, $mode) use($storage2) { + ->will($this->returnCallback(function ($path, $mode) use ($storage2) { $source = fopen($storage2->getSourcePath($path), $mode); return \OC\Files\Stream\Quota::wrap($source, 9); })); @@ -1063,4 +1063,21 @@ class View extends \Test\TestCase { $watcher = $storage->getWatcher(); $this->assertEquals(Watcher::CHECK_NEVER, $watcher->getPolicy()); } + + public function testGetAbsolutePathOnNull() { + $view = new \OC\Files\View(); + $this->assertNull($view->getAbsolutePath(null)); + } + + public function testGetRelativePathOnNull() { + $view = new \OC\Files\View(); + $this->assertNull($view->getRelativePath(null)); + } + + /** + * @expectedException \InvalidArgumentException + */ + public function testNullAsRoot() { + new \OC\Files\View(null); + } } diff --git a/tests/lib/template/resourcelocator.php b/tests/lib/template/resourcelocator.php index b0851621fd2..ef5e2ed1357 100644 --- a/tests/lib/template/resourcelocator.php +++ b/tests/lib/template/resourcelocator.php @@ -6,8 +6,12 @@ * See the COPYING-README file. */ -class Test_ResourceLocator extends \Test\TestCase { - /** @var PHPUnit_Framework_MockObject_MockObject */ +namespace Test\Template; + +use OC\Template\ResourceNotFoundException; + +class ResourceLocator extends \Test\TestCase { + /** @var \PHPUnit_Framework_MockObject_MockObject */ protected $logger; protected function setUp() { @@ -17,10 +21,14 @@ class Test_ResourceLocator extends \Test\TestCase { /** * @param string $theme + * @param array $core_map + * @param array $party_map + * @param array $appsRoots + * @return \PHPUnit_Framework_MockObject_MockObject */ - public function getResourceLocator( $theme, $core_map, $party_map, $appsroots ) { + public function getResourceLocator($theme, $core_map, $party_map, $appsRoots) { return $this->getMockForAbstractClass('OC\Template\ResourceLocator', - array($this->logger, $theme, $core_map, $party_map, $appsroots ), + array($this->logger, $theme, $core_map, $party_map, $appsRoots ), '', true, true, true, array()); } @@ -44,6 +52,7 @@ class Test_ResourceLocator extends \Test\TestCase { $locator->expects($this->once()) ->method('doFindTheme') ->with('foo'); + /** @var \OC\Template\ResourceLocator $locator */ $locator->find(array('foo')); } @@ -53,20 +62,23 @@ class Test_ResourceLocator extends \Test\TestCase { $locator->expects($this->once()) ->method('doFind') ->with('foo') - ->will($this->throwException(new \OC\Template\ResourceNotFoundException('foo', 'map'))); + ->will($this->throwException(new ResourceNotFoundException('foo', 'map'))); $locator->expects($this->once()) ->method('doFindTheme') ->with('foo') - ->will($this->throwException(new \OC\Template\ResourceNotFoundException('foo', 'map'))); + ->will($this->throwException(new ResourceNotFoundException('foo', 'map'))); $this->logger->expects($this->exactly(2)) - ->method('error'); + ->method('error') + ->with($this->stringContains('map/foo')); + /** @var \OC\Template\ResourceLocator $locator */ $locator->find(array('foo')); } public function testAppendIfExist() { $locator = $this->getResourceLocator('theme', array(__DIR__=>'map'), array('3rd'=>'party'), array('foo'=>'bar')); - $method = new ReflectionMethod($locator, 'appendIfExist'); + /** @var \OC\Template\ResourceLocator $locator */ + $method = new \ReflectionMethod($locator, 'appendIfExist'); $method->setAccessible(true); $method->invoke($locator, __DIR__, basename(__FILE__), 'webroot'); diff --git a/tests/lib/tempmanager.php b/tests/lib/tempmanager.php index 9bedd7c401b..72741d0dec6 100644 --- a/tests/lib/tempmanager.php +++ b/tests/lib/tempmanager.php @@ -152,16 +152,37 @@ class TempManager extends \Test\TestCase { $this->assertFalse($manager->getTemporaryFolder()); } - public function testGeneratePathTraversal() { + public function testBuildFileNameWithPostfix() { $logger = $this->getMock('\Test\NullLogger'); $tmpManager = \Test_Helper::invokePrivate( $this->getManager($logger), - 'generatePath', - ['../Traversal\\../FileName'] + 'buildFileNameWithSuffix', + ['/tmp/myTemporaryFile', 'postfix'] + ); + + $this->assertEquals('/tmp/myTemporaryFile-.postfix', $tmpManager); + } + + public function testBuildFileNameWithoutPostfix() { + $logger = $this->getMock('\Test\NullLogger'); + $tmpManager = \Test_Helper::invokePrivate( + $this->getManager($logger), + 'buildFileNameWithSuffix', + ['/tmp/myTemporaryFile', ''] + ); + + $this->assertEquals('/tmp/myTemporaryFile', $tmpManager); + } + + public function testBuildFileNameWithSuffixPathTraversal() { + $logger = $this->getMock('\Test\NullLogger'); + $tmpManager = \Test_Helper::invokePrivate( + $this->getManager($logger), + 'buildFileNameWithSuffix', + ['foo', '../Traversal\\../FileName'] ); $this->assertStringEndsNotWith('./Traversal\\../FileName', $tmpManager); $this->assertStringEndsWith('.Traversal..FileName', $tmpManager); - } } diff --git a/version.php b/version.php index f5ede61afd9..9b61256f751 100644 --- a/version.php +++ b/version.php @@ -23,10 +23,10 @@ // We only can count up. The 4. digit is only for the internal patchlevel to trigger DB upgrades // between betas, final and RCs. This is _not_ the public version number. Reset minor/patchlevel // when updating major/minor version number. -$OC_Version=array(8, 1, 0, 2); +$OC_Version=array(8, 1, 0, 3); // The human readable string -$OC_VersionString='8.1 alpha 1'; +$OC_VersionString='8.1 alpha 2'; // The ownCloud channel $OC_Channel='git'; |