summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMorris Jobke <hey@morrisjobke.de>2017-05-08 12:42:30 -0500
committerGitHub <noreply@github.com>2017-05-08 12:42:30 -0500
commit2d707fdfb5657908bb1c5018f978afb8be5c7563 (patch)
treefd6102b42b4d27d829495d3ca5aabf78b0dc6756
parentdf6ce6b38595bc6bb5c149f6013872780eb382ad (diff)
parent255442f2817d2504496ca6f60787933c3f064742 (diff)
downloadnextcloud-server-2d707fdfb5657908bb1c5018f978afb8be5c7563.tar.gz
nextcloud-server-2d707fdfb5657908bb1c5018f978afb8be5c7563.zip
Merge pull request #4621 from nextcloud/fix_readonly_shared_calendar_proppatch
fix PROPPATCH requests to read-only shared calendars
-rw-r--r--apps/dav/lib/CalDAV/Calendar.php9
-rw-r--r--apps/dav/tests/unit/CalDAV/CalendarTest.php2
-rw-r--r--apps/dav/tests/unit/CalDAV/PublicCalendarTest.php2
3 files changed, 11 insertions, 2 deletions
diff --git a/apps/dav/lib/CalDAV/Calendar.php b/apps/dav/lib/CalDAV/Calendar.php
index a216e4e078b..9c56398b14c 100644
--- a/apps/dav/lib/CalDAV/Calendar.php
+++ b/apps/dav/lib/CalDAV/Calendar.php
@@ -145,11 +145,16 @@ class Calendar extends \Sabre\CalDAV\Calendar implements IShareable {
];
}
- if ($this->isShared()) {
+ $acl = $this->caldavBackend->applyShareAcl($this->getResourceId(), $acl);
+
+ if (!$this->isShared()) {
return $acl;
}
- return $this->caldavBackend->applyShareAcl($this->getResourceId(), $acl);
+ $allowedPrincipals = [$this->getOwner(), parent::getOwner(), 'principals/system/public'];
+ return array_filter($acl, function($rule) use ($allowedPrincipals) {
+ return in_array($rule['principal'], $allowedPrincipals);
+ });
}
public function getChildACL() {
diff --git a/apps/dav/tests/unit/CalDAV/CalendarTest.php b/apps/dav/tests/unit/CalDAV/CalendarTest.php
index 4ede886d31e..cf295f01065 100644
--- a/apps/dav/tests/unit/CalDAV/CalendarTest.php
+++ b/apps/dav/tests/unit/CalDAV/CalendarTest.php
@@ -246,6 +246,7 @@ class CalendarTest extends TestCase {
]);
$backend->expects($this->any())->method('getCalendarObject')
->willReturn($calObject2)->with(666, 'event-2');
+ $backend->expects($this->any())->method('applyShareAcl')->willReturnArgument(1);
$calendarInfo = [
'principaluri' => 'user2',
@@ -333,6 +334,7 @@ EOD;
]);
$backend->expects($this->any())->method('getCalendarObject')
->willReturn($calObject1)->with(666, 'event-1');
+ $backend->expects($this->any())->method('applyShareAcl')->willReturnArgument(1);
$calendarInfo = [
'{http://owncloud.org/ns}owner-principal' => $isShared ? 'user1' : 'user2',
diff --git a/apps/dav/tests/unit/CalDAV/PublicCalendarTest.php b/apps/dav/tests/unit/CalDAV/PublicCalendarTest.php
index 6b2bf58d392..03cbf71d6ca 100644
--- a/apps/dav/tests/unit/CalDAV/PublicCalendarTest.php
+++ b/apps/dav/tests/unit/CalDAV/PublicCalendarTest.php
@@ -51,6 +51,7 @@ class PublicCalendarTest extends CalendarTest {
]);
$backend->expects($this->any())->method('getCalendarObject')
->willReturn($calObject2)->with(666, 'event-2');
+ $backend->expects($this->any())->method('applyShareAcl')->willReturnArgument(1);
$calendarInfo = [
'{http://owncloud.org/ns}owner-principal' => 'user2',
@@ -135,6 +136,7 @@ EOD;
]);
$backend->expects($this->any())->method('getCalendarObject')
->willReturn($calObject1)->with(666, 'event-1');
+ $backend->expects($this->any())->method('applyShareAcl')->willReturnArgument(1);
$calendarInfo = [
'{http://owncloud.org/ns}owner-principal' => 'user1',