mirror of
https://github.com/nextcloud/server.git
synced 2026-05-28 04:32:30 -04:00
Merge pull request #11945 from owncloud/share-setup-other-user
Setup shared mounts for the correct user when setting up the filesystem
This commit is contained in:
commit
0c230fb57e
7 changed files with 71 additions and 14 deletions
|
|
@ -22,15 +22,15 @@ class SharedMount extends Mount implements MoveableMount {
|
|||
|
||||
public function __construct($storage, $mountpoint, $arguments = null, $loader = null) {
|
||||
// first update the mount point before creating the parent
|
||||
$newMountPoint = self::verifyMountPoint($arguments['share']);
|
||||
$absMountPoint = '/' . \OCP\User::getUser() . '/files' . $newMountPoint;
|
||||
$newMountPoint = $this->verifyMountPoint($arguments['share'], $arguments['user']);
|
||||
$absMountPoint = '/' . $arguments['user'] . '/files' . $newMountPoint;
|
||||
parent::__construct($storage, $absMountPoint, $arguments, $loader);
|
||||
}
|
||||
|
||||
/**
|
||||
* 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']);
|
||||
$parent = dirname($share['file_target']);
|
||||
|
|
@ -42,7 +42,7 @@ class SharedMount extends Mount implements MoveableMount {
|
|||
$newMountPoint = \OCA\Files_Sharing\Helper::generateUniqueTarget(
|
||||
\OC\Files\Filesystem::normalizePath($parent . '/' . $mountPoint),
|
||||
array(),
|
||||
new \OC\Files\View('/' . \OCP\User::getUser() . '/files')
|
||||
new \OC\Files\View('/' . $user . '/files')
|
||||
);
|
||||
|
||||
if($newMountPoint !== $share['file_target']) {
|
||||
|
|
|
|||
|
|
@ -397,7 +397,7 @@ class Shared extends \OC\Files\Storage\Common implements ISharedStorage {
|
|||
}
|
||||
|
||||
public static function setup($options) {
|
||||
$shares = \OCP\Share::getItemsSharedWith('file');
|
||||
$shares = \OCP\Share::getItemsSharedWithUser('file', $options['user']);
|
||||
$manager = Filesystem::getMountManager();
|
||||
$loader = Filesystem::getLoader();
|
||||
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'],
|
||||
array(
|
||||
'share' => $share,
|
||||
),
|
||||
'user' => $options['user']
|
||||
),
|
||||
$loader
|
||||
);
|
||||
$manager->addMount($mount);
|
||||
|
|
|
|||
|
|
@ -35,6 +35,9 @@ class Test_Files_Sharing_Api extends TestCase {
|
|||
function setUp() {
|
||||
parent::setUp();
|
||||
|
||||
\OC::$server->getAppConfig()->setValue('core', 'shareapi_exclude_groups', 'no');
|
||||
\OC::$server->getAppConfig()->setValue('core', 'shareapi_expire_after_n_days', '7');
|
||||
|
||||
$this->folder = self::TEST_FOLDER_NAME;
|
||||
$this->subfolder = '/subfolder_share_api_test';
|
||||
$this->subsubfolder = '/subsubfolder_share_api_test';
|
||||
|
|
|
|||
|
|
@ -226,6 +226,10 @@ class Test_Files_Sharing_Mount extends OCA\Files_sharing\Tests\TestCase {
|
|||
}
|
||||
|
||||
class DummyTestClassSharedMount extends \OCA\Files_Sharing\SharedMount {
|
||||
public function __construct($storage, $mountpoint, $arguments = null, $loader = null){
|
||||
// noop
|
||||
}
|
||||
|
||||
public function stripUserFilesPathDummy($path) {
|
||||
return $this->stripUserFilesPath($path);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -197,4 +197,30 @@ class Test_Files_Sharing_Storage extends OCA\Files_sharing\Tests\TestCase {
|
|||
$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);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -65,13 +65,21 @@ abstract class TestCase extends \PHPUnit_Framework_TestCase {
|
|||
\OCP\Util::connectHook('OC_Filesystem', 'setup', '\OC\Files\Storage\Shared', 'setup');
|
||||
|
||||
// create users
|
||||
self::loginHelper(self::TEST_FILES_SHARING_API_USER1, true);
|
||||
self::loginHelper(self::TEST_FILES_SHARING_API_USER2, true);
|
||||
self::loginHelper(self::TEST_FILES_SHARING_API_USER3, true);
|
||||
$backend = new \OC_User_Dummy();
|
||||
\OC_User::useBackend($backend);
|
||||
$backend->createUser(self::TEST_FILES_SHARING_API_USER1, self::TEST_FILES_SHARING_API_USER1);
|
||||
$backend->createUser(self::TEST_FILES_SHARING_API_USER2, self::TEST_FILES_SHARING_API_USER2);
|
||||
$backend->createUser(self::TEST_FILES_SHARING_API_USER3, self::TEST_FILES_SHARING_API_USER3);
|
||||
|
||||
// create group
|
||||
\OC_Group::createGroup(self::TEST_FILES_SHARING_API_GROUP1);
|
||||
\OC_Group::addToGroup(self::TEST_FILES_SHARING_API_USER2, self::TEST_FILES_SHARING_API_GROUP1);
|
||||
$groupBackend = new \OC_Group_Dummy();
|
||||
$groupBackend->createGroup(self::TEST_FILES_SHARING_API_GROUP1);
|
||||
$groupBackend->createGroup('group');
|
||||
$groupBackend->addToGroup(self::TEST_FILES_SHARING_API_USER1, 'group');
|
||||
$groupBackend->addToGroup(self::TEST_FILES_SHARING_API_USER2, 'group');
|
||||
$groupBackend->addToGroup(self::TEST_FILES_SHARING_API_USER3, 'group');
|
||||
$groupBackend->addToGroup(self::TEST_FILES_SHARING_API_USER2, self::TEST_FILES_SHARING_API_GROUP1);
|
||||
\OC_Group::useBackend($groupBackend);
|
||||
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -26,9 +26,11 @@
|
|||
*/
|
||||
class OC_User_Dummy extends OC_User_Backend {
|
||||
private $users = array();
|
||||
private $displayNames = array();
|
||||
|
||||
/**
|
||||
* Create a new user
|
||||
*
|
||||
* @param string $uid The username of the user to create
|
||||
* @param string $password The password of the new user
|
||||
* @return bool
|
||||
|
|
@ -47,6 +49,7 @@ class OC_User_Dummy extends OC_User_Backend {
|
|||
|
||||
/**
|
||||
* delete a user
|
||||
*
|
||||
* @param string $uid The username of the user to delete
|
||||
* @return bool
|
||||
*
|
||||
|
|
@ -63,6 +66,7 @@ class OC_User_Dummy extends OC_User_Backend {
|
|||
|
||||
/**
|
||||
* Set password
|
||||
*
|
||||
* @param string $uid The username
|
||||
* @param string $password The new password
|
||||
* @return bool
|
||||
|
|
@ -80,6 +84,7 @@ class OC_User_Dummy extends OC_User_Backend {
|
|||
|
||||
/**
|
||||
* Check if the password is correct
|
||||
*
|
||||
* @param string $uid The username
|
||||
* @param string $password The password
|
||||
* @return string
|
||||
|
|
@ -97,6 +102,7 @@ class OC_User_Dummy extends OC_User_Backend {
|
|||
|
||||
/**
|
||||
* Get a list of all users
|
||||
*
|
||||
* @param string $search
|
||||
* @param int $limit
|
||||
* @param int $offset
|
||||
|
|
@ -105,12 +111,12 @@ class OC_User_Dummy extends OC_User_Backend {
|
|||
* Get a list of all users.
|
||||
*/
|
||||
public function getUsers($search = '', $limit = null, $offset = null) {
|
||||
if(empty($search)) {
|
||||
if (empty($search)) {
|
||||
return array_keys($this->users);
|
||||
}
|
||||
$result = array();
|
||||
foreach(array_keys($this->users) as $user) {
|
||||
if(stripos($user, $search) !== false) {
|
||||
foreach (array_keys($this->users) as $user) {
|
||||
if (stripos($user, $search) !== false) {
|
||||
$result[] = $user;
|
||||
}
|
||||
}
|
||||
|
|
@ -119,6 +125,7 @@ class OC_User_Dummy extends OC_User_Backend {
|
|||
|
||||
/**
|
||||
* check if a user exists
|
||||
*
|
||||
* @param string $uid the username
|
||||
* @return boolean
|
||||
*/
|
||||
|
|
@ -141,4 +148,12 @@ class OC_User_Dummy extends OC_User_Backend {
|
|||
public function countUsers() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
public function setDisplayName($uid, $displayName) {
|
||||
$this->displayNames[$uid] = $displayName;
|
||||
}
|
||||
|
||||
public function getDisplayName($uid) {
|
||||
return isset($this->displayNames[$uid])? $this->displayNames[$uid]: $uid;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue