|
|
|
|
@ -611,162 +611,6 @@ class Test_Share extends \Test\TestCase { |
|
|
|
|
); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public function testShareWithGroup() { |
|
|
|
|
// Invalid shares |
|
|
|
|
$message = 'Sharing test.txt failed, because the group foobar does not exist'; |
|
|
|
|
try { |
|
|
|
|
OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_GROUP, 'foobar', \OCP\Constants::PERMISSION_READ); |
|
|
|
|
$this->fail('Exception was expected: '.$message); |
|
|
|
|
} catch (Exception $exception) { |
|
|
|
|
$this->assertEquals($message, $exception->getMessage()); |
|
|
|
|
} |
|
|
|
|
$policy = \OC::$server->getAppConfig()->getValue('core', 'shareapi_only_share_with_group_members', 'no'); |
|
|
|
|
\OC::$server->getAppConfig()->setValue('core', 'shareapi_only_share_with_group_members', 'yes'); |
|
|
|
|
$message = 'Sharing test.txt failed, because '.$this->user1.' is not a member of the group '.$this->group2; |
|
|
|
|
try { |
|
|
|
|
OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_GROUP, $this->group2, \OCP\Constants::PERMISSION_READ); |
|
|
|
|
$this->fail('Exception was expected: '.$message); |
|
|
|
|
} catch (Exception $exception) { |
|
|
|
|
$this->assertEquals($message, $exception->getMessage()); |
|
|
|
|
} |
|
|
|
|
\OC::$server->getAppConfig()->setValue('core', 'shareapi_only_share_with_group_members', $policy); |
|
|
|
|
|
|
|
|
|
// Valid share |
|
|
|
|
$this->shareUserOneTestFileWithGroupOne(); |
|
|
|
|
|
|
|
|
|
// check if only the group share was created and not a single db-entry for each user |
|
|
|
|
$statement = \OCP\DB::prepare('select `id` from `*PREFIX*share`'); |
|
|
|
|
$query = $statement->execute(); |
|
|
|
|
$result = $query->fetchAll(); |
|
|
|
|
$this->assertSame(1, count($result)); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Attempt to share again |
|
|
|
|
OC_User::setUserId($this->user1); |
|
|
|
|
$message = 'Sharing test.txt failed, because this item is already shared with '.$this->group1; |
|
|
|
|
try { |
|
|
|
|
OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_GROUP, $this->group1, \OCP\Constants::PERMISSION_READ); |
|
|
|
|
$this->fail('Exception was expected: '.$message); |
|
|
|
|
} catch (Exception $exception) { |
|
|
|
|
$this->assertEquals($message, $exception->getMessage()); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// Attempt to share back to owner of group share |
|
|
|
|
OC_User::setUserId($this->user2); |
|
|
|
|
$message = 'Sharing failed, because the user '.$this->user1.' is the original sharer'; |
|
|
|
|
try { |
|
|
|
|
OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_USER, $this->user1, \OCP\Constants::PERMISSION_READ); |
|
|
|
|
$this->fail('Exception was expected: '.$message); |
|
|
|
|
} catch (Exception $exception) { |
|
|
|
|
$this->assertEquals($message, $exception->getMessage()); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// Attempt to share back to group |
|
|
|
|
$message = 'Sharing test.txt failed, because this item is already shared with '.$this->group1; |
|
|
|
|
try { |
|
|
|
|
OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_GROUP, $this->group1, \OCP\Constants::PERMISSION_READ); |
|
|
|
|
$this->fail('Exception was expected: '.$message); |
|
|
|
|
} catch (Exception $exception) { |
|
|
|
|
$this->assertEquals($message, $exception->getMessage()); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// Attempt to share back to member of group |
|
|
|
|
$message ='Sharing test.txt failed, because this item is already shared with '.$this->user3; |
|
|
|
|
try { |
|
|
|
|
OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_USER, $this->user3, \OCP\Constants::PERMISSION_READ); |
|
|
|
|
$this->fail('Exception was expected: '.$message); |
|
|
|
|
} catch (Exception $exception) { |
|
|
|
|
$this->assertEquals($message, $exception->getMessage()); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// Unshare |
|
|
|
|
OC_User::setUserId($this->user1); |
|
|
|
|
$this->assertTrue(OCP\Share::unshare('test', 'test.txt', OCP\Share::SHARE_TYPE_GROUP, $this->group1)); |
|
|
|
|
|
|
|
|
|
// Valid share with same person - user then group |
|
|
|
|
$this->assertTrue(OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_USER, $this->user2, \OCP\Constants::PERMISSION_READ | \OCP\Constants::PERMISSION_DELETE | \OCP\Constants::PERMISSION_SHARE)); |
|
|
|
|
$this->assertTrue(OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_GROUP, $this->group1, \OCP\Constants::PERMISSION_READ | \OCP\Constants::PERMISSION_UPDATE)); |
|
|
|
|
OC_User::setUserId($this->user2); |
|
|
|
|
$this->assertEquals(array('test.txt'), OCP\Share::getItemsSharedWith('test', Test_Share_Backend::FORMAT_TARGET)); |
|
|
|
|
$this->assertEquals(array(\OCP\Constants::PERMISSION_READ | \OCP\Constants::PERMISSION_UPDATE | \OCP\Constants::PERMISSION_DELETE | \OCP\Constants::PERMISSION_SHARE), OCP\Share::getItemSharedWith('test', 'test.txt', Test_Share_Backend::FORMAT_PERMISSIONS)); |
|
|
|
|
OC_User::setUserId($this->user3); |
|
|
|
|
$this->assertEquals(array('test.txt'), OCP\Share::getItemsSharedWith('test', Test_Share_Backend::FORMAT_TARGET)); |
|
|
|
|
$this->assertEquals(array(\OCP\Constants::PERMISSION_READ | \OCP\Constants::PERMISSION_UPDATE), OCP\Share::getItemSharedWith('test', 'test.txt', Test_Share_Backend::FORMAT_PERMISSIONS)); |
|
|
|
|
|
|
|
|
|
// Valid reshare |
|
|
|
|
OC_User::setUserId($this->user2); |
|
|
|
|
$this->assertTrue(OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_USER, $this->user4, \OCP\Constants::PERMISSION_READ)); |
|
|
|
|
OC_User::setUserId($this->user4); |
|
|
|
|
$this->assertEquals(array('test.txt'), OCP\Share::getItemsSharedWith('test', Test_Share_Backend::FORMAT_TARGET)); |
|
|
|
|
|
|
|
|
|
// Unshare from user only |
|
|
|
|
OC_User::setUserId($this->user1); |
|
|
|
|
$this->assertTrue(OCP\Share::unshare('test', 'test.txt', OCP\Share::SHARE_TYPE_USER, $this->user2)); |
|
|
|
|
OC_User::setUserId($this->user2); |
|
|
|
|
$this->assertEquals(array(\OCP\Constants::PERMISSION_READ | \OCP\Constants::PERMISSION_UPDATE), OCP\Share::getItemSharedWith('test', 'test.txt', Test_Share_Backend::FORMAT_PERMISSIONS)); |
|
|
|
|
OC_User::setUserId($this->user4); |
|
|
|
|
$this->assertEquals(array('test.txt'), OCP\Share::getItemsSharedWith('test', Test_Share_Backend::FORMAT_TARGET)); |
|
|
|
|
|
|
|
|
|
// Valid share with same person - group then user |
|
|
|
|
OC_User::setUserId($this->user1); |
|
|
|
|
$this->assertTrue(OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_USER, $this->user2, \OCP\Constants::PERMISSION_READ | \OCP\Constants::PERMISSION_DELETE)); |
|
|
|
|
OC_User::setUserId($this->user2); |
|
|
|
|
$this->assertEquals(array('test.txt'), OCP\Share::getItemsSharedWith('test', Test_Share_Backend::FORMAT_TARGET)); |
|
|
|
|
$this->assertEquals(array(\OCP\Constants::PERMISSION_READ | \OCP\Constants::PERMISSION_UPDATE | \OCP\Constants::PERMISSION_DELETE), OCP\Share::getItemSharedWith('test', 'test.txt', Test_Share_Backend::FORMAT_PERMISSIONS)); |
|
|
|
|
|
|
|
|
|
// Unshare from group only |
|
|
|
|
OC_User::setUserId($this->user1); |
|
|
|
|
$this->assertTrue(OCP\Share::unshare('test', 'test.txt', OCP\Share::SHARE_TYPE_GROUP, $this->group1)); |
|
|
|
|
OC_User::setUserId($this->user2); |
|
|
|
|
$this->assertEquals(array(\OCP\Constants::PERMISSION_READ | \OCP\Constants::PERMISSION_DELETE), OCP\Share::getItemSharedWith('test', 'test.txt', Test_Share_Backend::FORMAT_PERMISSIONS)); |
|
|
|
|
|
|
|
|
|
// Attempt user specific target conflict |
|
|
|
|
OC_User::setUserId($this->user3); |
|
|
|
|
\OCP\Util::connectHook('OCP\\Share', 'post_shared', 'DummyHookListener', 'listen'); |
|
|
|
|
|
|
|
|
|
$this->assertTrue(OCP\Share::shareItem('test', 'share.txt', OCP\Share::SHARE_TYPE_GROUP, $this->group1, \OCP\Constants::PERMISSION_READ | \OCP\Constants::PERMISSION_SHARE)); |
|
|
|
|
$this->assertEquals(OCP\Share::SHARE_TYPE_GROUP, DummyHookListener::$shareType); |
|
|
|
|
OC_User::setUserId($this->user2); |
|
|
|
|
$to_test = OCP\Share::getItemsSharedWith('test', Test_Share_Backend::FORMAT_TARGET); |
|
|
|
|
$this->assertEquals(2, count($to_test)); |
|
|
|
|
$this->assertTrue(in_array('test.txt', $to_test)); |
|
|
|
|
$this->assertTrue(in_array('test1.txt', $to_test)); |
|
|
|
|
|
|
|
|
|
// Valid reshare |
|
|
|
|
$this->assertTrue(OCP\Share::shareItem('test', 'share.txt', OCP\Share::SHARE_TYPE_USER, $this->user4, \OCP\Constants::PERMISSION_READ | \OCP\Constants::PERMISSION_SHARE)); |
|
|
|
|
OC_User::setUserId($this->user4); |
|
|
|
|
$this->assertEquals(array('test1.txt'), OCP\Share::getItemsSharedWith('test', Test_Share_Backend::FORMAT_TARGET)); |
|
|
|
|
|
|
|
|
|
// Remove user from group |
|
|
|
|
OC_Group::removeFromGroup($this->user2, $this->group1); |
|
|
|
|
OC_User::setUserId($this->user2); |
|
|
|
|
$this->assertEquals(array('test.txt'), OCP\Share::getItemsSharedWith('test', Test_Share_Backend::FORMAT_TARGET)); |
|
|
|
|
OC_User::setUserId($this->user4); |
|
|
|
|
$this->assertEquals(array(), OCP\Share::getItemsSharedWith('test', Test_Share_Backend::FORMAT_TARGET)); |
|
|
|
|
|
|
|
|
|
// Add user to group |
|
|
|
|
OC_Group::addToGroup($this->user4, $this->group1); |
|
|
|
|
$this->assertEquals(array('test.txt'), OCP\Share::getItemsSharedWith('test', Test_Share_Backend::FORMAT_TARGET)); |
|
|
|
|
|
|
|
|
|
// Unshare from self |
|
|
|
|
$this->assertTrue(OCP\Share::unshareFromSelf('test', 'test.txt')); |
|
|
|
|
$this->assertEquals(array(), OCP\Share::getItemsSharedWith('test', Test_Share_Backend::FORMAT_TARGET)); |
|
|
|
|
OC_User::setUserId($this->user2); |
|
|
|
|
$this->assertEquals(array('test.txt'), OCP\Share::getItemsSharedWith('test', Test_Share_Backend::FORMAT_TARGET)); |
|
|
|
|
|
|
|
|
|
// Unshare from self via source |
|
|
|
|
OC_User::setUserId($this->user1); |
|
|
|
|
$this->assertTrue(OCP\Share::unshareFromSelf('test', 'share.txt', true)); |
|
|
|
|
$this->assertEquals(array(), OCP\Share::getItemsSharedWith('test', Test_Share_Backend::FORMAT_TARGET)); |
|
|
|
|
|
|
|
|
|
// Remove group |
|
|
|
|
OC_Group::deleteGroup($this->group1); |
|
|
|
|
OC_User::setUserId($this->user4); |
|
|
|
|
$this->assertEquals(array(), OCP\Share::getItemsSharedWith('test', Test_Share_Backend::FORMAT_TARGET)); |
|
|
|
|
OC_User::setUserId($this->user3); |
|
|
|
|
$this->assertEquals(array(), OCP\Share::getItemsShared('test')); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* Test that unsharing from group will also delete all |
|
|
|
|
* child entries |
|
|
|
|
|