Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nextcloud/gallery.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--controller/pagecontroller.php6
-rw-r--r--environment/environment.php29
-rw-r--r--service/searchfolderservice.php2
-rw-r--r--tests/integration/appinfo/AppTest.php2
-rw-r--r--tests/integration/bootstrap.php26
-rw-r--r--tests/integration/environment/EnvironmentTest.php138
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);
+ }
+}