Skip to content
Snippets Groups Projects
Commit 7ecd2207 authored by Robin Appelman's avatar Robin Appelman
Browse files

Setup shared mounts for the correct user when setting up the filesystem for the non-logged in user

parent 9c79c2fa
No related branches found
No related tags found
No related merge requests found
...@@ -22,15 +22,15 @@ class SharedMount extends Mount implements MoveableMount { ...@@ -22,15 +22,15 @@ class SharedMount extends Mount implements MoveableMount {
public function __construct($storage, $mountpoint, $arguments = null, $loader = null) { public function __construct($storage, $mountpoint, $arguments = null, $loader = null) {
// first update the mount point before creating the parent // first update the mount point before creating the parent
$newMountPoint = self::verifyMountPoint($arguments['share']); $newMountPoint = $this->verifyMountPoint($arguments['share'], $arguments['user']);
$absMountPoint = '/' . \OCP\User::getUser() . '/files' . $newMountPoint; $absMountPoint = '/' . $arguments['user'] . '/files' . $newMountPoint;
parent::__construct($storage, $absMountPoint, $arguments, $loader); parent::__construct($storage, $absMountPoint, $arguments, $loader);
} }
/** /**
* check if the parent folder exists otherwise move the mount point up * check if the parent folder exists otherwise move the mount point up
*/ */
private static function verifyMountPoint(&$share) { private function verifyMountPoint(&$share, $user) {
$mountPoint = basename($share['file_target']); $mountPoint = basename($share['file_target']);
$parent = dirname($share['file_target']); $parent = dirname($share['file_target']);
...@@ -42,7 +42,7 @@ class SharedMount extends Mount implements MoveableMount { ...@@ -42,7 +42,7 @@ class SharedMount extends Mount implements MoveableMount {
$newMountPoint = \OCA\Files_Sharing\Helper::generateUniqueTarget( $newMountPoint = \OCA\Files_Sharing\Helper::generateUniqueTarget(
\OC\Files\Filesystem::normalizePath($parent . '/' . $mountPoint), \OC\Files\Filesystem::normalizePath($parent . '/' . $mountPoint),
array(), array(),
new \OC\Files\View('/' . \OCP\User::getUser() . '/files') new \OC\Files\View('/' . $user . '/files')
); );
if($newMountPoint !== $share['file_target']) { if($newMountPoint !== $share['file_target']) {
......
...@@ -397,7 +397,7 @@ class Shared extends \OC\Files\Storage\Common implements ISharedStorage { ...@@ -397,7 +397,7 @@ class Shared extends \OC\Files\Storage\Common implements ISharedStorage {
} }
public static function setup($options) { public static function setup($options) {
$shares = \OCP\Share::getItemsSharedWith('file'); $shares = \OCP\Share::getItemsSharedWithUser('file', $options['user']);
$manager = Filesystem::getMountManager(); $manager = Filesystem::getMountManager();
$loader = Filesystem::getLoader(); $loader = Filesystem::getLoader();
if (!\OCP\User::isLoggedIn() || \OCP\User::getUser() != $options['user'] if (!\OCP\User::isLoggedIn() || \OCP\User::getUser() != $options['user']
...@@ -411,7 +411,8 @@ class Shared extends \OC\Files\Storage\Common implements ISharedStorage { ...@@ -411,7 +411,8 @@ class Shared extends \OC\Files\Storage\Common implements ISharedStorage {
$options['user_dir'] . '/' . $share['file_target'], $options['user_dir'] . '/' . $share['file_target'],
array( array(
'share' => $share, 'share' => $share,
), 'user' => $options['user']
),
$loader $loader
); );
$manager->addMount($mount); $manager->addMount($mount);
......
...@@ -197,4 +197,30 @@ class Test_Files_Sharing_Storage extends OCA\Files_sharing\Tests\TestCase { ...@@ -197,4 +197,30 @@ class Test_Files_Sharing_Storage extends OCA\Files_sharing\Tests\TestCase {
$this->assertTrue($result); $this->assertTrue($result);
} }
function testMountSharesOtherUser() {
$folderInfo = $this->view->getFileInfo($this->folder);
$fileInfo = $this->view->getFileInfo($this->filename);
$rootView = new \OC\Files\View('');
self::loginHelper(self::TEST_FILES_SHARING_API_USER1);
// share 2 different files with 2 different users
\OCP\Share::shareItem('folder', $folderInfo['fileid'], \OCP\Share::SHARE_TYPE_USER,
self::TEST_FILES_SHARING_API_USER2, 31);
\OCP\Share::shareItem('file', $fileInfo['fileid'], \OCP\Share::SHARE_TYPE_USER,
self::TEST_FILES_SHARING_API_USER3, 31);
self::loginHelper(self::TEST_FILES_SHARING_API_USER2);
$this->assertTrue($rootView->file_exists('/' . self::TEST_FILES_SHARING_API_USER2 . '/files/' . $this->folder));
OC_Hook::emit('OC_Filesystem', 'setup', array('user' => self::TEST_FILES_SHARING_API_USER3, 'user_dir' => \OC_User::getHome(self::TEST_FILES_SHARING_API_USER3)));
$this->assertTrue($rootView->file_exists('/' . self::TEST_FILES_SHARING_API_USER3 . '/files/' . $this->filename));
// make sure we didn't double setup shares for user 2 or mounted the shares for user 3 in user's 2 home
$this->assertFalse($rootView->file_exists('/' . self::TEST_FILES_SHARING_API_USER2 . '/files/' . $this->folder .' (2)'));
$this->assertFalse($rootView->file_exists('/' . self::TEST_FILES_SHARING_API_USER2 . '/files/' . $this->filename));
//cleanup
self::loginHelper(self::TEST_FILES_SHARING_API_USER1);
$this->view->unlink($this->folder);
}
} }
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment