summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBjoern Schiessle <bjoern@schiessle.org>2017-01-04 13:33:09 +0100
committerBjoern Schiessle <bjoern@schiessle.org>2017-01-04 13:45:29 +0100
commita45137bbca0bd79a6f20dafb72e1f30ebbb3ab8e (patch)
tree25a27013eb1fa31536e5e1894e8b12f989045474
parenta75cfb601ec4d20f2eeddb25d1eb3ba745b71944 (diff)
downloadnextcloud-server-a45137bbca0bd79a6f20dafb72e1f30ebbb3ab8e.tar.gz
nextcloud-server-a45137bbca0bd79a6f20dafb72e1f30ebbb3ab8e.zip
also create mail share if public links are disabled
Signed-off-by: Bjoern Schiessle <bjoern@schiessle.org>
-rw-r--r--lib/private/Share20/Manager.php1
-rw-r--r--tests/lib/Share20/ManagerTest.php110
2 files changed, 110 insertions, 1 deletions
diff --git a/lib/private/Share20/Manager.php b/lib/private/Share20/Manager.php
index 6eab5e05a2f..acc142f62be 100644
--- a/lib/private/Share20/Manager.php
+++ b/lib/private/Share20/Manager.php
@@ -587,7 +587,6 @@ class Manager implements IManager {
$share->setPassword($this->hasher->hash($share->getPassword()));
}
} else if ($share->getShareType() === \OCP\Share::SHARE_TYPE_EMAIL) {
- $this->linkCreateChecks($share);
$share->setToken(
$this->secureRandom->generate(
\OC\Share\Constants::TOKEN_LENGTH,
diff --git a/tests/lib/Share20/ManagerTest.php b/tests/lib/Share20/ManagerTest.php
index 00009a73b0e..7b01a8f9e70 100644
--- a/tests/lib/Share20/ManagerTest.php
+++ b/tests/lib/Share20/ManagerTest.php
@@ -1768,6 +1768,116 @@ class ManagerTest extends \Test\TestCase {
$this->assertEquals('hashed', $share->getPassword());
}
+ public function testCreateShareMail() {
+ $manager = $this->createManagerMock()
+ ->setMethods([
+ 'canShare',
+ 'generalCreateChecks',
+ 'linkCreateChecks',
+ 'pathCreateChecks',
+ 'validateExpirationDate',
+ 'verifyPassword',
+ 'setLinkParent',
+ ])
+ ->getMock();
+
+ $shareOwner = $this->createMock(IUser::class);
+ $shareOwner->method('getUID')->willReturn('shareOwner');
+
+ $storage = $this->createMock(Storage::class);
+ $path = $this->createMock(File::class);
+ $path->method('getOwner')->willReturn($shareOwner);
+ $path->method('getName')->willReturn('target');
+ $path->method('getId')->willReturn(1);
+ $path->method('getStorage')->willReturn($storage);
+
+ $share = $this->manager->newShare();
+ $share->setShareType(\OCP\Share::SHARE_TYPE_EMAIL)
+ ->setNode($path)
+ ->setSharedBy('sharedBy')
+ ->setPermissions(\OCP\Constants::PERMISSION_ALL);
+
+ $manager->expects($this->once())
+ ->method('canShare')
+ ->with($share)
+ ->willReturn(true);
+ $manager->expects($this->once())
+ ->method('generalCreateChecks')
+ ->with($share);;
+ $manager->expects($this->never())
+ ->method('linkCreateChecks');
+ $manager->expects($this->once())
+ ->method('pathCreateChecks')
+ ->with($path);
+ $manager->expects($this->never())
+ ->method('validateExpirationDate');
+ $manager->expects($this->never())
+ ->method('verifyPassword');
+ $manager->expects($this->never())
+ ->method('setLinkParent');
+
+ $this->secureRandom->method('getMediumStrengthGenerator')
+ ->will($this->returnSelf());
+ $this->secureRandom->method('generate')
+ ->willReturn('token');
+
+ $this->defaultProvider
+ ->expects($this->once())
+ ->method('create')
+ ->with($share)
+ ->will($this->returnCallback(function(Share $share) {
+ return $share->setId(42);
+ }));
+
+ $hookListner = $this->getMockBuilder('Dummy')->setMethods(['pre', 'post'])->getMock();
+ \OCP\Util::connectHook('OCP\Share', 'pre_shared', $hookListner, 'pre');
+ \OCP\Util::connectHook('OCP\Share', 'post_shared', $hookListner, 'post');
+
+ $hookListnerExpectsPre = [
+ 'itemType' => 'file',
+ 'itemSource' => 1,
+ 'shareType' => \OCP\Share::SHARE_TYPE_EMAIL,
+ 'uidOwner' => 'sharedBy',
+ 'permissions' => 31,
+ 'fileSource' => 1,
+ 'expiration' => null,
+ 'token' => 'token',
+ 'run' => true,
+ 'error' => '',
+ 'itemTarget' => '/target',
+ 'shareWith' => null,
+ ];
+
+ $hookListnerExpectsPost = [
+ 'itemType' => 'file',
+ 'itemSource' => 1,
+ 'shareType' => \OCP\Share::SHARE_TYPE_EMAIL,
+ 'uidOwner' => 'sharedBy',
+ 'permissions' => 31,
+ 'fileSource' => 1,
+ 'expiration' => null,
+ 'token' => 'token',
+ 'id' => 42,
+ 'itemTarget' => '/target',
+ 'fileTarget' => '/target',
+ 'shareWith' => null,
+ ];
+
+ $hookListner->expects($this->once())
+ ->method('pre')
+ ->with($this->equalTo($hookListnerExpectsPre));
+ $hookListner->expects($this->once())
+ ->method('post')
+ ->with($this->equalTo($hookListnerExpectsPost));
+
+ /** @var IShare $share */
+ $share = $manager->createShare($share);
+
+ $this->assertSame('shareOwner', $share->getShareOwner());
+ $this->assertEquals('/target', $share->getTarget());
+ $this->assertEquals('token', $share->getToken());
+ }
+
/**
* @expectedException Exception
* @expectedExceptionMessage I won't let you share