Merge pull request #21532 from owncloud/share2.0_getShares
[Share 2.0] get shares
This commit is contained in:
commit
766ba1cd5f
|
@ -37,7 +37,7 @@ class OCSShareWrapper {
|
|||
}
|
||||
|
||||
public function getAllShares($params) {
|
||||
return \OCA\Files_Sharing\API\Local::getAllShares($params);
|
||||
return $this->getShare20OCS()->getShares();
|
||||
}
|
||||
|
||||
public function createShare() {
|
||||
|
|
|
@ -327,6 +327,104 @@ class Share20OCS {
|
|||
return new \OC_OCS_Result($share);
|
||||
}
|
||||
|
||||
private function getSharedWithMe() {
|
||||
$userShares = $this->shareManager->getSharedWith($this->currentUser, \OCP\Share::SHARE_TYPE_USER, -1, 0);
|
||||
$groupShares = $this->shareManager->getSharedWith($this->currentUser, \OCP\Share::SHARE_TYPE_GROUP, -1, 0);
|
||||
|
||||
$shares = array_merge($userShares, $groupShares);
|
||||
|
||||
$formatted = [];
|
||||
foreach ($shares as $share) {
|
||||
$formatted[] = $this->formatShare($share);
|
||||
}
|
||||
|
||||
return new \OC_OCS_Result($formatted);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param \OCP\Files\Folder $folder
|
||||
* @return \OC_OCS_Result
|
||||
*/
|
||||
private function getSharesInDir($folder) {
|
||||
if (!($folder instanceof \OCP\Files\Folder)) {
|
||||
return new \OC_OCS_Result(null, 400, "not a directory");
|
||||
}
|
||||
|
||||
$nodes = $folder->getDirectoryListing();
|
||||
/** @var IShare[] $shares */
|
||||
$shares = [];
|
||||
foreach ($nodes as $node) {
|
||||
$shares = array_merge($shares, $this->shareManager->getSharesBy($this->currentUser, \OCP\Share::SHARE_TYPE_USER, $node, false, -1, 0));
|
||||
$shares = array_merge($shares, $this->shareManager->getSharesBy($this->currentUser, \OCP\Share::SHARE_TYPE_GROUP, $node, false, -1, 0));
|
||||
$shares = array_merge($shares, $this->shareManager->getSharesBy($this->currentUser, \OCP\Share::SHARE_TYPE_LINK, $node, false, -1, 0));
|
||||
//TODO: Add federated shares
|
||||
|
||||
}
|
||||
|
||||
$formatted = [];
|
||||
foreach ($shares as $share) {
|
||||
$formatted[] = $this->formatShare($share);
|
||||
}
|
||||
|
||||
return new \OC_OCS_Result($formatted);
|
||||
}
|
||||
|
||||
/**
|
||||
* The getShares function.
|
||||
*
|
||||
* - Get shares by the current user
|
||||
* - Get shares by the current user and reshares (?reshares=true)
|
||||
* - Get shares with the current user (?shared_with_me=true)
|
||||
* - Get shares for a specific path (?path=...)
|
||||
* - Get all shares in a folder (?subfiles=true&path=..)
|
||||
*
|
||||
* @return \OC_OCS_Result
|
||||
*/
|
||||
public function getShares() {
|
||||
$sharedWithMe = $this->request->getParam('shared_with_me', null);
|
||||
$reshares = $this->request->getParam('reshares', null);
|
||||
$subfiles = $this->request->getParam('subfiles');
|
||||
$path = $this->request->getParam('path', null);
|
||||
|
||||
if ($sharedWithMe === 'true') {
|
||||
return $this->getSharedWithMe();
|
||||
}
|
||||
|
||||
if ($path !== null) {
|
||||
$userFolder = $this->rootFolder->getUserFolder($this->currentUser->getUID());
|
||||
try {
|
||||
$path = $userFolder->get($path);
|
||||
} catch (\OCP\Files\NotFoundException $e) {
|
||||
return new \OC_OCS_Result(null, 404, 'wrong path, file/folder doesn\'t exist');
|
||||
}
|
||||
}
|
||||
|
||||
if ($subfiles === 'true') {
|
||||
return $this->getSharesInDir($path);
|
||||
}
|
||||
|
||||
if ($reshares === 'true') {
|
||||
$reshares = true;
|
||||
} else {
|
||||
$reshares = false;
|
||||
}
|
||||
|
||||
// Get all shares
|
||||
$userShares = $this->shareManager->getSharesBy($this->currentUser, \OCP\Share::SHARE_TYPE_USER, $path, $reshares, -1, 0);
|
||||
$groupShares = $this->shareManager->getSharesBy($this->currentUser, \OCP\Share::SHARE_TYPE_GROUP, $path, $reshares, -1, 0);
|
||||
$linkShares = $this->shareManager->getSharesBy($this->currentUser, \OCP\Share::SHARE_TYPE_LINK, $path, $reshares, -1, 0);
|
||||
//TODO: Add federated shares
|
||||
|
||||
$shares = array_merge($userShares, $groupShares, $linkShares);
|
||||
|
||||
$formatted = [];
|
||||
foreach ($shares as $share) {
|
||||
$formatted[] = $this->formatShare($share);
|
||||
}
|
||||
|
||||
return new \OC_OCS_Result($formatted);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param IShare $share
|
||||
* @return bool
|
||||
|
|
|
@ -231,23 +231,20 @@ Feature: sharing
|
|||
And User "user2" should be included in the response
|
||||
And User "user3" should not be included in the response
|
||||
|
||||
# Skip this test for now. Since the new shares do not create reshares
|
||||
# TODO enable when getshares is updated
|
||||
#
|
||||
# Scenario: getting all shares of a file with reshares
|
||||
# Given user "user0" exists
|
||||
# And user "user1" exists
|
||||
# And user "user2" exists
|
||||
# And user "user3" exists
|
||||
# And file "textfile0.txt" of user "user0" is shared with user "user1"
|
||||
# And file "textfile0.txt" of user "user1" is shared with user "user2"
|
||||
# And As an "user0"
|
||||
# When sending "GET" to "/apps/files_sharing/api/v1/shares?reshares=true&path=textfile0.txt"
|
||||
# Then the OCS status code should be "100"
|
||||
# And the HTTP status code should be "200"
|
||||
# And User "user1" should be included in the response
|
||||
# And User "user2" should be included in the response
|
||||
# And User "user3" should not be included in the response
|
||||
Scenario: getting all shares of a file with reshares
|
||||
Given user "user0" exists
|
||||
And user "user1" exists
|
||||
And user "user2" exists
|
||||
And user "user3" exists
|
||||
And file "textfile0.txt" of user "user0" is shared with user "user1"
|
||||
And file "textfile0 (2).txt" of user "user1" is shared with user "user2"
|
||||
And As an "user0"
|
||||
When sending "GET" to "/apps/files_sharing/api/v1/shares?reshares=true&path=textfile0.txt"
|
||||
Then the OCS status code should be "100"
|
||||
And the HTTP status code should be "200"
|
||||
And User "user1" should be included in the response
|
||||
And User "user2" should be included in the response
|
||||
And User "user3" should not be included in the response
|
||||
|
||||
Scenario: getting share info of a share
|
||||
Given user "user0" exists
|
||||
|
@ -316,6 +313,19 @@ Feature: sharing
|
|||
And the HTTP status code should be "200"
|
||||
And last share_id is included in the answer
|
||||
|
||||
Scenario: Sharee can see the group share
|
||||
Given As an "admin"
|
||||
And user "user0" exists
|
||||
And user "user1" exists
|
||||
And group "group0" exists
|
||||
And user "user1" belongs to group "group0"
|
||||
And file "textfile0.txt" of user "user0" is shared with group "group0"
|
||||
And As an "user1"
|
||||
When sending "GET" to "/apps/files_sharing/api/v1/shares?shared_with_me=true"
|
||||
Then the OCS status code should be "100"
|
||||
And the HTTP status code should be "200"
|
||||
And last share_id is included in the answer
|
||||
|
||||
Scenario: User is not allowed to reshare file
|
||||
As an "admin"
|
||||
Given user "user0" exists
|
||||
|
|
|
@ -32,6 +32,8 @@ use OCP\Files\IRootFolder;
|
|||
use OCP\IDBConnection;
|
||||
use OCP\Files\Node;
|
||||
|
||||
use Doctrine\DBAL\Connection;
|
||||
|
||||
/**
|
||||
* Class DefaultShareProvider
|
||||
*
|
||||
|
@ -240,15 +242,67 @@ class DefaultShareProvider implements IShareProvider {
|
|||
}
|
||||
|
||||
/**
|
||||
* Get all shares by the given user
|
||||
* Get all shares by the given user. Sharetype and path can be used to filter.
|
||||
*
|
||||
* @param IUser $user
|
||||
* @param int $shareType
|
||||
* @param \OCP\Files\File|\OCP\Files\Folder $node
|
||||
* @param bool $reshares Also get the shares where $user is the owner instead of just the shares where $user is the initiator
|
||||
* @param int $limit The maximum number of shares to be returned, -1 for all shares
|
||||
* @param int $offset
|
||||
* @param int $limit
|
||||
* @return Share[]
|
||||
*/
|
||||
public function getShares(IUser $user, $shareType, $offset, $limit) {
|
||||
public function getSharesBy(IUser $user, $shareType, $node, $reshares, $limit, $offset) {
|
||||
$qb = $this->dbConn->getQueryBuilder();
|
||||
$qb->select('*')
|
||||
->from('share');
|
||||
|
||||
$qb->andWhere($qb->expr()->eq('share_type', $qb->createNamedParameter($shareType)));
|
||||
|
||||
/**
|
||||
* Reshares for this user are shares where they are the owner.
|
||||
*/
|
||||
if ($reshares === false) {
|
||||
//Special case for old shares created via the web UI
|
||||
$or1 = $qb->expr()->andX(
|
||||
$qb->expr()->eq('uid_owner', $qb->createNamedParameter($user->getUID())),
|
||||
$qb->expr()->isNull('uid_initiator')
|
||||
);
|
||||
|
||||
$qb->andWhere(
|
||||
$qb->expr()->orX(
|
||||
$qb->expr()->eq('uid_initiator', $qb->createNamedParameter($user->getUID())),
|
||||
$or1
|
||||
)
|
||||
);
|
||||
} else {
|
||||
$qb->andWhere(
|
||||
$qb->expr()->orX(
|
||||
$qb->expr()->eq('uid_owner', $qb->createNamedParameter($user->getUID())),
|
||||
$qb->expr()->eq('uid_initiator', $qb->createNamedParameter($user->getUID()))
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
if ($node !== null) {
|
||||
$qb->andWhere($qb->expr()->eq('file_source', $qb->createNamedParameter($node->getId())));
|
||||
}
|
||||
|
||||
if ($limit !== -1) {
|
||||
$qb->setMaxResults($limit);
|
||||
}
|
||||
|
||||
$qb->setFirstResult($offset);
|
||||
$qb->orderBy('id');
|
||||
|
||||
$cursor = $qb->execute();
|
||||
$shares = [];
|
||||
while($data = $cursor->fetch()) {
|
||||
$shares[] = $this->createShare($data);
|
||||
}
|
||||
$cursor->closeCursor();
|
||||
|
||||
return $shares;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -324,11 +378,94 @@ class DefaultShareProvider implements IShareProvider {
|
|||
/**
|
||||
* Get shared with the given user
|
||||
*
|
||||
* @param IUser $user
|
||||
* @param int $shareType
|
||||
* @param Share
|
||||
* @param IUser $user get shares where this user is the recipient
|
||||
* @param int $shareType \OCP\Share::SHARE_TYPE_USER or \OCP\Share::SHARE_TYPE_GROUP are supported
|
||||
* @param int $limit The maximum number of shares, -1 for all
|
||||
* @param int $offset
|
||||
* @return IShare[]
|
||||
* @throws BackendError
|
||||
*/
|
||||
public function getSharedWithMe(IUser $user, $shareType = null) {
|
||||
public function getSharedWith(IUser $user, $shareType, $limit, $offset) {
|
||||
/** @var Share[] $shares */
|
||||
$shares = [];
|
||||
|
||||
if ($shareType === \OCP\Share::SHARE_TYPE_USER) {
|
||||
//Get shares directly with this user
|
||||
$qb = $this->dbConn->getQueryBuilder();
|
||||
$qb->select('*')
|
||||
->from('share');
|
||||
|
||||
// Order by id
|
||||
$qb->orderBy('id');
|
||||
|
||||
// Set limit and offset
|
||||
if ($limit !== -1) {
|
||||
$qb->setMaxResults($limit);
|
||||
}
|
||||
$qb->setFirstResult($offset);
|
||||
|
||||
$qb->where($qb->expr()->eq('share_type', $qb->createNamedParameter(\OCP\Share::SHARE_TYPE_USER)));
|
||||
$qb->andWhere($qb->expr()->eq('share_with', $qb->createNamedParameter($user->getUID())));
|
||||
|
||||
$cursor = $qb->execute();
|
||||
|
||||
while($data = $cursor->fetch()) {
|
||||
$shares[] = $this->createShare($data);
|
||||
}
|
||||
$cursor->closeCursor();
|
||||
|
||||
} else if ($shareType === \OCP\Share::SHARE_TYPE_GROUP) {
|
||||
$allGroups = $this->groupManager->getUserGroups($user);
|
||||
|
||||
$start = 0;
|
||||
while(true) {
|
||||
$groups = array_slice($allGroups, $start, 100);
|
||||
$start += 100;
|
||||
|
||||
if ($groups === []) {
|
||||
break;
|
||||
}
|
||||
|
||||
$qb = $this->dbConn->getQueryBuilder();
|
||||
$qb->select('*')
|
||||
->from('share')
|
||||
->orderBy('id')
|
||||
->setFirstResult(0);
|
||||
|
||||
if ($limit !== -1) {
|
||||
$qb->setMaxResults($limit - count($shares));
|
||||
}
|
||||
|
||||
$groups = array_map(function(IGroup $group) { return $group->getGID(); }, $groups);
|
||||
|
||||
$qb->where($qb->expr()->eq('share_type', $qb->createNamedParameter(\OCP\Share::SHARE_TYPE_GROUP)));
|
||||
$qb->andWhere($qb->expr()->in('share_with', $qb->createNamedParameter(
|
||||
$groups,
|
||||
Connection::PARAM_STR_ARRAY
|
||||
)));
|
||||
|
||||
$cursor = $qb->execute();
|
||||
while($data = $cursor->fetch()) {
|
||||
if ($offset > 0) {
|
||||
$offset--;
|
||||
continue;
|
||||
}
|
||||
$shares[] = $this->createShare($data);
|
||||
}
|
||||
$cursor->closeCursor();
|
||||
}
|
||||
|
||||
/*
|
||||
* Resolve all group shares to user specific shares
|
||||
* TODO: Optmize this!
|
||||
*/
|
||||
$shares = array_map([$this, 'resolveGroupShare'], $shares);
|
||||
} else {
|
||||
throw new BackendError('Invalid backend');
|
||||
}
|
||||
|
||||
|
||||
return $shares;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -454,4 +591,31 @@ class DefaultShareProvider implements IShareProvider {
|
|||
return $nodes[0];
|
||||
}
|
||||
|
||||
/**
|
||||
* Resolve a group share to a user specific share
|
||||
* Thus if the user moved their group share make sure this is properly reflected here.
|
||||
*
|
||||
* @param Share $share
|
||||
* @return Share Returns the updated share if one was found else return the original share.
|
||||
*/
|
||||
private function resolveGroupShare(Share $share) {
|
||||
$qb = $this->dbConn->getQueryBuilder();
|
||||
|
||||
$stmt = $qb->select('*')
|
||||
->from('share')
|
||||
->where($qb->expr()->eq('parent', $qb->createNamedParameter($share->getId())))
|
||||
->andWhere($qb->expr()->eq('share_type', $qb->createNamedParameter(self::SHARE_TYPE_USERGROUP)))
|
||||
->execute();
|
||||
|
||||
$data = $stmt->fetch();
|
||||
$stmt->closeCursor();
|
||||
|
||||
if ($data !== false) {
|
||||
$share->setPermissions($data['permissions']);
|
||||
$share->setTarget($data['file_target']);
|
||||
}
|
||||
|
||||
return $share;
|
||||
}
|
||||
|
||||
}
|
|
@ -62,11 +62,13 @@ interface IShareProvider {
|
|||
*
|
||||
* @param IUser $user
|
||||
* @param int $shareType
|
||||
* @param \OCP\Files\File|\OCP\Files\Folder $node
|
||||
* @param bool $reshares Also get the shares where $user is the owner instead of just the shares where $user is the initiator
|
||||
* @param int $limit The maximum number of shares to be returned, -1 for all shares
|
||||
* @param int $offset
|
||||
* @param int $limit
|
||||
* @return Share[]
|
||||
*/
|
||||
public function getShares(IUser $user, $shareType, $offset, $limit);
|
||||
public function getSharesBy(IUser $user, $shareType, $node, $reshares, $limit, $offset);
|
||||
|
||||
/**
|
||||
* Get share by id
|
||||
|
@ -96,11 +98,13 @@ interface IShareProvider {
|
|||
/**
|
||||
* Get shared with the given user
|
||||
*
|
||||
* @param IUser $user
|
||||
* @param IUser $user get shares where this user is the recipient
|
||||
* @param int $shareType
|
||||
* @param int $limit The max number of entries returned, -1 for all
|
||||
* @param int $offset
|
||||
* @param Share
|
||||
*/
|
||||
public function getSharedWithMe(IUser $user, $shareType = null);
|
||||
public function getSharedWith(IUser $user, $shareType, $limit, $offset);
|
||||
|
||||
/**
|
||||
* Get a share by token
|
||||
|
|
|
@ -605,14 +605,43 @@ class Manager {
|
|||
\OC_Hook::emit('OCP\Share', 'post_unshare', $hookParams);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Retrieve all shares by the current user
|
||||
* Get shares shared by (initiated) by the provided user.
|
||||
*
|
||||
* @param int $page
|
||||
* @param int $perPage
|
||||
* @return Share[]
|
||||
* @param IUser $user
|
||||
* @param int $shareType
|
||||
* @param \OCP\Files\File|\OCP\Files\Folder $path
|
||||
* @param bool $reshares
|
||||
* @param int $limit The maximum number of returned results, -1 for all results
|
||||
* @param int $offset
|
||||
* @return IShare[]
|
||||
*/
|
||||
public function getShares($page=0, $perPage=50) {
|
||||
public function getSharesBy(IUser $user, $shareType, $path = null, $reshares = false, $limit = 50, $offset = 0) {
|
||||
if ($path !== null &&
|
||||
!($path instanceof \OCP\Files\File) &&
|
||||
!($path instanceof \OCP\Files\Folder)) {
|
||||
throw new \InvalidArgumentException('invalid path');
|
||||
}
|
||||
|
||||
$provider = $this->factory->getProviderForType($shareType);
|
||||
|
||||
return $provider->getSharesBy($user, $shareType, $path, $reshares, $limit, $offset);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get shares shared with $user.
|
||||
*
|
||||
* @param IUser $user
|
||||
* @param int $shareType
|
||||
* @param int $limit The maximum number of shares returned, -1 for all
|
||||
* @param int $offset
|
||||
* @return IShare[]
|
||||
*/
|
||||
public function getSharedWith(IUser $user, $shareType, $limit = 50, $offset = 0) {
|
||||
$provider = $this->factory->getProviderForType($shareType);
|
||||
|
||||
return $provider->getSharedWith($user, $shareType, $limit, $offset);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -649,18 +678,6 @@ class Manager {
|
|||
public function getSharesByPath(\OCP\Files\Node $path, $page=0, $perPage=50) {
|
||||
}
|
||||
|
||||
/**
|
||||
* Get all shares that are shared with the current user
|
||||
*
|
||||
* @param int $shareType
|
||||
* @param int $page
|
||||
* @param int $perPage
|
||||
*
|
||||
* @return Share[]
|
||||
*/
|
||||
public function getSharedWithMe($shareType = null, $page=0, $perPage=50) {
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the share by token possible with password
|
||||
*
|
||||
|
|
|
@ -37,13 +37,13 @@ class DefaultShareProviderTest extends \Test\TestCase {
|
|||
/** @var IDBConnection */
|
||||
protected $dbConn;
|
||||
|
||||
/** @var IUserManager */
|
||||
/** @var IUserManager | \PHPUnit_Framework_MockObject_MockObject */
|
||||
protected $userManager;
|
||||
|
||||
/** @var IGroupManager */
|
||||
/** @var IGroupManager | \PHPUnit_Framework_MockObject_MockObject */
|
||||
protected $groupManager;
|
||||
|
||||
/** @var IRootFolder */
|
||||
/** @var IRootFolder | \PHPUnit_Framework_MockObject_MockObject */
|
||||
protected $rootFolder;
|
||||
|
||||
/** @var DefaultShareProvider */
|
||||
|
@ -92,16 +92,7 @@ class DefaultShareProviderTest extends \Test\TestCase {
|
|||
]);
|
||||
$qb->execute();
|
||||
|
||||
// Get the id
|
||||
$qb = $this->dbConn->getQueryBuilder();
|
||||
$cursor = $qb->select('id')
|
||||
->from('share')
|
||||
->setMaxResults(1)
|
||||
->orderBy('id', 'DESC')
|
||||
->execute();
|
||||
$id = $cursor->fetch();
|
||||
$id = $id['id'];
|
||||
$cursor->closeCursor();
|
||||
$id = $qb->getLastInsertId();
|
||||
|
||||
$sharedWith = $this->getMock('OCP\IUser');
|
||||
$sharedBy = $this->getMock('OCP\IUser');
|
||||
|
@ -165,15 +156,7 @@ class DefaultShareProviderTest extends \Test\TestCase {
|
|||
$this->assertEquals(1, $qb->execute());
|
||||
|
||||
// Get the id
|
||||
$qb = $this->dbConn->getQueryBuilder();
|
||||
$cursor = $qb->select('id')
|
||||
->from('share')
|
||||
->setMaxResults(1)
|
||||
->orderBy('id', 'DESC')
|
||||
->execute();
|
||||
$id = $cursor->fetch();
|
||||
$id = $id['id'];
|
||||
$cursor->closeCursor();
|
||||
$id = $qb->getLastInsertId();
|
||||
|
||||
$sharedWith = $this->getMock('OCP\IGroup');
|
||||
$sharedBy = $this->getMock('OCP\IUser');
|
||||
|
@ -242,16 +225,7 @@ class DefaultShareProviderTest extends \Test\TestCase {
|
|||
]);
|
||||
$this->assertEquals(1, $qb->execute());
|
||||
|
||||
// Get the id
|
||||
$qb = $this->dbConn->getQueryBuilder();
|
||||
$cursor = $qb->select('id')
|
||||
->from('share')
|
||||
->setMaxResults(1)
|
||||
->orderBy('id', 'DESC')
|
||||
->execute();
|
||||
$id = $cursor->fetch();
|
||||
$id = $id['id'];
|
||||
$cursor->closeCursor();
|
||||
$id = $qb->getLastInsertId();
|
||||
|
||||
$sharedBy = $this->getMock('OCP\IUser');
|
||||
$sharedBy->method('getUID')->willReturn('sharedBy');
|
||||
|
@ -311,17 +285,7 @@ class DefaultShareProviderTest extends \Test\TestCase {
|
|||
]);
|
||||
$this->assertEquals(1, $qb->execute());
|
||||
|
||||
// Get the id
|
||||
$qb = $this->dbConn->getQueryBuilder();
|
||||
$cursor = $qb->select('id')
|
||||
->from('share')
|
||||
->setMaxResults(1)
|
||||
->orderBy('id', 'DESC')
|
||||
->execute();
|
||||
$id = $cursor->fetch();
|
||||
$id = $id['id'];
|
||||
$cursor->closeCursor();
|
||||
|
||||
$id = $qb->getLastInsertId();
|
||||
|
||||
$share = $this->getMock('OC\Share20\IShare');
|
||||
$share->method('getId')->willReturn($id);
|
||||
|
@ -771,4 +735,392 @@ class DefaultShareProviderTest extends \Test\TestCase {
|
|||
public function testGetShareByTokenNotFound() {
|
||||
$this->provider->getShareByToken('invalidtoken');
|
||||
}
|
||||
|
||||
public function testGetSharedWithUser() {
|
||||
$qb = $this->dbConn->getQueryBuilder();
|
||||
$qb->insert('share')
|
||||
->values([
|
||||
'share_type' => $qb->expr()->literal(\OCP\Share::SHARE_TYPE_USER),
|
||||
'share_with' => $qb->expr()->literal('sharedWith'),
|
||||
'uid_owner' => $qb->expr()->literal('shareOwner'),
|
||||
'uid_initiator' => $qb->expr()->literal('sharedBy'),
|
||||
'item_type' => $qb->expr()->literal('file'),
|
||||
'file_source' => $qb->expr()->literal(42),
|
||||
'file_target' => $qb->expr()->literal('myTarget'),
|
||||
'permissions' => $qb->expr()->literal(13),
|
||||
]);
|
||||
$this->assertEquals(1, $qb->execute());
|
||||
$id = $qb->getLastInsertId();
|
||||
|
||||
$qb = $this->dbConn->getQueryBuilder();
|
||||
$qb->insert('share')
|
||||
->values([
|
||||
'share_type' => $qb->expr()->literal(\OCP\Share::SHARE_TYPE_USER),
|
||||
'share_with' => $qb->expr()->literal('sharedWith2'),
|
||||
'uid_owner' => $qb->expr()->literal('shareOwner2'),
|
||||
'uid_initiator' => $qb->expr()->literal('sharedBy2'),
|
||||
'item_type' => $qb->expr()->literal('file2'),
|
||||
'file_source' => $qb->expr()->literal(43),
|
||||
'file_target' => $qb->expr()->literal('myTarget2'),
|
||||
'permissions' => $qb->expr()->literal(14),
|
||||
]);
|
||||
$this->assertEquals(1, $qb->execute());
|
||||
|
||||
$user = $this->getMock('\OCP\IUser');
|
||||
$user->method('getUID')->willReturn('sharedWith');
|
||||
$owner = $this->getMock('\OCP\IUser');
|
||||
$owner->method('getUID')->willReturn('shareOwner');
|
||||
$initiator = $this->getMock('\OCP\IUser');
|
||||
$initiator->method('getUID')->willReturn('sharedBy');
|
||||
|
||||
$this->userManager->method('get')->willReturnMap([
|
||||
['sharedWith', $user],
|
||||
['shareOwner', $owner],
|
||||
['sharedBy', $initiator],
|
||||
]);
|
||||
|
||||
$file = $this->getMock('\OCP\Files\File');
|
||||
$this->rootFolder->method('getUserFolder')->with('shareOwner')->will($this->returnSelf());
|
||||
$this->rootFolder->method('getById')->with(42)->willReturn([$file]);
|
||||
|
||||
$share = $this->provider->getSharedWith($user, \OCP\Share::SHARE_TYPE_USER, 1 , 0);
|
||||
$this->assertCount(1, $share);
|
||||
|
||||
$share = $share[0];
|
||||
$this->assertEquals($id, $share->getId());
|
||||
$this->assertEquals($user, $share->getSharedWith());
|
||||
$this->assertEquals($owner, $share->getShareOwner());
|
||||
$this->assertEquals($initiator, $share->getSharedBy());
|
||||
$this->assertEquals(\OCP\Share::SHARE_TYPE_USER, $share->getShareType());
|
||||
}
|
||||
|
||||
public function testGetSharedWithGroup() {
|
||||
$qb = $this->dbConn->getQueryBuilder();
|
||||
$qb->insert('share')
|
||||
->values([
|
||||
'share_type' => $qb->expr()->literal(\OCP\Share::SHARE_TYPE_GROUP),
|
||||
'share_with' => $qb->expr()->literal('sharedWith'),
|
||||
'uid_owner' => $qb->expr()->literal('shareOwner2'),
|
||||
'uid_initiator' => $qb->expr()->literal('sharedBy2'),
|
||||
'item_type' => $qb->expr()->literal('file'),
|
||||
'file_source' => $qb->expr()->literal(43),
|
||||
'file_target' => $qb->expr()->literal('myTarget2'),
|
||||
'permissions' => $qb->expr()->literal(14),
|
||||
]);
|
||||
$this->assertEquals(1, $qb->execute());
|
||||
|
||||
$qb = $this->dbConn->getQueryBuilder();
|
||||
$qb->insert('share')
|
||||
->values([
|
||||
'share_type' => $qb->expr()->literal(\OCP\Share::SHARE_TYPE_GROUP),
|
||||
'share_with' => $qb->expr()->literal('sharedWith'),
|
||||
'uid_owner' => $qb->expr()->literal('shareOwner'),
|
||||
'uid_initiator' => $qb->expr()->literal('sharedBy'),
|
||||
'item_type' => $qb->expr()->literal('file'),
|
||||
'file_source' => $qb->expr()->literal(42),
|
||||
'file_target' => $qb->expr()->literal('myTarget'),
|
||||
'permissions' => $qb->expr()->literal(13),
|
||||
]);
|
||||
$this->assertEquals(1, $qb->execute());
|
||||
$id = $qb->getLastInsertId();
|
||||
|
||||
$groups = [];
|
||||
foreach(range(0, 100) as $i) {
|
||||
$group = $this->getMock('\OCP\IGroup');
|
||||
$group->method('getGID')->willReturn('group'.$i);
|
||||
$groups[] = $group;
|
||||
}
|
||||
|
||||
$group = $this->getMock('\OCP\IGroup');
|
||||
$group->method('getGID')->willReturn('sharedWith');
|
||||
$groups[] = $group;
|
||||
|
||||
$user = $this->getMock('\OCP\IUser');
|
||||
$user->method('getUID')->willReturn('sharedWith');
|
||||
$owner = $this->getMock('\OCP\IUser');
|
||||
$owner->method('getUID')->willReturn('shareOwner');
|
||||
$initiator = $this->getMock('\OCP\IUser');
|
||||
$initiator->method('getUID')->willReturn('sharedBy');
|
||||
|
||||
$this->userManager->method('get')->willReturnMap([
|
||||
['shareOwner', $owner],
|
||||
['sharedBy', $initiator],
|
||||
]);
|
||||
$this->groupManager->method('getUserGroups')->with($user)->willReturn($groups);
|
||||
$this->groupManager->method('get')->with('sharedWith')->willReturn($group);
|
||||
|
||||
$file = $this->getMock('\OCP\Files\File');
|
||||
$this->rootFolder->method('getUserFolder')->with('shareOwner')->will($this->returnSelf());
|
||||
$this->rootFolder->method('getById')->with(42)->willReturn([$file]);
|
||||
|
||||
$share = $this->provider->getSharedWith($user, \OCP\Share::SHARE_TYPE_GROUP, 20 , 1);
|
||||
$this->assertCount(1, $share);
|
||||
|
||||
$share = $share[0];
|
||||
$this->assertEquals($id, $share->getId());
|
||||
$this->assertEquals($group, $share->getSharedWith());
|
||||
$this->assertEquals($owner, $share->getShareOwner());
|
||||
$this->assertEquals($initiator, $share->getSharedBy());
|
||||
$this->assertEquals(\OCP\Share::SHARE_TYPE_GROUP, $share->getShareType());
|
||||
}
|
||||
|
||||
public function testGetSharedWithGroupUserModified() {
|
||||
$qb = $this->dbConn->getQueryBuilder();
|
||||
$qb->insert('share')
|
||||
->values([
|
||||
'share_type' => $qb->expr()->literal(\OCP\Share::SHARE_TYPE_GROUP),
|
||||
'share_with' => $qb->expr()->literal('sharedWith'),
|
||||
'uid_owner' => $qb->expr()->literal('shareOwner'),
|
||||
'uid_initiator' => $qb->expr()->literal('sharedBy'),
|
||||
'item_type' => $qb->expr()->literal('file'),
|
||||
'file_source' => $qb->expr()->literal(42),
|
||||
'file_target' => $qb->expr()->literal('myTarget'),
|
||||
'permissions' => $qb->expr()->literal(13),
|
||||
]);
|
||||
$this->assertEquals(1, $qb->execute());
|
||||
$id = $qb->getLastInsertId();
|
||||
|
||||
$qb = $this->dbConn->getQueryBuilder();
|
||||
$qb->insert('share')
|
||||
->values([
|
||||
'share_type' => $qb->expr()->literal(2),
|
||||
'share_with' => $qb->expr()->literal('user'),
|
||||
'uid_owner' => $qb->expr()->literal('shareOwner'),
|
||||
'uid_initiator' => $qb->expr()->literal('sharedBy'),
|
||||
'item_type' => $qb->expr()->literal('file'),
|
||||
'file_source' => $qb->expr()->literal(42),
|
||||
'file_target' => $qb->expr()->literal('userTarget'),
|
||||
'permissions' => $qb->expr()->literal(0),
|
||||
'parent' => $qb->expr()->literal($id),
|
||||
]);
|
||||
$this->assertEquals(1, $qb->execute());
|
||||
|
||||
$group = $this->getMock('\OCP\IGroup');
|
||||
$group->method('getGID')->willReturn('sharedWith');
|
||||
$groups = [$group];
|
||||
|
||||
$user = $this->getMock('\OCP\IUser');
|
||||
$user->method('getUID')->willReturn('user');
|
||||
$owner = $this->getMock('\OCP\IUser');
|
||||
$owner->method('getUID')->willReturn('shareOwner');
|
||||
$initiator = $this->getMock('\OCP\IUser');
|
||||
$initiator->method('getUID')->willReturn('sharedBy');
|
||||
|
||||
$this->userManager->method('get')->willReturnMap([
|
||||
['shareOwner', $owner],
|
||||
['sharedBy', $initiator],
|
||||
]);
|
||||
$this->groupManager->method('getUserGroups')->with($user)->willReturn($groups);
|
||||
$this->groupManager->method('get')->with('sharedWith')->willReturn($group);
|
||||
|
||||
$file = $this->getMock('\OCP\Files\File');
|
||||
$this->rootFolder->method('getUserFolder')->with('shareOwner')->will($this->returnSelf());
|
||||
$this->rootFolder->method('getById')->with(42)->willReturn([$file]);
|
||||
|
||||
$share = $this->provider->getSharedWith($user, \OCP\Share::SHARE_TYPE_GROUP, -1, 0);
|
||||
$this->assertCount(1, $share);
|
||||
|
||||
$share = $share[0];
|
||||
$this->assertEquals($id, $share->getId());
|
||||
$this->assertEquals($group, $share->getSharedWith());
|
||||
$this->assertEquals($owner, $share->getShareOwner());
|
||||
$this->assertEquals($initiator, $share->getSharedBy());
|
||||
$this->assertEquals(\OCP\Share::SHARE_TYPE_GROUP, $share->getShareType());
|
||||
$this->assertEquals(0, $share->getPermissions());
|
||||
$this->assertEquals('userTarget', $share->getTarget());
|
||||
}
|
||||
|
||||
public function testGetSharesBy() {
|
||||
$qb = $this->dbConn->getQueryBuilder();
|
||||
$qb->insert('share')
|
||||
->values([
|
||||
'share_type' => $qb->expr()->literal(\OCP\Share::SHARE_TYPE_USER),
|
||||
'share_with' => $qb->expr()->literal('sharedWith'),
|
||||
'uid_owner' => $qb->expr()->literal('shareOwner'),
|
||||
'uid_initiator' => $qb->expr()->literal('sharedBy'),
|
||||
'item_type' => $qb->expr()->literal('file'),
|
||||
'file_source' => $qb->expr()->literal(42),
|
||||
'file_target' => $qb->expr()->literal('myTarget'),
|
||||
'permissions' => $qb->expr()->literal(13),
|
||||
]);
|
||||
$this->assertEquals(1, $qb->execute());
|
||||
$id = $qb->getLastInsertId();
|
||||
|
||||
$qb = $this->dbConn->getQueryBuilder();
|
||||
$qb->insert('share')
|
||||
->values([
|
||||
'share_type' => $qb->expr()->literal(\OCP\Share::SHARE_TYPE_USER),
|
||||
'share_with' => $qb->expr()->literal('sharedWith'),
|
||||
'uid_owner' => $qb->expr()->literal('shareOwner'),
|
||||
'uid_initiator' => $qb->expr()->literal('sharedBy2'),
|
||||
'item_type' => $qb->expr()->literal('file'),
|
||||
'file_source' => $qb->expr()->literal(42),
|
||||
'file_target' => $qb->expr()->literal('userTarget'),
|
||||
'permissions' => $qb->expr()->literal(0),
|
||||
'parent' => $qb->expr()->literal($id),
|
||||
]);
|
||||
$this->assertEquals(1, $qb->execute());
|
||||
|
||||
$user = $this->getMock('\OCP\IUser');
|
||||
$user->method('getUID')->willReturn('sharedWith');
|
||||
$owner = $this->getMock('\OCP\IUser');
|
||||
$owner->method('getUID')->willReturn('shareOwner');
|
||||
$initiator = $this->getMock('\OCP\IUser');
|
||||
$initiator->method('getUID')->willReturn('sharedBy');
|
||||
|
||||
$this->userManager->method('get')->willReturnMap([
|
||||
['sharedWith', $user],
|
||||
['shareOwner', $owner],
|
||||
['sharedBy', $initiator],
|
||||
]);
|
||||
|
||||
$file = $this->getMock('\OCP\Files\File');
|
||||
$this->rootFolder->method('getUserFolder')->with('shareOwner')->will($this->returnSelf());
|
||||
$this->rootFolder->method('getById')->with(42)->willReturn([$file]);
|
||||
|
||||
$share = $this->provider->getSharesBy($initiator, \OCP\Share::SHARE_TYPE_USER, null, false, 1, 0);
|
||||
$this->assertCount(1, $share);
|
||||
|
||||
$share = $share[0];
|
||||
$this->assertEquals($id, $share->getId());
|
||||
$this->assertEquals($user, $share->getSharedWith());
|
||||
$this->assertEquals($owner, $share->getShareOwner());
|
||||
$this->assertEquals($initiator, $share->getSharedBy());
|
||||
$this->assertEquals(\OCP\Share::SHARE_TYPE_USER, $share->getShareType());
|
||||
$this->assertEquals(13, $share->getPermissions());
|
||||
$this->assertEquals('myTarget', $share->getTarget());
|
||||
}
|
||||
|
||||
public function testGetSharesNode() {
|
||||
$qb = $this->dbConn->getQueryBuilder();
|
||||
$qb->insert('share')
|
||||
->values([
|
||||
'share_type' => $qb->expr()->literal(\OCP\Share::SHARE_TYPE_USER),
|
||||
'share_with' => $qb->expr()->literal('sharedWith'),
|
||||
'uid_owner' => $qb->expr()->literal('shareOwner'),
|
||||
'uid_initiator' => $qb->expr()->literal('sharedBy'),
|
||||
'item_type' => $qb->expr()->literal('file'),
|
||||
'file_source' => $qb->expr()->literal(42),
|
||||
'file_target' => $qb->expr()->literal('myTarget'),
|
||||
'permissions' => $qb->expr()->literal(13),
|
||||
]);
|
||||
$this->assertEquals(1, $qb->execute());
|
||||
$id = $qb->getLastInsertId();
|
||||
|
||||
$qb = $this->dbConn->getQueryBuilder();
|
||||
$qb->insert('share')
|
||||
->values([
|
||||
'share_type' => $qb->expr()->literal(\OCP\Share::SHARE_TYPE_USER),
|
||||
'share_with' => $qb->expr()->literal('sharedWith'),
|
||||
'uid_owner' => $qb->expr()->literal('shareOwner'),
|
||||
'uid_initiator' => $qb->expr()->literal('sharedBy'),
|
||||
'item_type' => $qb->expr()->literal('file'),
|
||||
'file_source' => $qb->expr()->literal(43),
|
||||
'file_target' => $qb->expr()->literal('userTarget'),
|
||||
'permissions' => $qb->expr()->literal(0),
|
||||
'parent' => $qb->expr()->literal($id),
|
||||
]);
|
||||
$this->assertEquals(1, $qb->execute());
|
||||
|
||||
$user = $this->getMock('\OCP\IUser');
|
||||
$user->method('getUID')->willReturn('sharedWith');
|
||||
$owner = $this->getMock('\OCP\IUser');
|
||||
$owner->method('getUID')->willReturn('shareOwner');
|
||||
$initiator = $this->getMock('\OCP\IUser');
|
||||
$initiator->method('getUID')->willReturn('sharedBy');
|
||||
|
||||
$this->userManager->method('get')->willReturnMap([
|
||||
['sharedWith', $user],
|
||||
['shareOwner', $owner],
|
||||
['sharedBy', $initiator],
|
||||
]);
|
||||
|
||||
$file = $this->getMock('\OCP\Files\File');
|
||||
$file->method('getId')->willReturn(42);
|
||||
$this->rootFolder->method('getUserFolder')->with('shareOwner')->will($this->returnSelf());
|
||||
$this->rootFolder->method('getById')->with(42)->willReturn([$file]);
|
||||
|
||||
$share = $this->provider->getSharesBy($initiator, \OCP\Share::SHARE_TYPE_USER, $file, false, 1, 0);
|
||||
$this->assertCount(1, $share);
|
||||
|
||||
$share = $share[0];
|
||||
$this->assertEquals($id, $share->getId());
|
||||
$this->assertEquals($user, $share->getSharedWith());
|
||||
$this->assertEquals($owner, $share->getShareOwner());
|
||||
$this->assertEquals($initiator, $share->getSharedBy());
|
||||
$this->assertEquals(\OCP\Share::SHARE_TYPE_USER, $share->getShareType());
|
||||
$this->assertEquals(13, $share->getPermissions());
|
||||
$this->assertEquals('myTarget', $share->getTarget());
|
||||
}
|
||||
|
||||
public function testGetSharesReshare() {
|
||||
$qb = $this->dbConn->getQueryBuilder();
|
||||
$qb->insert('share')
|
||||
->values([
|
||||
'share_type' => $qb->expr()->literal(\OCP\Share::SHARE_TYPE_USER),
|
||||
'share_with' => $qb->expr()->literal('sharedWith'),
|
||||
'uid_owner' => $qb->expr()->literal('shareOwner'),
|
||||
'uid_initiator' => $qb->expr()->literal('shareOwner'),
|
||||
'item_type' => $qb->expr()->literal('file'),
|
||||
'file_source' => $qb->expr()->literal(42),
|
||||
'file_target' => $qb->expr()->literal('myTarget'),
|
||||
'permissions' => $qb->expr()->literal(13),
|
||||
]);
|
||||
$this->assertEquals(1, $qb->execute());
|
||||
$id1 = $qb->getLastInsertId();
|
||||
|
||||
$qb = $this->dbConn->getQueryBuilder();
|
||||
$qb->insert('share')
|
||||
->values([
|
||||
'share_type' => $qb->expr()->literal(\OCP\Share::SHARE_TYPE_USER),
|
||||
'share_with' => $qb->expr()->literal('sharedWith'),
|
||||
'uid_owner' => $qb->expr()->literal('shareOwner'),
|
||||
'uid_initiator' => $qb->expr()->literal('sharedBy'),
|
||||
'item_type' => $qb->expr()->literal('file'),
|
||||
'file_source' => $qb->expr()->literal(42),
|
||||
'file_target' => $qb->expr()->literal('userTarget'),
|
||||
'permissions' => $qb->expr()->literal(0),
|
||||
]);
|
||||
$this->assertEquals(1, $qb->execute());
|
||||
$id2 = $qb->getLastInsertId();
|
||||
|
||||
$user = $this->getMock('\OCP\IUser');
|
||||
$user->method('getUID')->willReturn('sharedWith');
|
||||
$owner = $this->getMock('\OCP\IUser');
|
||||
$owner->method('getUID')->willReturn('shareOwner');
|
||||
$initiator = $this->getMock('\OCP\IUser');
|
||||
$initiator->method('getUID')->willReturn('sharedBy');
|
||||
|
||||
$this->userManager->method('get')->willReturnMap([
|
||||
['sharedWith', $user],
|
||||
['shareOwner', $owner],
|
||||
['sharedBy', $initiator],
|
||||
]);
|
||||
|
||||
$file = $this->getMock('\OCP\Files\File');
|
||||
$file->method('getId')->willReturn(42);
|
||||
$this->rootFolder->method('getUserFolder')->with('shareOwner')->will($this->returnSelf());
|
||||
$this->rootFolder->method('getById')->with(42)->willReturn([$file]);
|
||||
|
||||
$shares = $this->provider->getSharesBy($owner, \OCP\Share::SHARE_TYPE_USER, null, true, -1, 0);
|
||||
$this->assertCount(2, $shares);
|
||||
|
||||
$share = $shares[0];
|
||||
$this->assertEquals($id1, $share->getId());
|
||||
$this->assertSame($user, $share->getSharedWith());
|
||||
$this->assertSame($owner, $share->getShareOwner());
|
||||
$this->assertSame($owner, $share->getSharedBy());
|
||||
$this->assertEquals(\OCP\Share::SHARE_TYPE_USER, $share->getShareType());
|
||||
$this->assertEquals(13, $share->getPermissions());
|
||||
$this->assertEquals('myTarget', $share->getTarget());
|
||||
|
||||
$share = $shares[1];
|
||||
$this->assertEquals($id2, $share->getId());
|
||||
$this->assertSame($user, $share->getSharedWith());
|
||||
$this->assertSame($owner, $share->getShareOwner());
|
||||
$this->assertSame($initiator, $share->getSharedBy());
|
||||
$this->assertEquals(\OCP\Share::SHARE_TYPE_USER, $share->getShareType());
|
||||
$this->assertEquals(0, $share->getPermissions());
|
||||
$this->assertEquals('userTarget', $share->getTarget());
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue