Birthday calendar should never have write acl - fixes #24154

This commit is contained in:
Thomas Müller 2016-04-21 13:36:52 +02:00
parent 4f5d1e9f60
commit 4e50dd87d5
No known key found for this signature in database
GPG Key ID: A943788A3BBEC44C
3 changed files with 19 additions and 15 deletions

View File

@ -28,14 +28,6 @@ use Sabre\DAV\PropPatch;
class Calendar extends \Sabre\CalDAV\Calendar implements IShareable {
public function __construct(BackendInterface $caldavBackend, $calendarInfo) {
parent::__construct($caldavBackend, $calendarInfo);
if ($this->getName() === BirthdayService::BIRTHDAY_CALENDAR_URI) {
$this->calendarInfo['{http://sabredav.org/ns}read-only'] = true;
}
}
/**
* Updates the list of shares.
*
@ -92,11 +84,13 @@ class Calendar extends \Sabre\CalDAV\Calendar implements IShareable {
'principal' => $this->getOwner(),
'protected' => true,
]];
$acl[] = [
'privilege' => '{DAV:}write',
'principal' => $this->getOwner(),
'protected' => true,
];
if ($this->getName() !== BirthdayService::BIRTHDAY_CALENDAR_URI) {
$acl[] = [
'privilege' => '{DAV:}write',
'principal' => $this->getOwner(),
'protected' => true,
];
}
if ($this->getOwner() !== parent::getOwner()) {
$acl[] = [
'privilege' => '{DAV:}read',

View File

@ -25,6 +25,7 @@ use DateTimeZone;
use OCA\DAV\CalDAV\CalDavBackend;
use OCA\DAV\CalDAV\Calendar;
use OCA\DAV\Connector\Sabre\Principal;
use OCP\IL10N;
use Sabre\CalDAV\Xml\Property\SupportedCalendarComponentSet;
use Sabre\DAV\PropPatch;
use Sabre\DAV\Xml\Property\Href;

View File

@ -21,6 +21,7 @@
namespace OCA\DAV\Tests\Unit\CalDAV;
use OCA\DAV\CalDAV\BirthdayService;
use OCA\DAV\CalDAV\CalDavBackend;
use OCA\DAV\CalDAV\Calendar;
use Sabre\DAV\PropPatch;
@ -107,14 +108,14 @@ class CalendarTest extends TestCase {
/**
* @dataProvider providesReadOnlyInfo
*/
public function testAcl($expectsWrite, $readOnlyValue, $hasOwnerSet) {
public function testAcl($expectsWrite, $readOnlyValue, $hasOwnerSet, $uri = 'default') {
/** @var \PHPUnit_Framework_MockObject_MockObject | CalDavBackend $backend */
$backend = $this->getMockBuilder('OCA\DAV\CalDAV\CalDavBackend')->disableOriginalConstructor()->getMock();
$backend->expects($this->any())->method('applyShareAcl')->willReturnArgument(1);
$calendarInfo = [
'principaluri' => 'user2',
'id' => 666,
'uri' => 'default'
'uri' => $uri
];
if (!is_null($readOnlyValue)) {
$calendarInfo['{http://owncloud.org/ns}read-only'] = $readOnlyValue;
@ -135,6 +136,13 @@ class CalendarTest extends TestCase {
'principal' => $hasOwnerSet ? 'user1' : 'user2',
'protected' => true
]];
if ($uri === BirthdayService::BIRTHDAY_CALENDAR_URI) {
$expectedAcl = [[
'privilege' => '{DAV:}read',
'principal' => $hasOwnerSet ? 'user1' : 'user2',
'protected' => true
]];
}
if ($hasOwnerSet) {
$expectedAcl[] = [
'privilege' => '{DAV:}read',
@ -161,6 +169,7 @@ class CalendarTest extends TestCase {
'read-only property not set and no owner' => [true, null, false],
'read-only property is false and no owner' => [true, false, false],
'read-only property is true and no owner' => [false, true, false],
'birthday calendar' => [false, false, false, BirthdayService::BIRTHDAY_CALENDAR_URI]
];
}
}