diff options
-rw-r--r-- | controller/pagecontroller.php | 6 | ||||
-rw-r--r-- | environment/environment.php | 29 | ||||
-rw-r--r-- | service/searchfolderservice.php | 2 | ||||
-rw-r--r-- | tests/integration/appinfo/AppTest.php | 2 | ||||
-rw-r--r-- | tests/integration/bootstrap.php | 26 | ||||
-rw-r--r-- | tests/integration/environment/EnvironmentTest.php | 138 |
6 files changed, 162 insertions, 41 deletions
diff --git a/controller/pagecontroller.php b/controller/pagecontroller.php index 1aec7ef3..e90d7d68 100644 --- a/controller/pagecontroller.php +++ b/controller/pagecontroller.php @@ -248,9 +248,9 @@ class PageController extends Controller { 'files_sharing', 'outgoing_server2server_share_enabled', 'yes' ); $server2ServerSharing = ($server2ServerSharing === 'yes') ? true : false; - $protected = $this->environment->isShareProtected(); - $protected = ($protected) ? 'true' : 'false'; + $password = $this->environment->getSharePassword(); + $passwordProtected = ($password) ? 'true' : 'false'; - return [$server2ServerSharing, $protected]; + return [$server2ServerSharing, $passwordProtected]; } } diff --git a/environment/environment.php b/environment/environment.php index 2cf642c0..d9569096 100644 --- a/environment/environment.php +++ b/environment/environment.php @@ -86,7 +86,7 @@ class Environment { /** * @var string */ - private $shareWith; + private $sharePassword; /*** * Constructor @@ -134,7 +134,7 @@ class Environment { $this->folderName = $linkItem['file_target']; $this->userId = $rootLinkItem['uid_owner']; - $this->shareWith = $linkItem['share_with']; + $this->sharePassword = $linkItem['share_with']; } /** @@ -149,26 +149,25 @@ class Environment { } /** - * Returns the resource located at the given path - * - * The path starts from the user's files folder because we'll query that folder to get the - * information we need. The resource is either a File or a Folder + * Returns the Node based on a path starting from the virtual root * * @param string $subPath * * @return File|Folder */ - public function getResourceFromPath($subPath) { + public function getNodeFromVirtualRoot($subPath) { $relativePath = $this->getRelativePath($this->fromRootToFolder); $path = $relativePath . '/' . $subPath; - $node = $this->getNode($path); + $node = $this->getNodeFromUserFolder($path); return $this->getResourceFromId($node->getId()); } /** - * Returns the Node based on the current user's files folder and a given - * path + * Returns the Node based on a path starting from the files' owner user folder + * + * When logged in, this is the current user's user folder + * When visiting a link, this is the sharer's user folder * * @param string $path * @@ -176,7 +175,7 @@ class Environment { * * @throws EnvironmentException */ - public function getNode($path) { + public function getNodeFromUserFolder($path) { $node = false; $folder = $this->userFolder; if ($folder === null) { @@ -279,12 +278,12 @@ class Environment { } /** - * Returns if the share is protected (share_with === true) + * Returns the password for the share, if there is one * - * @return string + * @return string|null */ - public function isShareProtected() { - return $this->shareWith; + public function getSharePassword() { + return $this->sharePassword; } /** diff --git a/service/searchfolderservice.php b/service/searchfolderservice.php index 587152c1..c95f1209 100644 --- a/service/searchfolderservice.php +++ b/service/searchfolderservice.php @@ -63,7 +63,7 @@ class SearchFolderService extends FilesService { $node = null; $location = $this->validateLocation($location, $depth); try { - $node = $this->environment->getResourceFromPath($location); + $node = $this->environment->getNodeFromVirtualRoot($location); if ($node->getType() === 'file') { $node = $node->getParent(); } diff --git a/tests/integration/appinfo/AppTest.php b/tests/integration/appinfo/AppTest.php index 1b0bd5ab..741b97b3 100644 --- a/tests/integration/appinfo/AppTest.php +++ b/tests/integration/appinfo/AppTest.php @@ -25,4 +25,4 @@ class AppTest extends GalleryIntegrationTest { $appManager = $this->container->query('OCP\App\IAppManager'); $this->assertTrue($appManager->isInstalled('gallery')); } -}
\ No newline at end of file +} diff --git a/tests/integration/bootstrap.php b/tests/integration/bootstrap.php index 8f45fa78..f22aa896 100644 --- a/tests/integration/bootstrap.php +++ b/tests/integration/bootstrap.php @@ -66,13 +66,12 @@ class GalleryIntegrationTest extends TestCase { $this->rootFolder = $this->server->getRootFolder(); /** - * FIXME Anybody is welcome to fix the class to make it work with encryption + * Logging hooks are missing at the moment, so we need to disable encryption * - * This is the exception being thrown when trying to write to the filesystem - * OCA\Encryption\Exceptions\PrivateKeyMissingException: Private Key missing for user: please try to log-out and log-in again + * @link https://github.com/owncloud/core/issues/18085#issuecomment-128093797 */ - $this->server->getAppManager() - ->disableApp('encryption'); + $this->server->getConfig() + ->setAppValue('core', 'encryption_enabled', 'no'); // This is because the filesystem is not properly cleaned up sometimes $this->server->getAppManager() @@ -136,7 +135,7 @@ class GalleryIntegrationTest extends TestCase { } /** - * @param strong $token + * @param string $token * * @return mixed */ @@ -152,7 +151,7 @@ class GalleryIntegrationTest extends TestCase { /** * Creates a token for a file * - * @return bool|string + * @return array<bool|string|File> */ protected function prepareFileToken() { $sharedFolder = $this->createEnv($this->sharerUserId, $this->sharerPassword); @@ -167,13 +166,13 @@ class GalleryIntegrationTest extends TestCase { $this->logout(); - return $token; + return [$token, $sharedFile]; } /** * Creates a token for a folder * - * @return bool|string + * @return array<bool|string|Folder> */ protected function prepareFolderToken() { $sharedFolder = $this->createEnv($this->sharerUserId, $this->sharerPassword); @@ -183,7 +182,7 @@ class GalleryIntegrationTest extends TestCase { $this->logout(); - return $token; + return [$token, $sharedFolder]; } /** @@ -222,6 +221,9 @@ class GalleryIntegrationTest extends TestCase { private function createEnv($userId, $userPassword) { $this->setupUser($userId, $userPassword); $userFolder = $this->server->getUserFolder($userId); + $user = $this->server->getUserManager() + ->get($userId); + $user->setDisplayName('UberTester (' . $userId . ')'); $folder1 = $userFolder->newFolder('folder1'); $folder1->newFile('file1'); @@ -243,9 +245,9 @@ class GalleryIntegrationTest extends TestCase { ->setAppValue('core', 'shareapi_allow_links', 'yes'); return Share::shareItem( - $nodeType, $nodeId, \OCP\Share::SHARE_TYPE_LINK, $this->userId, + $nodeType, $nodeId, \OCP\Share::SHARE_TYPE_LINK, 'sh@red p@ssw0rd', \OCP\Constants::PERMISSION_ALL ); } -}
\ No newline at end of file +} diff --git a/tests/integration/environment/EnvironmentTest.php b/tests/integration/environment/EnvironmentTest.php index bf503da8..5d034d98 100644 --- a/tests/integration/environment/EnvironmentTest.php +++ b/tests/integration/environment/EnvironmentTest.php @@ -12,6 +12,9 @@ namespace OCA\Gallery\Environment; +use OCP\Files\Folder; +use OCP\Files\Node; + use \OCA\Gallery\Tests\Integration\GalleryIntegrationTest; /** @@ -39,7 +42,7 @@ class EnvironmentTest extends GalleryIntegrationTest { * Tests is setting up the environment using a token works */ public function testSetTokenBasedEnv() { - $token = $this->prepareFolderToken(); + list($token) = $this->prepareFolderToken(); $this->environment = $this->setTokenBasedEnv($token); } @@ -56,7 +59,7 @@ class EnvironmentTest extends GalleryIntegrationTest { } public function testGetResourceFromIdAsATokenUser() { - $token = $this->prepareFolderToken(); + list($token) = $this->prepareFolderToken(); $this->environment = $this->setTokenBasedEnv($token); $sharedFolder = $this->rootFolder->get($this->sharerUserId . '/files/folder1'); @@ -69,7 +72,7 @@ class EnvironmentTest extends GalleryIntegrationTest { } public function testGetSharedNodeAsATokenUser() { - $token = $this->prepareFolderToken(); + list($token) = $this->prepareFolderToken(); $this->environment = $this->setTokenBasedEnv($token); $sharedFolder = $this->rootFolder->get($this->sharerUserId . '/files/folder1'); @@ -86,7 +89,7 @@ class EnvironmentTest extends GalleryIntegrationTest { * @expects EnvironmentException */ public function testGetSharedNodeAsATokenUserWhenGivenFileToken() { - $token = $this->prepareFileToken(); + list($token) = $this->prepareFileToken(); $this->environment = $this->setTokenBasedEnv($token); $this->environment->getSharedNode(); @@ -96,14 +99,15 @@ class EnvironmentTest extends GalleryIntegrationTest { $this->environment = $this->setUserBasedEnv(); $result = $this->environment->getVirtualRootFolder(); - $userFolderId = $this->server->getUserFolder($this->userId) - ->getId(); + /*$userFolderId = $this->server->getUserFolder($this->userId) + ->getId();*/ + $userFolderId = $this->userFolder->getId(); $this->assertEquals($userFolderId, $result->getId()); } public function testGetVirtualRootFolderAsATokenUser() { - $token = $this->prepareFolderToken(); + list($token) = $this->prepareFolderToken(); $this->environment = $this->setTokenBasedEnv($token); $result = $this->environment->getVirtualRootFolder(); @@ -123,10 +127,126 @@ class EnvironmentTest extends GalleryIntegrationTest { } public function testGetUserIdAsATokenUser() { - $token = $this->prepareFolderToken(); + list($token) = $this->prepareFolderToken(); $this->environment = $this->setTokenBasedEnv($token); $result = $this->environment->getUserId(); $this->assertEquals($this->sharerUserId, $result); } -}
\ No newline at end of file + + public function testGetSharedFolderNameAsATokenUser() { + list($token, $sharedFolder) = $this->prepareFolderToken(); + $this->environment = $this->setTokenBasedEnv($token); + + $result = $this->environment->getSharedFolderName(); + $this->assertEquals($sharedFolder->getName(), $result); + } + + public function testGetSharePasswordAsATokenUser() { + /** @type Node $sharedFolder */ + list($token) = $this->prepareFolderToken(); + $this->environment = $this->setTokenBasedEnv($token); + + $result = $this->environment->getSharePassword(); + + // The password is defined in the bootstrap + $this->assertTrue( + $this->server->getHasher() + ->verify('sh@red p@ssw0rd', $result) + ); + } + + public function testGetPathFromVirtualRootAsALoggedInUser() { + $this->environment = $this->setUserBasedEnv(); + $result = + $this->environment->getPathFromVirtualRoot( + $this->userFolder->get('folder1/folder1.1/file1.1') + ); + + $this->assertEquals('folder1/folder1.1/file1.1', $result); + } + + public function testGetPathFromVirtualRootAsATokenUser() { + /** @type Folder $sharedFolder */ + list($token, $sharedFolder) = $this->prepareFolderToken(); + $this->environment = $this->setTokenBasedEnv($token); + + $result = + $this->environment->getPathFromVirtualRoot($sharedFolder->get('folder1.1/file1.1')); + + $this->assertEquals('folder1.1/file1.1', $result); + } + + public function testGetPathFromUserFolderAsALoggedInUser() { + $this->environment = $this->setUserBasedEnv(); + + $result = + $this->environment->getPathFromUserFolder( + $this->userFolder->get('folder1/folder1.1/file1.1') + ); + + $this->assertEquals('folder1/folder1.1/file1.1', $result); + } + + public function testGetPathFromUserFolderAsATokenUser() { + /** @type Folder $sharedFolder */ + list($token, $sharedFolder) = $this->prepareFolderToken(); + $this->environment = $this->setTokenBasedEnv($token); + + $result = + $this->environment->getPathFromUserFolder($sharedFolder->get('folder1.1/file1.1')); + + $this->assertEquals('folder1/folder1.1/file1.1', $result); + } + + public function testGetDisplayNameAsATokenUser() { + list($token) = $this->prepareFolderToken(); + $this->environment = $this->setTokenBasedEnv($token); + + $result = $this->environment->getDisplayName(); + + $this->assertEquals('UberTester (' . $this->sharerUserId . ')', $result); + } + + public function testGetNodeFromVirtualRootAsALoggedInUser() { + $this->environment = $this->setUserBasedEnv(); + $result = $this->environment->getNodeFromVirtualRoot('folder1/folder1.1/file1.1'); + + $file = $this->userFolder->get('folder1/folder1.1/file1.1'); + + $this->assertEquals($file, $result); + } + + public function testGetNodeFromVirtualRootAsATokenUser() { + /** @type Folder $sharedFolder */ + list($token, $sharedFolder) = $this->prepareFolderToken(); + $this->environment = $this->setTokenBasedEnv($token); + + $result = $this->environment->getNodeFromVirtualRoot('folder1.1/file1.1'); + + $file = $sharedFolder->get('folder1.1/file1.1'); + + $this->assertEquals($file, $result); + } + + public function testGetNodeFromUserFolderAsALoggedInUser() { + $this->environment = $this->setUserBasedEnv(); + $result = $this->environment->getNodeFromUserFolder('folder1/folder1.1/file1.1'); + + $file = $this->userFolder->get('folder1/folder1.1/file1.1'); + + $this->assertEquals($file, $result); + } + + public function testGetNodeFromUserFolderAsATokenUser() { + /** @type Folder $sharedFolder */ + list($token, $sharedFolder) = $this->prepareFolderToken(); + $this->environment = $this->setTokenBasedEnv($token); + + $result = $this->environment->getNodeFromUserFolder('folder1/folder1.1/file1.1'); + + $file = $sharedFolder->get('folder1.1/file1.1'); + + $this->assertEquals($file, $result); + } +} |