diff options
author | Lukas Reschke <lukas@owncloud.com> | 2016-06-26 12:55:05 +0200 |
---|---|---|
committer | Lukas Reschke <lukas@owncloud.com> | 2016-06-26 12:55:05 +0200 |
commit | 7a9d60d87eb8e4414e5fe05830b088d426ff810d (patch) | |
tree | 0fc97a7eacfd071475afd8bc6d4372babacb5740 /apps/files_sharing | |
parent | 5387b942c44e05b87ba2a0fd54168f5278a31344 (diff) | |
parent | 52eab2a61a5d27b64fcd0440b91f854c052933a9 (diff) | |
download | nextcloud-server-7a9d60d87eb8e4414e5fe05830b088d426ff810d.tar.gz nextcloud-server-7a9d60d87eb8e4414e5fe05830b088d426ff810d.zip |
Merge remote-tracking branch 'upstream/master' into master-upstream-sync
Diffstat (limited to 'apps/files_sharing')
-rw-r--r-- | apps/files_sharing/ajax/external.php | 5 | ||||
-rw-r--r-- | apps/files_sharing/l10n/lb.js | 1 | ||||
-rw-r--r-- | apps/files_sharing/l10n/lb.json | 1 | ||||
-rw-r--r-- | apps/files_sharing/lib/External/Storage.php | 11 | ||||
-rw-r--r-- | apps/files_sharing/lib/MountProvider.php | 5 | ||||
-rw-r--r-- | apps/files_sharing/tests/MountProviderTest.php | 136 |
6 files changed, 154 insertions, 5 deletions
diff --git a/apps/files_sharing/ajax/external.php b/apps/files_sharing/ajax/external.php index 5cf86087f94..4a7a6096c91 100644 --- a/apps/files_sharing/ajax/external.php +++ b/apps/files_sharing/ajax/external.php @@ -77,7 +77,10 @@ $externalManager = new \OCA\Files_Sharing\External\Manager( // check for ssl cert if (substr($remote, 0, 5) === 'https') { try { - \OC::$server->getHTTPClientService()->newClient()->get($remote)->getBody(); + \OC::$server->getHTTPClientService()->newClient()->get($remote, [ + 'timeout' => 10, + 'connect_timeout' => 10, + ])->getBody(); } catch (\Exception $e) { \OCP\JSON::error(array('data' => array('message' => $l->t('Invalid or untrusted SSL certificate')))); exit; diff --git a/apps/files_sharing/l10n/lb.js b/apps/files_sharing/l10n/lb.js index fcbfd04c64f..0679858d818 100644 --- a/apps/files_sharing/l10n/lb.js +++ b/apps/files_sharing/l10n/lb.js @@ -5,6 +5,7 @@ OC.L10N.register( "No shared links" : "Keng gedeelte Linken", "Cancel" : "Ofbriechen", "Shared by" : "Gedeelt vun", + "Sharing" : "Gedeelt", "The password is wrong. Try again." : "Den Passwuert ass incorrect. Probeier ed nach eng keier.", "Password" : "Passwuert", "No entries found in this folder" : "Keng Elementer an dësem Dossier fonnt", diff --git a/apps/files_sharing/l10n/lb.json b/apps/files_sharing/l10n/lb.json index 5a466e560c6..9355d70a6fb 100644 --- a/apps/files_sharing/l10n/lb.json +++ b/apps/files_sharing/l10n/lb.json @@ -3,6 +3,7 @@ "No shared links" : "Keng gedeelte Linken", "Cancel" : "Ofbriechen", "Shared by" : "Gedeelt vun", + "Sharing" : "Gedeelt", "The password is wrong. Try again." : "Den Passwuert ass incorrect. Probeier ed nach eng keier.", "Password" : "Passwuert", "No entries found in this folder" : "Keng Elementer an dësem Dossier fonnt", diff --git a/apps/files_sharing/lib/External/Storage.php b/apps/files_sharing/lib/External/Storage.php index ca99393a1e0..29b9c7b563c 100644 --- a/apps/files_sharing/lib/External/Storage.php +++ b/apps/files_sharing/lib/External/Storage.php @@ -254,7 +254,10 @@ class Storage extends DAV implements ISharedStorage { $client = $this->httpClient->newClient(); try { - $result = $client->get($url)->getBody(); + $result = $client->get($url, [ + 'timeout' => 10, + 'connect_timeout' => 10, + ])->getBody(); $data = json_decode($result); $returnValue = (is_object($data) && !empty($data->version)); } catch (ConnectException $e) { @@ -301,7 +304,11 @@ class Storage extends DAV implements ISharedStorage { // TODO: DI $client = \OC::$server->getHTTPClientService()->newClient(); try { - $response = $client->post($url, ['body' => ['password' => $password]]); + $response = $client->post($url, [ + 'body' => ['password' => $password], + 'timeout' => 10, + 'connect_timeout' => 10, + ]); } catch (\GuzzleHttp\Exception\RequestException $e) { if ($e->getCode() === 401 || $e->getCode() === 403) { throw new ForbiddenException(); diff --git a/apps/files_sharing/lib/MountProvider.php b/apps/files_sharing/lib/MountProvider.php index a9ae48860c2..c71c0e8ddea 100644 --- a/apps/files_sharing/lib/MountProvider.php +++ b/apps/files_sharing/lib/MountProvider.php @@ -68,8 +68,9 @@ class MountProvider implements IMountProvider { public function getMountsForUser(IUser $user, IStorageFactory $storageFactory) { $shares = $this->shareManager->getSharedWith($user->getUID(), \OCP\Share::SHARE_TYPE_USER, null, -1); $shares = array_merge($shares, $this->shareManager->getSharedWith($user->getUID(), \OCP\Share::SHARE_TYPE_GROUP, null, -1)); - $shares = array_filter($shares, function (\OCP\Share\IShare $share) { - return $share->getPermissions() > 0; + // filter out excluded shares and group shares that includes self + $shares = array_filter($shares, function (\OCP\Share\IShare $share) use ($user) { + return $share->getPermissions() > 0 && $share->getShareOwner() !== $user->getUID(); }); $mounts = []; diff --git a/apps/files_sharing/tests/MountProviderTest.php b/apps/files_sharing/tests/MountProviderTest.php new file mode 100644 index 00000000000..f69098cde7b --- /dev/null +++ b/apps/files_sharing/tests/MountProviderTest.php @@ -0,0 +1,136 @@ +<?php +/** + * @author Vincent Petry <pvince81@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 OCA\Files_Sharing\Tests; + +use OCA\Files_Sharing\MountProvider; +use OCP\Files\Storage\IStorageFactory; +use OCP\IConfig; +use OCP\ILogger; +use OCP\IUser; +use OCP\Share\IShare; +use OCP\Share\IManager; +use OCP\Files\Mount\IMountPoint; + +class MountProviderTest extends \Test\TestCase { + + /** @var MountProvider */ + private $provider; + + /** @var IConfig|\PHPUnit_Framework_MockObject_MockObject */ + private $config; + + /** @var IUser|\PHPUnit_Framework_MockObject_MockObject */ + private $user; + + /** @var IStorageFactory|\PHPUnit_Framework_MockObject_MockObject */ + private $loader; + + /** @var IManager|\PHPUnit_Framework_MockObject_MockObject */ + private $shareManager; + + /** @var ILogger | \PHPUnit_Framework_MockObject_MockObject */ + private $logger; + + public function setUp() { + parent::setUp(); + + $this->config = $this->getMock('OCP\IConfig'); + $this->user = $this->getMock('OCP\IUser'); + $this->loader = $this->getMock('OCP\Files\Storage\IStorageFactory'); + $this->shareManager = $this->getMock('\OCP\Share\IManager'); + $this->logger = $this->getMock('\OCP\ILogger'); + + $this->provider = new MountProvider($this->config, $this->shareManager, $this->logger); + } + + public function testExcludeShares() { + /** @var IShare | \PHPUnit_Framework_MockObject_MockObject $share1 */ + $share1 = $this->getMock('\OCP\Share\IShare'); + $share1->expects($this->once()) + ->method('getPermissions') + ->will($this->returnValue(0)); + + $share2 = $this->getMock('\OCP\Share\IShare'); + $share2->expects($this->once()) + ->method('getPermissions') + ->will($this->returnValue(31)); + $share2->expects($this->any()) + ->method('getShareOwner') + ->will($this->returnValue('user2')); + $share2->expects($this->any()) + ->method('getTarget') + ->will($this->returnValue('/share2')); + + $share3 = $this->getMock('\OCP\Share\IShare'); + $share3->expects($this->once()) + ->method('getPermissions') + ->will($this->returnValue(0)); + + /** @var IShare | \PHPUnit_Framework_MockObject_MockObject $share4 */ + $share4 = $this->getMock('\OCP\Share\IShare'); + $share4->expects($this->once()) + ->method('getPermissions') + ->will($this->returnValue(31)); + $share4->expects($this->any()) + ->method('getShareOwner') + ->will($this->returnValue('user2')); + $share4->expects($this->any()) + ->method('getTarget') + ->will($this->returnValue('/share4')); + + $share5 = $this->getMock('\OCP\Share\IShare'); + $share5->expects($this->once()) + ->method('getPermissions') + ->will($this->returnValue(31)); + $share5->expects($this->any()) + ->method('getShareOwner') + ->will($this->returnValue('user1')); + + $userShares = [$share1, $share2]; + $groupShares = [$share3, $share4, $share5]; + + $this->user->expects($this->any()) + ->method('getUID') + ->will($this->returnValue('user1')); + + $this->shareManager->expects($this->at(0)) + ->method('getSharedWith') + ->with('user1', \OCP\Share::SHARE_TYPE_USER) + ->will($this->returnValue($userShares)); + $this->shareManager->expects($this->at(1)) + ->method('getSharedWith') + ->with('user1', \OCP\Share::SHARE_TYPE_GROUP, null, -1) + ->will($this->returnValue($groupShares)); + + $mounts = $this->provider->getMountsForUser($this->user, $this->loader); + + $this->assertCount(2, $mounts); + $this->assertSharedMount($share1, $mounts[0]); + $this->assertSharedMount($share4, $mounts[1]); + } + + private function assertSharedMount(IShare $share, IMountPoint $mount) { + $this->assertInstanceOf('OCA\Files_Sharing\SharedMount', $mount); + $this->assertEquals($share, $mount->getShare()); + } +} + |