summaryrefslogtreecommitdiffstats
path: root/apps/files_sharing
diff options
context:
space:
mode:
authorRoeland Jago Douma <rullzer@owncloud.com>2016-01-27 15:42:11 +0100
committerRoeland Jago Douma <rullzer@owncloud.com>2016-01-27 20:34:06 +0100
commit35a3432793919303726a7ea03d6a714db4b40707 (patch)
treed91236b15c271d78f40cb6539f99db8f1ffba8db /apps/files_sharing
parent90f2a2352de876a5b125df2b9817f78790b25805 (diff)
downloadnextcloud-server-35a3432793919303726a7ea03d6a714db4b40707.tar.gz
nextcloud-server-35a3432793919303726a7ea03d6a714db4b40707.zip
[Share 2.0] When passing empty strings don't fail
The password and expiration date can be set to empty strings when created. This is now handled gracefully.
Diffstat (limited to 'apps/files_sharing')
-rw-r--r--apps/files_sharing/api/share20ocs.php14
-rw-r--r--apps/files_sharing/tests/api/share20ocstest.php246
2 files changed, 250 insertions, 10 deletions
diff --git a/apps/files_sharing/api/share20ocs.php b/apps/files_sharing/api/share20ocs.php
index 3048eb7cd1a..081c3b16999 100644
--- a/apps/files_sharing/api/share20ocs.php
+++ b/apps/files_sharing/api/share20ocs.php
@@ -272,12 +272,12 @@ class Share20OCS {
if ($publicUpload === 'true') {
// Check if public upload is allowed
if (!$this->shareManager->shareApiLinkAllowPublicUpload()) {
- return new \OC_OCS_Result(null, 403, '"public upload disabled by the administrator');
+ return new \OC_OCS_Result(null, 403, 'public upload disabled by the administrator');
}
// Public upload can only be set for folders
if ($path instanceof \OCP\Files\File) {
- return new \OC_OCS_Result(null, 404, '"public upload is only possible for public shared folders');
+ return new \OC_OCS_Result(null, 404, 'public upload is only possible for public shared folders');
}
$share->setPermissions(
@@ -290,12 +290,16 @@ class Share20OCS {
}
// Set password
- $share->setPassword($this->request->getParam('password', null));
+ $password = $this->request->getParam('password', '');
+
+ if ($password !== '') {
+ $share->setPassword($password);
+ }
//Expire date
- $expireDate = $this->request->getParam('expireDate', null);
+ $expireDate = $this->request->getParam('expireDate', '');
- if ($expireDate !== null) {
+ if ($expireDate !== '') {
try {
$expireDate = $this->parseDate($expireDate);
$share->setExpirationDate($expireDate);
diff --git a/apps/files_sharing/tests/api/share20ocstest.php b/apps/files_sharing/tests/api/share20ocstest.php
index f38af988155..4bbcfb5a600 100644
--- a/apps/files_sharing/tests/api/share20ocstest.php
+++ b/apps/files_sharing/tests/api/share20ocstest.php
@@ -31,19 +31,19 @@ use OCP\Files\IRootFolder;
class Share20OCSTest extends \Test\TestCase {
- /** @var \OC\Share20\Manager */
+ /** @var \OC\Share20\Manager | \PHPUnit_Framework_MockObject_MockObject */
private $shareManager;
- /** @var IGroupManager */
+ /** @var IGroupManager | \PHPUnit_Framework_MockObject_MockObject */
private $groupManager;
- /** @var IUserManager */
+ /** @var IUserManager | \PHPUnit_Framework_MockObject_MockObject */
private $userManager;
- /** @var IRequest */
+ /** @var IRequest | \PHPUnit_Framework_MockObject_MockObject */
private $request;
- /** @var IRootFolder */
+ /** @var IRootFolder | \PHPUnit_Framework_MockObject_MockObject */
private $rootFolder;
/** @var IURLGenerator */
@@ -78,6 +78,20 @@ class Share20OCSTest extends \Test\TestCase {
);
}
+ private function mockFormatShare() {
+ return $this->getMockBuilder('OCA\Files_Sharing\API\Share20OCS')
+ ->setConstructorArgs([
+ $this->shareManager,
+ $this->groupManager,
+ $this->userManager,
+ $this->request,
+ $this->rootFolder,
+ $this->urlGenerator,
+ $this->currentUser
+ ])->setMethods(['formatShare'])
+ ->getMock();
+ }
+
public function testDeleteShareShareNotFound() {
$this->shareManager
->expects($this->once())
@@ -696,4 +710,226 @@ class Share20OCSTest extends \Test\TestCase {
$this->assertEquals($expected->getMeta(), $result->getMeta());
$this->assertEquals($expected->getData(), $result->getData());
}
+
+ public function testCreateShareLinkNoLinksAllowed() {
+ $this->request
+ ->method('getParam')
+ ->will($this->returnValueMap([
+ ['path', null, 'valid-path'],
+ ['shareType', '-1', \OCP\Share::SHARE_TYPE_LINK],
+ ]));
+
+ $path = $this->getMock('\OCP\Files\Folder');
+ $this->rootFolder->method('getUserFolder')->with($this->currentUser->getUID())->will($this->returnSelf());
+ $this->rootFolder->method('get')->with('valid-path')->willReturn($path);
+
+ $this->shareManager->method('newShare')->willReturn(\OC::$server->getShareManager()->newShare());
+
+ $expected = new \OC_OCS_Result(null, 404, 'public link sharing is disabled by the administrator');
+ $result = $this->ocs->createShare();
+
+ $this->assertEquals($expected->getMeta(), $result->getMeta());
+ $this->assertEquals($expected->getData(), $result->getData());
+ }
+
+ public function testCreateShareLinkNoPublicUpload() {
+ $this->request
+ ->method('getParam')
+ ->will($this->returnValueMap([
+ ['path', null, 'valid-path'],
+ ['shareType', '-1', \OCP\Share::SHARE_TYPE_LINK],
+ ['publicUpload', null, 'true'],
+ ]));
+
+ $path = $this->getMock('\OCP\Files\Folder');
+ $this->rootFolder->method('getUserFolder')->with($this->currentUser->getUID())->will($this->returnSelf());
+ $this->rootFolder->method('get')->with('valid-path')->willReturn($path);
+
+ $this->shareManager->method('newShare')->willReturn(\OC::$server->getShareManager()->newShare());
+ $this->shareManager->method('shareApiAllowLinks')->willReturn(true);
+
+ $expected = new \OC_OCS_Result(null, 403, 'public upload disabled by the administrator');
+ $result = $this->ocs->createShare();
+
+ $this->assertEquals($expected->getMeta(), $result->getMeta());
+ $this->assertEquals($expected->getData(), $result->getData());
+ }
+
+ public function testCreateShareLinkPublicUploadFile() {
+ $this->request
+ ->method('getParam')
+ ->will($this->returnValueMap([
+ ['path', null, 'valid-path'],
+ ['shareType', '-1', \OCP\Share::SHARE_TYPE_LINK],
+ ['publicUpload', null, 'true'],
+ ]));
+
+ $path = $this->getMock('\OCP\Files\File');
+ $this->rootFolder->method('getUserFolder')->with($this->currentUser->getUID())->will($this->returnSelf());
+ $this->rootFolder->method('get')->with('valid-path')->willReturn($path);
+
+ $this->shareManager->method('newShare')->willReturn(\OC::$server->getShareManager()->newShare());
+ $this->shareManager->method('shareApiAllowLinks')->willReturn(true);
+ $this->shareManager->method('shareApiLinkAllowPublicUpload')->willReturn(true);
+
+ $expected = new \OC_OCS_Result(null, 404, 'public upload is only possible for public shared folders');
+ $result = $this->ocs->createShare();
+
+ $this->assertEquals($expected->getMeta(), $result->getMeta());
+ $this->assertEquals($expected->getData(), $result->getData());
+ }
+
+ public function testCreateShareLinkPublicUploadFolder() {
+ $ocs = $this->mockFormatShare();
+
+ $this->request
+ ->method('getParam')
+ ->will($this->returnValueMap([
+ ['path', null, 'valid-path'],
+ ['shareType', '-1', \OCP\Share::SHARE_TYPE_LINK],
+ ['publicUpload', null, 'true'],
+ ['expireDate', '', ''],
+ ['password', '', ''],
+ ]));
+
+ $path = $this->getMock('\OCP\Files\Folder');
+ $this->rootFolder->method('getUserFolder')->with($this->currentUser->getUID())->will($this->returnSelf());
+ $this->rootFolder->method('get')->with('valid-path')->willReturn($path);
+
+ $this->shareManager->method('newShare')->willReturn(\OC::$server->getShareManager()->newShare());
+ $this->shareManager->method('shareApiAllowLinks')->willReturn(true);
+ $this->shareManager->method('shareApiLinkAllowPublicUpload')->willReturn(true);
+
+ $currentUser = $this->currentUser;
+
+ $this->shareManager->expects($this->once())->method('createShare')->with(
+ $this->callback(function (IShare $share) use ($path, $currentUser) {
+ return $share->getPath() === $path &&
+ $share->getShareType() === \OCP\Share::SHARE_TYPE_LINK &&
+ $share->getPermissions() === \OCP\Constants::PERMISSION_READ | \OCP\Constants::PERMISSION_CREATE | \OCP\Constants::PERMISSION_DELETE &&
+ $share->getSharedBy() === $currentUser &&
+ $share->getPassword() === null &&
+ $share->getExpirationDate() === null;
+ })
+ );
+
+ $expected = new \OC_OCS_Result(null);
+ $result = $ocs->createShare();
+
+ $this->assertEquals($expected->getMeta(), $result->getMeta());
+ $this->assertEquals($expected->getData(), $result->getData());
+ }
+
+ public function testCreateShareLinkPassword() {
+ $ocs = $this->mockFormatShare();
+
+ $this->request
+ ->method('getParam')
+ ->will($this->returnValueMap([
+ ['path', null, 'valid-path'],
+ ['shareType', '-1', \OCP\Share::SHARE_TYPE_LINK],
+ ['publicUpload', null, 'false'],
+ ['expireDate', '', ''],
+ ['password', '', 'password'],
+ ]));
+
+ $path = $this->getMock('\OCP\Files\Folder');
+ $this->rootFolder->method('getUserFolder')->with($this->currentUser->getUID())->will($this->returnSelf());
+ $this->rootFolder->method('get')->with('valid-path')->willReturn($path);
+
+ $this->shareManager->method('newShare')->willReturn(\OC::$server->getShareManager()->newShare());
+ $this->shareManager->method('shareApiAllowLinks')->willReturn(true);
+ $this->shareManager->method('shareApiLinkAllowPublicUpload')->willReturn(true);
+
+ $currentUser = $this->currentUser;
+
+ $this->shareManager->expects($this->once())->method('createShare')->with(
+ $this->callback(function (IShare $share) use ($path, $currentUser) {
+ return $share->getPath() === $path &&
+ $share->getShareType() === \OCP\Share::SHARE_TYPE_LINK &&
+ $share->getPermissions() === \OCP\Constants::PERMISSION_READ &&
+ $share->getSharedBy() === $currentUser &&
+ $share->getPassword() === 'password' &&
+ $share->getExpirationDate() === null;
+ })
+ );
+
+ $expected = new \OC_OCS_Result(null);
+ $result = $ocs->createShare();
+
+ $this->assertEquals($expected->getMeta(), $result->getMeta());
+ $this->assertEquals($expected->getData(), $result->getData());
+ }
+
+ public function testCreateShareValidExpireDate() {
+ $ocs = $this->mockFormatShare();
+
+ $this->request
+ ->method('getParam')
+ ->will($this->returnValueMap([
+ ['path', null, 'valid-path'],
+ ['shareType', '-1', \OCP\Share::SHARE_TYPE_LINK],
+ ['publicUpload', null, 'false'],
+ ['expireDate', '', '2000-01-01'],
+ ['password', '', ''],
+ ]));
+
+ $path = $this->getMock('\OCP\Files\Folder');
+ $this->rootFolder->method('getUserFolder')->with($this->currentUser->getUID())->will($this->returnSelf());
+ $this->rootFolder->method('get')->with('valid-path')->willReturn($path);
+
+ $this->shareManager->method('newShare')->willReturn(\OC::$server->getShareManager()->newShare());
+ $this->shareManager->method('shareApiAllowLinks')->willReturn(true);
+ $this->shareManager->method('shareApiLinkAllowPublicUpload')->willReturn(true);
+
+ $currentUser = $this->currentUser;
+
+ $this->shareManager->expects($this->once())->method('createShare')->with(
+ $this->callback(function (IShare $share) use ($path, $currentUser) {
+ $date = new \DateTime('2000-01-01');
+ $date->setTime(0,0,0);
+
+ return $share->getPath() === $path &&
+ $share->getShareType() === \OCP\Share::SHARE_TYPE_LINK &&
+ $share->getPermissions() === \OCP\Constants::PERMISSION_READ &&
+ $share->getSharedBy() === $currentUser &&
+ $share->getPassword() === null &&
+ $share->getExpirationDate() == $date;
+ })
+ );
+
+ $expected = new \OC_OCS_Result(null);
+ $result = $ocs->createShare();
+
+ $this->assertEquals($expected->getMeta(), $result->getMeta());
+ $this->assertEquals($expected->getData(), $result->getData());
+ }
+
+ public function testCreateShareInvalidExpireDate() {
+ $ocs = $this->mockFormatShare();
+
+ $this->request
+ ->method('getParam')
+ ->will($this->returnValueMap([
+ ['path', null, 'valid-path'],
+ ['shareType', '-1', \OCP\Share::SHARE_TYPE_LINK],
+ ['publicUpload', null, 'false'],
+ ['expireDate', '', 'a1b2d3'],
+ ['password', '', ''],
+ ]));
+
+ $path = $this->getMock('\OCP\Files\Folder');
+ $this->rootFolder->method('getUserFolder')->with($this->currentUser->getUID())->will($this->returnSelf());
+ $this->rootFolder->method('get')->with('valid-path')->willReturn($path);
+
+ $this->shareManager->method('newShare')->willReturn(\OC::$server->getShareManager()->newShare());
+ $this->shareManager->method('shareApiAllowLinks')->willReturn(true);
+ $this->shareManager->method('shareApiLinkAllowPublicUpload')->willReturn(true);
+
+ $expected = new \OC_OCS_Result(null, 404, 'Invalid Date. Format must be YYYY-MM-DD.');
+ $result = $ocs->createShare();
+
+ $this->assertEquals($expected->getMeta(), $result->getMeta());
+ $this->assertEquals($expected->getData(), $result->getData());
+ }
}