summaryrefslogtreecommitdiffstats
path: root/apps/files_sharing
diff options
context:
space:
mode:
authorLukas Reschke <lukas@owncloud.com>2016-06-26 12:55:05 +0200
committerLukas Reschke <lukas@owncloud.com>2016-06-26 12:55:05 +0200
commit7a9d60d87eb8e4414e5fe05830b088d426ff810d (patch)
tree0fc97a7eacfd071475afd8bc6d4372babacb5740 /apps/files_sharing
parent5387b942c44e05b87ba2a0fd54168f5278a31344 (diff)
parent52eab2a61a5d27b64fcd0440b91f854c052933a9 (diff)
downloadnextcloud-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.php5
-rw-r--r--apps/files_sharing/l10n/lb.js1
-rw-r--r--apps/files_sharing/l10n/lb.json1
-rw-r--r--apps/files_sharing/lib/External/Storage.php11
-rw-r--r--apps/files_sharing/lib/MountProvider.php5
-rw-r--r--apps/files_sharing/tests/MountProviderTest.php136
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());
+ }
+}
+