Merge pull request #26211 from nextcloud/backport/23718/stable21

[stable21] expand 'path is already shared' error message
This commit is contained in:
Morris Jobke 2021-03-19 15:21:17 +01:00 committed by GitHub
commit eaae526ba7
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 18 additions and 7 deletions

View File

@ -564,9 +564,10 @@ class Manager implements IManager {
//Shares are not identical
}
// Identical share already existst
// Identical share already exists
if ($existingShare->getSharedWith() === $share->getSharedWith() && $existingShare->getShareType() === $share->getShareType()) {
throw new AlreadySharedException('Path is already shared with this user', $existingShare);
$message = $this->l->t('Sharing %s failed, because this item is already shared with user %s', [$share->getNode()->getName(), $share->getSharedWithDisplayName()]);
throw new AlreadySharedException($message, $existingShare);
}
// The share is already shared with this user via a group share
@ -576,7 +577,8 @@ class Manager implements IManager {
$user = $this->userManager->get($share->getSharedWith());
if ($group->inGroup($user) && $existingShare->getShareOwner() !== $share->getShareOwner()) {
throw new AlreadySharedException('Path is already shared with this user', $existingShare);
$message = $this->l->t('Sharing %s failed, because this item is already shared with user %s', [$share->getNode()->getName(), $share->getSharedWithDisplayName()]);
throw new AlreadySharedException($message, $existingShare);
}
}
}

View File

@ -50,6 +50,7 @@ use OCP\Mail\IMailer;
use OCP\Security\Events\ValidatePasswordPolicyEvent;
use OCP\Security\IHasher;
use OCP\Security\ISecureRandom;
use OCP\Share\Exceptions\AlreadySharedException;
use OCP\Share\Exceptions\ShareNotFound;
use OCP\Share\IProviderFactory;
use OCP\Share\IShare;
@ -1415,10 +1416,11 @@ class ManagerTest extends \Test\TestCase {
public function testUserCreateChecksIdenticalShareExists() {
$this->expectException(\Exception::class);
$this->expectExceptionMessage('Path is already shared with this user');
$this->expectException(AlreadySharedException::class);
$this->expectExceptionMessage('Sharing name.txt failed, because this item is already shared with user user');
$share = $this->manager->newShare();
$share->setSharedWithDisplayName('user');
$share2 = $this->manager->newShare();
$sharedWith = $this->createMock(IUser::class);
@ -1435,13 +1437,16 @@ class ManagerTest extends \Test\TestCase {
->with($path)
->willReturn([$share2]);
$path->method('getName')
->willReturn('name.txt');
self::invokePrivate($this->manager, 'userCreateChecks', [$share]);
}
public function testUserCreateChecksIdenticalPathSharedViaGroup() {
$this->expectException(\Exception::class);
$this->expectExceptionMessage('Path is already shared with this user');
$this->expectException(AlreadySharedException::class);
$this->expectExceptionMessage('Sharing name2.txt failed, because this item is already shared with user userName');
$share = $this->manager->newShare();
@ -1455,6 +1460,7 @@ class ManagerTest extends \Test\TestCase {
$share->setSharedWith('sharedWith')
->setNode($path)
->setShareOwner('shareOwner')
->setSharedWithDisplayName('userName')
->setProviderId('foo')
->setId('bar');
@ -1477,6 +1483,9 @@ class ManagerTest extends \Test\TestCase {
->with($path)
->willReturn([$share2]);
$path->method('getName')
->willReturn('name2.txt');
self::invokePrivate($this->manager, 'userCreateChecks', [$share]);
}