[Sharing 2.0] Use the rootfolder to get the path of a share

We need to use the rootfolder here since we also other people than the
shareOwner can request a share.
This commit is contained in:
Roeland Jago Douma 2015-11-24 10:16:02 +01:00
parent 85976b7293
commit 8d309767d7
3 changed files with 65 additions and 49 deletions

View File

@ -40,7 +40,7 @@ class OCSShareWrapper {
\OC::$server->getGroupManager(), \OC::$server->getGroupManager(),
\OC::$server->getUserManager(), \OC::$server->getUserManager(),
\OC::$server->getRequest(), \OC::$server->getRequest(),
\OC::$server->getUserFolder(), \OC::$server->getRootFolder(),
\OC::$server->getURLGenerator(), \OC::$server->getURLGenerator(),
\OC::$server->getUserSession()->getUser()); \OC::$server->getUserSession()->getUser());
} }

View File

@ -28,6 +28,7 @@ use OCP\IRequest;
use OCP\Files\Folder; use OCP\Files\Folder;
use OCP\IURLGenerator; use OCP\IURLGenerator;
use OCP\IUser; use OCP\IUser;
use OCP\Files\IRootFolder;
class Share20OCS { class Share20OCS {
@ -43,8 +44,8 @@ class Share20OCS {
/** @var IRequest */ /** @var IRequest */
private $request; private $request;
/** @var Folder */ /** @var IRootFolder */
private $userFolder; private $rootFolder;
/** @var IUrlGenerator */ /** @var IUrlGenerator */
private $urlGenerator; private $urlGenerator;
@ -57,7 +58,7 @@ class Share20OCS {
IGroupManager $groupManager, IGroupManager $groupManager,
IUserManager $userManager, IUserManager $userManager,
IRequest $request, IRequest $request,
Folder $userFolder, IRootFolder $rootFolder,
IURLGenerator $urlGenerator, IURLGenerator $urlGenerator,
IUser $currentUser IUser $currentUser
) { ) {
@ -65,7 +66,7 @@ class Share20OCS {
$this->userManager = $userManager; $this->userManager = $userManager;
$this->groupManager = $groupManager; $this->groupManager = $groupManager;
$this->request = $request; $this->request = $request;
$this->userFolder = $userFolder; $this->rootFolder = $rootFolder;
$this->urlGenerator = $urlGenerator; $this->urlGenerator = $urlGenerator;
$this->currentUser = $currentUser; $this->currentUser = $currentUser;
} }
@ -90,7 +91,7 @@ class Share20OCS {
]; ];
$path = $share->getPath(); $path = $share->getPath();
$result['path'] = $this->userFolder->getRelativePath($path->getPath()); $result['path'] = $this->rootFolder->getUserFolder($share->getShareOwner()->getUID())->getRelativePath($path->getPath());
if ($path instanceOf \OCP\Files\Folder) { if ($path instanceOf \OCP\Files\Folder) {
$result['item_type'] = 'folder'; $result['item_type'] = 'folder';
} else { } else {

View File

@ -25,9 +25,9 @@ use OCA\Files_Sharing\API\Share20OCS;
use OCP\IGroupManager; use OCP\IGroupManager;
use OCP\IUserManager; use OCP\IUserManager;
use OCP\IRequest; use OCP\IRequest;
use OCP\Files\Folder;
use OCP\IURLGenerator; use OCP\IURLGenerator;
use OCP\IUser; use OCP\IUser;
use OCP\Files\IRootFolder;
class Share20OCSTest extends \Test\TestCase { class Share20OCSTest extends \Test\TestCase {
@ -43,8 +43,8 @@ class Share20OCSTest extends \Test\TestCase {
/** @var IRequest */ /** @var IRequest */
private $request; private $request;
/** @var Folder */ /** @var IRootFolder */
private $userFolder; private $rootFolder;
/** @var IURLGenerator */ /** @var IURLGenerator */
private $urlGenerator; private $urlGenerator;
@ -62,7 +62,7 @@ class Share20OCSTest extends \Test\TestCase {
$this->groupManager = $this->getMock('OCP\IGroupManager'); $this->groupManager = $this->getMock('OCP\IGroupManager');
$this->userManager = $this->getMock('OCP\IUserManager'); $this->userManager = $this->getMock('OCP\IUserManager');
$this->request = $this->getMock('OCP\IRequest'); $this->request = $this->getMock('OCP\IRequest');
$this->userFolder = $this->getMock('OCP\Files\Folder'); $this->rootFolder = $this->getMock('OCP\Files\IRootFolder');
$this->urlGenerator = $this->getMock('OCP\IURLGenerator'); $this->urlGenerator = $this->getMock('OCP\IURLGenerator');
$this->currentUser = $this->getMock('OCP\IUser'); $this->currentUser = $this->getMock('OCP\IUser');
@ -71,7 +71,7 @@ class Share20OCSTest extends \Test\TestCase {
$this->groupManager, $this->groupManager,
$this->userManager, $this->userManager,
$this->request, $this->request,
$this->userFolder, $this->rootFolder,
$this->urlGenerator, $this->urlGenerator,
$this->currentUser $this->currentUser
); );
@ -135,7 +135,7 @@ class Share20OCSTest extends \Test\TestCase {
$this->assertEquals($expected, $this->ocs->getShare(42)); $this->assertEquals($expected, $this->ocs->getShare(42));
} }
public function createShare($id, $shareType, $sharedWith, $sharedBy, $path, $permissions, public function createShare($id, $shareType, $sharedWith, $sharedBy, $shareOwner, $path, $permissions,
$shareTime, $expiration, $parent, $target, $mail_send, $token=null, $shareTime, $expiration, $parent, $target, $mail_send, $token=null,
$password=null) { $password=null) {
$share = $this->getMock('OC\Share20\IShare'); $share = $this->getMock('OC\Share20\IShare');
@ -143,6 +143,7 @@ class Share20OCSTest extends \Test\TestCase {
$share->method('getShareType')->willReturn($shareType); $share->method('getShareType')->willReturn($shareType);
$share->method('getSharedWith')->willReturn($sharedWith); $share->method('getSharedWith')->willReturn($sharedWith);
$share->method('getSharedBy')->willReturn($sharedBy); $share->method('getSharedBy')->willReturn($sharedBy);
$share->method('getShareOwner')->willReturn($shareOwner);
$share->method('getPath')->willReturn($path); $share->method('getPath')->willReturn($path);
$share->method('getPermissions')->willReturn($permissions); $share->method('getPermissions')->willReturn($permissions);
$share->method('getShareTime')->willReturn($shareTime); $share->method('getShareTime')->willReturn($shareTime);
@ -189,17 +190,20 @@ class Share20OCSTest extends \Test\TestCase {
$folder->method('getParent')->willReturn($parentFolder); $folder->method('getParent')->willReturn($parentFolder);
// File shared with user // File shared with user
$share = $this->createShare(100, $share = $this->createShare(
\OCP\Share::SHARE_TYPE_USER, 100,
$user, \OCP\Share::SHARE_TYPE_USER,
$owner, $user,
$file, $owner,
4, $owner,
5, $file,
null, 4,
6, 5,
'target', null,
0); 6,
'target',
0
);
$expected = [ $expected = [
'id' => 100, 'id' => 100,
'share_type' => \OCP\Share::SHARE_TYPE_USER, 'share_type' => \OCP\Share::SHARE_TYPE_USER,
@ -225,17 +229,20 @@ class Share20OCSTest extends \Test\TestCase {
$data[] = [$share, $expected]; $data[] = [$share, $expected];
// Folder shared with group // Folder shared with group
$share = $this->createShare(101, $share = $this->createShare(
\OCP\Share::SHARE_TYPE_GROUP, 101,
$group, \OCP\Share::SHARE_TYPE_GROUP,
$owner, $group,
$folder, $owner,
4, $owner,
5, $folder,
null, 4,
6, 5,
'target', null,
0); 6,
'target',
0
);
$expected = [ $expected = [
'id' => 101, 'id' => 101,
'share_type' => \OCP\Share::SHARE_TYPE_GROUP, 'share_type' => \OCP\Share::SHARE_TYPE_GROUP,
@ -262,19 +269,22 @@ class Share20OCSTest extends \Test\TestCase {
// File shared by link with Expire // File shared by link with Expire
$expire = \DateTime::createFromFormat('Y-m-d h:i:s', '2000-01-02 01:02:03'); $expire = \DateTime::createFromFormat('Y-m-d h:i:s', '2000-01-02 01:02:03');
$share = $this->createShare(101, $share = $this->createShare(
\OCP\Share::SHARE_TYPE_LINK, 101,
null, \OCP\Share::SHARE_TYPE_LINK,
$owner, null,
$folder, $owner,
4, $owner,
5, $folder,
$expire, 4,
6, 5,
'target', $expire,
0, 6,
'token', 'target',
'password'); 0,
'token',
'password'
);
$expected = [ $expected = [
'id' => 101, 'id' => 101,
'share_type' => \OCP\Share::SHARE_TYPE_LINK, 'share_type' => \OCP\Share::SHARE_TYPE_LINK,
@ -313,7 +323,7 @@ class Share20OCSTest extends \Test\TestCase {
$this->groupManager, $this->groupManager,
$this->userManager, $this->userManager,
$this->request, $this->request,
$this->userFolder, $this->rootFolder,
$this->urlGenerator, $this->urlGenerator,
$this->currentUser $this->currentUser
])->setMethods(['canAccessShare']) ])->setMethods(['canAccessShare'])
@ -327,10 +337,15 @@ class Share20OCSTest extends \Test\TestCase {
->with($share->getId()) ->with($share->getId())
->willReturn($share); ->willReturn($share);
$this->userFolder $userFolder = $this->getMock('OCP\Files\Folder');
$userFolder
->method('getRelativePath') ->method('getRelativePath')
->will($this->returnArgument(0)); ->will($this->returnArgument(0));
$this->rootFolder->method('getUserFolder')
->with($share->getShareOwner()->getUID())
->willReturn($userFolder);
$this->urlGenerator $this->urlGenerator
->method('linkToRouteAbsolute') ->method('linkToRouteAbsolute')
->willReturn('url'); ->willReturn('url');