aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--apps/files/js/filelist.js4
-rw-r--r--apps/files/l10n/sr.js2
-rw-r--r--apps/files/l10n/sr.json2
-rw-r--r--apps/files_external/lib/smb.php5
-rw-r--r--apps/files_external/tests/backends/smb.php12
-rw-r--r--apps/user_ldap/l10n/sr.js1
-rw-r--r--apps/user_ldap/l10n/sr.json1
-rw-r--r--core/js/js.js1
-rw-r--r--core/js/setupchecks.js3
-rw-r--r--core/l10n/sr.js2
-rw-r--r--core/l10n/sr.json2
-rw-r--r--lib/l10n/sr.js3
-rw-r--r--lib/l10n/sr.json3
-rw-r--r--lib/private/files/type/detection.php127
-rw-r--r--lib/private/helper.php99
-rw-r--r--lib/private/server.php15
-rw-r--r--lib/private/share/share.php13
-rw-r--r--lib/public/files/imimetypedetector.php78
-rw-r--r--lib/public/iservercontainer.php9
-rw-r--r--settings/application.php3
-rw-r--r--settings/controller/checksetupcontroller.php70
-rw-r--r--settings/controller/encryptioncontroller.php39
-rw-r--r--settings/l10n/az.js1
-rw-r--r--settings/l10n/az.json1
-rw-r--r--settings/l10n/cs_CZ.js1
-rw-r--r--settings/l10n/cs_CZ.json1
-rw-r--r--settings/l10n/da.js1
-rw-r--r--settings/l10n/da.json1
-rw-r--r--settings/l10n/de.js1
-rw-r--r--settings/l10n/de.json1
-rw-r--r--settings/l10n/de_DE.js1
-rw-r--r--settings/l10n/de_DE.json1
-rw-r--r--settings/l10n/el.js1
-rw-r--r--settings/l10n/el.json1
-rw-r--r--settings/l10n/en_GB.js1
-rw-r--r--settings/l10n/en_GB.json1
-rw-r--r--settings/l10n/es.js1
-rw-r--r--settings/l10n/es.json1
-rw-r--r--settings/l10n/eu.js1
-rw-r--r--settings/l10n/eu.json1
-rw-r--r--settings/l10n/fi_FI.js1
-rw-r--r--settings/l10n/fi_FI.json1
-rw-r--r--settings/l10n/fr.js1
-rw-r--r--settings/l10n/fr.json1
-rw-r--r--settings/l10n/gl.js1
-rw-r--r--settings/l10n/gl.json1
-rw-r--r--settings/l10n/hu_HU.js1
-rw-r--r--settings/l10n/hu_HU.json1
-rw-r--r--settings/l10n/id.js1
-rw-r--r--settings/l10n/id.json1
-rw-r--r--settings/l10n/it.js1
-rw-r--r--settings/l10n/it.json1
-rw-r--r--settings/l10n/ja.js1
-rw-r--r--settings/l10n/ja.json1
-rw-r--r--settings/l10n/ko.js1
-rw-r--r--settings/l10n/ko.json1
-rw-r--r--settings/l10n/lt_LT.js1
-rw-r--r--settings/l10n/lt_LT.json1
-rw-r--r--settings/l10n/lv.js1
-rw-r--r--settings/l10n/lv.json1
-rw-r--r--settings/l10n/nb_NO.js1
-rw-r--r--settings/l10n/nb_NO.json1
-rw-r--r--settings/l10n/nl.js1
-rw-r--r--settings/l10n/nl.json1
-rw-r--r--settings/l10n/pt_BR.js1
-rw-r--r--settings/l10n/pt_BR.json1
-rw-r--r--settings/l10n/pt_PT.js1
-rw-r--r--settings/l10n/pt_PT.json1
-rw-r--r--settings/l10n/ru.js1
-rw-r--r--settings/l10n/ru.json1
-rw-r--r--settings/l10n/sk_SK.js1
-rw-r--r--settings/l10n/sk_SK.json1
-rw-r--r--settings/l10n/sl.js1
-rw-r--r--settings/l10n/sl.json1
-rw-r--r--settings/l10n/sr.js5
-rw-r--r--settings/l10n/sr.json5
-rw-r--r--settings/l10n/th_TH.js1
-rw-r--r--settings/l10n/th_TH.json1
-rw-r--r--settings/l10n/tr.js1
-rw-r--r--settings/l10n/tr.json1
-rw-r--r--settings/l10n/uk.js1
-rw-r--r--settings/l10n/uk.json1
-rw-r--r--settings/l10n/zh_CN.js1
-rw-r--r--settings/l10n/zh_CN.json1
-rw-r--r--tests/lib/files/type/detection.php283
-rw-r--r--tests/lib/share/share.php36
-rw-r--r--tests/settings/controller/CheckSetupControllerTest.php156
-rw-r--r--tests/settings/controller/EncryptionControllerTest.php151
88 files changed, 1073 insertions, 117 deletions
diff --git a/apps/files/js/filelist.js b/apps/files/js/filelist.js
index 183b5e909a6..8236ef3b4ac 100644
--- a/apps/files/js/filelist.js
+++ b/apps/files/js/filelist.js
@@ -822,7 +822,9 @@
"class": "modified",
"title": formatted,
"style": 'color:rgb('+modifiedColor+','+modifiedColor+','+modifiedColor+')'
- }).text(text));
+ }).text(text)
+ .tooltip({placement: 'top'})
+ );
tr.find('.filesize').text(simpleSize);
tr.append(td);
return tr;
diff --git a/apps/files/l10n/sr.js b/apps/files/l10n/sr.js
index 7a173fe694b..060ac4d506e 100644
--- a/apps/files/l10n/sr.js
+++ b/apps/files/l10n/sr.js
@@ -47,6 +47,8 @@ OC.L10N.register(
"Select" : "Изабери",
"Pending" : "На чекању",
"Unable to determine date" : "Не могу да одредим датум",
+ "This operation is forbidden" : "Ова радња је забрањена",
+ "This directory is unavailable, please check the logs or contact the administrator" : "Овај директоријум није доступан, проверите записе или контактирајте администратора",
"Error moving file." : "Грешка при премештању фајла.",
"Error moving file" : "Грешка при премештању фајла",
"Error" : "Грешка",
diff --git a/apps/files/l10n/sr.json b/apps/files/l10n/sr.json
index f535f4fb013..69fefcaf2b2 100644
--- a/apps/files/l10n/sr.json
+++ b/apps/files/l10n/sr.json
@@ -45,6 +45,8 @@
"Select" : "Изабери",
"Pending" : "На чекању",
"Unable to determine date" : "Не могу да одредим датум",
+ "This operation is forbidden" : "Ова радња је забрањена",
+ "This directory is unavailable, please check the logs or contact the administrator" : "Овај директоријум није доступан, проверите записе или контактирајте администратора",
"Error moving file." : "Грешка при премештању фајла.",
"Error moving file" : "Грешка при премештању фајла",
"Error" : "Грешка",
diff --git a/apps/files_external/lib/smb.php b/apps/files_external/lib/smb.php
index 4a2eebf20b1..f58cd9849f2 100644
--- a/apps/files_external/lib/smb.php
+++ b/apps/files_external/lib/smb.php
@@ -78,7 +78,10 @@ class SMB extends Common {
* @return string
*/
public function getId() {
- return 'smb::' . $this->server->getUser() . '@' . $this->server->getHost() . '/' . $this->share->getName() . '/' . $this->root;
+ // FIXME: double slash to keep compatible with the old storage ids,
+ // failure to do so will lead to creation of a new storage id and
+ // loss of shares from the storage
+ return 'smb::' . $this->server->getUser() . '@' . $this->server->getHost() . '//' . $this->share->getName() . '/' . $this->root;
}
/**
diff --git a/apps/files_external/tests/backends/smb.php b/apps/files_external/tests/backends/smb.php
index 9e60a9e06e0..0da86cb824f 100644
--- a/apps/files_external/tests/backends/smb.php
+++ b/apps/files_external/tests/backends/smb.php
@@ -61,4 +61,16 @@ class SMB extends Storage {
$this->assertTrue($result);
$this->assertTrue($this->instance->is_dir('foo bar'));
}
+
+ public function testStorageId() {
+ $this->instance = new \OC\Files\Storage\SMB([
+ 'host' => 'testhost',
+ 'user' => 'testuser',
+ 'password' => 'somepass',
+ 'share' => 'someshare',
+ 'root' => 'someroot',
+ ]);
+ $this->assertEquals('smb::testuser@testhost//someshare//someroot/', $this->instance->getId());
+ $this->instance = null;
+ }
}
diff --git a/apps/user_ldap/l10n/sr.js b/apps/user_ldap/l10n/sr.js
index dd570c70e5c..89ec30d6afc 100644
--- a/apps/user_ldap/l10n/sr.js
+++ b/apps/user_ldap/l10n/sr.js
@@ -78,6 +78,7 @@ OC.L10N.register(
"Verify settings" : "Провери поставке",
"1. Server" : "1. сервер",
"%s. Server:" : "%s. Сервер:",
+ "Add a new and blank configuration" : "Додај нову празну поставу",
"Copy current configuration into new directory binding" : "Копирај тренутну поставу у везивање новог директоријума",
"Delete the current configuration" : "Обриши тренутне поставке",
"Host" : "Домаћин",
diff --git a/apps/user_ldap/l10n/sr.json b/apps/user_ldap/l10n/sr.json
index 91d9520d3b6..20de66c500e 100644
--- a/apps/user_ldap/l10n/sr.json
+++ b/apps/user_ldap/l10n/sr.json
@@ -76,6 +76,7 @@
"Verify settings" : "Провери поставке",
"1. Server" : "1. сервер",
"%s. Server:" : "%s. Сервер:",
+ "Add a new and blank configuration" : "Додај нову празну поставу",
"Copy current configuration into new directory binding" : "Копирај тренутну поставу у везивање новог директоријума",
"Delete the current configuration" : "Обриши тренутне поставке",
"Host" : "Домаћин",
diff --git a/core/js/js.js b/core/js/js.js
index 5f7df5fb551..8380d56e31e 100644
--- a/core/js/js.js
+++ b/core/js/js.js
@@ -1245,7 +1245,6 @@ function initCore() {
$('.selectedActions a').tipsy({gravity:'s', live:true});
$('a.action.delete').tipsy({gravity:'e', live:true});
$('a.action').tipsy({gravity:'s', live:true});
- $('td .modified').tipsy({gravity:'s', live:true});
$('td.lastLogin').tipsy({gravity:'s', html:true});
$('input').tipsy({gravity:'w'});
$('.extra-data').tipsy({gravity:'w', live:true});
diff --git a/core/js/setupchecks.js b/core/js/setupchecks.js
index 02d7ef94b7e..35f24b188fa 100644
--- a/core/js/setupchecks.js
+++ b/core/js/setupchecks.js
@@ -69,6 +69,9 @@
t('core', '/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our <a href="{docLink}">documentation</a>.', {docLink: data.securityDocs})
);
}
+ if(data.isUsedTlsLibOutdated) {
+ messages.push(data.isUsedTlsLibOutdated);
+ }
} else {
messages.push(t('core', 'Error occurred while checking server setup'));
}
diff --git a/core/l10n/sr.js b/core/l10n/sr.js
index 4a645b1f1dd..50603a4caa2 100644
--- a/core/l10n/sr.js
+++ b/core/l10n/sr.js
@@ -12,6 +12,7 @@ OC.L10N.register(
"Repair warning: " : "Упозорење о поправци :",
"Repair error: " : "Грешка поправке:",
"Following incompatible apps have been disabled: %s" : "Следеће неусаглашене апликације су искључене: %s",
+ "Following apps have been disabled: %s" : "Следеће апликације су искључене: %s",
"Invalid file provided" : "Понуђени фајл је неисправан",
"No image or file provided" : "Није дата ни слика ни фајл",
"Unknown filetype" : "Непознат тип фајла",
@@ -137,6 +138,7 @@ OC.L10N.register(
"Updating {productName} to version {version}, this may take a while." : "Надограђујем {productName} на издање {version}. Ово би могло да потраје.",
"Please reload the page." : "Поново учитајте страницу.",
"The update was unsuccessful. " : "Ажурирање није успело.",
+ "The update was successful. There were warnings." : "Ажурирање је успело. Било је упозорења.",
"The update was successful. Redirecting you to ownCloud now." : "Ажурирање је успело. Преусмеравам вас на оунКлауд.",
"Couldn't reset password because the token is invalid" : "Није могуће ресетовати лозинку јер je токен неважећи",
"Couldn't send reset email. Please make sure your username is correct." : "Не могу да пошаљем поруку за ресетовање лозинке. Проверите да ли је корисничко име исправно.",
diff --git a/core/l10n/sr.json b/core/l10n/sr.json
index a788d7633f3..ead0e061b96 100644
--- a/core/l10n/sr.json
+++ b/core/l10n/sr.json
@@ -10,6 +10,7 @@
"Repair warning: " : "Упозорење о поправци :",
"Repair error: " : "Грешка поправке:",
"Following incompatible apps have been disabled: %s" : "Следеће неусаглашене апликације су искључене: %s",
+ "Following apps have been disabled: %s" : "Следеће апликације су искључене: %s",
"Invalid file provided" : "Понуђени фајл је неисправан",
"No image or file provided" : "Није дата ни слика ни фајл",
"Unknown filetype" : "Непознат тип фајла",
@@ -135,6 +136,7 @@
"Updating {productName} to version {version}, this may take a while." : "Надограђујем {productName} на издање {version}. Ово би могло да потраје.",
"Please reload the page." : "Поново учитајте страницу.",
"The update was unsuccessful. " : "Ажурирање није успело.",
+ "The update was successful. There were warnings." : "Ажурирање је успело. Било је упозорења.",
"The update was successful. Redirecting you to ownCloud now." : "Ажурирање је успело. Преусмеравам вас на оунКлауд.",
"Couldn't reset password because the token is invalid" : "Није могуће ресетовати лозинку јер je токен неважећи",
"Couldn't send reset email. Please make sure your username is correct." : "Не могу да пошаљем поруку за ресетовање лозинке. Проверите да ли је корисничко име исправно.",
diff --git a/lib/l10n/sr.js b/lib/l10n/sr.js
index 5e3e3858950..cb36007723b 100644
--- a/lib/l10n/sr.js
+++ b/lib/l10n/sr.js
@@ -16,6 +16,7 @@ OC.L10N.register(
"Library %s with a version lower than %s is required - available version %s." : "Библиотека %s издања нижег од %s је потребна - доступно издање %s.",
"Following platforms are supported: %s" : "Следеће платформе су подржане: %s",
"ownCloud %s or higher is required." : "оунКлауд %s или новији је потребан.",
+ "ownCloud %s or lower is required." : "оунКлауд %s или старији је потребан.",
"Help" : "Помоћ",
"Personal" : "Лично",
"Users" : "Корисници",
@@ -44,6 +45,7 @@ OC.L10N.register(
"File name is a reserved word" : "Назив фајла је резервисана реч",
"File name contains at least one invalid character" : "Назив фајла садржи бар један недозвољен знак",
"File name is too long" : "Назив фајла је предугачак",
+ "File is currently busy, please try again later" : "Фајл је тренутно заузет, покушајте поново касније",
"Can't read file" : "Не могу да читам фајл",
"App directory already exists" : "Директоријум апликација већ постоји",
"Can't create app folder. Please fix permissions. %s" : "Не могу да креирам фасциклу за апликацију. Исправите дозволе. %s",
@@ -84,6 +86,7 @@ OC.L10N.register(
"Set an admin username." : "Поставите име за администратора.",
"Set an admin password." : "Поставите лозинку за администратора.",
"Can't create or write into the data directory %s" : "Не могу креирати или уписивати у директоријум података %s",
+ "Invalid Federated Cloud ID" : "Неисправан ИД Здруженог облака",
"%s shared »%s« with you" : "%s подели „%s“ са вама",
"%s via %s" : "%s путем %s",
"Sharing %s failed, because the backend does not allow shares from type %i" : "Дељење %s није успело зато што поздина не дозвољава дељење од типа %i",
diff --git a/lib/l10n/sr.json b/lib/l10n/sr.json
index 5efb7613a42..2cc9f4de390 100644
--- a/lib/l10n/sr.json
+++ b/lib/l10n/sr.json
@@ -14,6 +14,7 @@
"Library %s with a version lower than %s is required - available version %s." : "Библиотека %s издања нижег од %s је потребна - доступно издање %s.",
"Following platforms are supported: %s" : "Следеће платформе су подржане: %s",
"ownCloud %s or higher is required." : "оунКлауд %s или новији је потребан.",
+ "ownCloud %s or lower is required." : "оунКлауд %s или старији је потребан.",
"Help" : "Помоћ",
"Personal" : "Лично",
"Users" : "Корисници",
@@ -42,6 +43,7 @@
"File name is a reserved word" : "Назив фајла је резервисана реч",
"File name contains at least one invalid character" : "Назив фајла садржи бар један недозвољен знак",
"File name is too long" : "Назив фајла је предугачак",
+ "File is currently busy, please try again later" : "Фајл је тренутно заузет, покушајте поново касније",
"Can't read file" : "Не могу да читам фајл",
"App directory already exists" : "Директоријум апликација већ постоји",
"Can't create app folder. Please fix permissions. %s" : "Не могу да креирам фасциклу за апликацију. Исправите дозволе. %s",
@@ -82,6 +84,7 @@
"Set an admin username." : "Поставите име за администратора.",
"Set an admin password." : "Поставите лозинку за администратора.",
"Can't create or write into the data directory %s" : "Не могу креирати или уписивати у директоријум података %s",
+ "Invalid Federated Cloud ID" : "Неисправан ИД Здруженог облака",
"%s shared »%s« with you" : "%s подели „%s“ са вама",
"%s via %s" : "%s путем %s",
"Sharing %s failed, because the backend does not allow shares from type %i" : "Дељење %s није успело зато што поздина не дозвољава дељење од типа %i",
diff --git a/lib/private/files/type/detection.php b/lib/private/files/type/detection.php
index 3287375bc79..ba286637df3 100644
--- a/lib/private/files/type/detection.php
+++ b/lib/private/files/type/detection.php
@@ -4,6 +4,7 @@
* @author Jens-Christian Fischer <jens-christian.fischer@switch.ch>
* @author Morris Jobke <hey@morrisjobke.de>
* @author Robin Appelman <icewind@owncloud.com>
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
* @author Thomas Tanghus <thomas@tanghus.net>
*
* @copyright Copyright (c) 2015, ownCloud, Inc.
@@ -25,6 +26,9 @@
namespace OC\Files\Type;
+use OCP\Files\IMimeTypeDetector;
+use OCP\IURLGenerator;
+
/**
* Class Detection
*
@@ -32,9 +36,28 @@ namespace OC\Files\Type;
*
* @package OC\Files\Type
*/
-class Detection {
- protected $mimetypes = array();
- protected $secureMimeTypes = array();
+class Detection implements IMimeTypeDetector {
+ protected $mimetypes = [];
+ protected $secureMimeTypes = [];
+
+ protected $mimetypeIcons = [];
+ /** @var string[] */
+ protected $mimeTypeAlias = [];
+
+ /** @var IURLGenerator */
+ private $urlGenerator;
+
+ /** @var string */
+ private $configDir;
+
+ /**
+ * @param IURLGenerator $urlGenerator
+ * @param string $configDir
+ */
+ public function __construct(IURLGenerator $urlGenerator, $configDir) {
+ $this->urlGenerator = $urlGenerator;
+ $this->configDir = $configDir;
+ }
/**
* Add an extension -> mimetype mapping
@@ -71,12 +94,52 @@ class Detection {
}
/**
+ * Add the mimetype aliases if they are not yet present
+ */
+ private function loadAliases() {
+ if (!empty($this->mimeTypeAlias)) {
+ return;
+ }
+
+ $file = file_get_contents($this->configDir . '/mimetypealiases.dist.json');
+ $this->mimeTypeAlias = get_object_vars(json_decode($file));
+
+ if (file_exists($this->configDir . '/mimetypealiases.json')) {
+ $custom = get_object_vars(json_decode(file_get_contents($this->configDir . '/mimetypealiases.json')));
+ $this->mimeTypeAlias = array_merge($this->mimeTypeAlias, $custom);
+ }
+ }
+
+ /**
+ * Add mimetype mappings if they are not yet present
+ */
+ private function loadMappings() {
+ if (!empty($this->mimetypes)) {
+ return;
+ }
+
+ $dist = file_get_contents($this->configDir . '/mimetypemapping.dist.json');
+ $mimetypemapping = get_object_vars(json_decode($dist));
+
+ //Check if need to load custom mappings
+ if (file_exists($this->configDir . '/mimetypemapping.json')) {
+ $custom = file_get_contents($this->configDir . '/mimetypemapping.json');
+ $custom_mapping = get_object_vars(json_decode($custom));
+ $mimetypemapping = array_merge($mimetypemapping, $custom_mapping);
+ }
+
+ $this->registerTypeArray($mimetypemapping);
+ }
+
+ /**
* detect mimetype only based on filename, content of file is not used
*
* @param string $path
* @return string
*/
public function detectPath($path) {
+ $this->loadMappings();
+
if (strpos($path, '.')) {
//try to guess the type by the file extension
$extension = strtolower(strrchr(basename($path), "."));
@@ -96,6 +159,8 @@ class Detection {
* @return string
*/
public function detect($path) {
+ $this->loadMappings();
+
if (@is_dir($path)) {
// directories are easy
return "httpd/unix-directory";
@@ -166,8 +231,64 @@ class Detection {
* @return string
*/
public function getSecureMimeType($mimeType) {
+ $this->loadMappings();
+
return isset($this->secureMimeTypes[$mimeType])
? $this->secureMimeTypes[$mimeType]
: 'application/octet-stream';
}
+
+ /**
+ * Get path to the icon of a file type
+ * @param string $mimeType the MIME type
+ * @return string the url
+ */
+ public function mimeTypeIcon($mimetype) {
+ $this->loadAliases();
+
+ if (isset($this->mimeTypeAlias[$mimetype])) {
+ $mimetype = $this->mimeTypeAlias[$mimetype];
+ }
+ if (isset($this->mimetypeIcons[$mimetype])) {
+ return $this->mimetypeIcons[$mimetype];
+ }
+
+ // Replace slash and backslash with a minus
+ $icon = str_replace('/', '-', $mimetype);
+ $icon = str_replace('\\', '-', $icon);
+
+ // Is it a dir?
+ if ($mimetype === 'dir') {
+ $this->mimetypeIcons[$mimetype] = $this->urlGenerator->imagePath('core', 'filetypes/folder.png');
+ return $this->mimetypeIcons[$mimetype];
+ }
+ if ($mimetype === 'dir-shared') {
+ $this->mimetypeIcons[$mimetype] = $this->urlGenerator->imagePath('core', 'filetypes/folder-shared.png');
+ return $this->mimetypeIcons[$mimetype];
+ }
+ if ($mimetype === 'dir-external') {
+ $this->mimetypeIcons[$mimetype] = $this->urlGenerator->imagePath('core', 'filetypes/folder-external.png');
+ return $this->mimetypeIcons[$mimetype];
+ }
+
+ // Icon exists?
+ try {
+ $this->mimetypeIcons[$mimetype] = $this->urlGenerator->imagePath('core', 'filetypes/' . $icon . '.png');
+ return $this->mimetypeIcons[$mimetype];
+ } catch (\RuntimeException $e) {
+ // Specified image not found
+ }
+
+ // Try only the first part of the filetype
+ $mimePart = substr($icon, 0, strpos($icon, '-'));
+ try {
+ $this->mimetypeIcons[$mimetype] = $this->urlGenerator->imagePath('core', 'filetypes/' . $mimePart . '.png');
+ return $this->mimetypeIcons[$mimetype];
+ } catch (\RuntimeException $e) {
+ // Image for the first part of the mimetype not found
+ }
+
+ $this->mimetypeIcons[$mimetype] = $this->urlGenerator->imagePath('core', 'filetypes/file.png');
+ return $this->mimetypeIcons[$mimetype];
+ }
}
diff --git a/lib/private/helper.php b/lib/private/helper.php
index ed954f87630..b8e4b451835 100644
--- a/lib/private/helper.php
+++ b/lib/private/helper.php
@@ -50,11 +50,7 @@ use Symfony\Component\Process\ExecutableFinder;
* Collection of useful functions
*/
class OC_Helper {
- private static $mimetypeIcons = array();
- private static $mimetypeDetector;
private static $templateManager;
- /** @var string[] */
- private static $mimeTypeAlias = [];
/**
* Creates an url using a defined route
@@ -183,64 +179,10 @@ class OC_Helper {
* @return string the url
*
* Returns the path to the image of this file type.
+ * @deprecated 8.2.0 Use \OC::$server->getMimeTypeDetector()->mimeTypeIcon($mimetype)
*/
public static function mimetypeIcon($mimetype) {
-
- // On first access load the list of mimetype aliases
- if (empty(self::$mimeTypeAlias)) {
- $file = file_get_contents(OC::$SERVERROOT . '/config/mimetypealiases.dist.json');
- self::$mimeTypeAlias = get_object_vars(json_decode($file));
-
- if (file_exists(\OC::$SERVERROOT . '/config/mimetypealiases.json')) {
- $custom = get_object_vars(json_decode(file_get_contents(\OC::$SERVERROOT . '/config/mimetypealiases.json')));
- self::$mimeTypeAlias = array_merge(self::$mimeTypeAlias, $custom);
- }
- }
-
- if (isset(self::$mimeTypeAlias[$mimetype])) {
- $mimetype = self::$mimeTypeAlias[$mimetype];
- }
- if (isset(self::$mimetypeIcons[$mimetype])) {
- return self::$mimetypeIcons[$mimetype];
- }
-
- // Replace slash and backslash with a minus
- $icon = str_replace('/', '-', $mimetype);
- $icon = str_replace('\\', '-', $icon);
-
- // Is it a dir?
- if ($mimetype === 'dir') {
- self::$mimetypeIcons[$mimetype] = \OC::$server->getURLGenerator()->imagePath('core', 'filetypes/folder.png');
- return self::$mimetypeIcons[$mimetype];
- }
- if ($mimetype === 'dir-shared') {
- self::$mimetypeIcons[$mimetype] = \OC::$server->getURLGenerator()->imagePath('core', 'filetypes/folder-shared.png');
- return self::$mimetypeIcons[$mimetype];
- }
- if ($mimetype === 'dir-external') {
- self::$mimetypeIcons[$mimetype] = \OC::$server->getURLGenerator()->imagePath('core', 'filetypes/folder-external.png');
- return self::$mimetypeIcons[$mimetype];
- }
-
- // Icon exists?
- try {
- self::$mimetypeIcons[$mimetype] = \OC::$server->getURLGenerator()->imagePath('core', 'filetypes/' . $icon . '.png');
- return self::$mimetypeIcons[$mimetype];
- } catch (\RuntimeException $e) {
- // Specified image not found
- }
-
- // Try only the first part of the filetype
- $mimePart = substr($icon, 0, strpos($icon, '-'));
- try {
- self::$mimetypeIcons[$mimetype] = \OC::$server->getURLGenerator()->imagePath('core', 'filetypes/' . $mimePart . '.png');
- return self::$mimetypeIcons[$mimetype];
- } catch (\RuntimeException $e) {
- // Image for the first part of the mimetype not found
- }
-
- self::$mimetypeIcons[$mimetype] = \OC::$server->getURLGenerator()->imagePath('core', 'filetypes/file.png');
- return self::$mimetypeIcons[$mimetype];
+ return \OC::$server->getMimeTypeDetector()->mimeTypeIcon($mimetype);
}
/**
@@ -431,23 +373,10 @@ class OC_Helper {
/**
* @return \OC\Files\Type\Detection
+ * @deprecated 8.2.0 use \OC::$server->getMimeTypeDetector()
*/
static public function getMimetypeDetector() {
- if (!self::$mimetypeDetector) {
- $dist = file_get_contents(OC::$configDir . '/mimetypemapping.dist.json');
- $mimetypemapping = get_object_vars(json_decode($dist));
-
- //Check if need to load custom mappings
- if (file_exists(OC::$configDir . '/mimetypemapping.json')) {
- $custom = file_get_contents(OC::$configDir . '/mimetypemapping.json');
- $custom_mapping = get_object_vars(json_decode($custom));
- $mimetypemapping = array_merge($mimetypemapping, $custom_mapping);
- }
-
- self::$mimetypeDetector = new \OC\Files\Type\Detection();
- self::$mimetypeDetector->registerTypeArray($mimetypemapping);
- }
- return self::$mimetypeDetector;
+ return \OC::$server->getMimeTypeDetector();
}
/**
@@ -465,9 +394,10 @@ class OC_Helper {
*
* @param string $path
* @return string
+ * @deprecated 8.2.0 Use \OC::$server->getMimeTypeDetector()->detectPath($path)
*/
static public function getFileNameMimeType($path) {
- return self::getMimetypeDetector()->detectPath($path);
+ return \OC::$server->getMimeTypeDetector()->detectPath($path);
}
/**
@@ -476,9 +406,10 @@ class OC_Helper {
* @param string $path
* @return string
* does NOT work for ownClouds filesystem, use OC_FileSystem::getMimeType instead
+ * @deprecated 8.2.0 Use \OC::$server->getMimeTypeDetector()->detect($path)
*/
static function getMimeType($path) {
- return self::getMimetypeDetector()->detect($path);
+ return \OC::$server->getMimeTypeDetector()->detect($path);
}
/**
@@ -486,9 +417,10 @@ class OC_Helper {
*
* @param string $mimeType
* @return string
+ * @deprecated 8.2.0 Use \OC::$server->getMimeTypeDetector()->getSecureMimeType($mimeType)
*/
static function getSecureMimeType($mimeType) {
- return self::getMimetypeDetector()->getSecureMimeType($mimeType);
+ return \OC::$server->getMimeTypeDetector()->getSecureMimeType($mimeType);
}
/**
@@ -496,20 +428,13 @@ class OC_Helper {
*
* @param string $data
* @return string
+ * @deprecated 8.2.0 Use \OC::$server->getMimeTypeDetector()->detectString($data)
*/
static function getStringMimeType($data) {
- return self::getMimetypeDetector()->detectString($data);
+ return \OC::$server->getMimeTypeDetector()->detectString($data);
}
/**
- * Checks $_REQUEST contains a var for the $s key. If so, returns the html-escaped value of this var; otherwise returns the default value provided by $d.
- * @param string $s name of the var to escape, if set.
- * @param string $d default value.
- * @return string the print-safe value.
- *
- */
-
- /**
* detect if a given program is found in the search PATH
*
* @param string $name
diff --git a/lib/private/server.php b/lib/private/server.php
index 53949b53df7..12981fe7f19 100644
--- a/lib/private/server.php
+++ b/lib/private/server.php
@@ -12,6 +12,7 @@
* @author Morris Jobke <hey@morrisjobke.de>
* @author Robin Appelman <icewind@owncloud.com>
* @author Robin McCorkell <rmccorkell@karoshi.org.uk>
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
* @author Sander <brantje@gmail.com>
* @author Thomas Müller <thomas.mueller@tmit.eu>
* @author Thomas Tanghus <thomas@tanghus.net>
@@ -443,6 +444,11 @@ class Server extends SimpleContainer implements IServerContainer {
$this->registerService('MountManager', function () {
return new \OC\Files\Mount\Manager();
});
+ $this->registerService('MimeTypeDetector', function(Server $c) {
+ return new \OC\Files\Type\Detection(
+ $c->getURLGenerator(),
+ \OC::$configDir);
+ });
}
/**
@@ -930,4 +936,13 @@ class Server extends SimpleContainer implements IServerContainer {
function getMountManager() {
return $this->query('MountManager');
}
+
+ /*
+ * Get the MimeTypeDetector
+ *
+ * @return \OCP\Files\IMimeTypeDetector
+ */
+ public function getMimeTypeDetector() {
+ return $this->query('MimeTypeDetector');
+ }
}
diff --git a/lib/private/share/share.php b/lib/private/share/share.php
index c0285125234..40fcc59f219 100644
--- a/lib/private/share/share.php
+++ b/lib/private/share/share.php
@@ -782,6 +782,19 @@ class Share extends Constants {
\OCP\Util::writeLog('OCP\Share', sprintf($message, $itemSourceName), \OCP\Util::ERROR);
throw new \Exception($message_t);
} else if ($shareType === self::SHARE_TYPE_REMOTE) {
+
+ /*
+ * Check if file is not already shared with the remote user
+ */
+ if ($checkExists = self::getItems($itemType, $itemSource, self::SHARE_TYPE_REMOTE,
+ $shareWith, $uidOwner, self::FORMAT_NONE, null, 1, true, true)) {
+ $message = 'Sharing %s failed, because this item is already shared with %s';
+ $message_t = $l->t('Sharing %s failed, because this item is already shared with %s', array($itemSourceName, $shareWith));
+ \OCP\Util::writeLog('OCP\Share', sprintf($message, $itemSourceName, $shareWith), \OCP\Util::ERROR);
+ throw new \Exception($message_t);
+ }
+
+
$token = \OC::$server->getSecureRandom()->getMediumStrengthGenerator()->generate(self::TOKEN_LENGTH, \OCP\Security\ISecureRandom::CHAR_LOWER . \OCP\Security\ISecureRandom::CHAR_UPPER .
\OCP\Security\ISecureRandom::CHAR_DIGITS);
diff --git a/lib/public/files/imimetypedetector.php b/lib/public/files/imimetypedetector.php
new file mode 100644
index 00000000000..79ed8a4fac9
--- /dev/null
+++ b/lib/public/files/imimetypedetector.php
@@ -0,0 +1,78 @@
+<?php
+/**
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
+ *
+ * @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/>
+ *
+ */
+
+// use OCP namespace for all classes that are considered public.
+// This means that they should be used by apps instead of the internal ownCloud classes
+namespace OCP\Files;
+
+
+/**
+ * Interface IMimeTypeDetector
+ * @package OCP\Files
+ * @since 8.2.0
+ *
+ * Interface to handle mimetypes (detection and icon retrieval)
+ **/
+interface IMimeTypeDetector {
+
+ /**
+ * detect mimetype only based on filename, content of file is not used
+ * @param string $path
+ * @return string
+ * @since 8.2.0
+ **/
+ public function detectPath($path);
+
+ /**
+ * detect mimetype based on both filename and content
+ *
+ * @param string $path
+ * @return string
+ * @since 8.2.0
+ */
+ public function detect($path);
+
+ /**
+ * Get a secure mimetype that won't expose potential XSS.
+ *
+ * @param string $mimeType
+ * @return string
+ * @since 8.2.0
+ */
+ public function getSecureMimeType($mimeType);
+
+ /**
+ * detect mimetype based on the content of a string
+ *
+ * @param string $data
+ * @return string
+ * @since 8.2.0
+ */
+ public function detectString($data);
+
+ /**
+ * Get path to the icon of a file type
+ * @param string $mimeType the MIME type
+ * @return string the url
+ * @since 8.2.0
+ */
+ public function mimeTypeIcon($mimeType);
+}
diff --git a/lib/public/iservercontainer.php b/lib/public/iservercontainer.php
index 95ee853d84c..f3165db33da 100644
--- a/lib/public/iservercontainer.php
+++ b/lib/public/iservercontainer.php
@@ -9,6 +9,7 @@
* @author Lukas Reschke <lukas@owncloud.com>
* @author Morris Jobke <hey@morrisjobke.de>
* @author Robin Appelman <icewind@owncloud.com>
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
* @author Thomas Müller <thomas.mueller@tmit.eu>
* @author Thomas Tanghus <thomas@tanghus.net>
*
@@ -429,4 +430,12 @@ interface IServerContainer {
* @since 8.2.0
*/
public function getMountManager();
+
+ /**
+ * Get the MimeTypeDetector
+ *
+ * @return \OCP\Files\IMimeTypeDetector
+ * @since 8.2.0
+ */
+ public function getMimeTypeDetector();
}
diff --git a/settings/application.php b/settings/application.php
index a2f25935e12..8da835c18d2 100644
--- a/settings/application.php
+++ b/settings/application.php
@@ -154,7 +154,8 @@ class Application extends App {
$c->query('Config'),
$c->query('ClientService'),
$c->query('URLGenerator'),
- $c->query('Util')
+ $c->query('Util'),
+ $c->query('L10N')
);
});
diff --git a/settings/controller/checksetupcontroller.php b/settings/controller/checksetupcontroller.php
index 0b4c72acab7..f849e3ed565 100644
--- a/settings/controller/checksetupcontroller.php
+++ b/settings/controller/checksetupcontroller.php
@@ -23,10 +23,12 @@
namespace OC\Settings\Controller;
+use GuzzleHttp\Exception\ClientException;
use OCP\AppFramework\Controller;
use OCP\AppFramework\Http\DataResponse;
use OCP\Http\Client\IClientService;
use OCP\IConfig;
+use OCP\IL10N;
use OCP\IRequest;
use OC_Util;
use OCP\IURLGenerator;
@@ -43,6 +45,8 @@ class CheckSetupController extends Controller {
private $util;
/** @var IURLGenerator */
private $urlGenerator;
+ /** @var IL10N */
+ private $l10n;
/**
* @param string $AppName
@@ -51,18 +55,21 @@ class CheckSetupController extends Controller {
* @param IClientService $clientService
* @param IURLGenerator $urlGenerator
* @param \OC_Util $util
+ * @param IL10N $l10n
*/
public function __construct($AppName,
IRequest $request,
IConfig $config,
IClientService $clientService,
IURLGenerator $urlGenerator,
- \OC_Util $util) {
+ \OC_Util $util,
+ IL10N $l10n) {
parent::__construct($AppName, $request);
$this->config = $config;
$this->clientService = $clientService;
$this->util = $util;
$this->urlGenerator = $urlGenerator;
+ $this->l10n = $l10n;
}
/**
@@ -110,6 +117,66 @@ class CheckSetupController extends Controller {
}
/**
+ * Public for the sake of unit-testing
+ *
+ * @return array
+ */
+ public function getCurlVersion() {
+ return curl_version();
+ }
+
+ /**
+ * Check if the used SSL lib is outdated. Older OpenSSL and NSS versions do
+ * have multiple bugs which likely lead to problems in combination with
+ * functionalities required by ownCloud such as SNI.
+ *
+ * @link https://github.com/owncloud/core/issues/17446#issuecomment-122877546
+ * @link https://bugzilla.redhat.com/show_bug.cgi?id=1241172
+ * @return string
+ */
+ private function isUsedTlsLibOutdated() {
+ $versionString = $this->getCurlVersion();
+ if(isset($versionString['ssl_version'])) {
+ $versionString = $versionString['ssl_version'];
+ } else {
+ return '';
+ }
+
+ $features = (string)$this->l10n->t('installing and updating apps via the app store or Federated Cloud Sharing');
+ if(OC_Util::getEditionString() !== '') {
+ $features = (string)$this->l10n->t('Federated Cloud Sharing');
+ }
+
+ // Check if at least OpenSSL after 1.01d or 1.0.2b
+ if(strpos($versionString, 'OpenSSL/') === 0) {
+ $majorVersion = substr($versionString, 8, 5);
+ $patchRelease = substr($versionString, 13, 6);
+
+ if(($majorVersion === '1.0.1' && ord($patchRelease) < ord('d')) ||
+ ($majorVersion === '1.0.2' && ord($patchRelease) < ord('b'))) {
+ return (string) $this->l10n->t('cURL is using an outdated %s version (%s). Please update your operating system or features such as %s will not work reliably.', ['OpenSSL', $versionString, $features]);
+ }
+ }
+
+ // Check if NSS and perform heuristic check
+ if(strpos($versionString, 'NSS/') === 0) {
+ try {
+ $firstClient = $this->clientService->newClient();
+ $firstClient->get('https://www.owncloud.org/');
+
+ $secondClient = $this->clientService->newClient();
+ $secondClient->get('https://owncloud.org/');
+ } catch (ClientException $e) {
+ if($e->getResponse()->getStatusCode() === 400) {
+ return (string) $this->l10n->t('cURL is using an outdated %s version (%s). Please update your operating system or features such as %s will not work reliably.', ['NSS', $versionString, $features]);
+ }
+ }
+ }
+
+ return '';
+ }
+
+ /**
* @return DataResponse
*/
public function check() {
@@ -121,6 +188,7 @@ class CheckSetupController extends Controller {
'memcacheDocs' => $this->urlGenerator->linkToDocs('admin-performance'),
'isUrandomAvailable' => $this->isUrandomAvailable(),
'securityDocs' => $this->urlGenerator->linkToDocs('admin-security'),
+ 'isUsedTlsLibOutdated' => $this->isUsedTlsLibOutdated(),
]
);
}
diff --git a/settings/controller/encryptioncontroller.php b/settings/controller/encryptioncontroller.php
index 7c952962c1a..7aaf184482f 100644
--- a/settings/controller/encryptioncontroller.php
+++ b/settings/controller/encryptioncontroller.php
@@ -78,6 +78,21 @@ class EncryptionController extends Controller {
$this->connection = $connection;
$this->view = $view;
$this->userManager = $userManager;
+ $this->logger = $logger;
+ }
+
+ /**
+ * @param IConfig $config
+ * @param View $view
+ * @param Connection $connection
+ * @param ILogger $logger
+ * @return Migration
+ */
+ protected function getMigration(IConfig $config,
+ View $view,
+ Connection $connection,
+ ILogger $logger) {
+ return new Migration($config, $view, $connection, $logger);
}
/**
@@ -91,12 +106,11 @@ class EncryptionController extends Controller {
try {
- $migration = new Migration($this->config, $this->view, $this->connection, $this->logger);
+ $migration = $this->getMigration($this->config, $this->view, $this->connection, $this->logger);
$migration->reorganizeSystemFolderStructure();
$migration->updateDB();
foreach ($this->userManager->getBackends() as $backend) {
-
$limit = 500;
$offset = 0;
do {
@@ -111,21 +125,20 @@ class EncryptionController extends Controller {
$migration->finalCleanUp();
} catch (\Exception $e) {
- return array(
- 'data' => array(
+ return [
+ 'data' => [
'message' => (string)$this->l10n->t('A problem occurred, please check your log files (Error: %s)', [$e->getMessage()]),
- ),
+ ],
'status' => 'error',
- );
+ ];
}
- return array('data' =>
- array('message' =>
- (string) $this->l10n->t('Migration Completed')
- ),
- 'status' => 'success'
- );
-
+ return [
+ 'data' => [
+ 'message' => (string) $this->l10n->t('Migration Completed'),
+ ],
+ 'status' => 'success',
+ ];
}
}
diff --git a/settings/l10n/az.js b/settings/l10n/az.js
index 0880b291444..23805b8c88b 100644
--- a/settings/l10n/az.js
+++ b/settings/l10n/az.js
@@ -25,6 +25,7 @@ OC.L10N.register(
"Unable to change password" : "Şifrəni dəyişmək olmur",
"Enabled" : "İşə salınıb",
"Not enabled" : "İşə salınıb",
+ "Federated Cloud Sharing" : "Federal Cloud Paylaşım",
"Group already exists." : "Qrup artılq mövcduddur.",
"Unable to add group." : "Qrupu əlavə etmək mümkün deyil. ",
"Unable to delete group." : "Qrupu silmək mümkün deyil.",
diff --git a/settings/l10n/az.json b/settings/l10n/az.json
index c1b7f69b2d4..84ad2602e15 100644
--- a/settings/l10n/az.json
+++ b/settings/l10n/az.json
@@ -23,6 +23,7 @@
"Unable to change password" : "Şifrəni dəyişmək olmur",
"Enabled" : "İşə salınıb",
"Not enabled" : "İşə salınıb",
+ "Federated Cloud Sharing" : "Federal Cloud Paylaşım",
"Group already exists." : "Qrup artılq mövcduddur.",
"Unable to add group." : "Qrupu əlavə etmək mümkün deyil. ",
"Unable to delete group." : "Qrupu silmək mümkün deyil.",
diff --git a/settings/l10n/cs_CZ.js b/settings/l10n/cs_CZ.js
index 68d6c315524..87ca48a0e9e 100644
--- a/settings/l10n/cs_CZ.js
+++ b/settings/l10n/cs_CZ.js
@@ -31,6 +31,7 @@ OC.L10N.register(
"Unable to change password" : "Změna hesla se nezdařila",
"Enabled" : "Povoleno",
"Not enabled" : "Vypnuto",
+ "Federated Cloud Sharing" : "Propojené cloudové sdílení",
"A problem occurred, please check your log files (Error: %s)" : "Došlo k chybě, zkontrolujte prosím log (Chyba: %s)",
"Migration Completed" : "Migrace dokončena",
"Group already exists." : "Skupina již existuje.",
diff --git a/settings/l10n/cs_CZ.json b/settings/l10n/cs_CZ.json
index b6fab6f0d50..523be1eaba6 100644
--- a/settings/l10n/cs_CZ.json
+++ b/settings/l10n/cs_CZ.json
@@ -29,6 +29,7 @@
"Unable to change password" : "Změna hesla se nezdařila",
"Enabled" : "Povoleno",
"Not enabled" : "Vypnuto",
+ "Federated Cloud Sharing" : "Propojené cloudové sdílení",
"A problem occurred, please check your log files (Error: %s)" : "Došlo k chybě, zkontrolujte prosím log (Chyba: %s)",
"Migration Completed" : "Migrace dokončena",
"Group already exists." : "Skupina již existuje.",
diff --git a/settings/l10n/da.js b/settings/l10n/da.js
index 536b9ca9981..27d146c46d6 100644
--- a/settings/l10n/da.js
+++ b/settings/l10n/da.js
@@ -31,6 +31,7 @@ OC.L10N.register(
"Unable to change password" : "Kunne ikke ændre kodeord",
"Enabled" : "Aktiveret",
"Not enabled" : "Slået fra",
+ "Federated Cloud Sharing" : "Sammensluttet Cloud deling",
"A problem occurred, please check your log files (Error: %s)" : "Der opstod en fejl - tjek venligst dine logfiler (fejl: %s)",
"Migration Completed" : "Overflytning blev fuldført",
"Group already exists." : "Gruppen findes allerede.",
diff --git a/settings/l10n/da.json b/settings/l10n/da.json
index 61a15581774..9b343d50b28 100644
--- a/settings/l10n/da.json
+++ b/settings/l10n/da.json
@@ -29,6 +29,7 @@
"Unable to change password" : "Kunne ikke ændre kodeord",
"Enabled" : "Aktiveret",
"Not enabled" : "Slået fra",
+ "Federated Cloud Sharing" : "Sammensluttet Cloud deling",
"A problem occurred, please check your log files (Error: %s)" : "Der opstod en fejl - tjek venligst dine logfiler (fejl: %s)",
"Migration Completed" : "Overflytning blev fuldført",
"Group already exists." : "Gruppen findes allerede.",
diff --git a/settings/l10n/de.js b/settings/l10n/de.js
index 46c37cf70cd..4d3d3e09b74 100644
--- a/settings/l10n/de.js
+++ b/settings/l10n/de.js
@@ -31,6 +31,7 @@ OC.L10N.register(
"Unable to change password" : "Passwort konnte nicht geändert werden",
"Enabled" : "Aktiviert",
"Not enabled" : "Nicht aktiviert",
+ "Federated Cloud Sharing" : "Federated-Cloud-Sharing",
"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.",
diff --git a/settings/l10n/de.json b/settings/l10n/de.json
index 11fc2c49c83..e1bfd5ae679 100644
--- a/settings/l10n/de.json
+++ b/settings/l10n/de.json
@@ -29,6 +29,7 @@
"Unable to change password" : "Passwort konnte nicht geändert werden",
"Enabled" : "Aktiviert",
"Not enabled" : "Nicht aktiviert",
+ "Federated Cloud Sharing" : "Federated-Cloud-Sharing",
"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.",
diff --git a/settings/l10n/de_DE.js b/settings/l10n/de_DE.js
index 2f4bc02c4f3..aa2d887a914 100644
--- a/settings/l10n/de_DE.js
+++ b/settings/l10n/de_DE.js
@@ -31,6 +31,7 @@ OC.L10N.register(
"Unable to change password" : "Passwort konnte nicht geändert werden",
"Enabled" : "Aktiviert",
"Not enabled" : "Nicht aktiviert",
+ "Federated Cloud Sharing" : "Federated-Cloud-Sharing",
"A problem occurred, please check your log files (Error: %s)" : "Es ist ein Problem aufgetreten, bitte überprüfen Sie Ihre Logdateien (Fehler: %s)",
"Migration Completed" : "Migration abgeschlossen",
"Group already exists." : "Gruppe existiert bereits.",
diff --git a/settings/l10n/de_DE.json b/settings/l10n/de_DE.json
index 1790af8a9cb..e064a689a4a 100644
--- a/settings/l10n/de_DE.json
+++ b/settings/l10n/de_DE.json
@@ -29,6 +29,7 @@
"Unable to change password" : "Passwort konnte nicht geändert werden",
"Enabled" : "Aktiviert",
"Not enabled" : "Nicht aktiviert",
+ "Federated Cloud Sharing" : "Federated-Cloud-Sharing",
"A problem occurred, please check your log files (Error: %s)" : "Es ist ein Problem aufgetreten, bitte überprüfen Sie Ihre Logdateien (Fehler: %s)",
"Migration Completed" : "Migration abgeschlossen",
"Group already exists." : "Gruppe existiert bereits.",
diff --git a/settings/l10n/el.js b/settings/l10n/el.js
index b62562297f0..cb425992190 100644
--- a/settings/l10n/el.js
+++ b/settings/l10n/el.js
@@ -31,6 +31,7 @@ OC.L10N.register(
"Unable to change password" : "Αδυναμία αλλαγής συνθηματικού",
"Enabled" : "Ενεργοποιημένο",
"Not enabled" : "Μη ενεργοποιημένο",
+ "Federated Cloud Sharing" : "Διαμοιρασμός σε ομόσπονδα σύννεφα ",
"A problem occurred, please check your log files (Error: %s)" : "Παρουσιάστηκε πρόβλημα, παρακαλώ ελέγξτε τα αρχεία καταγραφής σας (Σφάλμα: %s)",
"Migration Completed" : "Η μετάβαση ολοκληρώθηκε",
"Group already exists." : "Η ομάδα υπάρχει ήδη.",
diff --git a/settings/l10n/el.json b/settings/l10n/el.json
index 1052d3606c5..962d6f3f60b 100644
--- a/settings/l10n/el.json
+++ b/settings/l10n/el.json
@@ -29,6 +29,7 @@
"Unable to change password" : "Αδυναμία αλλαγής συνθηματικού",
"Enabled" : "Ενεργοποιημένο",
"Not enabled" : "Μη ενεργοποιημένο",
+ "Federated Cloud Sharing" : "Διαμοιρασμός σε ομόσπονδα σύννεφα ",
"A problem occurred, please check your log files (Error: %s)" : "Παρουσιάστηκε πρόβλημα, παρακαλώ ελέγξτε τα αρχεία καταγραφής σας (Σφάλμα: %s)",
"Migration Completed" : "Η μετάβαση ολοκληρώθηκε",
"Group already exists." : "Η ομάδα υπάρχει ήδη.",
diff --git a/settings/l10n/en_GB.js b/settings/l10n/en_GB.js
index 0d13ce67970..da437fa2a25 100644
--- a/settings/l10n/en_GB.js
+++ b/settings/l10n/en_GB.js
@@ -29,6 +29,7 @@ OC.L10N.register(
"Unable to change password" : "Unable to change password",
"Enabled" : "Enabled",
"Not enabled" : "Not enabled",
+ "Federated Cloud Sharing" : "Federated Cloud Sharing",
"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.",
diff --git a/settings/l10n/en_GB.json b/settings/l10n/en_GB.json
index 9070f665b2d..6983ecaac1c 100644
--- a/settings/l10n/en_GB.json
+++ b/settings/l10n/en_GB.json
@@ -27,6 +27,7 @@
"Unable to change password" : "Unable to change password",
"Enabled" : "Enabled",
"Not enabled" : "Not enabled",
+ "Federated Cloud Sharing" : "Federated Cloud Sharing",
"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.",
diff --git a/settings/l10n/es.js b/settings/l10n/es.js
index 2b317d5f0d3..f6ad23bfe92 100644
--- a/settings/l10n/es.js
+++ b/settings/l10n/es.js
@@ -31,6 +31,7 @@ OC.L10N.register(
"Unable to change password" : "No se ha podido cambiar la contraseña",
"Enabled" : "Habilitado",
"Not enabled" : "No habilitado",
+ "Federated Cloud Sharing" : "Compartido en Cloud Federado",
"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.",
diff --git a/settings/l10n/es.json b/settings/l10n/es.json
index 07df8452971..79139bc4cbd 100644
--- a/settings/l10n/es.json
+++ b/settings/l10n/es.json
@@ -29,6 +29,7 @@
"Unable to change password" : "No se ha podido cambiar la contraseña",
"Enabled" : "Habilitado",
"Not enabled" : "No habilitado",
+ "Federated Cloud Sharing" : "Compartido en Cloud Federado",
"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.",
diff --git a/settings/l10n/eu.js b/settings/l10n/eu.js
index 3640ae249ee..94ea7e6312a 100644
--- a/settings/l10n/eu.js
+++ b/settings/l10n/eu.js
@@ -23,6 +23,7 @@ OC.L10N.register(
"Unable to change password" : "Ezin izan da pasahitza aldatu",
"Enabled" : "Gaitua",
"Not enabled" : "Gaitu gabe",
+ "Federated Cloud Sharing" : "Federatutako Hodei Partekatzea",
"Group already exists." : "Taldea dagoeneko existitzen da",
"Unable to add group." : "Ezin izan da taldea gehitu.",
"Unable to delete group." : "Ezin izan da taldea ezabatu.",
diff --git a/settings/l10n/eu.json b/settings/l10n/eu.json
index 6a7b1399a6c..ce14381a46c 100644
--- a/settings/l10n/eu.json
+++ b/settings/l10n/eu.json
@@ -21,6 +21,7 @@
"Unable to change password" : "Ezin izan da pasahitza aldatu",
"Enabled" : "Gaitua",
"Not enabled" : "Gaitu gabe",
+ "Federated Cloud Sharing" : "Federatutako Hodei Partekatzea",
"Group already exists." : "Taldea dagoeneko existitzen da",
"Unable to add group." : "Ezin izan da taldea gehitu.",
"Unable to delete group." : "Ezin izan da taldea ezabatu.",
diff --git a/settings/l10n/fi_FI.js b/settings/l10n/fi_FI.js
index b5e561c2798..c5399c6149f 100644
--- a/settings/l10n/fi_FI.js
+++ b/settings/l10n/fi_FI.js
@@ -31,6 +31,7 @@ OC.L10N.register(
"Unable to change password" : "Salasanan vaihto ei onnistunut",
"Enabled" : "Käytössä",
"Not enabled" : "Ei käytössä",
+ "Federated Cloud Sharing" : "Federoitu pilvijakaminen",
"A problem occurred, please check your log files (Error: %s)" : "Tapahtui virhe, tarkista lokitiedostot (Virhe: %s)",
"Migration Completed" : "Migraatio valmistui",
"Group already exists." : "Ryhmä on jo olemassa.",
diff --git a/settings/l10n/fi_FI.json b/settings/l10n/fi_FI.json
index f7227702bbd..cd20309e2b7 100644
--- a/settings/l10n/fi_FI.json
+++ b/settings/l10n/fi_FI.json
@@ -29,6 +29,7 @@
"Unable to change password" : "Salasanan vaihto ei onnistunut",
"Enabled" : "Käytössä",
"Not enabled" : "Ei käytössä",
+ "Federated Cloud Sharing" : "Federoitu pilvijakaminen",
"A problem occurred, please check your log files (Error: %s)" : "Tapahtui virhe, tarkista lokitiedostot (Virhe: %s)",
"Migration Completed" : "Migraatio valmistui",
"Group already exists." : "Ryhmä on jo olemassa.",
diff --git a/settings/l10n/fr.js b/settings/l10n/fr.js
index 55b14d9f41b..2cbde857389 100644
--- a/settings/l10n/fr.js
+++ b/settings/l10n/fr.js
@@ -31,6 +31,7 @@ OC.L10N.register(
"Unable to change password" : "Impossible de modifier le mot de passe",
"Enabled" : "Activées",
"Not enabled" : "Désactivées",
+ "Federated Cloud Sharing" : "Federated Cloud Sharing",
"A problem occurred, please check your log files (Error: %s)" : "Une erreur est survenue, veuillez vérifier vos fichiers de log (Erreur: %s)",
"Migration Completed" : "Migration terminée",
"Group already exists." : "Ce groupe existe déjà.",
diff --git a/settings/l10n/fr.json b/settings/l10n/fr.json
index b8d871dbaeb..85a45b36867 100644
--- a/settings/l10n/fr.json
+++ b/settings/l10n/fr.json
@@ -29,6 +29,7 @@
"Unable to change password" : "Impossible de modifier le mot de passe",
"Enabled" : "Activées",
"Not enabled" : "Désactivées",
+ "Federated Cloud Sharing" : "Federated Cloud Sharing",
"A problem occurred, please check your log files (Error: %s)" : "Une erreur est survenue, veuillez vérifier vos fichiers de log (Erreur: %s)",
"Migration Completed" : "Migration terminée",
"Group already exists." : "Ce groupe existe déjà.",
diff --git a/settings/l10n/gl.js b/settings/l10n/gl.js
index 7e2c0228af1..947436001a8 100644
--- a/settings/l10n/gl.js
+++ b/settings/l10n/gl.js
@@ -31,6 +31,7 @@ OC.L10N.register(
"Unable to change password" : "Non é posíbel cambiar o contrasinal",
"Enabled" : "Activado",
"Not enabled" : "Non activado",
+ "Federated Cloud Sharing" : "Compartición de nube federada",
"A problem occurred, please check your log files (Error: %s)" : "Ocorreu un problema revise os ficheiros de rexistro (Erro: %s)",
"Migration Completed" : "Completouse a migración",
"Group already exists." : "Xa existe o grupo.",
diff --git a/settings/l10n/gl.json b/settings/l10n/gl.json
index 53a7e57a28c..dbe24dc7df8 100644
--- a/settings/l10n/gl.json
+++ b/settings/l10n/gl.json
@@ -29,6 +29,7 @@
"Unable to change password" : "Non é posíbel cambiar o contrasinal",
"Enabled" : "Activado",
"Not enabled" : "Non activado",
+ "Federated Cloud Sharing" : "Compartición de nube federada",
"A problem occurred, please check your log files (Error: %s)" : "Ocorreu un problema revise os ficheiros de rexistro (Erro: %s)",
"Migration Completed" : "Completouse a migración",
"Group already exists." : "Xa existe o grupo.",
diff --git a/settings/l10n/hu_HU.js b/settings/l10n/hu_HU.js
index d31a1895a61..23ffd4adf4c 100644
--- a/settings/l10n/hu_HU.js
+++ b/settings/l10n/hu_HU.js
@@ -22,6 +22,7 @@ OC.L10N.register(
"Wrong admin recovery password. Please check the password and try again." : "Hibás admin helyreállítási jelszó. Ellenőrizze a jelszót és próbálja újra!",
"Unable to change password" : "Nem sikerült megváltoztatni a jelszót",
"Enabled" : "Bekapcsolva",
+ "Federated Cloud Sharing" : "Megosztás Egyesített Felhőben",
"Saved" : "Elmentve",
"test email settings" : "e-mail beállítások ellenőrzése",
"Email sent" : "Az e-mailt elküldtük",
diff --git a/settings/l10n/hu_HU.json b/settings/l10n/hu_HU.json
index 610a5771030..fdb1c9d3ee1 100644
--- a/settings/l10n/hu_HU.json
+++ b/settings/l10n/hu_HU.json
@@ -20,6 +20,7 @@
"Wrong admin recovery password. Please check the password and try again." : "Hibás admin helyreállítási jelszó. Ellenőrizze a jelszót és próbálja újra!",
"Unable to change password" : "Nem sikerült megváltoztatni a jelszót",
"Enabled" : "Bekapcsolva",
+ "Federated Cloud Sharing" : "Megosztás Egyesített Felhőben",
"Saved" : "Elmentve",
"test email settings" : "e-mail beállítások ellenőrzése",
"Email sent" : "Az e-mailt elküldtük",
diff --git a/settings/l10n/id.js b/settings/l10n/id.js
index 116152e0eb8..20e07bfb90f 100644
--- a/settings/l10n/id.js
+++ b/settings/l10n/id.js
@@ -31,6 +31,7 @@ OC.L10N.register(
"Unable to change password" : "Tidak dapat mengubah sandi",
"Enabled" : "Diaktifkan",
"Not enabled" : "Tidak diaktifkan",
+ "Federated Cloud Sharing" : "Federated Cloud Sharing",
"A problem occurred, please check your log files (Error: %s)" : "Terjadi masalah, mohon periksa berkas log Anda (Kesalahan: %s)",
"Migration Completed" : "Migrasi Selesai",
"Group already exists." : "Grup sudah ada.",
diff --git a/settings/l10n/id.json b/settings/l10n/id.json
index d989fa24fa8..c150230b468 100644
--- a/settings/l10n/id.json
+++ b/settings/l10n/id.json
@@ -29,6 +29,7 @@
"Unable to change password" : "Tidak dapat mengubah sandi",
"Enabled" : "Diaktifkan",
"Not enabled" : "Tidak diaktifkan",
+ "Federated Cloud Sharing" : "Federated Cloud Sharing",
"A problem occurred, please check your log files (Error: %s)" : "Terjadi masalah, mohon periksa berkas log Anda (Kesalahan: %s)",
"Migration Completed" : "Migrasi Selesai",
"Group already exists." : "Grup sudah ada.",
diff --git a/settings/l10n/it.js b/settings/l10n/it.js
index a5f493257b3..3258ab1a9a2 100644
--- a/settings/l10n/it.js
+++ b/settings/l10n/it.js
@@ -31,6 +31,7 @@ OC.L10N.register(
"Unable to change password" : "Impossibile cambiare la password",
"Enabled" : "Abilitata",
"Not enabled" : "Non abilitata",
+ "Federated Cloud Sharing" : "Condivisione cloud federata",
"A problem occurred, please check your log files (Error: %s)" : "Si è verificato un problema, controlla i tuoi file di log (Errore: %s)",
"Migration Completed" : "Migrazione completata",
"Group already exists." : "Il gruppo esiste già.",
diff --git a/settings/l10n/it.json b/settings/l10n/it.json
index aca18e60db8..ae2c56ba7eb 100644
--- a/settings/l10n/it.json
+++ b/settings/l10n/it.json
@@ -29,6 +29,7 @@
"Unable to change password" : "Impossibile cambiare la password",
"Enabled" : "Abilitata",
"Not enabled" : "Non abilitata",
+ "Federated Cloud Sharing" : "Condivisione cloud federata",
"A problem occurred, please check your log files (Error: %s)" : "Si è verificato un problema, controlla i tuoi file di log (Errore: %s)",
"Migration Completed" : "Migrazione completata",
"Group already exists." : "Il gruppo esiste già.",
diff --git a/settings/l10n/ja.js b/settings/l10n/ja.js
index 988b0fea9f6..6d36075e713 100644
--- a/settings/l10n/ja.js
+++ b/settings/l10n/ja.js
@@ -31,6 +31,7 @@ OC.L10N.register(
"Unable to change password" : "パスワードを変更できません",
"Enabled" : "有効",
"Not enabled" : "無効",
+ "Federated Cloud Sharing" : "統合されたクラウド共有",
"A problem occurred, please check your log files (Error: %s)" : "問題が発生しました。ログファイルを確認してください。(Error: %s)",
"Migration Completed" : "移行が完了しました",
"Group already exists." : "グループはすでに存在しています",
diff --git a/settings/l10n/ja.json b/settings/l10n/ja.json
index 91faef72de4..771c4787b98 100644
--- a/settings/l10n/ja.json
+++ b/settings/l10n/ja.json
@@ -29,6 +29,7 @@
"Unable to change password" : "パスワードを変更できません",
"Enabled" : "有効",
"Not enabled" : "無効",
+ "Federated Cloud Sharing" : "統合されたクラウド共有",
"A problem occurred, please check your log files (Error: %s)" : "問題が発生しました。ログファイルを確認してください。(Error: %s)",
"Migration Completed" : "移行が完了しました",
"Group already exists." : "グループはすでに存在しています",
diff --git a/settings/l10n/ko.js b/settings/l10n/ko.js
index e697f0044d7..dd7a09bff39 100644
--- a/settings/l10n/ko.js
+++ b/settings/l10n/ko.js
@@ -31,6 +31,7 @@ OC.L10N.register(
"Unable to change password" : "암호를 변경할 수 없음",
"Enabled" : "활성",
"Not enabled" : "비활성",
+ "Federated Cloud Sharing" : "클라우드 연합 공유",
"A problem occurred, please check your log files (Error: %s)" : "문제가 발생하였습니다. 로그 파일을 참조하십시오(오류: %s)",
"Migration Completed" : "이전 완료됨",
"Group already exists." : "그룹이 이미 존재합니다.",
diff --git a/settings/l10n/ko.json b/settings/l10n/ko.json
index efaf2588638..955396bff17 100644
--- a/settings/l10n/ko.json
+++ b/settings/l10n/ko.json
@@ -29,6 +29,7 @@
"Unable to change password" : "암호를 변경할 수 없음",
"Enabled" : "활성",
"Not enabled" : "비활성",
+ "Federated Cloud Sharing" : "클라우드 연합 공유",
"A problem occurred, please check your log files (Error: %s)" : "문제가 발생하였습니다. 로그 파일을 참조하십시오(오류: %s)",
"Migration Completed" : "이전 완료됨",
"Group already exists." : "그룹이 이미 존재합니다.",
diff --git a/settings/l10n/lt_LT.js b/settings/l10n/lt_LT.js
index 72eb0fa5e3b..08676dd9156 100644
--- a/settings/l10n/lt_LT.js
+++ b/settings/l10n/lt_LT.js
@@ -47,6 +47,7 @@ OC.L10N.register(
"The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "Trūksta PHP modulio „fileinfo“. Labai rekomenduojame įjungti šį modulį, kad gauti geriausius rezultatus nustatant mime-tipą.",
"Allow apps to use the Share API" : "Leidžia programoms naudoti Share API",
"Allow public uploads" : "Leisti viešus įkėlimus",
+ "days" : "dienos",
"Allow resharing" : "Leisti dalintis",
"Execute one task with each page loaded" : "Įvykdyti vieną užduotį su kiekvieno puslapio įkėlimu",
"cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "cron.php yra registruotas tinklapio suplanuotų užduočių paslaugose, kad iškviesti cron.php kas 15 minučių per http.",
diff --git a/settings/l10n/lt_LT.json b/settings/l10n/lt_LT.json
index dd5c1ebe8b9..bff0df74f08 100644
--- a/settings/l10n/lt_LT.json
+++ b/settings/l10n/lt_LT.json
@@ -45,6 +45,7 @@
"The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "Trūksta PHP modulio „fileinfo“. Labai rekomenduojame įjungti šį modulį, kad gauti geriausius rezultatus nustatant mime-tipą.",
"Allow apps to use the Share API" : "Leidžia programoms naudoti Share API",
"Allow public uploads" : "Leisti viešus įkėlimus",
+ "days" : "dienos",
"Allow resharing" : "Leisti dalintis",
"Execute one task with each page loaded" : "Įvykdyti vieną užduotį su kiekvieno puslapio įkėlimu",
"cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "cron.php yra registruotas tinklapio suplanuotų užduočių paslaugose, kad iškviesti cron.php kas 15 minučių per http.",
diff --git a/settings/l10n/lv.js b/settings/l10n/lv.js
index dfda986fb44..52a554b9e22 100644
--- a/settings/l10n/lv.js
+++ b/settings/l10n/lv.js
@@ -22,6 +22,7 @@ OC.L10N.register(
"Unable to change password" : "Nav iespējams nomainīt paroli",
"Enabled" : "Pievienots",
"Not enabled" : "Nav pievienots",
+ "Federated Cloud Sharing" : "Federatīva mākoņkoplietošana",
"Group already exists." : "Grupa jau eksistē.",
"Unable to add group." : "Nevar pievienot grupu.",
"Unable to delete group." : "Nevar izdzēst grupu.",
diff --git a/settings/l10n/lv.json b/settings/l10n/lv.json
index 01325e10e17..f92b1196f80 100644
--- a/settings/l10n/lv.json
+++ b/settings/l10n/lv.json
@@ -20,6 +20,7 @@
"Unable to change password" : "Nav iespējams nomainīt paroli",
"Enabled" : "Pievienots",
"Not enabled" : "Nav pievienots",
+ "Federated Cloud Sharing" : "Federatīva mākoņkoplietošana",
"Group already exists." : "Grupa jau eksistē.",
"Unable to add group." : "Nevar pievienot grupu.",
"Unable to delete group." : "Nevar izdzēst grupu.",
diff --git a/settings/l10n/nb_NO.js b/settings/l10n/nb_NO.js
index bbe8b137881..805f1f0c328 100644
--- a/settings/l10n/nb_NO.js
+++ b/settings/l10n/nb_NO.js
@@ -31,6 +31,7 @@ OC.L10N.register(
"Unable to change password" : "Kunne ikke endre passord",
"Enabled" : "Aktiv",
"Not enabled" : "Ikke aktivert",
+ "Federated Cloud Sharing" : "Sammenknyttet sky-deling",
"A problem occurred, please check your log files (Error: %s)" : "Det oppstod et problem. Sjekk loggfilene (Feil: %s)",
"Migration Completed" : "Migrering ferdig",
"Group already exists." : "Gruppe finnes allerede.",
diff --git a/settings/l10n/nb_NO.json b/settings/l10n/nb_NO.json
index c1ad9f48886..3e92a23ec75 100644
--- a/settings/l10n/nb_NO.json
+++ b/settings/l10n/nb_NO.json
@@ -29,6 +29,7 @@
"Unable to change password" : "Kunne ikke endre passord",
"Enabled" : "Aktiv",
"Not enabled" : "Ikke aktivert",
+ "Federated Cloud Sharing" : "Sammenknyttet sky-deling",
"A problem occurred, please check your log files (Error: %s)" : "Det oppstod et problem. Sjekk loggfilene (Feil: %s)",
"Migration Completed" : "Migrering ferdig",
"Group already exists." : "Gruppe finnes allerede.",
diff --git a/settings/l10n/nl.js b/settings/l10n/nl.js
index c34c978b9fb..2898cf5d5a6 100644
--- a/settings/l10n/nl.js
+++ b/settings/l10n/nl.js
@@ -31,6 +31,7 @@ OC.L10N.register(
"Unable to change password" : "Kan wachtwoord niet wijzigen",
"Enabled" : "Geactiveerd",
"Not enabled" : "Niet ingeschakeld",
+ "Federated Cloud Sharing" : "Federated Cloud Sharing",
"A problem occurred, please check your log files (Error: %s)" : "Er trad een een probleem op, controleer uw logbestanden (Fout: %s).",
"Migration Completed" : "Migratie gereed",
"Group already exists." : "Groep bestaat al.",
diff --git a/settings/l10n/nl.json b/settings/l10n/nl.json
index b2668ca461e..5f4b4dc208b 100644
--- a/settings/l10n/nl.json
+++ b/settings/l10n/nl.json
@@ -29,6 +29,7 @@
"Unable to change password" : "Kan wachtwoord niet wijzigen",
"Enabled" : "Geactiveerd",
"Not enabled" : "Niet ingeschakeld",
+ "Federated Cloud Sharing" : "Federated Cloud Sharing",
"A problem occurred, please check your log files (Error: %s)" : "Er trad een een probleem op, controleer uw logbestanden (Fout: %s).",
"Migration Completed" : "Migratie gereed",
"Group already exists." : "Groep bestaat al.",
diff --git a/settings/l10n/pt_BR.js b/settings/l10n/pt_BR.js
index 332cefa3e1e..2d76cb44f6c 100644
--- a/settings/l10n/pt_BR.js
+++ b/settings/l10n/pt_BR.js
@@ -31,6 +31,7 @@ OC.L10N.register(
"Unable to change password" : "Impossível modificar senha",
"Enabled" : "Habilitado",
"Not enabled" : "Desabilitado",
+ "Federated Cloud Sharing" : "Compartilhamento de Nuvem Conglomerada",
"A problem occurred, please check your log files (Error: %s)" : "Ocorreu um problema enquanto verificava seus arquivos de log (Erro: %s)",
"Migration Completed" : "Migração Concluida",
"Group already exists." : "O Grupo já existe.",
diff --git a/settings/l10n/pt_BR.json b/settings/l10n/pt_BR.json
index e61fdfa7a90..f9df769ac35 100644
--- a/settings/l10n/pt_BR.json
+++ b/settings/l10n/pt_BR.json
@@ -29,6 +29,7 @@
"Unable to change password" : "Impossível modificar senha",
"Enabled" : "Habilitado",
"Not enabled" : "Desabilitado",
+ "Federated Cloud Sharing" : "Compartilhamento de Nuvem Conglomerada",
"A problem occurred, please check your log files (Error: %s)" : "Ocorreu um problema enquanto verificava seus arquivos de log (Erro: %s)",
"Migration Completed" : "Migração Concluida",
"Group already exists." : "O Grupo já existe.",
diff --git a/settings/l10n/pt_PT.js b/settings/l10n/pt_PT.js
index 66a9314608b..d2ab73ce4ed 100644
--- a/settings/l10n/pt_PT.js
+++ b/settings/l10n/pt_PT.js
@@ -26,6 +26,7 @@ OC.L10N.register(
"Unable to change password" : "Não foi possível alterar a sua palavra-passe ",
"Enabled" : "Ativada",
"Not enabled" : "Desativada",
+ "Federated Cloud Sharing" : "Partilha de Cloud Federada",
"A problem occurred, please check your log files (Error: %s)" : "Ocorreu um problema, por favor, verifique os ficheiros de registo (Erro: %s)",
"Migration Completed" : "Migração Concluída",
"Group already exists." : "O grupo já existe.",
diff --git a/settings/l10n/pt_PT.json b/settings/l10n/pt_PT.json
index 70d2eeadb9f..1ab8808031e 100644
--- a/settings/l10n/pt_PT.json
+++ b/settings/l10n/pt_PT.json
@@ -24,6 +24,7 @@
"Unable to change password" : "Não foi possível alterar a sua palavra-passe ",
"Enabled" : "Ativada",
"Not enabled" : "Desativada",
+ "Federated Cloud Sharing" : "Partilha de Cloud Federada",
"A problem occurred, please check your log files (Error: %s)" : "Ocorreu um problema, por favor, verifique os ficheiros de registo (Erro: %s)",
"Migration Completed" : "Migração Concluída",
"Group already exists." : "O grupo já existe.",
diff --git a/settings/l10n/ru.js b/settings/l10n/ru.js
index 2383ae2ecc7..64df7664ee4 100644
--- a/settings/l10n/ru.js
+++ b/settings/l10n/ru.js
@@ -31,6 +31,7 @@ OC.L10N.register(
"Unable to change password" : "Невозможно изменить пароль",
"Enabled" : "Включено",
"Not enabled" : "Не включено",
+ "Federated Cloud Sharing" : "Объединение облачных хранилищ",
"A problem occurred, please check your log files (Error: %s)" : "Возникла проблема, пожалуйста, проверьте ваши файлы журнала (Ошибка: %s)",
"Migration Completed" : "Миграция завершена",
"Group already exists." : "Группа уже существует.",
diff --git a/settings/l10n/ru.json b/settings/l10n/ru.json
index 64e1fe74410..7dc52767c7b 100644
--- a/settings/l10n/ru.json
+++ b/settings/l10n/ru.json
@@ -29,6 +29,7 @@
"Unable to change password" : "Невозможно изменить пароль",
"Enabled" : "Включено",
"Not enabled" : "Не включено",
+ "Federated Cloud Sharing" : "Объединение облачных хранилищ",
"A problem occurred, please check your log files (Error: %s)" : "Возникла проблема, пожалуйста, проверьте ваши файлы журнала (Ошибка: %s)",
"Migration Completed" : "Миграция завершена",
"Group already exists." : "Группа уже существует.",
diff --git a/settings/l10n/sk_SK.js b/settings/l10n/sk_SK.js
index a253e3bedcd..b09ea77607e 100644
--- a/settings/l10n/sk_SK.js
+++ b/settings/l10n/sk_SK.js
@@ -31,6 +31,7 @@ OC.L10N.register(
"Unable to change password" : "Zmena hesla sa nepodarila",
"Enabled" : "Povolené",
"Not enabled" : "Zakázané",
+ "Federated Cloud Sharing" : "Združené cloudové zdieľanie",
"A problem occurred, please check your log files (Error: %s)" : "Nastala chyba, skontrolujte prosím váš log súbor (Chyba: %s)",
"Migration Completed" : "Migrácia ukončená",
"Group already exists." : "Skupina už existuje.",
diff --git a/settings/l10n/sk_SK.json b/settings/l10n/sk_SK.json
index bf5497ad5ab..0d11a98c6e1 100644
--- a/settings/l10n/sk_SK.json
+++ b/settings/l10n/sk_SK.json
@@ -29,6 +29,7 @@
"Unable to change password" : "Zmena hesla sa nepodarila",
"Enabled" : "Povolené",
"Not enabled" : "Zakázané",
+ "Federated Cloud Sharing" : "Združené cloudové zdieľanie",
"A problem occurred, please check your log files (Error: %s)" : "Nastala chyba, skontrolujte prosím váš log súbor (Chyba: %s)",
"Migration Completed" : "Migrácia ukončená",
"Group already exists." : "Skupina už existuje.",
diff --git a/settings/l10n/sl.js b/settings/l10n/sl.js
index 3635394c026..e4fc35cd30a 100644
--- a/settings/l10n/sl.js
+++ b/settings/l10n/sl.js
@@ -30,6 +30,7 @@ OC.L10N.register(
"Unable to change password" : "Ni mogoče spremeniti gesla",
"Enabled" : "Omogočeno",
"Not enabled" : "Ni omogočeno",
+ "Federated Cloud Sharing" : "Upravljana souporaba oblaka",
"A problem occurred, please check your log files (Error: %s)" : "Pojavila se je težava. Prosimo, preverite dnevniške zapise (Napaka: %s)",
"Migration Completed" : "Selitev zaključena",
"Group already exists." : "Skupina že obstaja.",
diff --git a/settings/l10n/sl.json b/settings/l10n/sl.json
index 0f7a4982610..3d01ae0bc55 100644
--- a/settings/l10n/sl.json
+++ b/settings/l10n/sl.json
@@ -28,6 +28,7 @@
"Unable to change password" : "Ni mogoče spremeniti gesla",
"Enabled" : "Omogočeno",
"Not enabled" : "Ni omogočeno",
+ "Federated Cloud Sharing" : "Upravljana souporaba oblaka",
"A problem occurred, please check your log files (Error: %s)" : "Pojavila se je težava. Prosimo, preverite dnevniške zapise (Napaka: %s)",
"Migration Completed" : "Selitev zaključena",
"Group already exists." : "Skupina že obstaja.",
diff --git a/settings/l10n/sr.js b/settings/l10n/sr.js
index 3b4cfcda616..ea20901670c 100644
--- a/settings/l10n/sr.js
+++ b/settings/l10n/sr.js
@@ -31,6 +31,7 @@ OC.L10N.register(
"Unable to change password" : "Не могу да променим лозинку",
"Enabled" : "Укључено",
"Not enabled" : "Искључено",
+ "Federated Cloud Sharing" : "Здружено дељење у облаку",
"A problem occurred, please check your log files (Error: %s)" : "Појавио се проблем. Проверите записнике (грешка: %s)",
"Migration Completed" : "Пресељење завршено",
"Group already exists." : "Група већ постоји.",
@@ -62,6 +63,7 @@ OC.L10N.register(
"All" : "Све",
"Official apps are developed by and within the ownCloud community. They offer functionality central to ownCloud and are ready for production use." : "Званичнe апликације су развиjене од стране и унутар оунКлауд заједнице. Оне пружају главне функционалности и спремне су и стабилне за свакодневну употребу.",
"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 at your own risk." : "Ова апликација није проверена по питању безбедности и нова је или зна да буде нестабилна. Инсталирате је на сопствену одговорност.",
"Update to %s" : "Ажурирај на %s",
"Please wait...." : "Сачекајте…",
"Error while disabling app" : "Грешка при искључивању апликације",
@@ -185,6 +187,8 @@ OC.L10N.register(
"Improving the config.php" : "Побољшање фајла поставки",
"Theming" : "Теме",
"Hardening and security guidance" : "Ојачавање система и безбедносне препоруке",
+ "Transactional File Locking is enabled." : "Трансакционо закључавање фајла је укључено.",
+ "Transactional File Locking is disabled." : "Трансакционо закључавање фајла је искључено.",
"Version" : "Верзија",
"Developer documentation" : "Програмерска документација",
"Experimental applications ahead" : "Експериментална апликација",
@@ -193,6 +197,7 @@ OC.L10N.register(
"licensed" : "лиценцирано",
"Documentation:" : "Документација:",
"User documentation" : "Корисничка документација",
+ "Admin documentation" : "Администраторска документација",
"Show description …" : "Прикажи опис…",
"Hide description …" : "Сакриј опис…",
"This app cannot be installed because the following dependencies are not fulfilled:" : "Апликација се не може инсталирати јер следеће зависности нису испуњене:",
diff --git a/settings/l10n/sr.json b/settings/l10n/sr.json
index e75f5404d6d..7ba90354f39 100644
--- a/settings/l10n/sr.json
+++ b/settings/l10n/sr.json
@@ -29,6 +29,7 @@
"Unable to change password" : "Не могу да променим лозинку",
"Enabled" : "Укључено",
"Not enabled" : "Искључено",
+ "Federated Cloud Sharing" : "Здружено дељење у облаку",
"A problem occurred, please check your log files (Error: %s)" : "Појавио се проблем. Проверите записнике (грешка: %s)",
"Migration Completed" : "Пресељење завршено",
"Group already exists." : "Група већ постоји.",
@@ -60,6 +61,7 @@
"All" : "Све",
"Official apps are developed by and within the ownCloud community. They offer functionality central to ownCloud and are ready for production use." : "Званичнe апликације су развиjене од стране и унутар оунКлауд заједнице. Оне пружају главне функционалности и спремне су и стабилне за свакодневну употребу.",
"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 at your own risk." : "Ова апликација није проверена по питању безбедности и нова је или зна да буде нестабилна. Инсталирате је на сопствену одговорност.",
"Update to %s" : "Ажурирај на %s",
"Please wait...." : "Сачекајте…",
"Error while disabling app" : "Грешка при искључивању апликације",
@@ -183,6 +185,8 @@
"Improving the config.php" : "Побољшање фајла поставки",
"Theming" : "Теме",
"Hardening and security guidance" : "Ојачавање система и безбедносне препоруке",
+ "Transactional File Locking is enabled." : "Трансакционо закључавање фајла је укључено.",
+ "Transactional File Locking is disabled." : "Трансакционо закључавање фајла је искључено.",
"Version" : "Верзија",
"Developer documentation" : "Програмерска документација",
"Experimental applications ahead" : "Експериментална апликација",
@@ -191,6 +195,7 @@
"licensed" : "лиценцирано",
"Documentation:" : "Документација:",
"User documentation" : "Корисничка документација",
+ "Admin documentation" : "Администраторска документација",
"Show description …" : "Прикажи опис…",
"Hide description …" : "Сакриј опис…",
"This app cannot be installed because the following dependencies are not fulfilled:" : "Апликација се не може инсталирати јер следеће зависности нису испуњене:",
diff --git a/settings/l10n/th_TH.js b/settings/l10n/th_TH.js
index 7716b7d50e3..2ceba16a84b 100644
--- a/settings/l10n/th_TH.js
+++ b/settings/l10n/th_TH.js
@@ -31,6 +31,7 @@ OC.L10N.register(
"Unable to change password" : "ไม่สามารถเปลี่ยนรหัสผ่าน",
"Enabled" : "เปิดการใช้งาน",
"Not enabled" : "ใช้งานไม่ได้",
+ "Federated Cloud Sharing" : "สหพันธ์การแชร์คลาวด์",
"A problem occurred, please check your log files (Error: %s)" : "มีปัญหาเกิดขึ้นโปรดตรวจสอบบันทึกไฟล์ของคุณ (ข้อผิดพลาด: %s)",
"Migration Completed" : "การโยกย้ายเสร็จสมบูรณ์",
"Group already exists." : "มีกลุ่มนี้อยู่แล้ว",
diff --git a/settings/l10n/th_TH.json b/settings/l10n/th_TH.json
index d3d8dfdcd39..c0fbabfc5b7 100644
--- a/settings/l10n/th_TH.json
+++ b/settings/l10n/th_TH.json
@@ -29,6 +29,7 @@
"Unable to change password" : "ไม่สามารถเปลี่ยนรหัสผ่าน",
"Enabled" : "เปิดการใช้งาน",
"Not enabled" : "ใช้งานไม่ได้",
+ "Federated Cloud Sharing" : "สหพันธ์การแชร์คลาวด์",
"A problem occurred, please check your log files (Error: %s)" : "มีปัญหาเกิดขึ้นโปรดตรวจสอบบันทึกไฟล์ของคุณ (ข้อผิดพลาด: %s)",
"Migration Completed" : "การโยกย้ายเสร็จสมบูรณ์",
"Group already exists." : "มีกลุ่มนี้อยู่แล้ว",
diff --git a/settings/l10n/tr.js b/settings/l10n/tr.js
index dd6ec872144..bd6e254d3ec 100644
--- a/settings/l10n/tr.js
+++ b/settings/l10n/tr.js
@@ -31,6 +31,7 @@ OC.L10N.register(
"Unable to change password" : "Parola değiştirilemiyor",
"Enabled" : "Etkin",
"Not enabled" : "Etkin değil",
+ "Federated Cloud Sharing" : "Birleşmiş Bulut Paylaşımı",
"A problem occurred, please check your log files (Error: %s)" : "Bir problem oluştu, lütfen log dosyalarını kontrol edin (Hata: %s)",
"Migration Completed" : "Taşınma Tamamlandı",
"Group already exists." : "Grup zaten mevcut.",
diff --git a/settings/l10n/tr.json b/settings/l10n/tr.json
index 413b3c0e3ab..f4a8fb93b57 100644
--- a/settings/l10n/tr.json
+++ b/settings/l10n/tr.json
@@ -29,6 +29,7 @@
"Unable to change password" : "Parola değiştirilemiyor",
"Enabled" : "Etkin",
"Not enabled" : "Etkin değil",
+ "Federated Cloud Sharing" : "Birleşmiş Bulut Paylaşımı",
"A problem occurred, please check your log files (Error: %s)" : "Bir problem oluştu, lütfen log dosyalarını kontrol edin (Hata: %s)",
"Migration Completed" : "Taşınma Tamamlandı",
"Group already exists." : "Grup zaten mevcut.",
diff --git a/settings/l10n/uk.js b/settings/l10n/uk.js
index 724bdf53875..093e9a57e57 100644
--- a/settings/l10n/uk.js
+++ b/settings/l10n/uk.js
@@ -29,6 +29,7 @@ OC.L10N.register(
"Unable to change password" : "Неможливо змінити пароль",
"Enabled" : "Увімкнено",
"Not enabled" : "Вимкнено",
+ "Federated Cloud Sharing" : "Об’єднання хмарних сховищ",
"A problem occurred, please check your log files (Error: %s)" : "Виникла проблема, будь ласка, перевірте свої журнальні файли (Помилка:%s)",
"Migration Completed" : "Міграцію завершено",
"Group already exists." : "Група вже існує.",
diff --git a/settings/l10n/uk.json b/settings/l10n/uk.json
index ac96928b8ad..d63210e88e3 100644
--- a/settings/l10n/uk.json
+++ b/settings/l10n/uk.json
@@ -27,6 +27,7 @@
"Unable to change password" : "Неможливо змінити пароль",
"Enabled" : "Увімкнено",
"Not enabled" : "Вимкнено",
+ "Federated Cloud Sharing" : "Об’єднання хмарних сховищ",
"A problem occurred, please check your log files (Error: %s)" : "Виникла проблема, будь ласка, перевірте свої журнальні файли (Помилка:%s)",
"Migration Completed" : "Міграцію завершено",
"Group already exists." : "Група вже існує.",
diff --git a/settings/l10n/zh_CN.js b/settings/l10n/zh_CN.js
index 9a25ee9d267..f769e00142d 100644
--- a/settings/l10n/zh_CN.js
+++ b/settings/l10n/zh_CN.js
@@ -27,6 +27,7 @@ OC.L10N.register(
"Unable to change password" : "不能更改密码",
"Enabled" : "开启",
"Not enabled" : "未启用",
+ "Federated Cloud Sharing" : "联合云共享",
"Migration Completed" : "迁移完成",
"Saved" : "已保存",
"test email settings" : "测试电子邮件设置",
diff --git a/settings/l10n/zh_CN.json b/settings/l10n/zh_CN.json
index 35ccf89f8fa..d70e7045458 100644
--- a/settings/l10n/zh_CN.json
+++ b/settings/l10n/zh_CN.json
@@ -25,6 +25,7 @@
"Unable to change password" : "不能更改密码",
"Enabled" : "开启",
"Not enabled" : "未启用",
+ "Federated Cloud Sharing" : "联合云共享",
"Migration Completed" : "迁移完成",
"Saved" : "已保存",
"test email settings" : "测试电子邮件设置",
diff --git a/tests/lib/files/type/detection.php b/tests/lib/files/type/detection.php
new file mode 100644
index 00000000000..1997fa4dfd6
--- /dev/null
+++ b/tests/lib/files/type/detection.php
@@ -0,0 +1,283 @@
+<?php
+/**
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
+ *
+ * @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\Files\Type;
+
+use \OC\Files\Type\Detection;
+
+class DetectionTest extends \Test\TestCase {
+
+ public function testDetect() {
+ $detection = new Detection(\OC::$server->getURLGenerator(), \OC::$configDir);
+ $dir = \OC::$SERVERROOT.'/tests/data';
+
+ $result = $detection->detect($dir."/");
+ $expected = 'httpd/unix-directory';
+ $this->assertEquals($expected, $result);
+
+ $result = $detection->detect($dir."/data.tar.gz");
+ $expected = 'application/x-gzip';
+ $this->assertEquals($expected, $result);
+
+ $result = $detection->detect($dir."/data.zip");
+ $expected = 'application/zip';
+ $this->assertEquals($expected, $result);
+
+ $result = $detection->detect($dir."/testimagelarge.svg");
+ $expected = 'image/svg+xml';
+ $this->assertEquals($expected, $result);
+
+ $result = $detection->detect($dir."/testimage.png");
+ $expected = 'image/png';
+ $this->assertEquals($expected, $result);
+ }
+
+ public function testGetSecureMimeType() {
+ $detection = new Detection(\OC::$server->getURLGenerator(), \OC::$configDir);
+
+ $result = $detection->getSecureMimeType('image/svg+xml');
+ $expected = 'text/plain';
+ $this->assertEquals($expected, $result);
+
+ $result = $detection->getSecureMimeType('image/png');
+ $expected = 'image/png';
+ $this->assertEquals($expected, $result);
+ }
+
+ public function testDetectPath() {
+ $detection = new Detection(\OC::$server->getURLGenerator(), \OC::$configDir);
+
+ $this->assertEquals('text/plain', $detection->detectPath('foo.txt'));
+ $this->assertEquals('image/png', $detection->detectPath('foo.png'));
+ $this->assertEquals('image/png', $detection->detectPath('foo.bar.png'));
+ $this->assertEquals('application/octet-stream', $detection->detectPath('.png'));
+ $this->assertEquals('application/octet-stream', $detection->detectPath('foo'));
+ $this->assertEquals('application/octet-stream', $detection->detectPath(''));
+ }
+
+ public function testDetectString() {
+ if (\OC_Util::runningOnWindows()) {
+ $this->markTestSkipped('[Windows] Strings have mimetype application/octet-stream on Windows');
+ }
+
+ $detection = new Detection(\OC::$server->getURLGenerator(), \OC::$configDir);
+
+ $result = $detection->detectString("/data/data.tar.gz");
+ $expected = 'text/plain; charset=us-ascii';
+ $this->assertEquals($expected, $result);
+ }
+
+ public function testMimeTypeIcon() {
+ if (!class_exists('org\\bovigo\\vfs\\vfsStream')) {
+ $this->markTestSkipped('Pacakge vfsStream not installed');
+ }
+ $confDir = \org\bovigo\vfs\vfsStream::setup();
+ $mimetypealiases_dist = \org\bovigo\vfs\vfsStream::newFile('mimetypealiases.dist.json')->at($confDir);
+
+ //Empty alias file
+ $mimetypealiases_dist->setContent(json_encode([], JSON_FORCE_OBJECT));
+
+
+ /*
+ * Test dir mimetype
+ */
+
+ //Mock UrlGenerator
+ $urlGenerator = $this->getMockBuilder('\OCP\IURLGenerator')
+ ->disableOriginalConstructor()
+ ->getMock();
+
+ //Only call the url generator once
+ $urlGenerator->expects($this->once())
+ ->method('imagePath')
+ ->with($this->equalTo('core'), $this->equalTo('filetypes/folder.png'))
+ ->willReturn('folder.svg');
+
+ $detection = new Detection($urlGenerator, $confDir->url());
+ $mimeType = $detection->mimeTypeIcon('dir');
+ $this->assertEquals('folder.svg', $mimeType);
+
+
+ /*
+ * Test dir-shareed mimetype
+ */
+ //Mock UrlGenerator
+ $urlGenerator = $this->getMockBuilder('\OCP\IURLGenerator')
+ ->disableOriginalConstructor()
+ ->getMock();
+
+ //Only call the url generator once
+ $urlGenerator->expects($this->once())
+ ->method('imagePath')
+ ->with($this->equalTo('core'), $this->equalTo('filetypes/folder-shared.png'))
+ ->willReturn('folder-shared.svg');
+
+ $detection = new Detection($urlGenerator, $confDir->url());
+ $mimeType = $detection->mimeTypeIcon('dir-shared');
+ $this->assertEquals('folder-shared.svg', $mimeType);
+
+
+ /*
+ * Test dir external
+ */
+
+ //Mock UrlGenerator
+ $urlGenerator = $this->getMockBuilder('\OCP\IURLGenerator')
+ ->disableOriginalConstructor()
+ ->getMock();
+
+ //Only call the url generator once
+ $urlGenerator->expects($this->once())
+ ->method('imagePath')
+ ->with($this->equalTo('core'), $this->equalTo('filetypes/folder-external.png'))
+ ->willReturn('folder-external.svg');
+
+ $detection = new Detection($urlGenerator, $confDir->url());
+ $mimeType = $detection->mimeTypeIcon('dir-external');
+ $this->assertEquals('folder-external.svg', $mimeType);
+
+
+ /*
+ * Test complete mimetype
+ */
+
+ //Mock UrlGenerator
+ $urlGenerator = $this->getMockBuilder('\OCP\IURLGenerator')
+ ->disableOriginalConstructor()
+ ->getMock();
+
+ //Only call the url generator once
+ $urlGenerator->expects($this->once())
+ ->method('imagePath')
+ ->with($this->equalTo('core'), $this->equalTo('filetypes/my-type.png'))
+ ->willReturn('my-type.svg');
+
+ $detection = new Detection($urlGenerator, $confDir->url());
+ $mimeType = $detection->mimeTypeIcon('my-type');
+ $this->assertEquals('my-type.svg', $mimeType);
+
+
+ /*
+ * Test subtype
+ */
+
+ //Mock UrlGenerator
+ $urlGenerator = $this->getMockBuilder('\OCP\IURLGenerator')
+ ->disableOriginalConstructor()
+ ->getMock();
+
+ //Only call the url generator once
+ $urlGenerator->expects($this->exactly(2))
+ ->method('imagePath')
+ ->withConsecutive(
+ [$this->equalTo('core'), $this->equalTo('filetypes/my-type.png')],
+ [$this->equalTo('core'), $this->equalTo('filetypes/my.png')]
+ )
+ ->will($this->returnCallback(
+ function($appName, $file) {
+ if ($file === 'filetypes/my.png') {
+ return 'my.svg';
+ }
+ throw new \RuntimeException();
+ }
+ ));
+
+ $detection = new Detection($urlGenerator, $confDir->url());
+ $mimeType = $detection->mimeTypeIcon('my-type');
+ $this->assertEquals('my.svg', $mimeType);
+
+
+ /*
+ * Test default mimetype
+ */
+
+ //Mock UrlGenerator
+ $urlGenerator = $this->getMockBuilder('\OCP\IURLGenerator')
+ ->disableOriginalConstructor()
+ ->getMock();
+
+ //Only call the url generator once
+ $urlGenerator->expects($this->exactly(3))
+ ->method('imagePath')
+ ->withConsecutive(
+ [$this->equalTo('core'), $this->equalTo('filetypes/foo-bar.png')],
+ [$this->equalTo('core'), $this->equalTo('filetypes/foo.png')],
+ [$this->equalTo('core'), $this->equalTo('filetypes/file.png')]
+ )
+ ->will($this->returnCallback(
+ function($appName, $file) {
+ if ($file === 'filetypes/file.png') {
+ return 'file.svg';
+ }
+ throw new \RuntimeException();
+ }
+ ));
+
+ $detection = new Detection($urlGenerator, $confDir->url());
+ $mimeType = $detection->mimeTypeIcon('foo-bar');
+ $this->assertEquals('file.svg', $mimeType);
+
+ /*
+ * Test chaching
+ */
+
+ //Mock UrlGenerator
+ $urlGenerator = $this->getMockBuilder('\OCP\IURLGenerator')
+ ->disableOriginalConstructor()
+ ->getMock();
+
+ //Only call the url generator once
+ $urlGenerator->expects($this->once())
+ ->method('imagePath')
+ ->with($this->equalTo('core'), $this->equalTo('filetypes/foo-bar.png'))
+ ->willReturn('foo-bar.svg');
+
+ $detection = new Detection($urlGenerator, $confDir->url());
+ $mimeType = $detection->mimeTypeIcon('foo-bar');
+ $this->assertEquals('foo-bar.svg', $mimeType);
+ $mimeType = $detection->mimeTypeIcon('foo-bar');
+ $this->assertEquals('foo-bar.svg', $mimeType);
+
+
+
+ /*
+ * Test aliases
+ */
+
+ //Put alias
+ $mimetypealiases_dist->setContent(json_encode(['foo' => 'foobar/baz'], JSON_FORCE_OBJECT));
+
+ //Mock UrlGenerator
+ $urlGenerator = $this->getMockBuilder('\OCP\IURLGenerator')
+ ->disableOriginalConstructor()
+ ->getMock();
+
+ //Only call the url generator once
+ $urlGenerator->expects($this->once())
+ ->method('imagePath')
+ ->with($this->equalTo('core'), $this->equalTo('filetypes/foobar-baz.png'))
+ ->willReturn('foobar-baz.svg');
+
+ $detection = new Detection($urlGenerator, $confDir->url());
+ $mimeType = $detection->mimeTypeIcon('foo');
+ $this->assertEquals('foobar-baz.svg', $mimeType);
+ }
+}
diff --git a/tests/lib/share/share.php b/tests/lib/share/share.php
index 52511810efa..b6d3e16826d 100644
--- a/tests/lib/share/share.php
+++ b/tests/lib/share/share.php
@@ -1531,6 +1531,42 @@ class Test_Share extends \Test\TestCase {
\OC\Share\Share::setPassword($userSession, $connection, $config, 1, 'pass');
}
+ /**
+ * Make sure that a user cannot have multiple identical shares to remote users
+ */
+ public function testOnlyOneRemoteShare() {
+ $oldHttpHelper = \OC::$server->query('HTTPHelper');
+ $httpHelperMock = $this->getMockBuilder('OC\HttpHelper')
+ ->disableOriginalConstructor()
+ ->getMock();
+ $this->setHttpHelper($httpHelperMock);
+
+ $httpHelperMock->expects($this->at(0))
+ ->method('post')
+ ->with($this->stringStartsWith('https://localhost/ocs/v1.php/cloud/shares'), $this->anything())
+ ->willReturn(['success' => true, 'result' => json_encode(['ocs' => ['meta' => ['statuscode' => 100]]])]);
+
+ \OCP\Share::shareItem('test', 'test.txt', \OCP\Share::SHARE_TYPE_REMOTE, 'foo@localhost', \OCP\Constants::PERMISSION_READ);
+ $shares = \OCP\Share::getItemShared('test', 'test.txt');
+ $share = array_shift($shares);
+
+ //Try share again
+ try {
+ \OCP\Share::shareItem('test', 'test.txt', \OCP\Share::SHARE_TYPE_REMOTE, 'foo@localhost', \OCP\Constants::PERMISSION_READ);
+ $this->fail('Identical remote shares are not allowed');
+ } catch (\Exception $e) {
+ $this->assertEquals('Sharing test.txt failed, because this item is already shared with foo@localhost', $e->getMessage());
+ }
+
+ $httpHelperMock->expects($this->at(0))
+ ->method('post')
+ ->with($this->stringStartsWith('https://localhost/ocs/v1.php/cloud/shares/' . $share['id'] . '/unshare'), $this->anything())
+ ->willReturn(['success' => true, 'result' => json_encode(['ocs' => ['meta' => ['statuscode' => 100]]])]);
+
+ \OCP\Share::unshare('test', 'test.txt', \OCP\Share::SHARE_TYPE_REMOTE, 'foo@localhost');
+ $this->setHttpHelper($oldHttpHelper);
+ }
+
}
class DummyShareClass extends \OC\Share\Share {
diff --git a/tests/settings/controller/CheckSetupControllerTest.php b/tests/settings/controller/CheckSetupControllerTest.php
index b39d13ac26b..6096aae8652 100644
--- a/tests/settings/controller/CheckSetupControllerTest.php
+++ b/tests/settings/controller/CheckSetupControllerTest.php
@@ -24,6 +24,7 @@ namespace OC\Settings\Controller;
use OCP\AppFramework\Http\DataResponse;
use OCP\Http\Client\IClientService;
use OCP\IConfig;
+use OCP\IL10N;
use OCP\IRequest;
use OCP\IURLGenerator;
use OC_Util;
@@ -47,6 +48,8 @@ class CheckSetupControllerTest extends TestCase {
private $urlGenerator;
/** @var OC_Util */
private $util;
+ /** @var IL10N */
+ private $l10n;
public function setUp() {
parent::setUp();
@@ -63,15 +66,24 @@ class CheckSetupControllerTest extends TestCase {
->disableOriginalConstructor()->getMock();
$this->urlGenerator = $this->getMockBuilder('\OCP\IURLGenerator')
->disableOriginalConstructor()->getMock();
-
- $this->checkSetupController = new CheckSetupController(
- 'settings',
- $this->request,
- $this->config,
- $this->clientService,
- $this->urlGenerator,
- $this->util
- );
+ $this->l10n = $this->getMockBuilder('\OCP\IL10N')
+ ->disableOriginalConstructor()->getMock();
+ $this->l10n->expects($this->any())
+ ->method('t')
+ ->will($this->returnCallback(function($message, array $replace) {
+ return vsprintf($message, $replace);
+ }));
+ $this->checkSetupController = $this->getMockBuilder('\OC\Settings\Controller\CheckSetupController')
+ ->setConstructorArgs([
+ 'settings',
+ $this->request,
+ $this->config,
+ $this->clientService,
+ $this->urlGenerator,
+ $this->util,
+ $this->l10n,
+ ])
+ ->setMethods(['getCurlVersion'])->getMock();
}
public function testIsInternetConnectionWorkingDisabledViaConfig() {
@@ -241,8 +253,134 @@ class CheckSetupControllerTest extends TestCase {
'memcacheDocs' => 'http://doc.owncloud.org/server/go.php?to=admin-performance',
'isUrandomAvailable' => self::invokePrivate($this->checkSetupController, 'isUrandomAvailable'),
'securityDocs' => 'https://doc.owncloud.org/server/8.1/admin_manual/configuration_server/hardening.html',
+ 'isUsedTlsLibOutdated' => '',
]
);
$this->assertEquals($expected, $this->checkSetupController->check());
}
+
+ public function testGetCurlVersion() {
+ $checkSetupController = $this->getMockBuilder('\OC\Settings\Controller\CheckSetupController')
+ ->setConstructorArgs([
+ 'settings',
+ $this->request,
+ $this->config,
+ $this->clientService,
+ $this->urlGenerator,
+ $this->util,
+ $this->l10n,
+ ])
+ ->setMethods(null)->getMock();
+
+ $this->assertArrayHasKey('ssl_version', $checkSetupController->getCurlVersion());
+ }
+
+ public function testIsUsedTlsLibOutdatedWithAnotherLibrary() {
+ $this->checkSetupController
+ ->expects($this->once())
+ ->method('getCurlVersion')
+ ->will($this->returnValue(['ssl_version' => 'SSLlib']));
+ $this->assertSame('', $this->invokePrivate($this->checkSetupController, 'isUsedTlsLibOutdated'));
+ }
+
+ public function testIsUsedTlsLibOutdatedWithMisbehavingCurl() {
+ $this->checkSetupController
+ ->expects($this->once())
+ ->method('getCurlVersion')
+ ->will($this->returnValue([]));
+ $this->assertSame('', $this->invokePrivate($this->checkSetupController, 'isUsedTlsLibOutdated'));
+ }
+
+ public function testIsUsedTlsLibOutdatedWithOlderOpenSsl() {
+ $this->checkSetupController
+ ->expects($this->once())
+ ->method('getCurlVersion')
+ ->will($this->returnValue(['ssl_version' => 'OpenSSL/1.0.1c']));
+ $this->assertSame('cURL is using an outdated OpenSSL version (OpenSSL/1.0.1c). Please update your operating system or features such as installing and updating apps via the app store or Federated Cloud Sharing will not work reliably.', $this->invokePrivate($this->checkSetupController, 'isUsedTlsLibOutdated'));
+ }
+
+ public function testIsUsedTlsLibOutdatedWithOlderOpenSsl1() {
+ $this->checkSetupController
+ ->expects($this->once())
+ ->method('getCurlVersion')
+ ->will($this->returnValue(['ssl_version' => 'OpenSSL/1.0.2a']));
+ $this->assertSame('cURL is using an outdated OpenSSL version (OpenSSL/1.0.2a). Please update your operating system or features such as installing and updating apps via the app store or Federated Cloud Sharing will not work reliably.', $this->invokePrivate($this->checkSetupController, 'isUsedTlsLibOutdated'));
+ }
+
+ public function testIsUsedTlsLibOutdatedWithMatchingOpenSslVersion() {
+ $this->checkSetupController
+ ->expects($this->once())
+ ->method('getCurlVersion')
+ ->will($this->returnValue(['ssl_version' => 'OpenSSL/1.0.1d']));
+ $this->assertSame('', $this->invokePrivate($this->checkSetupController, 'isUsedTlsLibOutdated'));
+ }
+
+ public function testIsUsedTlsLibOutdatedWithMatchingOpenSslVersion1() {
+ $this->checkSetupController
+ ->expects($this->once())
+ ->method('getCurlVersion')
+ ->will($this->returnValue(['ssl_version' => 'OpenSSL/1.0.2b']));
+ $this->assertSame('', $this->invokePrivate($this->checkSetupController, 'isUsedTlsLibOutdated'));
+ }
+
+ public function testIsBuggyNss400() {
+ $this->checkSetupController
+ ->expects($this->once())
+ ->method('getCurlVersion')
+ ->will($this->returnValue(['ssl_version' => 'NSS/1.0.2b']));
+ $client = $this->getMockBuilder('\OCP\Http\Client\IClient')
+ ->disableOriginalConstructor()->getMock();
+ $exception = $this->getMockBuilder('\GuzzleHttp\Exception\ClientException')
+ ->disableOriginalConstructor()->getMock();
+ $response = $this->getMockBuilder('\GuzzleHttp\Message\ResponseInterface')
+ ->disableOriginalConstructor()->getMock();
+ $response->expects($this->once())
+ ->method('getStatusCode')
+ ->will($this->returnValue(400));
+ $exception->expects($this->once())
+ ->method('getResponse')
+ ->will($this->returnValue($response));
+
+ $client->expects($this->at(0))
+ ->method('get')
+ ->with('https://www.owncloud.org/', [])
+ ->will($this->throwException($exception));
+
+ $this->clientService->expects($this->once())
+ ->method('newClient')
+ ->will($this->returnValue($client));
+
+ $this->assertSame('cURL is using an outdated NSS version (NSS/1.0.2b). Please update your operating system or features such as installing and updating apps via the app store or Federated Cloud Sharing will not work reliably.', $this->invokePrivate($this->checkSetupController, 'isUsedTlsLibOutdated'));
+ }
+
+
+ public function testIsBuggyNss200() {
+ $this->checkSetupController
+ ->expects($this->once())
+ ->method('getCurlVersion')
+ ->will($this->returnValue(['ssl_version' => 'NSS/1.0.2b']));
+ $client = $this->getMockBuilder('\OCP\Http\Client\IClient')
+ ->disableOriginalConstructor()->getMock();
+ $exception = $this->getMockBuilder('\GuzzleHttp\Exception\ClientException')
+ ->disableOriginalConstructor()->getMock();
+ $response = $this->getMockBuilder('\GuzzleHttp\Message\ResponseInterface')
+ ->disableOriginalConstructor()->getMock();
+ $response->expects($this->once())
+ ->method('getStatusCode')
+ ->will($this->returnValue(200));
+ $exception->expects($this->once())
+ ->method('getResponse')
+ ->will($this->returnValue($response));
+
+ $client->expects($this->at(0))
+ ->method('get')
+ ->with('https://www.owncloud.org/', [])
+ ->will($this->throwException($exception));
+
+ $this->clientService->expects($this->once())
+ ->method('newClient')
+ ->will($this->returnValue($client));
+
+ $this->assertSame('', $this->invokePrivate($this->checkSetupController, 'isUsedTlsLibOutdated'));
+ }
}
diff --git a/tests/settings/controller/EncryptionControllerTest.php b/tests/settings/controller/EncryptionControllerTest.php
new file mode 100644
index 00000000000..2446b8c7b9e
--- /dev/null
+++ b/tests/settings/controller/EncryptionControllerTest.php
@@ -0,0 +1,151 @@
+<?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\Settings\Controller;
+
+use OC\DB\Connection;
+use OC\Files\View;
+use OCP\IConfig;
+use OCP\IL10N;
+use OCP\ILogger;
+use OCP\IRequest;
+use OCP\IUserManager;
+use Test\TestCase;
+
+/**
+ * Class EncryptionControllerTest
+ *
+ * @package OC\Settings\Controller
+ */
+class EncryptionControllerTest extends TestCase {
+ /** @var IRequest */
+ private $request;
+ /** @var IL10N */
+ private $l10n;
+ /** @var IConfig */
+ private $config;
+ /** @var Connection */
+ private $connection;
+ /** @var IUserManager */
+ private $userManager;
+ /** @var View */
+ private $view;
+ /** @var ILogger */
+ private $logger;
+ /** @var EncryptionController */
+ private $encryptionController;
+
+ public function setUp() {
+ $this->request = $this->getMockBuilder('\\OCP\\IRequest')
+ ->disableOriginalConstructor()->getMock();
+ $this->l10n = $this->getMockBuilder('\\OCP\\IL10N')
+ ->disableOriginalConstructor()->getMock();
+ $this->l10n->expects($this->any())
+ ->method('t')
+ ->will($this->returnCallback(function($message, array $replace) {
+ return vsprintf($message, $replace);
+ }));
+ $this->config = $this->getMockBuilder('\\OCP\\IConfig')
+ ->disableOriginalConstructor()->getMock();
+ $this->connection = $this->getMockBuilder('\\OC\\DB\\Connection')
+ ->disableOriginalConstructor()->getMock();
+ $this->userManager = $this->getMockBuilder('\\OCP\\IUserManager')
+ ->disableOriginalConstructor()->getMock();
+ $this->view = $this->getMockBuilder('\\OC\\Files\\View')
+ ->disableOriginalConstructor()->getMock();
+ $this->logger = $this->getMockBuilder('\\OCP\\ILogger')
+ ->disableOriginalConstructor()->getMock();
+
+ $this->encryptionController = $this->getMockBuilder('\\OC\\Settings\\Controller\\EncryptionController')
+ ->setConstructorArgs([
+ 'settings',
+ $this->request,
+ $this->l10n,
+ $this->config,
+ $this->connection,
+ $this->userManager,
+ $this->view,
+ $this->logger,
+ ])
+ ->setMethods(['getMigration'])
+ ->getMock();
+ }
+
+ public function testStartMigrationSuccessful() {
+ $migration = $this->getMockBuilder('\\OCA\\Encryption\\Migration')
+ ->disableOriginalConstructor()->getMock();
+ $this->encryptionController
+ ->expects($this->once())
+ ->method('getMigration')
+ ->with($this->config, $this->view, $this->connection, $this->logger)
+ ->will($this->returnValue($migration));
+ $migration
+ ->expects($this->once())
+ ->method('reorganizeSystemFolderStructure');
+ $migration
+ ->expects($this->once())
+ ->method('updateDB');
+ $backend = $this->getMockBuilder('\OCP\UserInterface')
+ ->getMock();
+ $this->userManager
+ ->expects($this->once())
+ ->method('getBackends')
+ ->will($this->returnValue([$backend]));
+ $backend
+ ->expects($this->once())
+ ->method('getUsers')
+ ->will($this->returnValue(['User 1', 'User 2']));
+ $migration
+ ->expects($this->exactly(2))
+ ->method('reorganizeFolderStructureForUser')
+ ->withConsecutive(
+ ['User 1'],
+ ['User 2']
+ );
+ $migration
+ ->expects($this->once())
+ ->method('finalCleanUp');
+
+ $expected = [
+ 'data' => [
+ 'message' => 'Migration Completed',
+ ],
+ 'status' => 'success',
+ ];
+ $this->assertSame($expected, $this->encryptionController->startMigration());
+ }
+
+ public function testStartMigrationException() {
+ $this->encryptionController
+ ->expects($this->once())
+ ->method('getMigration')
+ ->with($this->config, $this->view, $this->connection, $this->logger)
+ ->will($this->throwException(new \Exception('My error message')));
+
+ $expected = [
+ 'data' => [
+ 'message' => 'A problem occurred, please check your log files (Error: My error message)',
+ ],
+ 'status' => 'error',
+ ];
+ $this->assertSame($expected, $this->encryptionController->startMigration());
+ }
+}