Skip to content

Commit a2cddf2

Browse files
authored
Merge pull request #14283 from nextcloud/backport/14194/stable15
[stable15] Correctly determinate the owner in case of shared external storages
2 parents 736d4ee + 5823cd6 commit a2cddf2

File tree

2 files changed

+34
-18
lines changed

2 files changed

+34
-18
lines changed

lib/private/Share20/Manager.php

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1419,10 +1419,12 @@ public function getAccessList(\OCP\Files\Node $path, $recursive = true, $current
14191419
return $al;
14201420
}
14211421

1422-
//Get node for the owner
1422+
//Get node for the owner and correct the owner in case of external storages
14231423
$userFolder = $this->rootFolder->getUserFolder($owner);
14241424
if ($path->getId() !== $userFolder->getId() && !$userFolder->isSubNode($path)) {
1425-
$path = $userFolder->getById($path->getId())[0];
1425+
$nodes = $userFolder->getById($path->getId());
1426+
$path = array_shift($nodes);
1427+
$owner = $path->getOwner()->getUID();
14261428
}
14271429

14281430
$providers = $this->factory->getAllProviders();

tests/lib/Share20/ManagerTest.php

Lines changed: 30 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -3431,26 +3431,33 @@ public function testGetAccessList() {
34313431
$extraProvider = $this->createMock(IShareProvider::class);
34323432
$factory->setSecondProvider($extraProvider);
34333433

3434-
$owner = $this->createMock(IUser::class);
3435-
$owner->expects($this->once())
3434+
$nodeOwner = $this->createMock(IUser::class);
3435+
$nodeOwner->expects($this->once())
34363436
->method('getUID')
3437-
->willReturn('owner');
3437+
->willReturn('user1');
34383438

34393439
$node = $this->createMock(Node::class);
34403440
$node->expects($this->once())
34413441
->method('getOwner')
3442-
->willReturn($owner);
3442+
->willReturn($nodeOwner);
34433443
$node->method('getId')
34443444
->willReturn(42);
34453445

34463446
$userFolder = $this->createMock(Folder::class);
34473447
$file = $this->createMock(File::class);
34483448
$folder = $this->createMock(Folder::class);
34493449

3450+
$owner = $this->createMock(IUser::class);
3451+
$owner->expects($this->once())
3452+
->method('getUID')
3453+
->willReturn('owner');
3454+
34503455
$file->method('getParent')
34513456
->willReturn($folder);
34523457
$file->method('getPath')
34533458
->willReturn('/owner/files/folder/file');
3459+
$file->method('getOwner')
3460+
->willReturn($owner);
34543461
$file->method('getId')
34553462
->willReturn(23);
34563463
$folder->method('getParent')
@@ -3459,12 +3466,12 @@ public function testGetAccessList() {
34593466
->willReturn('/owner/files/folder');
34603467
$userFolder->method('getById')
34613468
->with($this->equalTo(42))
3462-
->willReturn([$file]);
3469+
->willReturn([12 => $file]);
34633470
$userFolder->method('getPath')
3464-
->willReturn('/owner/files');
3471+
->willReturn('/user1/files');
34653472

34663473
$this->userManager->method('userExists')
3467-
->with($this->equalTo('owner'))
3474+
->with($this->equalTo('user1'))
34683475
->willReturn(true);
34693476

34703477
$this->defaultProvider->method('getAccessList')
@@ -3498,7 +3505,7 @@ public function testGetAccessList() {
34983505
]);
34993506

35003507
$this->rootFolder->method('getUserFolder')
3501-
->with($this->equalTo('owner'))
3508+
->with($this->equalTo('user1'))
35023509
->willReturn($userFolder);
35033510

35043511
$expected = [
@@ -3540,26 +3547,33 @@ public function testGetAccessListWithCurrentAccess() {
35403547
$extraProvider = $this->createMock(IShareProvider::class);
35413548
$factory->setSecondProvider($extraProvider);
35423549

3543-
$owner = $this->createMock(IUser::class);
3544-
$owner->expects($this->once())
3550+
$nodeOwner = $this->createMock(IUser::class);
3551+
$nodeOwner->expects($this->once())
35453552
->method('getUID')
3546-
->willReturn('owner');
3553+
->willReturn('user1');
35473554

35483555
$node = $this->createMock(Node::class);
35493556
$node->expects($this->once())
35503557
->method('getOwner')
3551-
->willReturn($owner);
3558+
->willReturn($nodeOwner);
35523559
$node->method('getId')
35533560
->willReturn(42);
35543561

35553562
$userFolder = $this->createMock(Folder::class);
35563563
$file = $this->createMock(File::class);
3564+
3565+
$owner = $this->createMock(IUser::class);
3566+
$owner->expects($this->once())
3567+
->method('getUID')
3568+
->willReturn('owner');
35573569
$folder = $this->createMock(Folder::class);
35583570

35593571
$file->method('getParent')
35603572
->willReturn($folder);
35613573
$file->method('getPath')
35623574
->willReturn('/owner/files/folder/file');
3575+
$file->method('getOwner')
3576+
->willReturn($owner);
35633577
$file->method('getId')
35643578
->willReturn(23);
35653579
$folder->method('getParent')
@@ -3568,12 +3582,12 @@ public function testGetAccessListWithCurrentAccess() {
35683582
->willReturn('/owner/files/folder');
35693583
$userFolder->method('getById')
35703584
->with($this->equalTo(42))
3571-
->willReturn([$file]);
3585+
->willReturn([42 => $file]);
35723586
$userFolder->method('getPath')
3573-
->willReturn('/owner/files');
3587+
->willReturn('/user1/files');
35743588

35753589
$this->userManager->method('userExists')
3576-
->with($this->equalTo('owner'))
3590+
->with($this->equalTo('user1'))
35773591
->willReturn(true);
35783592

35793593
$this->defaultProvider->method('getAccessList')
@@ -3609,7 +3623,7 @@ public function testGetAccessListWithCurrentAccess() {
36093623
]);
36103624

36113625
$this->rootFolder->method('getUserFolder')
3612-
->with($this->equalTo('owner'))
3626+
->with($this->equalTo('user1'))
36133627
->willReturn($userFolder);
36143628

36153629
$expected = [

0 commit comments

Comments
 (0)