Setup shared mounts for the correct user when setting up the filesystem for the non-logged in user
This commit is contained in:
parent
9c79c2fa17
commit
7ecd220715
|
@ -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 {
|
||||||
$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 {
|
||||||
}
|
}
|
||||||
|
|
||||||
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 {
|
||||||
$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 {
|
||||||
$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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue