summaryrefslogtreecommitdiffstats
path: root/apps/dav/lib/DAV
diff options
context:
space:
mode:
authorGeorg Ehrke <developer@georgehrke.com>2020-08-11 09:24:08 +0200
committerGeorg Ehrke <developer@georgehrke.com>2020-08-18 13:18:00 +0200
commit14755d85d657ab9bac4458b891c6f43b110b1cf2 (patch)
tree4eea0f88ac0902dafc25574f9eb1b553c1987797 /apps/dav/lib/DAV
parentf6daf17fa773bd4b9c9aae070e39dfbefe8de935 (diff)
downloadnextcloud-server-14755d85d657ab9bac4458b891c6f43b110b1cf2.tar.gz
nextcloud-server-14755d85d657ab9bac4458b891c6f43b110b1cf2.zip
Add ability to limit sharing to owner
Signed-off-by: Georg Ehrke <developer@georgehrke.com>
Diffstat (limited to 'apps/dav/lib/DAV')
-rw-r--r--apps/dav/lib/DAV/Sharing/Plugin.php14
1 files changed, 13 insertions, 1 deletions
diff --git a/apps/dav/lib/DAV/Sharing/Plugin.php b/apps/dav/lib/DAV/Sharing/Plugin.php
index f8967a788b9..06bc5b2157f 100644
--- a/apps/dav/lib/DAV/Sharing/Plugin.php
+++ b/apps/dav/lib/DAV/Sharing/Plugin.php
@@ -27,6 +27,7 @@ namespace OCA\DAV\DAV\Sharing;
use OCA\DAV\Connector\Sabre\Auth;
use OCA\DAV\DAV\Sharing\Xml\Invite;
use OCA\DAV\DAV\Sharing\Xml\ShareRequest;
+use OCP\IConfig;
use OCP\IRequest;
use Sabre\DAV\Exception\NotFound;
use Sabre\DAV\INode;
@@ -46,15 +47,20 @@ class Plugin extends ServerPlugin {
/** @var IRequest */
private $request;
+ /** @var IConfig */
+ private $config;
+
/**
* Plugin constructor.
*
* @param Auth $authBackEnd
* @param IRequest $request
+ * @param IConfig $config
*/
- public function __construct(Auth $authBackEnd, IRequest $request) {
+ public function __construct(Auth $authBackEnd, IRequest $request, IConfig $config) {
$this->auth = $authBackEnd;
$this->request = $request;
+ $this->config = $config;
}
/**
@@ -164,6 +170,12 @@ class Plugin extends ServerPlugin {
if ($acl) {
/** @var \Sabre\DAVACL\Plugin $acl */
$acl->checkPrivileges($path, '{DAV:}write');
+
+ $limitSharingToOwner = $this->config->getAppValue('dav', 'limitAddressBookAndCalendarSharingToOwner', 'no') === 'yes';
+ $isOwner = $acl->getCurrentUserPrincipal() === $node->getOwner();
+ if ($limitSharingToOwner && !$isOwner) {
+ return;
+ }
}
$node->updateShares($message->set, $message->remove);