1*a1a3b679SAndreas Boehler<?php 2*a1a3b679SAndreas Boehler 3*a1a3b679SAndreas Boehlernamespace Sabre\CalDAV\Principal; 4*a1a3b679SAndreas Boehler 5*a1a3b679SAndreas Boehleruse Sabre\DAV; 6*a1a3b679SAndreas Boehleruse Sabre\DAVACL; 7*a1a3b679SAndreas Boehler 8*a1a3b679SAndreas Boehler/** 9*a1a3b679SAndreas Boehler * CalDAV principal 10*a1a3b679SAndreas Boehler * 11*a1a3b679SAndreas Boehler * This is a standard user-principal for CalDAV. This principal is also a 12*a1a3b679SAndreas Boehler * collection and returns the caldav-proxy-read and caldav-proxy-write child 13*a1a3b679SAndreas Boehler * principals. 14*a1a3b679SAndreas Boehler * 15*a1a3b679SAndreas Boehler * @copyright Copyright (C) 2007-2015 fruux GmbH (https://fruux.com/). 16*a1a3b679SAndreas Boehler * @author Evert Pot (http://evertpot.com/) 17*a1a3b679SAndreas Boehler * @license http://sabre.io/license/ Modified BSD License 18*a1a3b679SAndreas Boehler */ 19*a1a3b679SAndreas Boehlerclass User extends DAVACL\Principal implements DAV\ICollection { 20*a1a3b679SAndreas Boehler 21*a1a3b679SAndreas Boehler /** 22*a1a3b679SAndreas Boehler * Creates a new file in the directory 23*a1a3b679SAndreas Boehler * 24*a1a3b679SAndreas Boehler * @param string $name Name of the file 25*a1a3b679SAndreas Boehler * @param resource $data Initial payload, passed as a readable stream resource. 26*a1a3b679SAndreas Boehler * @throws DAV\Exception\Forbidden 27*a1a3b679SAndreas Boehler * @return void 28*a1a3b679SAndreas Boehler */ 29*a1a3b679SAndreas Boehler function createFile($name, $data = null) { 30*a1a3b679SAndreas Boehler 31*a1a3b679SAndreas Boehler throw new DAV\Exception\Forbidden('Permission denied to create file (filename ' . $name . ')'); 32*a1a3b679SAndreas Boehler 33*a1a3b679SAndreas Boehler } 34*a1a3b679SAndreas Boehler 35*a1a3b679SAndreas Boehler /** 36*a1a3b679SAndreas Boehler * Creates a new subdirectory 37*a1a3b679SAndreas Boehler * 38*a1a3b679SAndreas Boehler * @param string $name 39*a1a3b679SAndreas Boehler * @throws DAV\Exception\Forbidden 40*a1a3b679SAndreas Boehler * @return void 41*a1a3b679SAndreas Boehler */ 42*a1a3b679SAndreas Boehler function createDirectory($name) { 43*a1a3b679SAndreas Boehler 44*a1a3b679SAndreas Boehler throw new DAV\Exception\Forbidden('Permission denied to create directory'); 45*a1a3b679SAndreas Boehler 46*a1a3b679SAndreas Boehler } 47*a1a3b679SAndreas Boehler 48*a1a3b679SAndreas Boehler /** 49*a1a3b679SAndreas Boehler * Returns a specific child node, referenced by its name 50*a1a3b679SAndreas Boehler * 51*a1a3b679SAndreas Boehler * @param string $name 52*a1a3b679SAndreas Boehler * @return DAV\INode 53*a1a3b679SAndreas Boehler */ 54*a1a3b679SAndreas Boehler function getChild($name) { 55*a1a3b679SAndreas Boehler 56*a1a3b679SAndreas Boehler $principal = $this->principalBackend->getPrincipalByPath($this->getPrincipalURL() . '/' . $name); 57*a1a3b679SAndreas Boehler if (!$principal) { 58*a1a3b679SAndreas Boehler throw new DAV\Exception\NotFound('Node with name ' . $name . ' was not found'); 59*a1a3b679SAndreas Boehler } 60*a1a3b679SAndreas Boehler if ($name === 'calendar-proxy-read') 61*a1a3b679SAndreas Boehler return new ProxyRead($this->principalBackend, $this->principalProperties); 62*a1a3b679SAndreas Boehler 63*a1a3b679SAndreas Boehler if ($name === 'calendar-proxy-write') 64*a1a3b679SAndreas Boehler return new ProxyWrite($this->principalBackend, $this->principalProperties); 65*a1a3b679SAndreas Boehler 66*a1a3b679SAndreas Boehler throw new DAV\Exception\NotFound('Node with name ' . $name . ' was not found'); 67*a1a3b679SAndreas Boehler 68*a1a3b679SAndreas Boehler } 69*a1a3b679SAndreas Boehler 70*a1a3b679SAndreas Boehler /** 71*a1a3b679SAndreas Boehler * Returns an array with all the child nodes 72*a1a3b679SAndreas Boehler * 73*a1a3b679SAndreas Boehler * @return DAV\INode[] 74*a1a3b679SAndreas Boehler */ 75*a1a3b679SAndreas Boehler function getChildren() { 76*a1a3b679SAndreas Boehler 77*a1a3b679SAndreas Boehler $r = []; 78*a1a3b679SAndreas Boehler if ($this->principalBackend->getPrincipalByPath($this->getPrincipalURL() . '/calendar-proxy-read')) { 79*a1a3b679SAndreas Boehler $r[] = new ProxyRead($this->principalBackend, $this->principalProperties); 80*a1a3b679SAndreas Boehler } 81*a1a3b679SAndreas Boehler if ($this->principalBackend->getPrincipalByPath($this->getPrincipalURL() . '/calendar-proxy-write')) { 82*a1a3b679SAndreas Boehler $r[] = new ProxyWrite($this->principalBackend, $this->principalProperties); 83*a1a3b679SAndreas Boehler } 84*a1a3b679SAndreas Boehler 85*a1a3b679SAndreas Boehler return $r; 86*a1a3b679SAndreas Boehler 87*a1a3b679SAndreas Boehler } 88*a1a3b679SAndreas Boehler 89*a1a3b679SAndreas Boehler /** 90*a1a3b679SAndreas Boehler * Returns whether or not the child node exists 91*a1a3b679SAndreas Boehler * 92*a1a3b679SAndreas Boehler * @param string $name 93*a1a3b679SAndreas Boehler * @return bool 94*a1a3b679SAndreas Boehler */ 95*a1a3b679SAndreas Boehler function childExists($name) { 96*a1a3b679SAndreas Boehler 97*a1a3b679SAndreas Boehler try { 98*a1a3b679SAndreas Boehler $this->getChild($name); 99*a1a3b679SAndreas Boehler return true; 100*a1a3b679SAndreas Boehler } catch (DAV\Exception\NotFound $e) { 101*a1a3b679SAndreas Boehler return false; 102*a1a3b679SAndreas Boehler } 103*a1a3b679SAndreas Boehler 104*a1a3b679SAndreas Boehler } 105*a1a3b679SAndreas Boehler 106*a1a3b679SAndreas Boehler /** 107*a1a3b679SAndreas Boehler * Returns a list of ACE's for this node. 108*a1a3b679SAndreas Boehler * 109*a1a3b679SAndreas Boehler * Each ACE has the following properties: 110*a1a3b679SAndreas Boehler * * 'privilege', a string such as {DAV:}read or {DAV:}write. These are 111*a1a3b679SAndreas Boehler * currently the only supported privileges 112*a1a3b679SAndreas Boehler * * 'principal', a url to the principal who owns the node 113*a1a3b679SAndreas Boehler * * 'protected' (optional), indicating that this ACE is not allowed to 114*a1a3b679SAndreas Boehler * be updated. 115*a1a3b679SAndreas Boehler * 116*a1a3b679SAndreas Boehler * @return array 117*a1a3b679SAndreas Boehler */ 118*a1a3b679SAndreas Boehler function getACL() { 119*a1a3b679SAndreas Boehler 120*a1a3b679SAndreas Boehler $acl = parent::getACL(); 121*a1a3b679SAndreas Boehler $acl[] = [ 122*a1a3b679SAndreas Boehler 'privilege' => '{DAV:}read', 123*a1a3b679SAndreas Boehler 'principal' => $this->principalProperties['uri'] . '/calendar-proxy-read', 124*a1a3b679SAndreas Boehler 'protected' => true, 125*a1a3b679SAndreas Boehler ]; 126*a1a3b679SAndreas Boehler $acl[] = [ 127*a1a3b679SAndreas Boehler 'privilege' => '{DAV:}read', 128*a1a3b679SAndreas Boehler 'principal' => $this->principalProperties['uri'] . '/calendar-proxy-write', 129*a1a3b679SAndreas Boehler 'protected' => true, 130*a1a3b679SAndreas Boehler ]; 131*a1a3b679SAndreas Boehler return $acl; 132*a1a3b679SAndreas Boehler 133*a1a3b679SAndreas Boehler } 134*a1a3b679SAndreas Boehler 135*a1a3b679SAndreas Boehler} 136