diff options
Diffstat (limited to 'apps/files_sharing')
-rw-r--r-- | apps/files_sharing/application.php | 5 | ||||
-rw-r--r-- | apps/files_sharing/l10n/pl.js | 8 | ||||
-rw-r--r-- | apps/files_sharing/l10n/pl.json | 8 | ||||
-rw-r--r-- | apps/files_sharing/l10n/uk.js | 13 | ||||
-rw-r--r-- | apps/files_sharing/l10n/uk.json | 13 | ||||
-rw-r--r-- | apps/files_sharing/lib/controllers/sharecontroller.php | 41 | ||||
-rw-r--r-- | apps/files_sharing/lib/external/storage.php | 2 | ||||
-rw-r--r-- | apps/files_sharing/lib/middleware/sharingcheckmiddleware.php | 3 | ||||
-rw-r--r-- | apps/files_sharing/public.php | 2 | ||||
-rw-r--r-- | apps/files_sharing/templates/public.php | 7 | ||||
-rw-r--r-- | apps/files_sharing/tests/api.php | 18 | ||||
-rw-r--r-- | apps/files_sharing/tests/controller/sharecontroller.php | 63 | ||||
-rw-r--r-- | apps/files_sharing/tests/external/manager.php | 142 | ||||
-rw-r--r-- | apps/files_sharing/tests/sharedstorage.php | 3 |
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) |