summaryrefslogtreecommitdiffstats
path: root/apps/files_sharing
diff options
context:
space:
mode:
Diffstat (limited to 'apps/files_sharing')
-rw-r--r--apps/files_sharing/appinfo/application.php12
-rw-r--r--apps/files_sharing/l10n/cs_CZ.js8
-rw-r--r--apps/files_sharing/l10n/cs_CZ.json8
-rw-r--r--apps/files_sharing/l10n/el.js8
-rw-r--r--apps/files_sharing/l10n/el.json8
-rw-r--r--apps/files_sharing/l10n/fa.js4
-rw-r--r--apps/files_sharing/l10n/fa.json4
-rw-r--r--apps/files_sharing/l10n/hu_HU.js8
-rw-r--r--apps/files_sharing/l10n/hu_HU.json8
-rw-r--r--apps/files_sharing/l10n/nds.js8
-rw-r--r--apps/files_sharing/l10n/nds.json6
-rw-r--r--apps/files_sharing/l10n/ru.js14
-rw-r--r--apps/files_sharing/l10n/ru.json14
-rw-r--r--apps/files_sharing/l10n/zh_TW.js3
-rw-r--r--apps/files_sharing/l10n/zh_TW.json3
-rw-r--r--apps/files_sharing/lib/external/manager.php54
-rw-r--r--apps/files_sharing/lib/external/mountprovider.php75
-rw-r--r--apps/files_sharing/lib/helper.php1
-rw-r--r--apps/files_sharing/lib/propagation/changewatcher.php8
-rw-r--r--apps/files_sharing/lib/propagation/propagationmanager.php8
-rw-r--r--apps/files_sharing/lib/propagation/recipientpropagator.php2
-rw-r--r--apps/files_sharing/lib/sharedstorage.php3
-rw-r--r--apps/files_sharing/tests/etagpropagation.php14
-rw-r--r--apps/files_sharing/tests/external/managertest.php33
24 files changed, 253 insertions, 61 deletions
diff --git a/apps/files_sharing/appinfo/application.php b/apps/files_sharing/appinfo/application.php
index 9587d74f160..9dc0e0618b5 100644
--- a/apps/files_sharing/appinfo/application.php
+++ b/apps/files_sharing/appinfo/application.php
@@ -120,6 +120,17 @@ class Application extends App {
);
});
+ $container->registerService('ExternalMountProvider', function (IContainer $c) {
+ /** @var \OCP\IServerContainer $server */
+ $server = $c->query('ServerContainer');
+ return new \OCA\Files_Sharing\External\MountProvider(
+ $server->getDatabaseConnection(),
+ function() use ($c) {
+ return $c->query('ExternalManager');
+ }
+ );
+ });
+
$container->registerService('PropagationManager', function (IContainer $c) {
/** @var \OCP\IServerContainer $server */
$server = $c->query('ServerContainer');
@@ -150,6 +161,7 @@ class Application extends App {
$server = $this->getContainer()->query('ServerContainer');
$mountProviderCollection = $server->getMountProviderCollection();
$mountProviderCollection->registerProvider($this->getContainer()->query('MountProvider'));
+ $mountProviderCollection->registerProvider($this->getContainer()->query('ExternalMountProvider'));
}
public function setupPropagation() {
diff --git a/apps/files_sharing/l10n/cs_CZ.js b/apps/files_sharing/l10n/cs_CZ.js
index be924134ae2..7c52f1c21ff 100644
--- a/apps/files_sharing/l10n/cs_CZ.js
+++ b/apps/files_sharing/l10n/cs_CZ.js
@@ -43,6 +43,14 @@ OC.L10N.register(
"%2$s shared %1$s via link" : "%2$s nasdílel(a) %1$s jako odkaz",
"%2$s shared %1$s with you" : "%2$s s vámi sdílí %1$s",
"You shared %1$s via link" : "Sdílíte %1$s přes odkaz",
+ "Downloaded via public link" : "Staženo pomocí veřejného odkazu",
+ "Shared with %2$s" : "Sdíleno s %2$s",
+ "Shared with group %2$s" : "Sdíleno se skupinou %2$s",
+ "Shared with %3$s by %2$s" : "%2$s sdílí s %3$s",
+ "Shared with group %3$s by %2$s" : "%2$s sdílí se skupinou %3$s",
+ "Shared via link by %2$s" : "%2$s sdílel(a) jako odkaz",
+ "Shared by %2$s" : "%2$s sdílel(a)",
+ "Shared via public link" : "Sdíleno jako veřejný odkaz",
"Shares" : "Sdílení",
"Accept" : "Přijmout",
"Decline" : "Zamítnout",
diff --git a/apps/files_sharing/l10n/cs_CZ.json b/apps/files_sharing/l10n/cs_CZ.json
index a889bbc1235..0e139f7bbf5 100644
--- a/apps/files_sharing/l10n/cs_CZ.json
+++ b/apps/files_sharing/l10n/cs_CZ.json
@@ -41,6 +41,14 @@
"%2$s shared %1$s via link" : "%2$s nasdílel(a) %1$s jako odkaz",
"%2$s shared %1$s with you" : "%2$s s vámi sdílí %1$s",
"You shared %1$s via link" : "Sdílíte %1$s přes odkaz",
+ "Downloaded via public link" : "Staženo pomocí veřejného odkazu",
+ "Shared with %2$s" : "Sdíleno s %2$s",
+ "Shared with group %2$s" : "Sdíleno se skupinou %2$s",
+ "Shared with %3$s by %2$s" : "%2$s sdílí s %3$s",
+ "Shared with group %3$s by %2$s" : "%2$s sdílí se skupinou %3$s",
+ "Shared via link by %2$s" : "%2$s sdílel(a) jako odkaz",
+ "Shared by %2$s" : "%2$s sdílel(a)",
+ "Shared via public link" : "Sdíleno jako veřejný odkaz",
"Shares" : "Sdílení",
"Accept" : "Přijmout",
"Decline" : "Zamítnout",
diff --git a/apps/files_sharing/l10n/el.js b/apps/files_sharing/l10n/el.js
index 6f71bdc2832..e4024492b65 100644
--- a/apps/files_sharing/l10n/el.js
+++ b/apps/files_sharing/l10n/el.js
@@ -43,6 +43,14 @@ OC.L10N.register(
"%2$s shared %1$s via link" : "Ο %2$s διαμοιράστηκε το %1$s μέσω συνδέσμου",
"%2$s shared %1$s with you" : "Ο %2$s διαμοιράστηκε το %1$s με εσάς",
"You shared %1$s via link" : "Μοιραστήκατε το %1$s μέσω συνδέσμου",
+ "Downloaded via public link" : "Μεταφορτώθηκε μέσω δημόσιου συνδέσμου",
+ "Shared with %2$s" : "Διαμοιράστηκε με %2$s",
+ "Shared with group %2$s" : "Διαμοιράστηκε με την ομάδα %2$s",
+ "Shared with %3$s by %2$s" : "Διαμοιράστηκε με %3$s από %2$s",
+ "Shared with group %3$s by %2$s" : "Διαμοιράστηκε με την ομάδα %3$s από %2$s",
+ "Shared via link by %2$s" : "Διαμοιράστηκε μέσω συνδέσμου από %2$s",
+ "Shared by %2$s" : "Διαμοιράστηκε από %2$s",
+ "Shared via public link" : "Διαμοιράστηκε μέσω δημόσιου συνδέσμου",
"Shares" : "Κοινόχρηστοι φάκελοι",
"You received %2$s as a remote share from %1$s" : "Λάβατε το %2$s ως απομακρυσμένο διαμοιρασμό από %1$s",
"Accept" : "Αποδοχή",
diff --git a/apps/files_sharing/l10n/el.json b/apps/files_sharing/l10n/el.json
index c1bdc039f9d..7bf5c00841e 100644
--- a/apps/files_sharing/l10n/el.json
+++ b/apps/files_sharing/l10n/el.json
@@ -41,6 +41,14 @@
"%2$s shared %1$s via link" : "Ο %2$s διαμοιράστηκε το %1$s μέσω συνδέσμου",
"%2$s shared %1$s with you" : "Ο %2$s διαμοιράστηκε το %1$s με εσάς",
"You shared %1$s via link" : "Μοιραστήκατε το %1$s μέσω συνδέσμου",
+ "Downloaded via public link" : "Μεταφορτώθηκε μέσω δημόσιου συνδέσμου",
+ "Shared with %2$s" : "Διαμοιράστηκε με %2$s",
+ "Shared with group %2$s" : "Διαμοιράστηκε με την ομάδα %2$s",
+ "Shared with %3$s by %2$s" : "Διαμοιράστηκε με %3$s από %2$s",
+ "Shared with group %3$s by %2$s" : "Διαμοιράστηκε με την ομάδα %3$s από %2$s",
+ "Shared via link by %2$s" : "Διαμοιράστηκε μέσω συνδέσμου από %2$s",
+ "Shared by %2$s" : "Διαμοιράστηκε από %2$s",
+ "Shared via public link" : "Διαμοιράστηκε μέσω δημόσιου συνδέσμου",
"Shares" : "Κοινόχρηστοι φάκελοι",
"You received %2$s as a remote share from %1$s" : "Λάβατε το %2$s ως απομακρυσμένο διαμοιρασμό από %1$s",
"Accept" : "Αποδοχή",
diff --git a/apps/files_sharing/l10n/fa.js b/apps/files_sharing/l10n/fa.js
index 29cd5818d40..cd915b79a17 100644
--- a/apps/files_sharing/l10n/fa.js
+++ b/apps/files_sharing/l10n/fa.js
@@ -3,18 +3,22 @@ OC.L10N.register(
{
"Server to server sharing is not enabled on this server" : "اشتراک سرور به سرور در این سرور فعال نیست .",
"Invalid or untrusted SSL certificate" : "گواهینامه SSL غیر قابل اعتماد یا غیر معتبر است.",
+ "Could not authenticate to remote share, password might be wrong" : "احرازهویت برای اشتراک‌گذاری راه‌دور انجام نشد، احتمالا رمزعبور نادرست است",
"Storage not valid" : "فضای ذخیره‌سازی معتبر نیست",
"Couldn't add remote share" : "امکان افزودن اشتراک گذاری از راه دور وجود ندارد",
"Shared with you" : "موارد به اشتراک گذاشته شده با شما",
"Shared with others" : "موارد به اشتراک گذاشته شده با دیگران",
"Shared by link" : "اشتراک گذاشته شده از طریق پیوند",
+ "Nothing shared with you yet" : "هیچ موردی با شما به اشتراک گذاشته نشده است",
"Nothing shared yet" : "هیچ موردی تاکنون به اشتراک گذاشته نشده است",
"No shared links" : "هیچ لینک اشتراک‌گذاری وجود ندارد",
+ "Files and folders you share by link will show up here" : "فایل‌ها و پوشه‌های اشتراک‌گذاشته توسط شما همراه با لینک در اینجا نمایش داده خواهد شد",
"Do you want to add the remote share {name} from {owner}@{remote}?" : "آیا مایل به افزودن اشتراک از راه دور {name} از {owner}@{remote} هستید.",
"Remote share" : "اشتراک از راه دور",
"Remote share password" : "رمز عبور اشتراک از راه دور",
"Cancel" : "منصرف شدن",
"Add remote share" : "افزودن اشتراک از راه دور",
+ "You can upload into this folder" : "می‌توانید در این پوشه آپلود کنید",
"Invalid ownCloud url" : "آدرس نمونه ownCloud غیر معتبر است",
"Shared by" : "اشتراک گذاشته شده به وسیله",
"Sharing" : "اشتراک گذاری",
diff --git a/apps/files_sharing/l10n/fa.json b/apps/files_sharing/l10n/fa.json
index 64d03e5186a..a345d9f1401 100644
--- a/apps/files_sharing/l10n/fa.json
+++ b/apps/files_sharing/l10n/fa.json
@@ -1,18 +1,22 @@
{ "translations": {
"Server to server sharing is not enabled on this server" : "اشتراک سرور به سرور در این سرور فعال نیست .",
"Invalid or untrusted SSL certificate" : "گواهینامه SSL غیر قابل اعتماد یا غیر معتبر است.",
+ "Could not authenticate to remote share, password might be wrong" : "احرازهویت برای اشتراک‌گذاری راه‌دور انجام نشد، احتمالا رمزعبور نادرست است",
"Storage not valid" : "فضای ذخیره‌سازی معتبر نیست",
"Couldn't add remote share" : "امکان افزودن اشتراک گذاری از راه دور وجود ندارد",
"Shared with you" : "موارد به اشتراک گذاشته شده با شما",
"Shared with others" : "موارد به اشتراک گذاشته شده با دیگران",
"Shared by link" : "اشتراک گذاشته شده از طریق پیوند",
+ "Nothing shared with you yet" : "هیچ موردی با شما به اشتراک گذاشته نشده است",
"Nothing shared yet" : "هیچ موردی تاکنون به اشتراک گذاشته نشده است",
"No shared links" : "هیچ لینک اشتراک‌گذاری وجود ندارد",
+ "Files and folders you share by link will show up here" : "فایل‌ها و پوشه‌های اشتراک‌گذاشته توسط شما همراه با لینک در اینجا نمایش داده خواهد شد",
"Do you want to add the remote share {name} from {owner}@{remote}?" : "آیا مایل به افزودن اشتراک از راه دور {name} از {owner}@{remote} هستید.",
"Remote share" : "اشتراک از راه دور",
"Remote share password" : "رمز عبور اشتراک از راه دور",
"Cancel" : "منصرف شدن",
"Add remote share" : "افزودن اشتراک از راه دور",
+ "You can upload into this folder" : "می‌توانید در این پوشه آپلود کنید",
"Invalid ownCloud url" : "آدرس نمونه ownCloud غیر معتبر است",
"Shared by" : "اشتراک گذاشته شده به وسیله",
"Sharing" : "اشتراک گذاری",
diff --git a/apps/files_sharing/l10n/hu_HU.js b/apps/files_sharing/l10n/hu_HU.js
index 7b85e236b44..c0d2d01b2c4 100644
--- a/apps/files_sharing/l10n/hu_HU.js
+++ b/apps/files_sharing/l10n/hu_HU.js
@@ -43,6 +43,14 @@ OC.L10N.register(
"%2$s shared %1$s via link" : "%2$s megosztotta ezt: %1$s, hivatkozással",
"%2$s shared %1$s with you" : "%2$s megosztotta velem ezt: %1$s",
"You shared %1$s via link" : "Megosztottam link segítségével: %1$s",
+ "Downloaded via public link" : "Letöltve publikus hivatkozással",
+ "Shared with %2$s" : "Megosztva vele: %2$s",
+ "Shared with group %2$s" : "Megosztva ezzel a csoporttal: %2$s",
+ "Shared with %3$s by %2$s" : "Megosztva vele: %3$s, megosztó: %2$s",
+ "Shared with group %3$s by %2$s" : "Megosztva ezzel a csoporttal: %3$s, megosztó: %2$s",
+ "Shared via link by %2$s" : "Megosztva hivatkozással: %2$s",
+ "Shared by %2$s" : "Megosztó: %2$s",
+ "Shared via public link" : "Megosztva publikus hivatkozással",
"Shares" : "Megosztások",
"You received %2$s as a remote share from %1$s" : "Kaptál egy távoli megosztást: %2$s, innen: %1$s",
"Accept" : "Elfogadás",
diff --git a/apps/files_sharing/l10n/hu_HU.json b/apps/files_sharing/l10n/hu_HU.json
index c749a5add97..a2e15c46c52 100644
--- a/apps/files_sharing/l10n/hu_HU.json
+++ b/apps/files_sharing/l10n/hu_HU.json
@@ -41,6 +41,14 @@
"%2$s shared %1$s via link" : "%2$s megosztotta ezt: %1$s, hivatkozással",
"%2$s shared %1$s with you" : "%2$s megosztotta velem ezt: %1$s",
"You shared %1$s via link" : "Megosztottam link segítségével: %1$s",
+ "Downloaded via public link" : "Letöltve publikus hivatkozással",
+ "Shared with %2$s" : "Megosztva vele: %2$s",
+ "Shared with group %2$s" : "Megosztva ezzel a csoporttal: %2$s",
+ "Shared with %3$s by %2$s" : "Megosztva vele: %3$s, megosztó: %2$s",
+ "Shared with group %3$s by %2$s" : "Megosztva ezzel a csoporttal: %3$s, megosztó: %2$s",
+ "Shared via link by %2$s" : "Megosztva hivatkozással: %2$s",
+ "Shared by %2$s" : "Megosztó: %2$s",
+ "Shared via public link" : "Megosztva publikus hivatkozással",
"Shares" : "Megosztások",
"You received %2$s as a remote share from %1$s" : "Kaptál egy távoli megosztást: %2$s, innen: %1$s",
"Accept" : "Elfogadás",
diff --git a/apps/files_sharing/l10n/nds.js b/apps/files_sharing/l10n/nds.js
new file mode 100644
index 00000000000..e263ab143a8
--- /dev/null
+++ b/apps/files_sharing/l10n/nds.js
@@ -0,0 +1,8 @@
+OC.L10N.register(
+ "files_sharing",
+ {
+ "Cancel" : "Abbrechen",
+ "Password" : "Passwort",
+ "Name" : "Name"
+},
+"nplurals=2; plural=(n != 1);");
diff --git a/apps/files_sharing/l10n/nds.json b/apps/files_sharing/l10n/nds.json
new file mode 100644
index 00000000000..15e6870cb0e
--- /dev/null
+++ b/apps/files_sharing/l10n/nds.json
@@ -0,0 +1,6 @@
+{ "translations": {
+ "Cancel" : "Abbrechen",
+ "Password" : "Passwort",
+ "Name" : "Name"
+},"pluralForm" :"nplurals=2; plural=(n != 1);"
+} \ No newline at end of file
diff --git a/apps/files_sharing/l10n/ru.js b/apps/files_sharing/l10n/ru.js
index 2d89b5e3102..1a84d10ecea 100644
--- a/apps/files_sharing/l10n/ru.js
+++ b/apps/files_sharing/l10n/ru.js
@@ -38,10 +38,23 @@ OC.L10N.register(
"Public shared file %1$s was downloaded" : "Общий файл %1$s, был скачан",
"You shared %1$s with %2$s" : "Вы поделились %1$s с %2$s",
"You shared %1$s with group %2$s" : "Вы поделились %1$s с группой %2$s",
+ "%2$s shared %1$s with %3$s" : "%2$s поделился %1$s с %3$s",
+ "%2$s shared %1$s with group %3$s" : "%2$s поделился %1$s с группой %3$s",
+ "%2$s shared %1$s via link" : "%2$s поделился %1$s по ссылке",
"%2$s shared %1$s with you" : "%2$s поделился с вами %1$s",
"You shared %1$s via link" : "Вы поделились %1$s с помощью ссылки",
+ "Downloaded via public link" : "Загружено по открытой ссылке",
+ "Shared with %2$s" : "Поделился с %2$s",
+ "Shared with group %2$s" : "Поделился с группой %2$s",
+ "Shared with %3$s by %2$s" : "Поделился %2$s с %3$s",
+ "Shared with group %3$s by %2$s" : "Поделился %2$s с группой %3$s",
+ "Shared via link by %2$s" : "Поделился ссылкой %2$s",
+ "Shared by %2$s" : "Поделился %2$s",
+ "Shared via public link" : "Поделился открытой ссылкой",
"Shares" : "События обмена файлами",
+ "You received %2$s as a remote share from %1$s" : "Вы получили %2$s через удаленный общий ресурс %1$s",
"Accept" : "Принять",
+ "Decline" : "Отклонить",
"Share with me through my #ownCloud Federated Cloud ID, see %s" : "Поделитесь со мной через мой #ownCloud ID в объединении облачных хранилищ, смотрите %s",
"Share with me through my #ownCloud Federated Cloud ID" : "Поделитесь со мной через мой #ownCloud ID в объединении облачных хранилищ",
"This share is password-protected" : "Общий ресурс защищен паролем",
@@ -67,6 +80,7 @@ OC.L10N.register(
"Federated Cloud" : "Объединение облачных хранилищ",
"Your Federated Cloud ID:" : "Ваш ID в объединении облачных хранилищ:",
"Share it:" : "Поделись этим:",
+ "Add to your website" : "Добавить к себе на сайт",
"Share with me via ownCloud" : "Поделитесь мной через ownCloud",
"HTML Code:" : "HTML код:"
},
diff --git a/apps/files_sharing/l10n/ru.json b/apps/files_sharing/l10n/ru.json
index 0f7a152f536..401896709d6 100644
--- a/apps/files_sharing/l10n/ru.json
+++ b/apps/files_sharing/l10n/ru.json
@@ -36,10 +36,23 @@
"Public shared file %1$s was downloaded" : "Общий файл %1$s, был скачан",
"You shared %1$s with %2$s" : "Вы поделились %1$s с %2$s",
"You shared %1$s with group %2$s" : "Вы поделились %1$s с группой %2$s",
+ "%2$s shared %1$s with %3$s" : "%2$s поделился %1$s с %3$s",
+ "%2$s shared %1$s with group %3$s" : "%2$s поделился %1$s с группой %3$s",
+ "%2$s shared %1$s via link" : "%2$s поделился %1$s по ссылке",
"%2$s shared %1$s with you" : "%2$s поделился с вами %1$s",
"You shared %1$s via link" : "Вы поделились %1$s с помощью ссылки",
+ "Downloaded via public link" : "Загружено по открытой ссылке",
+ "Shared with %2$s" : "Поделился с %2$s",
+ "Shared with group %2$s" : "Поделился с группой %2$s",
+ "Shared with %3$s by %2$s" : "Поделился %2$s с %3$s",
+ "Shared with group %3$s by %2$s" : "Поделился %2$s с группой %3$s",
+ "Shared via link by %2$s" : "Поделился ссылкой %2$s",
+ "Shared by %2$s" : "Поделился %2$s",
+ "Shared via public link" : "Поделился открытой ссылкой",
"Shares" : "События обмена файлами",
+ "You received %2$s as a remote share from %1$s" : "Вы получили %2$s через удаленный общий ресурс %1$s",
"Accept" : "Принять",
+ "Decline" : "Отклонить",
"Share with me through my #ownCloud Federated Cloud ID, see %s" : "Поделитесь со мной через мой #ownCloud ID в объединении облачных хранилищ, смотрите %s",
"Share with me through my #ownCloud Federated Cloud ID" : "Поделитесь со мной через мой #ownCloud ID в объединении облачных хранилищ",
"This share is password-protected" : "Общий ресурс защищен паролем",
@@ -65,6 +78,7 @@
"Federated Cloud" : "Объединение облачных хранилищ",
"Your Federated Cloud ID:" : "Ваш ID в объединении облачных хранилищ:",
"Share it:" : "Поделись этим:",
+ "Add to your website" : "Добавить к себе на сайт",
"Share with me via ownCloud" : "Поделитесь мной через ownCloud",
"HTML Code:" : "HTML код:"
},"pluralForm" :"nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);"
diff --git a/apps/files_sharing/l10n/zh_TW.js b/apps/files_sharing/l10n/zh_TW.js
index a5f97c92092..bc49d1d8a48 100644
--- a/apps/files_sharing/l10n/zh_TW.js
+++ b/apps/files_sharing/l10n/zh_TW.js
@@ -35,6 +35,7 @@ OC.L10N.register(
"Add to your ownCloud" : "加入到你的 ownCloud",
"Download" : "下載",
"Download %s" : "下載 %s",
- "Direct link" : "直接連結"
+ "Direct link" : "直接連結",
+ "Federated Cloud Sharing" : "聯盟式雲端分享"
},
"nplurals=1; plural=0;");
diff --git a/apps/files_sharing/l10n/zh_TW.json b/apps/files_sharing/l10n/zh_TW.json
index 67150e495b9..3567ed51df4 100644
--- a/apps/files_sharing/l10n/zh_TW.json
+++ b/apps/files_sharing/l10n/zh_TW.json
@@ -33,6 +33,7 @@
"Add to your ownCloud" : "加入到你的 ownCloud",
"Download" : "下載",
"Download %s" : "下載 %s",
- "Direct link" : "直接連結"
+ "Direct link" : "直接連結",
+ "Federated Cloud Sharing" : "聯盟式雲端分享"
},"pluralForm" :"nplurals=1; plural=0;"
} \ No newline at end of file
diff --git a/apps/files_sharing/lib/external/manager.php b/apps/files_sharing/lib/external/manager.php
index ab6a02f94a1..86b8904cc9a 100644
--- a/apps/files_sharing/lib/external/manager.php
+++ b/apps/files_sharing/lib/external/manager.php
@@ -153,28 +153,6 @@ class Manager {
return $this->mountShare($options);
}
- private function setupMounts() {
- // don't setup server-to-server shares if the admin disabled it
- if (\OCA\Files_Sharing\Helper::isIncomingServer2serverShareEnabled() === false) {
- return false;
- }
-
- if (!is_null($this->uid)) {
- $query = $this->connection->prepare('
- SELECT `remote`, `share_token`, `password`, `mountpoint`, `owner`
- FROM `*PREFIX*share_external`
- WHERE `user` = ? AND `accepted` = ?
- ');
- $query->execute(array($this->uid, 1));
-
- while ($row = $query->fetch()) {
- $row['manager'] = $this;
- $row['token'] = $row['share_token'];
- $this->mountShare($row);
- }
- }
- }
-
/**
* get share
*
@@ -277,24 +255,6 @@ class Manager {
}
/**
- * setup the server-to-server mounts
- *
- * @param array $params
- */
- public static function setup(array $params) {
- $externalManager = new \OCA\Files_Sharing\External\Manager(
- \OC::$server->getDatabaseConnection(),
- \OC\Files\Filesystem::getMountManager(),
- \OC\Files\Filesystem::getLoader(),
- \OC::$server->getHTTPHelper(),
- \OC::$server->getNotificationManager(),
- $params['user']
- );
-
- $externalManager->setupMounts();
- }
-
- /**
* remove '/user/files' from the path and trailing slashes
*
* @param string $path
@@ -305,16 +265,20 @@ class Manager {
return rtrim(substr($path, strlen($prefix)), '/');
}
+ public function getMount($data) {
+ $data['manager'] = $this;
+ $mountPoint = '/' . $this->uid . '/files' . $data['mountpoint'];
+ $data['mountpoint'] = $mountPoint;
+ $data['certificateManager'] = \OC::$server->getCertificateManager($this->uid);
+ return new Mount(self::STORAGE, $mountPoint, $data, $this, $this->storageLoader);
+ }
+
/**
* @param array $data
* @return Mount
*/
protected function mountShare($data) {
- $data['manager'] = $this;
- $mountPoint = '/' . $this->uid . '/files' . $data['mountpoint'];
- $data['mountpoint'] = $mountPoint;
- $data['certificateManager'] = \OC::$server->getCertificateManager($this->uid);
- $mount = new Mount(self::STORAGE, $mountPoint, $data, $this, $this->storageLoader);
+ $mount = $this->getMount($data);
$this->mountManager->addMount($mount);
return $mount;
}
diff --git a/apps/files_sharing/lib/external/mountprovider.php b/apps/files_sharing/lib/external/mountprovider.php
new file mode 100644
index 00000000000..1739cec543f
--- /dev/null
+++ b/apps/files_sharing/lib/external/mountprovider.php
@@ -0,0 +1,75 @@
+<?php
+/**
+ * @author Robin Appelman <icewind@owncloud.com>
+ *
+ * @copyright Copyright (c) 2015, ownCloud, Inc.
+ * @license AGPL-3.0
+ *
+ * This code is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License, version 3,
+ * as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License, version 3,
+ * along with this program. If not, see <http://www.gnu.org/licenses/>
+ *
+ */
+
+namespace OCA\Files_Sharing\External;
+
+use OCP\Files\Config\IMountProvider;
+use OCP\Files\Storage\IStorageFactory;
+use OCP\IDBConnection;
+use OCP\IUser;
+
+class MountProvider implements IMountProvider {
+ const STORAGE = '\OCA\Files_Sharing\External\Storage';
+
+ /**
+ * @var \OCP\IDBConnection
+ */
+ private $connection;
+
+ /**
+ * @var callable
+ */
+ private $managerProvider;
+
+ /**
+ * @param \OCP\IDBConnection $connection
+ * @param callable $managerProvider due to setup order we need a callable that return the manager instead of the manager itself
+ */
+ public function __construct(IDBConnection $connection, callable $managerProvider) {
+ $this->connection = $connection;
+ $this->managerProvider = $managerProvider;
+ }
+
+ public function getMount(IUser $user, $data, IStorageFactory $storageFactory) {
+ $data['manager'] = $this;
+ $mountPoint = '/' . $user->getUID() . '/files/' . ltrim($data['mountpoint'], '/');
+ $data['mountpoint'] = $mountPoint;
+ $data['certificateManager'] = \OC::$server->getCertificateManager($user->getUID());
+ $managerProvider = $this->managerProvider;
+ return new Mount(self::STORAGE, $mountPoint, $data, $managerProvider(), $storageFactory);
+ }
+
+ public function getMountsForUser(IUser $user, IStorageFactory $loader) {
+ $query = $this->connection->prepare('
+ SELECT `remote`, `share_token`, `password`, `mountpoint`, `owner`
+ FROM `*PREFIX*share_external`
+ WHERE `user` = ? AND `accepted` = ?
+ ');
+ $query->execute([$user->getUID(), 1]);
+ $mounts = [];
+ while ($row = $query->fetch()) {
+ $row['manager'] = $this;
+ $row['token'] = $row['share_token'];
+ $mounts[] = $this->getMount($user, $row, $loader);
+ }
+ return $mounts;
+ }
+}
diff --git a/apps/files_sharing/lib/helper.php b/apps/files_sharing/lib/helper.php
index 63648b9f068..b15f70fcde3 100644
--- a/apps/files_sharing/lib/helper.php
+++ b/apps/files_sharing/lib/helper.php
@@ -31,7 +31,6 @@ namespace OCA\Files_Sharing;
class Helper {
public static function registerHooks() {
- \OCP\Util::connectHook('OC_Filesystem', 'setup', '\OCA\Files_Sharing\External\Manager', 'setup');
\OCP\Util::connectHook('OC_Filesystem', 'delete', '\OC\Files\Cache\Shared_Updater', 'deleteHook');
\OCP\Util::connectHook('OC_Filesystem', 'post_rename', '\OC\Files\Cache\Shared_Updater', 'renameHook');
\OCP\Util::connectHook('OC_Filesystem', 'post_delete', '\OCA\Files_Sharing\Hooks', 'unshareChildren');
diff --git a/apps/files_sharing/lib/propagation/changewatcher.php b/apps/files_sharing/lib/propagation/changewatcher.php
index 9da3ffe51a2..e61c161da19 100644
--- a/apps/files_sharing/lib/propagation/changewatcher.php
+++ b/apps/files_sharing/lib/propagation/changewatcher.php
@@ -99,4 +99,12 @@ class ChangeWatcher {
$propagator->propagateChanges();
}
}
+
+ public function permissionsHook($params) {
+ $share = $params['share'];
+
+ if ($share['item_type'] === 'file' || $share['item_type'] === 'folder') {
+ $this->recipientPropagator->markDirty($share, microtime(true));
+ }
+ }
}
diff --git a/apps/files_sharing/lib/propagation/propagationmanager.php b/apps/files_sharing/lib/propagation/propagationmanager.php
index 35048f89cfb..6ed70e93f84 100644
--- a/apps/files_sharing/lib/propagation/propagationmanager.php
+++ b/apps/files_sharing/lib/propagation/propagationmanager.php
@@ -25,6 +25,7 @@ use OC\Files\Filesystem;
use OC\Files\View;
use OCP\IConfig;
use OCP\IUserSession;
+use OCP\Util;
/**
@@ -134,8 +135,9 @@ class PropagationManager {
// for marking shares owned by the active user as dirty when a file inside them changes
$this->listenToOwnerChanges($user->getUID(), $user->getUID());
- \OC_Hook::connect('OC_Filesystem', 'post_write', $watcher, 'writeHook');
- \OC_Hook::connect('OC_Filesystem', 'post_delete', $watcher, 'writeHook');
- \OC_Hook::connect('OC_Filesystem', 'post_rename', $watcher, 'renameHook');
+ Util::connectHook('OC_Filesystem', 'post_write', $watcher, 'writeHook');
+ Util::connectHook('OC_Filesystem', 'post_delete', $watcher, 'writeHook');
+ Util::connectHook('OC_Filesystem', 'post_rename', $watcher, 'renameHook');
+ Util::connectHook('OCP\Share', 'post_update_permissions', $watcher, 'permissionsHook');
}
}
diff --git a/apps/files_sharing/lib/propagation/recipientpropagator.php b/apps/files_sharing/lib/propagation/recipientpropagator.php
index 420cacb3d2f..8e064e2ee54 100644
--- a/apps/files_sharing/lib/propagation/recipientpropagator.php
+++ b/apps/files_sharing/lib/propagation/recipientpropagator.php
@@ -105,7 +105,7 @@ class RecipientPropagator {
/**
* @param array $share
- * @param int $time
+ * @param float $time
*/
public function markDirty($share, $time = null) {
if ($time === null) {
diff --git a/apps/files_sharing/lib/sharedstorage.php b/apps/files_sharing/lib/sharedstorage.php
index 27dd2f1e485..b0e56f5f054 100644
--- a/apps/files_sharing/lib/sharedstorage.php
+++ b/apps/files_sharing/lib/sharedstorage.php
@@ -583,9 +583,6 @@ class Shared extends \OC\Files\Storage\Common implements ISharedStorage {
}
public function getETag($path) {
- if ($path == '') {
- $path = $this->getMountPoint();
- }
if ($source = $this->getSourcePath($path)) {
list($storage, $internalPath) = \OC\Files\Filesystem::resolvePath($source);
return $storage->getETag($internalPath);
diff --git a/apps/files_sharing/tests/etagpropagation.php b/apps/files_sharing/tests/etagpropagation.php
index 6d23959d66d..f7f8ec35288 100644
--- a/apps/files_sharing/tests/etagpropagation.php
+++ b/apps/files_sharing/tests/etagpropagation.php
@@ -47,6 +47,7 @@ class EtagPropagation extends TestCase {
\OC_Hook::clear('OC_Filesystem', 'post_write');
\OC_Hook::clear('OC_Filesystem', 'post_delete');
\OC_Hook::clear('OC_Filesystem', 'post_rename');
+ \OC_Hook::clear('OCP\Share', 'post_update_permissions');
parent::tearDown();
}
@@ -406,4 +407,17 @@ class EtagPropagation extends TestCase {
$this->assertAllUnchaged();
}
+
+ public function testEtagChangeOnPermissionsChange() {
+ $this->loginAsUser(self::TEST_FILES_SHARING_API_USER1);
+
+ $view = new View('/' . self::TEST_FILES_SHARING_API_USER1 . '/files');
+ $folderInfo = $view->getFileInfo('/sub1/sub2/folder');
+
+ \OCP\Share::setPermissions('folder', $folderInfo->getId(), \OCP\Share::SHARE_TYPE_USER, self::TEST_FILES_SHARING_API_USER2, 17);
+
+ $this->assertEtagsForFoldersChanged([self::TEST_FILES_SHARING_API_USER2, self::TEST_FILES_SHARING_API_USER4]);
+
+ $this->assertAllUnchaged();
+ }
}
diff --git a/apps/files_sharing/tests/external/managertest.php b/apps/files_sharing/tests/external/managertest.php
index 8e03c67a9a3..7242779d455 100644
--- a/apps/files_sharing/tests/external/managertest.php
+++ b/apps/files_sharing/tests/external/managertest.php
@@ -23,9 +23,12 @@ namespace OCA\Files_Sharing\Tests\External;
use OC\Files\Storage\StorageFactory;
use OCA\Files_Sharing\External\Manager;
+use OCA\Files_Sharing\External\MountProvider;
use OCA\Files_Sharing\Tests\TestCase;
+use Test\Traits\UserTrait;
class ManagerTest extends TestCase {
+ use UserTrait;
/** @var Manager **/
private $manager;
@@ -38,10 +41,18 @@ class ManagerTest extends TestCase {
private $uid;
+ /**
+ * @var \OCP\IUser
+ */
+ private $user;
+ private $mountProvider;
+
protected function setUp() {
parent::setUp();
$this->uid = $this->getUniqueID('user');
+ $this->createUser($this->uid, '');
+ $this->user = \OC::$server->getUserManager()->get($this->uid);
$this->mountManager = new \OC\Files\Mount\Manager();
$this->httpHelper = $httpHelper = $this->getMockBuilder('\OC\HTTPHelper')->disableOriginalConstructor()->getMock();
/** @var \OC\HTTPHelper $httpHelper */
@@ -53,6 +64,16 @@ class ManagerTest extends TestCase {
\OC::$server->getNotificationManager(),
$this->uid
);
+ $this->mountProvider = new MountProvider(\OC::$server->getDatabaseConnection(), function() {
+ return $this->manager;
+ });
+ }
+
+ private function setupMounts() {
+ $mounts = $this->mountProvider->getMountsForUser($this->user, new StorageFactory());
+ foreach ($mounts as $mount) {
+ $this->mountManager->addMount($mount);
+ }
}
public function testAddShare() {
@@ -77,7 +98,7 @@ class ManagerTest extends TestCase {
$this->assertCount(1, $openShares);
$this->assertExternalShareEntry($shareData1, $openShares[0], 1, '{{TemporaryMountPointName#' . $shareData1['name'] . '}}');
- self::invokePrivate($this->manager, 'setupMounts');
+ $this->setupMounts();
$this->assertNotMount('SharedFolder');
$this->assertNotMount('{{TemporaryMountPointName#' . $shareData1['name'] . '}}');
@@ -89,7 +110,7 @@ class ManagerTest extends TestCase {
// New share falls back to "-1" appendix, because the name is already taken
$this->assertExternalShareEntry($shareData2, $openShares[1], 2, '{{TemporaryMountPointName#' . $shareData2['name'] . '}}-1');
- self::invokePrivate($this->manager, 'setupMounts');
+ $this->setupMounts();
$this->assertNotMount('SharedFolder');
$this->assertNotMount('{{TemporaryMountPointName#' . $shareData1['name'] . '}}');
$this->assertNotMount('{{TemporaryMountPointName#' . $shareData1['name'] . '}}-1');
@@ -111,7 +132,7 @@ class ManagerTest extends TestCase {
$this->assertCount(1, $openShares);
$this->assertExternalShareEntry($shareData2, $openShares[0], 2, '{{TemporaryMountPointName#' . $shareData2['name'] . '}}-1');
- self::invokePrivate($this->manager, 'setupMounts');
+ $this->setupMounts();
$this->assertMount($shareData1['name']);
$this->assertNotMount('{{TemporaryMountPointName#' . $shareData1['name'] . '}}');
$this->assertNotMount('{{TemporaryMountPointName#' . $shareData1['name'] . '}}-1');
@@ -124,7 +145,7 @@ class ManagerTest extends TestCase {
// New share falls back to the original name (no "-\d", because the name is not taken)
$this->assertExternalShareEntry($shareData3, $openShares[1], 3, '{{TemporaryMountPointName#' . $shareData3['name'] . '}}');
- self::invokePrivate($this->manager, 'setupMounts');
+ $this->setupMounts();
$this->assertMount($shareData1['name']);
$this->assertNotMount('{{TemporaryMountPointName#' . $shareData1['name'] . '}}');
$this->assertNotMount('{{TemporaryMountPointName#' . $shareData1['name'] . '}}-1');
@@ -136,7 +157,7 @@ class ManagerTest extends TestCase {
// Decline the third share
$this->manager->declineShare($openShares[1]['id']);
- self::invokePrivate($this->manager, 'setupMounts');
+ $this->setupMounts();
$this->assertMount($shareData1['name']);
$this->assertNotMount('{{TemporaryMountPointName#' . $shareData1['name'] . '}}');
$this->assertNotMount('{{TemporaryMountPointName#' . $shareData1['name'] . '}}-1');
@@ -151,7 +172,7 @@ class ManagerTest extends TestCase {
$this->assertCount(1, $openShares);
$this->assertExternalShareEntry($shareData2, $openShares[0], 2, '{{TemporaryMountPointName#' . $shareData2['name'] . '}}-1');
- self::invokePrivate($this->manager, 'setupMounts');
+ $this->setupMounts();
$this->assertMount($shareData1['name']);
$this->assertNotMount('{{TemporaryMountPointName#' . $shareData1['name'] . '}}');
$this->assertNotMount('{{TemporaryMountPointName#' . $shareData1['name'] . '}}-1');