summaryrefslogtreecommitdiffstats
path: root/apps
diff options
context:
space:
mode:
Diffstat (limited to 'apps')
-rw-r--r--apps/dav/lib/carddav/converter.php17
-rw-r--r--apps/dav/lib/comments/commentsplugin.php4
-rw-r--r--apps/dav/lib/connector/sabre/commentpropertiesplugin.php130
-rw-r--r--apps/dav/lib/connector/sabre/serverfactory.php1
-rw-r--r--apps/dav/tests/unit/connector/sabre/commentpropertiesplugin.php148
-rw-r--r--apps/federation/api/ocsauthapi.php8
-rw-r--r--apps/federation/backgroundjob/getsharedsecret.php3
-rw-r--r--apps/federation/backgroundjob/requestsharedsecret.php3
-rw-r--r--apps/files/css/files.css2
-rw-r--r--apps/files_external/controller/storagescontroller.php2
-rw-r--r--apps/files_external/lib/auth/password/logincredentials.php2
-rw-r--r--apps/files_external/lib/auth/password/sessioncredentials.php2
-rw-r--r--apps/files_external/lib/auth/password/userprovided.php2
13 files changed, 311 insertions, 13 deletions
diff --git a/apps/dav/lib/carddav/converter.php b/apps/dav/lib/carddav/converter.php
index 06d3cb4f18e..c8d9b94c267 100644
--- a/apps/dav/lib/carddav/converter.php
+++ b/apps/dav/lib/carddav/converter.php
@@ -39,7 +39,7 @@ class Converter {
$displayName = empty($displayName ) ? $uid : $displayName;
$emailAddress = $user->getEMailAddress();
$cloudId = $user->getCloudId();
- $image = $user->getAvatarImage(-1);
+ $image = $this->getAvatarImage($user);
$vCard = new VCard();
$vCard->add(new Text($vCard, 'UID', $uid));
@@ -72,7 +72,7 @@ class Converter {
$displayName = empty($displayName ) ? $uid : $displayName;
$emailAddress = $user->getEMailAddress();
$cloudId = $user->getCloudId();
- $image = $user->getAvatarImage(-1);
+ $image = $this->getAvatarImage($user);
$updated = false;
if($this->propertyNeedsUpdate($vCard, 'FN', $displayName)) {
@@ -155,4 +155,17 @@ class Converter {
return $result;
}
+ /**
+ * @param IUser $user
+ * @return null|IImage
+ */
+ private function getAvatarImage(IUser $user) {
+ try {
+ $image = $user->getAvatarImage(-1);
+ return $image;
+ } catch (\Exception $ex) {
+ return null;
+ }
+ }
+
}
diff --git a/apps/dav/lib/comments/commentsplugin.php b/apps/dav/lib/comments/commentsplugin.php
index 7e227fd2914..282c14df1e8 100644
--- a/apps/dav/lib/comments/commentsplugin.php
+++ b/apps/dav/lib/comments/commentsplugin.php
@@ -2,7 +2,7 @@
/**
* @author Arthur Schiwon <blizzz@owncloud.com>
*
- * @copyright Copyright (c) 2015, ownCloud, Inc.
+ * @copyright Copyright (c) 2016, ownCloud, Inc.
* @license AGPL-3.0
*
* This code is free software: you can redistribute it and/or modify
@@ -88,7 +88,7 @@ class CommentsPlugin extends ServerPlugin {
$this->server->xml->namespaceMap[self::NS_OWNCLOUD] = 'oc';
$this->server->xml->classMap['DateTime'] = function(Writer $writer, \DateTime $value) {
- $writer->write($value->format('Y-m-d H:m:i'));
+ $writer->write(\Sabre\HTTP\toDate($value));
};
$this->server->on('report', [$this, 'onReport']);
diff --git a/apps/dav/lib/connector/sabre/commentpropertiesplugin.php b/apps/dav/lib/connector/sabre/commentpropertiesplugin.php
new file mode 100644
index 00000000000..a8d5f771122
--- /dev/null
+++ b/apps/dav/lib/connector/sabre/commentpropertiesplugin.php
@@ -0,0 +1,130 @@
+<?php
+/**
+ * @author Arthur Schiwon <blizzz@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\DAV\Connector\Sabre;
+
+use OCP\Comments\ICommentsManager;
+use OCP\IUserSession;
+use Sabre\DAV\PropFind;
+use Sabre\DAV\ServerPlugin;
+
+class CommentPropertiesPlugin extends ServerPlugin {
+
+ const PROPERTY_NAME_HREF = '{http://owncloud.org/ns}comments-href';
+ const PROPERTY_NAME_COUNT = '{http://owncloud.org/ns}comments-count';
+ const PROPERTY_NAME_UNREAD = '{http://owncloud.org/ns}comments-unread';
+
+ /** @var \Sabre\DAV\Server */
+ protected $server;
+
+ /** @var ICommentsManager */
+ private $commentsManager;
+
+ /** @var IUserSession */
+ private $userSession;
+
+ public function __construct(ICommentsManager $commentsManager, IUserSession $userSession) {
+ $this->commentsManager = $commentsManager;
+ $this->userSession = $userSession;
+ }
+
+ /**
+ * This initializes the plugin.
+ *
+ * This function is called by Sabre\DAV\Server, after
+ * addPlugin is called.
+ *
+ * This method should set up the required event subscriptions.
+ *
+ * @param \Sabre\DAV\Server $server
+ * @return void
+ */
+ function initialize(\Sabre\DAV\Server $server) {
+ $this->server = $server;
+ $this->server->on('propFind', array($this, 'handleGetProperties'));
+ }
+
+ /**
+ * Adds tags and favorites properties to the response,
+ * if requested.
+ *
+ * @param PropFind $propFind
+ * @param \Sabre\DAV\INode $node
+ * @return void
+ */
+ public function handleGetProperties(
+ PropFind $propFind,
+ \Sabre\DAV\INode $node
+ ) {
+ if (!($node instanceof File) && !($node instanceof Directory)) {
+ return;
+ }
+
+ $propFind->handle(self::PROPERTY_NAME_COUNT, function() use ($node) {
+ return $this->commentsManager->getNumberOfCommentsForObject('files', strval($node->getId()));
+ });
+
+ $propFind->handle(self::PROPERTY_NAME_HREF, function() use ($node) {
+ return $this->getCommentsLink($node);
+ });
+
+ $propFind->handle(self::PROPERTY_NAME_UNREAD, function() use ($node) {
+ return $this->getUnreadCount($node);
+ });
+ }
+
+ /**
+ * returns a reference to the comments node
+ *
+ * @param Node $node
+ * @return mixed|string
+ */
+ public function getCommentsLink(Node $node) {
+ $href = $this->server->getBaseUri();
+ $entryPoint = strrpos($href, '/webdav/');
+ if($entryPoint === false) {
+ // in case we end up somewhere else, unexpectedly.
+ return null;
+ }
+ $href = substr_replace($href, '/dav/', $entryPoint);
+ $href .= 'comments/files/' . rawurldecode($node->getId());
+ return $href;
+ }
+
+ /**
+ * returns the number of unread comments for the currently logged in user
+ * on the given file or directory node
+ *
+ * @param Node $node
+ * @return Int|null
+ */
+ public function getUnreadCount(Node $node) {
+ $user = $this->userSession->getUser();
+ if(is_null($user)) {
+ return null;
+ }
+
+ $lastRead = $this->commentsManager->getReadMark('files', strval($node->getId()), $user);
+
+ return $this->commentsManager->getNumberOfCommentsForObject('files', strval($node->getId()), $lastRead);
+ }
+
+}
diff --git a/apps/dav/lib/connector/sabre/serverfactory.php b/apps/dav/lib/connector/sabre/serverfactory.php
index ee782f79a81..fa4fda46870 100644
--- a/apps/dav/lib/connector/sabre/serverfactory.php
+++ b/apps/dav/lib/connector/sabre/serverfactory.php
@@ -134,6 +134,7 @@ class ServerFactory {
if($this->userSession->isLoggedIn()) {
$server->addPlugin(new \OCA\DAV\Connector\Sabre\TagsPlugin($objectTree, $this->tagManager));
+ $server->addPlugin(new \OCA\DAV\Connector\Sabre\CommentPropertiesPlugin(\OC::$server->getCommentsManager(), $this->userSession));
// custom properties plugin must be the last one
$server->addPlugin(
new \Sabre\DAV\PropertyStorage\Plugin(
diff --git a/apps/dav/tests/unit/connector/sabre/commentpropertiesplugin.php b/apps/dav/tests/unit/connector/sabre/commentpropertiesplugin.php
new file mode 100644
index 00000000000..f915c83c4a7
--- /dev/null
+++ b/apps/dav/tests/unit/connector/sabre/commentpropertiesplugin.php
@@ -0,0 +1,148 @@
+<?php
+/**
+ * @author Arthur Schiwon <blizzz@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\DAV\Tests\Unit\Connector\Sabre;
+
+use \OCA\DAV\Connector\Sabre\CommentPropertiesPlugin as CommentPropertiesPluginImplementation;
+
+class CommentsPropertiesPlugin extends \Test\TestCase {
+
+ /** @var CommentPropertiesPluginImplementation */
+ protected $plugin;
+ protected $commentsManager;
+ protected $userSession;
+ protected $server;
+
+ public function setUp() {
+ parent::setUp();
+
+ $this->commentsManager = $this->getMock('\OCP\Comments\ICommentsManager');
+ $this->userSession = $this->getMock('\OCP\IUserSession');
+
+ $this->server = $this->getMockBuilder('\Sabre\DAV\Server')
+ ->disableOriginalConstructor()
+ ->getMock();
+
+ $this->plugin = new CommentPropertiesPluginImplementation($this->commentsManager, $this->userSession);
+ $this->plugin->initialize($this->server);
+ }
+
+ public function nodeProvider() {
+ $mocks = [];
+ foreach(['\OCA\DAV\Connector\Sabre\File', '\OCA\DAV\Connector\Sabre\Directory', '\Sabre\DAV\INode'] as $class) {
+ $mocks[] = $this->getMockBuilder($class)
+ ->disableOriginalConstructor()
+ ->getMock();
+ }
+
+ return [
+ [$mocks[0], true],
+ [$mocks[1], true],
+ [$mocks[2], false]
+ ];
+ }
+
+ /**
+ * @dataProvider nodeProvider
+ * @param $node
+ * @param $expectedSuccessful
+ */
+ public function testHandleGetProperties($node, $expectedSuccessful) {
+ $propFind = $this->getMockBuilder('\Sabre\DAV\PropFind')
+ ->disableOriginalConstructor()
+ ->getMock();
+
+ if($expectedSuccessful) {
+ $propFind->expects($this->exactly(3))
+ ->method('handle');
+ } else {
+ $propFind->expects($this->never())
+ ->method('handle');
+ }
+
+ $this->plugin->handleGetProperties($propFind, $node);
+ }
+
+ public function baseUriProvider() {
+ return [
+ ['owncloud/remote.php/webdav/', '4567', 'owncloud/remote.php/dav/comments/files/4567'],
+ ['owncloud/remote.php/wicked/', '4567', null]
+ ];
+ }
+
+ /**
+ * @dataProvider baseUriProvider
+ * @param $baseUri
+ * @param $fid
+ * @param $expectedHref
+ */
+ public function testGetCommentsLink($baseUri, $fid, $expectedHref) {
+ $node = $this->getMockBuilder('\OCA\DAV\Connector\Sabre\File')
+ ->disableOriginalConstructor()
+ ->getMock();
+ $node->expects($this->any())
+ ->method('getId')
+ ->will($this->returnValue($fid));
+
+ $this->server->expects($this->once())
+ ->method('getBaseUri')
+ ->will($this->returnValue($baseUri));
+
+ $href = $this->plugin->getCommentsLink($node);
+ $this->assertSame($expectedHref, $href);
+ }
+
+ public function userProvider() {
+ return [
+ [$this->getMock('\OCP\IUser')],
+ [null]
+ ];
+ }
+
+ /**
+ * @dataProvider userProvider
+ * @param $user
+ */
+ public function testGetUnreadCount($user) {
+ $node = $this->getMockBuilder('\OCA\DAV\Connector\Sabre\File')
+ ->disableOriginalConstructor()
+ ->getMock();
+ $node->expects($this->any())
+ ->method('getId')
+ ->will($this->returnValue('4567'));
+
+ $this->userSession->expects($this->once())
+ ->method('getUser')
+ ->will($this->returnValue($user));
+
+ $this->commentsManager->expects($this->any())
+ ->method('getNumberOfCommentsForObject')
+ ->will($this->returnValue(42));
+
+ $unread = $this->plugin->getUnreadCount($node);
+ if(is_null($user)) {
+ $this->assertNull($unread);
+ } else {
+ $this->assertSame($unread, 42);
+ }
+ }
+
+}
diff --git a/apps/federation/api/ocsauthapi.php b/apps/federation/api/ocsauthapi.php
index 083be1b7ecd..058a5966374 100644
--- a/apps/federation/api/ocsauthapi.php
+++ b/apps/federation/api/ocsauthapi.php
@@ -99,7 +99,7 @@ class OCSAuthAPI {
$token = $this->request->getParam('token');
if ($this->trustedServers->isTrustedServer($url) === false) {
- $this->logger->log(\OCP\Util::ERROR, 'remote server not trusted (' . $url . ') while requesting shared secret');
+ $this->logger->log(\OCP\Util::ERROR, 'remote server not trusted (' . $url . ') while requesting shared secret', ['app' => 'federation']);
return new \OC_OCS_Result(null, HTTP::STATUS_FORBIDDEN);
}
@@ -107,7 +107,7 @@ class OCSAuthAPI {
// token wins
$localToken = $this->dbHandler->getToken($url);
if (strcmp($localToken, $token) > 0) {
- $this->logger->log(\OCP\Util::ERROR, 'remote server (' . $url . ') presented lower token');
+ $this->logger->log(\OCP\Util::ERROR, 'remote server (' . $url . ') presented lower token', ['app' => 'federation']);
return new \OC_OCS_Result(null, HTTP::STATUS_FORBIDDEN);
}
@@ -134,12 +134,12 @@ class OCSAuthAPI {
$token = $this->request->getParam('token');
if ($this->trustedServers->isTrustedServer($url) === false) {
- $this->logger->log(\OCP\Util::ERROR, 'remote server not trusted (' . $url . ') while getting shared secret');
+ $this->logger->log(\OCP\Util::ERROR, 'remote server not trusted (' . $url . ') while getting shared secret', ['app' => 'federation']);
return new \OC_OCS_Result(null, HTTP::STATUS_FORBIDDEN);
}
if ($this->isValidToken($url, $token) === false) {
- $this->logger->log(\OCP\Util::ERROR, 'remote server (' . $url . ') didn\'t send a valid token (got ' . $token . ') while getting shared secret');
+ $this->logger->log(\OCP\Util::ERROR, 'remote server (' . $url . ') didn\'t send a valid token (got ' . $token . ') while getting shared secret', ['app' => 'federation']);
return new \OC_OCS_Result(null, HTTP::STATUS_FORBIDDEN);
}
diff --git a/apps/federation/backgroundjob/getsharedsecret.php b/apps/federation/backgroundjob/getsharedsecret.php
index cae446f915c..a98a17e323b 100644
--- a/apps/federation/backgroundjob/getsharedsecret.php
+++ b/apps/federation/backgroundjob/getsharedsecret.php
@@ -151,6 +151,9 @@ class GetSharedSecret extends QueuedJob{
} catch (ClientException $e) {
$status = $e->getCode();
$this->logger->logException($e);
+ } catch (\Exception $e) {
+ $status = HTTP::STATUS_INTERNAL_SERVER_ERROR;
+ $this->logger->logException($e);
}
// if we received a unexpected response we try again later
diff --git a/apps/federation/backgroundjob/requestsharedsecret.php b/apps/federation/backgroundjob/requestsharedsecret.php
index 92305b7e8ea..2db5d09545a 100644
--- a/apps/federation/backgroundjob/requestsharedsecret.php
+++ b/apps/federation/backgroundjob/requestsharedsecret.php
@@ -149,6 +149,9 @@ class RequestSharedSecret extends QueuedJob {
} catch (ClientException $e) {
$status = $e->getCode();
$this->logger->logException($e);
+ } catch (\Exception $e) {
+ $status = HTTP::STATUS_INTERNAL_SERVER_ERROR;
+ $this->logger->logException($e);
}
// if we received a unexpected response we try again later
diff --git a/apps/files/css/files.css b/apps/files/css/files.css
index 61148428f79..4929039f837 100644
--- a/apps/files/css/files.css
+++ b/apps/files/css/files.css
@@ -59,7 +59,7 @@
/* fit app list view heights */
.app-files #app-content>.viewcontainer {
- min-height: 100%;
+ min-height: 0%;
}
.app-files #app-content {
diff --git a/apps/files_external/controller/storagescontroller.php b/apps/files_external/controller/storagescontroller.php
index d71c4ff5ef7..db1cdeb23b9 100644
--- a/apps/files_external/controller/storagescontroller.php
+++ b/apps/files_external/controller/storagescontroller.php
@@ -279,7 +279,7 @@ abstract class StoragesController extends Controller {
* @return DataResponse
*/
public function index() {
- $storages = $this->service->getAllStorages();
+ $storages = $this->service->getStorages();
return new DataResponse(
$storages,
diff --git a/apps/files_external/lib/auth/password/logincredentials.php b/apps/files_external/lib/auth/password/logincredentials.php
index 99cac3f4202..25bd66fb41a 100644
--- a/apps/files_external/lib/auth/password/logincredentials.php
+++ b/apps/files_external/lib/auth/password/logincredentials.php
@@ -52,7 +52,7 @@ class LoginCredentials extends AuthMechanism {
$this
->setIdentifier('password::logincredentials')
->setScheme(self::SCHEME_PASSWORD)
- ->setText($l->t('Login credentials'))
+ ->setText($l->t('Log-in credentials, save in database'))
->addParameters([
])
;
diff --git a/apps/files_external/lib/auth/password/sessioncredentials.php b/apps/files_external/lib/auth/password/sessioncredentials.php
index 3fb8b8526cc..d8e8443418a 100644
--- a/apps/files_external/lib/auth/password/sessioncredentials.php
+++ b/apps/files_external/lib/auth/password/sessioncredentials.php
@@ -50,7 +50,7 @@ class SessionCredentials extends AuthMechanism {
$this
->setIdentifier('password::sessioncredentials')
->setScheme(self::SCHEME_PASSWORD)
- ->setText($l->t('Session credentials'))
+ ->setText($l->t('Log-in credentials, save in session'))
->addParameters([
])
;
diff --git a/apps/files_external/lib/auth/password/userprovided.php b/apps/files_external/lib/auth/password/userprovided.php
index e1c1352022f..2f277163184 100644
--- a/apps/files_external/lib/auth/password/userprovided.php
+++ b/apps/files_external/lib/auth/password/userprovided.php
@@ -49,7 +49,7 @@ class UserProvided extends AuthMechanism implements IUserProvided {
->setIdentifier('password::userprovided')
->setVisibility(BackendService::VISIBILITY_ADMIN)
->setScheme(self::SCHEME_PASSWORD)
- ->setText($l->t('User provided'))
+ ->setText($l->t('User entered, store in database'))
->addParameters([
(new DefinitionParameter('user', $l->t('Username')))
->setFlag(DefinitionParameter::FLAG_USER_PROVIDED),