diff options
-rw-r--r-- | lib/private/Share20/Share.php | 25 | ||||
-rw-r--r-- | lib/public/Share/Exceptions/GenericShareException.php (renamed from lib/public/share/exceptions/genericshareexception.php) | 0 | ||||
-rw-r--r-- | lib/public/Share/Exceptions/IllegalIDChangeException.php | 27 | ||||
-rw-r--r-- | lib/public/Share/Exceptions/ShareNotFound.php (renamed from lib/public/share/exceptions/sharenotfound.php) | 0 | ||||
-rw-r--r-- | lib/public/Share/IManager.php (renamed from lib/public/share/imanager.php) | 0 | ||||
-rw-r--r-- | lib/public/Share/IProviderFactory.php (renamed from lib/public/share/iproviderfactory.php) | 0 | ||||
-rw-r--r-- | lib/public/Share/IShare.php (renamed from lib/public/share/ishare.php) | 27 | ||||
-rw-r--r-- | lib/public/Share/IShareProvider.php (renamed from lib/public/share/ishareprovider.php) | 0 | ||||
-rw-r--r-- | tests/lib/share20/defaultshareprovidertest.php | 2 | ||||
-rw-r--r-- | tests/lib/share20/sharetest.php | 93 |
10 files changed, 171 insertions, 3 deletions
diff --git a/lib/private/Share20/Share.php b/lib/private/Share20/Share.php index 6edd0e6886a..c361f01216f 100644 --- a/lib/private/Share20/Share.php +++ b/lib/private/Share20/Share.php @@ -26,6 +26,7 @@ use OCP\Files\Node; use OCP\Files\NotFoundException; use OCP\IUser; use OCP\IGroup; +use OCP\Share\Exceptions\IllegalIDChangeException; class Share implements \OCP\Share\IShare { @@ -75,7 +76,19 @@ class Share implements \OCP\Share\IShare { * @inheritdoc */ public function setId($id) { - $this->id = $id; + if (is_int($id)) { + $id = (string)$id; + } + + if(!is_string($id)) { + throw new \InvalidArgumentException('String expected.'); + } + + if ($this->id !== null) { + throw new IllegalIDChangeException('Not allowed to assign a new internal id to a share'); + } + + $this->id = trim($id); return $this; } @@ -100,7 +113,15 @@ class Share implements \OCP\Share\IShare { * @inheritdoc */ public function setProviderId($id) { - $this->providerId = $id; + if(!is_string($id)) { + throw new \InvalidArgumentException('String expected.'); + } + + if ($this->providerId !== null) { + throw new IllegalIDChangeException('Not allowed to assign a new provider id to a share'); + } + + $this->providerId = trim($id); return $this; } diff --git a/lib/public/share/exceptions/genericshareexception.php b/lib/public/Share/Exceptions/GenericShareException.php index b32c2f26574..b32c2f26574 100644 --- a/lib/public/share/exceptions/genericshareexception.php +++ b/lib/public/Share/Exceptions/GenericShareException.php diff --git a/lib/public/Share/Exceptions/IllegalIDChangeException.php b/lib/public/Share/Exceptions/IllegalIDChangeException.php new file mode 100644 index 00000000000..6cd887c386b --- /dev/null +++ b/lib/public/Share/Exceptions/IllegalIDChangeException.php @@ -0,0 +1,27 @@ +<?php +/** + * @author Roeland Jago Douma <rullzer@owncloud.com> + * + * @copyright Copyright (c) 2016, ownCloud, Inc. + * @license AGPL-3.0 + * + * This code is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License, version 3, + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License, version 3, + * along with this program. If not, see <http://www.gnu.org/licenses/> + * + */ +namespace OCP\Share\Exceptions; + +/** + * Exception for illegal attempts to modify an id of a share + * @since 9.1.0 + */ +class IllegalIDChangeException extends GenericShareException {} diff --git a/lib/public/share/exceptions/sharenotfound.php b/lib/public/Share/Exceptions/ShareNotFound.php index 96e7c096492..96e7c096492 100644 --- a/lib/public/share/exceptions/sharenotfound.php +++ b/lib/public/Share/Exceptions/ShareNotFound.php diff --git a/lib/public/share/imanager.php b/lib/public/Share/IManager.php index 64e5b554de9..64e5b554de9 100644 --- a/lib/public/share/imanager.php +++ b/lib/public/Share/IManager.php diff --git a/lib/public/share/iproviderfactory.php b/lib/public/Share/IProviderFactory.php index 3a8baccf33b..3a8baccf33b 100644 --- a/lib/public/share/iproviderfactory.php +++ b/lib/public/Share/IProviderFactory.php diff --git a/lib/public/share/ishare.php b/lib/public/Share/IShare.php index fdf40f19e56..ee71715f436 100644 --- a/lib/public/share/ishare.php +++ b/lib/public/Share/IShare.php @@ -25,6 +25,7 @@ use OCP\Files\File; use OCP\Files\Folder; use OCP\Files\Node; use OCP\Files\NotFoundException; +use OCP\Share\Exceptions\IllegalIDChangeException; /** * Interface IShare @@ -35,6 +36,19 @@ use OCP\Files\NotFoundException; interface IShare { /** + * Set the internal id of the share + * It is only allowed to set the internal id of a share once. + * Attempts to override the internal id will result in an IllegalIDChangeException + * + * @param string $id + * @return \OCP\Share\IShare + * @throws IllegalIDChangeException + * @throws \InvalidArgumentException + * @since 9.1.0 + */ + public function setId($id); + + /** * Get the internal id of the share. * * @return string @@ -53,6 +67,19 @@ interface IShare { public function getFullId(); /** + * Set the provider id of the share + * It is only allowed to set the provider id of a share once. + * Attempts to override the provider id will result in an IllegalIDChangeException + * + * @param string $id + * @return \OCP\Share\IShare + * @throws IllegalIDChangeException + * @throws \InvalidArgumentException + * @since 9.1.0 + */ + public function setProviderId($id); + + /** * Set the node of the file/folder that is shared * * @param Node $node diff --git a/lib/public/share/ishareprovider.php b/lib/public/Share/IShareProvider.php index d00b9da7b59..d00b9da7b59 100644 --- a/lib/public/share/ishareprovider.php +++ b/lib/public/Share/IShareProvider.php diff --git a/tests/lib/share20/defaultshareprovidertest.php b/tests/lib/share20/defaultshareprovidertest.php index 610de3b6232..8d8ae8d4809 100644 --- a/tests/lib/share20/defaultshareprovidertest.php +++ b/tests/lib/share20/defaultshareprovidertest.php @@ -969,7 +969,7 @@ class DefaultShareProviderTest extends \Test\TestCase { $this->assertCount(1, $share); $share = $share[0]; - $this->assertSame($id, $share->getId()); + $this->assertSame((string)$id, $share->getId()); $this->assertSame('sharedWith', $share->getSharedWith()); $this->assertSame('shareOwner', $share->getShareOwner()); $this->assertSame('sharedBy', $share->getSharedBy()); diff --git a/tests/lib/share20/sharetest.php b/tests/lib/share20/sharetest.php new file mode 100644 index 00000000000..fdfc69f6577 --- /dev/null +++ b/tests/lib/share20/sharetest.php @@ -0,0 +1,93 @@ +<?php +/** + * @author Roeland Jago Douma <rullzer@owncloud.com> + * + * @copyright Copyright (c) 2016, ownCloud, Inc. + * @license AGPL-3.0 + * + * This code is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License, version 3, + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License, version 3, + * along with this program. If not, see <http://www.gnu.org/licenses/> + * + */ +namespace Test\Share20; + +use OCP\Files\IRootFolder; + +/** + * Class ShareTest + * + * @package Test\Share20 + */ +class ShareTest extends \Test\TestCase { + + /** @var IRootFolder|\PHPUnit_Framework_MockObject_MockObject */ + protected $rootFolder; + /** @var \OCP\Share\IShare */ + protected $share; + + public function setUp() { + $this->rootFolder = $this->getMock('\OCP\Files\IRootFolder'); + $this->share = new \OC\Share20\Share($this->rootFolder); + } + + /** + * @expectedException \InvalidArgumentException + * @expectedExceptionMessage String expected. + */ + public function testSetIdInvalid() { + $this->share->setId(1.2); + } + + public function testSetIdInt() { + $this->share->setId(42); + $this->assertEquals('42', $this->share->getId()); + } + + + public function testSetIdString() { + $this->share->setId('foo'); + $this->assertEquals('foo', $this->share->getId()); + } + + /** + * @expectedException \OCP\Share\Exceptions\IllegalIDChangeException + * @expectedExceptionMessage Not allowed to assign a new internal id to a share + */ + public function testSetIdOnce() { + $this->share->setId('foo'); + $this->share->setId('bar'); + } + + /** + * @expectedException \InvalidArgumentException + * @expectedExceptionMessage String expected. + */ + public function testSetProviderIdInt() { + $this->share->setProviderId(42); + } + + + public function testSetProviderIdString() { + $this->share->setProviderId('foo'); + $this->share->setId('bar'); + $this->assertEquals('foo:bar', $this->share->getFullId()); + } + + /** + * @expectedException \OCP\Share\Exceptions\IllegalIDChangeException + * @expectedExceptionMessage Not allowed to assign a new provider id to a share + */ + public function testSetProviderIdOnce() { + $this->share->setProviderId('foo'); + $this->share->setProviderId('bar'); + } +} |