From 3a8c4230be2d7311ca012f09538cdad2147fae75 Mon Sep 17 00:00:00 2001 From: Georg Ehrke Date: Mon, 21 Nov 2016 21:58:24 +0100 Subject: [PATCH] fix PropPatch requests on calendars Signed-off-by: Georg Ehrke --- apps/dav/lib/CalDAV/Calendar.php | 2 +- apps/dav/tests/unit/CalDAV/CalendarTest.php | 25 +++++++++++++++------ 2 files changed, 19 insertions(+), 8 deletions(-) diff --git a/apps/dav/lib/CalDAV/Calendar.php b/apps/dav/lib/CalDAV/Calendar.php index 9fedbe6f91..ef8e21be83 100644 --- a/apps/dav/lib/CalDAV/Calendar.php +++ b/apps/dav/lib/CalDAV/Calendar.php @@ -177,7 +177,7 @@ class Calendar extends \Sabre\CalDAV\Calendar implements IShareable { function propPatch(PropPatch $propPatch) { $mutations = $propPatch->getMutations(); // If this is a shared calendar, the user can only change the enabled property, to hide it. - if (isset($this->calendarInfo['{http://owncloud.org/ns}owner-principal']) && (sizeof($mutations) !== 1 || !isset($mutations['{http://owncloud.org/ns}calendar-enabled']))) { + if ($this->isShared() && (sizeof($mutations) !== 1 || !isset($mutations['{http://owncloud.org/ns}calendar-enabled']))) { throw new Forbidden(); } parent::propPatch($propPatch); diff --git a/apps/dav/tests/unit/CalDAV/CalendarTest.php b/apps/dav/tests/unit/CalDAV/CalendarTest.php index e585a23a9a..d0fb2d1924 100644 --- a/apps/dav/tests/unit/CalDAV/CalendarTest.php +++ b/apps/dav/tests/unit/CalDAV/CalendarTest.php @@ -106,29 +106,40 @@ class CalendarTest extends TestCase { public function dataPropPatch() { return [ - [[], true], - [[ + ['user1', 'user2', [], true], + ['user1', 'user2', [ '{http://owncloud.org/ns}calendar-enabled' => true, ], false], - [[ + ['user1', 'user2', [ '{DAV:}displayname' => true, ], true], - [[ + ['user1', 'user2', [ '{DAV:}displayname' => true, '{http://owncloud.org/ns}calendar-enabled' => true, ], true], + ['user1', 'user1', [], false], + ['user1', 'user1', [ + '{http://owncloud.org/ns}calendar-enabled' => true, + ], false], + ['user1', 'user1', [ + '{DAV:}displayname' => true, + ], false], + ['user1', 'user1', [ + '{DAV:}displayname' => true, + '{http://owncloud.org/ns}calendar-enabled' => true, + ], false], ]; } /** * @dataProvider dataPropPatch */ - public function testPropPatch($mutations, $throws) { + public function testPropPatch($ownerPrincipal, $principalUri, $mutations, $throws) { /** @var \PHPUnit_Framework_MockObject_MockObject | CalDavBackend $backend */ $backend = $this->getMockBuilder(CalDavBackend::class)->disableOriginalConstructor()->getMock(); $calendarInfo = [ - '{http://owncloud.org/ns}owner-principal' => 'user1', - 'principaluri' => 'user2', + '{http://owncloud.org/ns}owner-principal' => $ownerPrincipal, + 'principaluri' => $principalUri, 'id' => 666, 'uri' => 'default' ];