/** * @dataProvider providesReadOnlyInfo */ public function testAcl($expectsWrite, $readOnlyValue, $hasOwnerSet) { /** @var \PHPUnit_Framework_MockObject_MockObject | CardDavBackend $backend */ $backend = $this->getMockBuilder('OCA\\DAV\\CardDAV\\CardDavBackend')->disableOriginalConstructor()->getMock(); $backend->expects($this->any())->method('applyShareAcl')->willReturnArgument(1); $calendarInfo = ['principaluri' => 'user2', 'id' => 666, 'uri' => 'default']; if (!is_null($readOnlyValue)) { $calendarInfo['{http://owncloud.org/ns}read-only'] = $readOnlyValue; } if ($hasOwnerSet) { $calendarInfo['{http://owncloud.org/ns}owner-principal'] = 'user1'; } $c = new AddressBook($backend, $calendarInfo); $acl = $c->getACL(); $childAcl = $c->getChildACL(); $expectedAcl = [['privilege' => '{DAV:}read', 'principal' => $hasOwnerSet ? 'user1' : 'user2', 'protected' => true], ['privilege' => '{DAV:}write', 'principal' => $hasOwnerSet ? 'user1' : 'user2', 'protected' => true]]; if ($hasOwnerSet) { $expectedAcl[] = ['privilege' => '{DAV:}read', 'principal' => 'user2', 'protected' => true]; if ($expectsWrite) { $expectedAcl[] = ['privilege' => '{DAV:}write', 'principal' => 'user2', 'protected' => true]; } } $this->assertEquals($expectedAcl, $acl); $this->assertEquals($expectedAcl, $childAcl); }
/** * @expectedException \Sabre\DAV\Exception\Forbidden */ public function testPropPatch() { /** @var \PHPUnit_Framework_MockObject_MockObject | CardDavBackend $backend */ $backend = $this->getMockBuilder('OCA\\DAV\\CardDAV\\CardDavBackend')->disableOriginalConstructor()->getMock(); $calendarInfo = ['{http://owncloud.org/ns}owner-principal' => 'user1', 'principaluri' => 'user2', 'id' => 666]; $c = new AddressBook($backend, $calendarInfo); $c->propPatch(new PropPatch([])); }
/** * @expectedException \Sabre\DAV\Exception\Forbidden */ public function testDeleteFromGroup() { /** @var \PHPUnit_Framework_MockObject_MockObject | CardDavBackend $backend */ $backend = $this->getMockBuilder('OCA\\DAV\\CardDAV\\CardDavBackend')->disableOriginalConstructor()->getMock(); $backend->expects($this->never())->method('updateShares'); $backend->method('getShares')->willReturn([['href' => 'principal:group2']]); $calendarInfo = ['{http://owncloud.org/ns}owner-principal' => 'user1', 'principaluri' => 'user2', 'id' => 666]; $c = new AddressBook($backend, $calendarInfo); $c->delete(); }
/** * @return mixed * @since 5.0.0 */ public function getPermissions() { $permissions = $this->addressBook->getACL(); $result = 0; foreach ($permissions as $permission) { switch ($permission['privilege']) { case '{DAV:}read': $result |= Constants::PERMISSION_READ; break; case '{DAV:}write': $result |= Constants::PERMISSION_CREATE; $result |= Constants::PERMISSION_UPDATE; break; case '{DAV:}all': $result |= Constants::PERMISSION_ALL; break; } } return $result; }
/** * @param AddressBook $addressBook * @param string $element */ private function shareWith($addressBook, $element) { $user = $element['href']; $parts = explode(':', $user, 2); if ($parts[0] !== 'principal') { return; } $p = $this->principalBackend->getPrincipalByPath($parts[1]); if (is_null($p)) { return; } // remove the share if it already exists $this->unshare($addressBook->getBookId(), $element['href']); $access = self::ACCESS_READ; if (isset($element['readOnly'])) { $access = $element['readOnly'] ? self::ACCESS_READ : self::ACCESS_READ_WRITE; } $newUri = sha1($addressBook->getName() . $addressBook->getOwner()); $query = $this->db->getQueryBuilder(); $query->insert('dav_shares')->values(['principaluri' => $query->createNamedParameter($parts[1]), 'uri' => $query->createNamedParameter($newUri), 'type' => $query->createNamedParameter('addressbook'), 'access' => $query->createNamedParameter($access), 'resourceid' => $query->createNamedParameter($addressBook->getBookId())]); $query->execute(); }