summaryrefslogtreecommitdiffstats
path: root/apps/files_sharing
diff options
context:
space:
mode:
Diffstat (limited to 'apps/files_sharing')
-rw-r--r--apps/files_sharing/application.php5
-rw-r--r--apps/files_sharing/l10n/pl.js8
-rw-r--r--apps/files_sharing/l10n/pl.json8
-rw-r--r--apps/files_sharing/l10n/uk.js13
-rw-r--r--apps/files_sharing/l10n/uk.json13
-rw-r--r--apps/files_sharing/lib/controllers/sharecontroller.php41
-rw-r--r--apps/files_sharing/lib/external/storage.php2
-rw-r--r--apps/files_sharing/lib/middleware/sharingcheckmiddleware.php3
-rw-r--r--apps/files_sharing/public.php2
-rw-r--r--apps/files_sharing/templates/public.php7
-rw-r--r--apps/files_sharing/tests/api.php18
-rw-r--r--apps/files_sharing/tests/controller/sharecontroller.php63
-rw-r--r--apps/files_sharing/tests/external/manager.php142
-rw-r--r--apps/files_sharing/tests/sharedstorage.php3
14 files changed, 287 insertions, 41 deletions
diff --git a/apps/files_sharing/application.php b/apps/files_sharing/application.php
index 3302848106f..e23960cf2bb 100644
--- a/apps/files_sharing/application.php
+++ b/apps/files_sharing/application.php
@@ -42,7 +42,7 @@ class Application extends App {
$server->getAppConfig(),
$server->getConfig(),
$c->query('URLGenerator'),
- $server->getUserManager(),
+ $c->query('UserManager'),
$server->getLogger(),
$server->getActivityManager()
);
@@ -65,6 +65,9 @@ class Application extends App {
$container->registerService('URLGenerator', function(SimpleContainer $c) use ($server){
return $server->getUrlGenerator();
});
+ $container->registerService('UserManager', function(SimpleContainer $c) use ($server){
+ return $server->getUserManager();
+ });
$container->registerService('IsIncomingShareEnabled', function(SimpleContainer $c) {
return Helper::isIncomingServer2serverShareEnabled();
});
diff --git a/apps/files_sharing/l10n/pl.js b/apps/files_sharing/l10n/pl.js
index e546533240d..2a8fd58dfd5 100644
--- a/apps/files_sharing/l10n/pl.js
+++ b/apps/files_sharing/l10n/pl.js
@@ -4,11 +4,18 @@ OC.L10N.register(
"Server to server sharing is not enabled on this server" : "Współdzielenie między serwerami nie jest uruchomione na tym serwerze",
"The mountpoint name contains invalid characters." : "Nazwa zamontowanego zasobu zawiera niedozwolone znaki.",
"Invalid or untrusted SSL certificate" : "Niewłaściwy lub niezaufany certyfikat SSL",
+ "Could not authenticate to remote share, password might be wrong" : "Nie można zalogować do zdalnego zasobu, hasło może być niepoprawne",
+ "Storage not valid" : "Zasób nie jest prawidłowy",
"Couldn't add remote share" : "Nie można dodać zdalnego folderu",
"Shared with you" : "Współdzielony z Tobą",
"Shared with others" : "Współdzielony z innymi",
"Shared by link" : "Współdzielony linkiem",
+ "Nothing shared with you yet" : "Nie masz jeszcze nic udostępnionego",
+ "Files and folders others share with you will show up here" : "Pliki i foldery udostępnione Tobie przez innych wyświetlą się tutaj",
+ "Nothing shared yet" : "Jeszcze nic nie udostępniono",
+ "Files and folders you share will show up here" : "Plik i foldery, które udostępniasz, pokażą się tutaj",
"No shared links" : "Brak udostępnionych odnośników",
+ "Files and folders you share by link will show up here" : "Plik i foldery, które udostępniasz, pokażą się tutaj",
"Do you want to add the remote share {name} from {owner}@{remote}?" : "Czy chcesz dodać udział zdalny {name} od {owner}@{remote}?",
"Remote share" : "Zdalny zasób",
"Remote share password" : "Hasło do zdalnego zasobu",
@@ -26,6 +33,7 @@ OC.L10N.register(
"This share is password-protected" : "Udział ten jest chroniony hasłem",
"The password is wrong. Try again." : "To hasło jest niewłaściwe. Spróbuj ponownie.",
"Password" : "Hasło",
+ "No entries found in this folder" : "Brak wpisów w tym folderze",
"Name" : "Nazwa",
"Share time" : "Czas współdzielenia",
"Sorry, this link doesn’t seem to work anymore." : "Przepraszamy ale wygląda na to, że ten link już nie działa.",
diff --git a/apps/files_sharing/l10n/pl.json b/apps/files_sharing/l10n/pl.json
index 75b345e2f7c..5071051a96f 100644
--- a/apps/files_sharing/l10n/pl.json
+++ b/apps/files_sharing/l10n/pl.json
@@ -2,11 +2,18 @@
"Server to server sharing is not enabled on this server" : "Współdzielenie między serwerami nie jest uruchomione na tym serwerze",
"The mountpoint name contains invalid characters." : "Nazwa zamontowanego zasobu zawiera niedozwolone znaki.",
"Invalid or untrusted SSL certificate" : "Niewłaściwy lub niezaufany certyfikat SSL",
+ "Could not authenticate to remote share, password might be wrong" : "Nie można zalogować do zdalnego zasobu, hasło może być niepoprawne",
+ "Storage not valid" : "Zasób nie jest prawidłowy",
"Couldn't add remote share" : "Nie można dodać zdalnego folderu",
"Shared with you" : "Współdzielony z Tobą",
"Shared with others" : "Współdzielony z innymi",
"Shared by link" : "Współdzielony linkiem",
+ "Nothing shared with you yet" : "Nie masz jeszcze nic udostępnionego",
+ "Files and folders others share with you will show up here" : "Pliki i foldery udostępnione Tobie przez innych wyświetlą się tutaj",
+ "Nothing shared yet" : "Jeszcze nic nie udostępniono",
+ "Files and folders you share will show up here" : "Plik i foldery, które udostępniasz, pokażą się tutaj",
"No shared links" : "Brak udostępnionych odnośników",
+ "Files and folders you share by link will show up here" : "Plik i foldery, które udostępniasz, pokażą się tutaj",
"Do you want to add the remote share {name} from {owner}@{remote}?" : "Czy chcesz dodać udział zdalny {name} od {owner}@{remote}?",
"Remote share" : "Zdalny zasób",
"Remote share password" : "Hasło do zdalnego zasobu",
@@ -24,6 +31,7 @@
"This share is password-protected" : "Udział ten jest chroniony hasłem",
"The password is wrong. Try again." : "To hasło jest niewłaściwe. Spróbuj ponownie.",
"Password" : "Hasło",
+ "No entries found in this folder" : "Brak wpisów w tym folderze",
"Name" : "Nazwa",
"Share time" : "Czas współdzielenia",
"Sorry, this link doesn’t seem to work anymore." : "Przepraszamy ale wygląda na to, że ten link już nie działa.",
diff --git a/apps/files_sharing/l10n/uk.js b/apps/files_sharing/l10n/uk.js
index 8df743791e1..657954a5de5 100644
--- a/apps/files_sharing/l10n/uk.js
+++ b/apps/files_sharing/l10n/uk.js
@@ -2,18 +2,20 @@ OC.L10N.register(
"files_sharing",
{
"Server to server sharing is not enabled on this server" : "На даному сервері вимкнута можливість передачі даних між серверами",
- "The mountpoint name contains invalid characters." : "Ім'я точки монтування містить неприпустимі символи.",
+ "The mountpoint name contains invalid characters." : "Ім’я точки монтування містить неприпустимі символи.",
"Invalid or untrusted SSL certificate" : "Недійсній або не довірений SSL-сертифікат",
+ "Could not authenticate to remote share, password might be wrong" : "Не вдалося провести аутентифікацію для доступу до віддаленого сховища, можливо неправильно вказано пароль",
+ "Storage not valid" : "Cховище недоступне",
"Couldn't add remote share" : "Неможливо додати віддалену загальну теку",
"Shared with you" : "Доступне для вас",
"Shared with others" : "Доступне для інших",
"Shared by link" : "Доступне за посиланням",
"Nothing shared with you yet" : "Ніхто з вами ще не поділився файлами",
- "Files and folders others share with you will show up here" : "Розшарені для вас файли і папки з'являться тут",
+ "Files and folders others share with you will show up here" : "Розшарені для вас файли і папки з’являться тут",
"Nothing shared yet" : "Немає нічого розшареного",
- "Files and folders you share will show up here" : "Файли і папки, які розшарені для вас відображатимуться тут",
+ "Files and folders you share will show up here" : "Файли і папки, які розшарені вами відображатимуться тут",
"No shared links" : "Немає опублікованих посилань",
- "Files and folders you share by link will show up here" : "Файли і папки, якими ви поділитися по посиланню будуть відображатися тут",
+ "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" : "Пароль для віддаленої загальної теки",
@@ -41,7 +43,7 @@ OC.L10N.register(
"The password is wrong. Try again." : "Невірний пароль. Спробуйте ще раз.",
"Password" : "Пароль",
"No entries found in this folder" : "Записів не знайдено в цій папці",
- "Name" : "Ім'я",
+ "Name" : "Ім’я",
"Share time" : "Дата публікації",
"Sorry, this link doesn’t seem to work anymore." : "На жаль, посилання більше не працює.",
"Reasons might be:" : "Можливі причини:",
@@ -53,6 +55,7 @@ OC.L10N.register(
"Download" : "Завантажити",
"Download %s" : "Завантажити %s",
"Direct link" : "Пряме посилання",
+ "Federated Cloud Sharing" : "Об’єднання хмарних сховищ",
"Allow users on this server to send shares to other servers" : "Дозволити користувачам цього сервера публікувати на інших серверах",
"Allow users on this server to receive shares from other servers" : "Дозволити користувачам на цьому сервері отримувати публікації з інших серверів"
},
diff --git a/apps/files_sharing/l10n/uk.json b/apps/files_sharing/l10n/uk.json
index 7cfb0f98ade..d4fb8c7dfe5 100644
--- a/apps/files_sharing/l10n/uk.json
+++ b/apps/files_sharing/l10n/uk.json
@@ -1,17 +1,19 @@
{ "translations": {
"Server to server sharing is not enabled on this server" : "На даному сервері вимкнута можливість передачі даних між серверами",
- "The mountpoint name contains invalid characters." : "Ім'я точки монтування містить неприпустимі символи.",
+ "The mountpoint name contains invalid characters." : "Ім’я точки монтування містить неприпустимі символи.",
"Invalid or untrusted SSL certificate" : "Недійсній або не довірений SSL-сертифікат",
+ "Could not authenticate to remote share, password might be wrong" : "Не вдалося провести аутентифікацію для доступу до віддаленого сховища, можливо неправильно вказано пароль",
+ "Storage not valid" : "Cховище недоступне",
"Couldn't add remote share" : "Неможливо додати віддалену загальну теку",
"Shared with you" : "Доступне для вас",
"Shared with others" : "Доступне для інших",
"Shared by link" : "Доступне за посиланням",
"Nothing shared with you yet" : "Ніхто з вами ще не поділився файлами",
- "Files and folders others share with you will show up here" : "Розшарені для вас файли і папки з'являться тут",
+ "Files and folders others share with you will show up here" : "Розшарені для вас файли і папки з’являться тут",
"Nothing shared yet" : "Немає нічого розшареного",
- "Files and folders you share will show up here" : "Файли і папки, які розшарені для вас відображатимуться тут",
+ "Files and folders you share will show up here" : "Файли і папки, які розшарені вами відображатимуться тут",
"No shared links" : "Немає опублікованих посилань",
- "Files and folders you share by link will show up here" : "Файли і папки, якими ви поділитися по посиланню будуть відображатися тут",
+ "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" : "Пароль для віддаленої загальної теки",
@@ -39,7 +41,7 @@
"The password is wrong. Try again." : "Невірний пароль. Спробуйте ще раз.",
"Password" : "Пароль",
"No entries found in this folder" : "Записів не знайдено в цій папці",
- "Name" : "Ім'я",
+ "Name" : "Ім’я",
"Share time" : "Дата публікації",
"Sorry, this link doesn’t seem to work anymore." : "На жаль, посилання більше не працює.",
"Reasons might be:" : "Можливі причини:",
@@ -51,6 +53,7 @@
"Download" : "Завантажити",
"Download %s" : "Завантажити %s",
"Direct link" : "Пряме посилання",
+ "Federated Cloud Sharing" : "Об’єднання хмарних сховищ",
"Allow users on this server to send shares to other servers" : "Дозволити користувачам цього сервера публікувати на інших серверах",
"Allow users on this server to receive shares from other servers" : "Дозволити користувачам на цьому сервері отримувати публікації з інших серверів"
},"pluralForm" :"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);"
diff --git a/apps/files_sharing/lib/controllers/sharecontroller.php b/apps/files_sharing/lib/controllers/sharecontroller.php
index ebc54265bf0..2f69583b412 100644
--- a/apps/files_sharing/lib/controllers/sharecontroller.php
+++ b/apps/files_sharing/lib/controllers/sharecontroller.php
@@ -17,12 +17,12 @@ use OC_Files;
use OC_Util;
use OCP;
use OCP\Template;
-use OCP\JSON;
use OCP\Share;
use OCP\AppFramework\Controller;
use OCP\IRequest;
use OCP\AppFramework\Http\TemplateResponse;
use OCP\AppFramework\Http\RedirectResponse;
+use OCP\AppFramework\Http\NotFoundResponse;
use OC\URLGenerator;
use OC\AppConfig;
use OCP\ILogger;
@@ -60,7 +60,7 @@ class ShareController extends Controller {
* @param AppConfig $appConfig
* @param OCP\IConfig $config
* @param URLGenerator $urlGenerator
- * @param OC\User\Manager $userManager
+ * @param OCP\IUserManager $userManager
* @param ILogger $logger
* @param OCP\Activity\IManager $activityManager
*/
@@ -70,7 +70,7 @@ class ShareController extends Controller {
AppConfig $appConfig,
OCP\IConfig $config,
URLGenerator $urlGenerator,
- OC\User\Manager $userManager,
+ OCP\IUserManager $userManager,
ILogger $logger,
OCP\Activity\IManager $activityManager) {
parent::__construct($appName, $request);
@@ -113,7 +113,7 @@ class ShareController extends Controller {
public function authenticate($token, $password = '') {
$linkItem = Share::getShareByToken($token, false);
if($linkItem === false) {
- return new TemplateResponse('core', '404', array(), 'guest');
+ return new NotFoundResponse();
}
$authenticate = Helper::authenticate($linkItem, $password);
@@ -139,18 +139,11 @@ class ShareController extends Controller {
// Check whether share exists
$linkItem = Share::getShareByToken($token, false);
if($linkItem === false) {
- return new TemplateResponse('core', '404', array(), 'guest');
+ return new NotFoundResponse();
}
$shareOwner = $linkItem['uid_owner'];
- $originalSharePath = null;
- $rootLinkItem = OCP\Share::resolveReShare($linkItem);
- if (isset($rootLinkItem['uid_owner'])) {
- OCP\JSON::checkUserExists($rootLinkItem['uid_owner']);
- OC_Util::tearDownFS();
- OC_Util::setupFS($rootLinkItem['uid_owner']);
- $originalSharePath = Filesystem::getPath($linkItem['file_source']);
- }
+ $originalSharePath = $this->getPath($token);
// Share is password protected - check whether the user is permitted to access the share
if (isset($linkItem['share_with']) && !Helper::authenticate($linkItem)) {
@@ -161,15 +154,18 @@ class ShareController extends Controller {
if (Filesystem::isReadable($originalSharePath . $path)) {
$getPath = Filesystem::normalizePath($path);
$originalSharePath .= $path;
+ } else {
+ throw new OCP\Files\NotFoundException();
}
$file = basename($originalSharePath);
- $shareTmpl = array();
+ $shareTmpl = [];
$shareTmpl['displayName'] = User::getDisplayName($shareOwner);
$shareTmpl['filename'] = $file;
$shareTmpl['directory_path'] = $linkItem['file_target'];
$shareTmpl['mimetype'] = Filesystem::getMimeType($originalSharePath);
+ $shareTmpl['previewSupported'] = \OC::$server->getPreviewManager()->isMimeSupported($shareTmpl['mimetype']);
$shareTmpl['dirToken'] = $linkItem['token'];
$shareTmpl['sharingToken'] = $token;
$shareTmpl['server2serversharing'] = Helper::isOutgoingServer2serverShareEnabled();
@@ -288,22 +284,29 @@ class ShareController extends Controller {
}
/**
- * @param $token
- * @return null|string
+ * @param string $token
+ * @return string Resolved file path of the token
+ * @throws \Exception In case share could not get properly resolved
*/
private function getPath($token) {
$linkItem = Share::getShareByToken($token, false);
- $path = null;
if (is_array($linkItem) && isset($linkItem['uid_owner'])) {
// seems to be a valid share
$rootLinkItem = Share::resolveReShare($linkItem);
if (isset($rootLinkItem['uid_owner'])) {
- JSON::checkUserExists($rootLinkItem['uid_owner']);
+ if(!$this->userManager->userExists($rootLinkItem['uid_owner'])) {
+ throw new \Exception('Owner of the share does not exist anymore');
+ }
OC_Util::tearDownFS();
OC_Util::setupFS($rootLinkItem['uid_owner']);
$path = Filesystem::getPath($linkItem['file_source']);
+
+ if(!empty($path) && Filesystem::isReadable($path)) {
+ return $path;
+ }
}
}
- return $path;
+
+ throw new \Exception('No file found belonging to file.');
}
}
diff --git a/apps/files_sharing/lib/external/storage.php b/apps/files_sharing/lib/external/storage.php
index 648376e8cb5..51c4a36029e 100644
--- a/apps/files_sharing/lib/external/storage.php
+++ b/apps/files_sharing/lib/external/storage.php
@@ -70,7 +70,7 @@ class Storage extends DAV implements ISharedStorage {
'host' => $host,
'root' => $root,
'user' => $options['token'],
- 'password' => $options['password']
+ 'password' => (string)$options['password']
));
}
diff --git a/apps/files_sharing/lib/middleware/sharingcheckmiddleware.php b/apps/files_sharing/lib/middleware/sharingcheckmiddleware.php
index 3508407f2a0..3e7cdf4aa34 100644
--- a/apps/files_sharing/lib/middleware/sharingcheckmiddleware.php
+++ b/apps/files_sharing/lib/middleware/sharingcheckmiddleware.php
@@ -11,6 +11,7 @@
namespace OCA\Files_Sharing\Middleware;
use OCP\App\IAppManager;
+use OCP\AppFramework\Http\NotFoundResponse;
use OCP\AppFramework\Middleware;
use OCP\AppFramework\Http\TemplateResponse;
use OCP\IConfig;
@@ -59,7 +60,7 @@ class SharingCheckMiddleware extends Middleware {
* @return TemplateResponse
*/
public function afterException($controller, $methodName, \Exception $exception){
- return new TemplateResponse('core', '404', array(), 'guest');
+ return new NotFoundResponse();
}
/**
diff --git a/apps/files_sharing/public.php b/apps/files_sharing/public.php
index 50a6432dd95..9e4e8d23151 100644
--- a/apps/files_sharing/public.php
+++ b/apps/files_sharing/public.php
@@ -10,7 +10,7 @@
// This file is just used to redirect the legacy sharing URLs (< ownCloud 8) to the new ones
-$urlGenerator = new \OC\URLGenerator(\OC::$server->getConfig());
+$urlGenerator = \OC::$server->getURLGenerator();
$token = isset($_GET['t']) ? $_GET['t'] : '';
$route = isset($_GET['download']) ? 'files_sharing.sharecontroller.downloadShare' : 'files_sharing.sharecontroller.showShare';
diff --git a/apps/files_sharing/templates/public.php b/apps/files_sharing/templates/public.php
index 4ec4d264b31..fa349f29811 100644
--- a/apps/files_sharing/templates/public.php
+++ b/apps/files_sharing/templates/public.php
@@ -19,11 +19,10 @@ OCP\Util::addScript('files', 'files');
OCP\Util::addScript('files', 'filelist');
OCP\Util::addscript('files', 'keyboardshortcuts');
-$thumbSize=1024;
-$previewSupported = OC\Preview::isMimeSupported($_['mimetype']) ? 'true' : 'false';
+$thumbSize = 1024;
?>
-<?php if ( \OC\Preview::isMimeSupported($_['mimetype'])): /* This enables preview images for links (e.g. on Facebook, Google+, ...)*/?>
+<?php if ($_['previewSupported']): /* This enables preview images for links (e.g. on Facebook, Google+, ...)*/?>
<link rel="image_src" href="<?php p(OCP\Util::linkToRoute( 'core_ajax_public_preview', array('x' => $thumbSize, 'y' => $thumbSize, 'file' => $_['directory_path'], 't' => $_['dirToken']))); ?>" />
<?php endif; ?>
@@ -38,7 +37,7 @@ $previewSupported = OC\Preview::isMimeSupported($_['mimetype']) ? 'true' : 'fals
<input type="hidden" name="sharingToken" value="<?php p($_['sharingToken']) ?>" id="sharingToken">
<input type="hidden" name="filename" value="<?php p($_['filename']) ?>" id="filename">
<input type="hidden" name="mimetype" value="<?php p($_['mimetype']) ?>" id="mimetype">
-<input type="hidden" name="previewSupported" value="<?php p($previewSupported); ?>" id="previewSupported">
+<input type="hidden" name="previewSupported" value="<?php p($_['previewSupported'] ? 'true' : 'false'); ?>" id="previewSupported">
<input type="hidden" name="mimetypeIcon" value="<?php p(OC_Helper::mimetypeIcon($_['mimetype'])); ?>" id="mimetypeIcon">
<input type="hidden" name="filesize" value="<?php p($_['nonHumanFileSize']); ?>" id="filesize">
<input type="hidden" name="maxSizeAnimateGif" value="<?php p($_['maxSizeAnimateGif']); ?>" id="maxSizeAnimateGif">
diff --git a/apps/files_sharing/tests/api.php b/apps/files_sharing/tests/api.php
index 9256f9bcc85..371c94a8c88 100644
--- a/apps/files_sharing/tests/api.php
+++ b/apps/files_sharing/tests/api.php
@@ -1079,6 +1079,24 @@ class Test_Files_Sharing_Api extends TestCase {
$this->assertTrue(is_array($updatedLinkShare));
$this->assertEquals($dateWithinRange->format('Y-m-d') . ' 00:00:00', $updatedLinkShare['expiration']);
+
+ // Try to remove expire date
+ $params = array();
+ $params['id'] = $linkShare['id'];
+ $params['_put'] = ['expireDate' => ''];
+
+ $result = \OCA\Files_Sharing\API\Local::updateShare($params);
+
+ $this->assertFalse($result->succeeded());
+
+ $items = \OCP\Share::getItemShared('file', $linkShare['file_source']);
+
+ $updatedLinkShare = reset($items);
+
+ // date shouldn't be changed
+ $this->assertTrue(is_array($updatedLinkShare));
+ $this->assertEquals($dateWithinRange->format('Y-m-d') . ' 00:00:00', $updatedLinkShare['expiration']);
+
// cleanup
$config->setAppValue('core', 'shareapi_default_expire_date', 'no');
$config->setAppValue('core', 'shareapi_enforce_expire_date', 'no');
diff --git a/apps/files_sharing/tests/controller/sharecontroller.php b/apps/files_sharing/tests/controller/sharecontroller.php
index 81e60b03cdc..204422853d0 100644
--- a/apps/files_sharing/tests/controller/sharecontroller.php
+++ b/apps/files_sharing/tests/controller/sharecontroller.php
@@ -12,6 +12,7 @@ namespace OCA\Files_Sharing\Controllers;
use OC\Files\Filesystem;
use OCA\Files_Sharing\Application;
+use OCP\AppFramework\Http\NotFoundResponse;
use OCP\AppFramework\IAppContainer;
use OCP\Files;
use OCP\AppFramework\Http\RedirectResponse;
@@ -49,6 +50,8 @@ class ShareControllerTest extends \Test\TestCase {
->disableOriginalConstructor()->getMock();
$this->container['URLGenerator'] = $this->getMockBuilder('\OC\URLGenerator')
->disableOriginalConstructor()->getMock();
+ $this->container['UserManager'] = $this->getMockBuilder('\OCP\IUserManager')
+ ->disableOriginalConstructor()->getMock();
$this->urlGenerator = $this->container['URLGenerator'];
$this->shareController = $this->container['ShareController'];
@@ -115,7 +118,7 @@ class ShareControllerTest extends \Test\TestCase {
public function testAuthenticate() {
// Test without a not existing token
$response = $this->shareController->authenticate('ThisTokenShouldHopefullyNeverExistSoThatTheUnitTestWillAlwaysPass :)');
- $expectedResponse = new TemplateResponse('core', '404', array(), 'guest');
+ $expectedResponse = new NotFoundResponse();
$this->assertEquals($expectedResponse, $response);
// Test with a valid password
@@ -130,9 +133,14 @@ class ShareControllerTest extends \Test\TestCase {
}
public function testShowShare() {
+ $this->container['UserManager']->expects($this->exactly(2))
+ ->method('userExists')
+ ->with($this->user)
+ ->will($this->returnValue(true));
+
// Test without a not existing token
$response = $this->shareController->showShare('ThisTokenShouldHopefullyNeverExistSoThatTheUnitTestWillAlwaysPass :)');
- $expectedResponse = new TemplateResponse('core', '404', array(), 'guest');
+ $expectedResponse = new NotFoundResponse();
$this->assertEquals($expectedResponse, $response);
// Test with a password protected share and no authentication
@@ -158,6 +166,7 @@ class ShareControllerTest extends \Test\TestCase {
'fileSize' => '33 B',
'nonHumanFileSize' => 33,
'maxSizeAnimateGif' => 10,
+ 'previewSupported' => true,
);
$csp = new \OCP\AppFramework\Http\ContentSecurityPolicy();
@@ -175,4 +184,54 @@ class ShareControllerTest extends \Test\TestCase {
array('token' => $this->token)));
$this->assertEquals($expectedResponse, $response);
}
+
+ /**
+ * @expectedException \Exception
+ * @expectedExceptionMessage No file found belonging to file.
+ */
+ public function testShowShareWithDeletedFile() {
+ $this->container['UserManager']->expects($this->once())
+ ->method('userExists')
+ ->with($this->user)
+ ->will($this->returnValue(true));
+
+ $view = new View('/'. $this->user . '/files');
+ $view->unlink('file1.txt');
+ $linkItem = Share::getShareByToken($this->token, false);
+ \OC::$server->getSession()->set('public_link_authenticated', $linkItem['id']);
+ $this->shareController->showShare($this->token);
+ }
+
+ /**
+ * @expectedException \Exception
+ * @expectedExceptionMessage No file found belonging to file.
+ */
+ public function testDownloadShareWithDeletedFile() {
+ $this->container['UserManager']->expects($this->once())
+ ->method('userExists')
+ ->with($this->user)
+ ->will($this->returnValue(true));
+
+ $view = new View('/'. $this->user . '/files');
+ $view->unlink('file1.txt');
+ $linkItem = Share::getShareByToken($this->token, false);
+ \OC::$server->getSession()->set('public_link_authenticated', $linkItem['id']);
+ $this->shareController->downloadShare($this->token);
+ }
+
+ /**
+ * @expectedException \Exception
+ * @expectedExceptionMessage Owner of the share does not exist anymore
+ */
+ public function testShowShareWithNotExistingUser() {
+ $this->container['UserManager']->expects($this->once())
+ ->method('userExists')
+ ->with($this->user)
+ ->will($this->returnValue(false));
+
+ $linkItem = Share::getShareByToken($this->token, false);
+ \OC::$server->getSession()->set('public_link_authenticated', $linkItem['id']);
+ $this->shareController->showShare($this->token);
+ }
+
}
diff --git a/apps/files_sharing/tests/external/manager.php b/apps/files_sharing/tests/external/manager.php
new file mode 100644
index 00000000000..dcb3dfba692
--- /dev/null
+++ b/apps/files_sharing/tests/external/manager.php
@@ -0,0 +1,142 @@
+<?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\Tests\External;
+
+use OC\Files\Storage\StorageFactory;
+use Test\TestCase;
+
+class Manager extends TestCase {
+ private $uid;
+
+ /**
+ * @var \OC\Files\Mount\Manager
+ */
+ private $mountManager;
+
+ /**
+ * @var \OCA\Files_Sharing\External\Manager
+ */
+ private $instance;
+
+ public function setUp() {
+ $this->uid = uniqid();
+ $this->mountManager = new \OC\Files\Mount\Manager();
+ $this->instance = new \OCA\Files_Sharing\External\Manager(\OC::$server->getDatabaseConnection(),
+ $this->mountManager, new StorageFactory(), \OC::$server->getHTTPHelper(), $this->uid);
+ }
+
+ public function tearDown() {
+ $this->instance->removeUserShares($this->uid);
+ }
+
+ private function getFullPath($path) {
+ return '/' . $this->uid . '/files' . $path;
+ }
+
+ private function assertMount($mountPoint) {
+ $mountPoint = rtrim($mountPoint, '/');
+ $mount = $this->mountManager->find($this->getFullPath($mountPoint));
+ $this->assertInstanceOf('\OCP\Files\Mount\IMountPoint', $mount);
+ $this->assertEquals($this->getFullPath($mountPoint), rtrim($mount->getMountPoint(), '/'));
+ $storage = $mount->getStorage();
+ $this->assertInstanceOf('\OCA\Files_Sharing\External\Storage', $storage);
+ }
+
+ private function assertNotMount($mountPoint) {
+ $mountPoint = rtrim($mountPoint, '/');
+ $mount = $this->mountManager->find($this->getFullPath($mountPoint));
+ if ($mount) {
+ $this->assertInstanceOf('\OCP\Files\Mount\IMountPoint', $mount);
+ $this->assertNotEquals($this->getFullPath($mountPoint), rtrim($mount->getMountPoint(), '/'));
+ } else {
+ $this->assertNull($mount);
+ }
+ }
+
+ public function testAddBasic() {
+ $this->instance->addShare('http://example.com', 'foo', 'bar', 'example', 'me', true);
+ \Test_Helper::invokePrivate($this->instance, 'setupMounts');
+ $this->assertMount('/example');
+ }
+
+ public function testAddBasicEmptyPassword() {
+ $this->instance->addShare('http://example.com', 'foo', '', 'example', 'me', true);
+ \Test_Helper::invokePrivate($this->instance, 'setupMounts');
+ $this->assertMount('/example');
+ }
+
+ public function testAddNotAcceptedShare() {
+ $this->instance->addShare('http://example.com', 'foo', 'bar', 'example', 'me', false);
+ \Test_Helper::invokePrivate($this->instance, 'setupMounts');
+ $this->assertNotMount('/example');
+ }
+
+ public function testAcceptMount() {
+ $this->instance->addShare('http://example.com', 'foo', 'bar', 'example', 'me', false);
+ $open = $this->instance->getOpenShares();
+ $this->assertCount(1, $open);
+ $this->instance->acceptShare($open[0]['id']);
+ $this->assertEquals([], $this->instance->getOpenShares());
+ \Test_Helper::invokePrivate($this->instance, 'setupMounts');
+ $this->assertMount('/example');
+ }
+
+ public function testDeclineMount() {
+ $this->instance->addShare('http://example.com', 'foo', 'bar', 'example', 'me', false);
+ $open = $this->instance->getOpenShares();
+ $this->assertCount(1, $open);
+ $this->instance->declineShare($open[0]['id']);
+ $this->assertEquals([], $this->instance->getOpenShares());
+ \Test_Helper::invokePrivate($this->instance, 'setupMounts');
+ $this->assertNotMount('/example');
+ }
+
+ public function testSetMountPoint() {
+ $this->instance->addShare('http://example.com', 'foo', 'bar', 'example', 'me', true);
+ \Test_Helper::invokePrivate($this->instance, 'setupMounts');
+ $this->assertMount('/example');
+ $this->instance->setMountPoint($this->getFullPath('/example'), $this->getFullPath('/renamed'));
+ $this->mountManager->clear();
+ \Test_Helper::invokePrivate($this->instance, 'setupMounts');
+ $this->assertMount('/renamed');
+ $this->assertNotMount('/example');
+ }
+
+ public function testRemoveShare() {
+ $this->instance->addShare('http://example.com', 'foo', 'bar', 'example', 'me', true);
+ \Test_Helper::invokePrivate($this->instance, 'setupMounts');
+ $this->assertMount('/example');
+ $this->instance->removeShare($this->getFullPath('/example'));
+ $this->mountManager->clear();
+ \Test_Helper::invokePrivate($this->instance, 'setupMounts');
+ $this->assertNotMount('/example');
+ }
+
+ public function testRemoveShareForUser() {
+ $this->instance->addShare('http://example.com', 'foo', 'bar', 'example', 'me', true);
+ \Test_Helper::invokePrivate($this->instance, 'setupMounts');
+ $this->assertMount('/example');
+ $this->instance->removeUserShares($this->uid);
+ $this->mountManager->clear();
+ \Test_Helper::invokePrivate($this->instance, 'setupMounts');
+ $this->assertNotMount('/example');
+ }
+}
diff --git a/apps/files_sharing/tests/sharedstorage.php b/apps/files_sharing/tests/sharedstorage.php
index 2959b9aacfb..46f75b488b5 100644
--- a/apps/files_sharing/tests/sharedstorage.php
+++ b/apps/files_sharing/tests/sharedstorage.php
@@ -182,9 +182,8 @@ class Test_Files_Sharing_Storage extends OCA\Files_sharing\Tests\TestCase {
// for the share root we expect:
// the shared permissions (1)
// the delete permission (8), to enable unshare
- // the update permission (2), to allow renaming of the mount point
$rootInfo = \OC\Files\Filesystem::getFileInfo($this->folder);
- $this->assertSame(11, $rootInfo->getPermissions());
+ $this->assertSame(9, $rootInfo->getPermissions());
// for the file within the shared folder we expect:
// the shared permissions (1)