1*a1a3b679SAndreas Boehler<?php 2*a1a3b679SAndreas Boehler 3*a1a3b679SAndreas Boehlernamespace Sabre\DAVACL\FS; 4*a1a3b679SAndreas Boehler 5*a1a3b679SAndreas Boehleruse Sabre\DAV\FSExt\Directory as BaseCollection; 6*a1a3b679SAndreas Boehleruse Sabre\DAVACL\IACL; 7*a1a3b679SAndreas Boehleruse Sabre\DAV\Exception\Forbidden; 8*a1a3b679SAndreas Boehleruse Sabre\DAV\Exception\NotFound; 9*a1a3b679SAndreas Boehler 10*a1a3b679SAndreas Boehler/** 11*a1a3b679SAndreas Boehler * This is an ACL-enabled collection. 12*a1a3b679SAndreas Boehler * 13*a1a3b679SAndreas Boehler * @copyright Copyright (C) 2007-2015 fruux GmbH. (https://fruux.com/) 14*a1a3b679SAndreas Boehler * @author Evert Pot (http://evertpot.com/) 15*a1a3b679SAndreas Boehler * @license http://sabre.io/license/ Modified BSD License 16*a1a3b679SAndreas Boehler */ 17*a1a3b679SAndreas Boehlerclass Collection extends BaseCollection implements IACL { 18*a1a3b679SAndreas Boehler 19*a1a3b679SAndreas Boehler /** 20*a1a3b679SAndreas Boehler * A list of ACL rules. 21*a1a3b679SAndreas Boehler * 22*a1a3b679SAndreas Boehler * @var array 23*a1a3b679SAndreas Boehler */ 24*a1a3b679SAndreas Boehler protected $acl; 25*a1a3b679SAndreas Boehler 26*a1a3b679SAndreas Boehler /** 27*a1a3b679SAndreas Boehler * Owner uri, or null for no owner. 28*a1a3b679SAndreas Boehler * 29*a1a3b679SAndreas Boehler * @var string|null 30*a1a3b679SAndreas Boehler */ 31*a1a3b679SAndreas Boehler protected $owner; 32*a1a3b679SAndreas Boehler 33*a1a3b679SAndreas Boehler /** 34*a1a3b679SAndreas Boehler * Constructor 35*a1a3b679SAndreas Boehler * 36*a1a3b679SAndreas Boehler * @param string $path on-disk path. 37*a1a3b679SAndreas Boehler * @param array $acl ACL rules. 38*a1a3b679SAndreas Boehler * @param string|null $owner principal owner string. 39*a1a3b679SAndreas Boehler */ 40*a1a3b679SAndreas Boehler function __construct($path, array $acl, $owner = null) { 41*a1a3b679SAndreas Boehler 42*a1a3b679SAndreas Boehler parent::__construct($path); 43*a1a3b679SAndreas Boehler $this->acl = $acl; 44*a1a3b679SAndreas Boehler $this->owner = $owner; 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 * This method must throw Sabre\DAV\Exception\NotFound if the node does not 52*a1a3b679SAndreas Boehler * exist. 53*a1a3b679SAndreas Boehler * 54*a1a3b679SAndreas Boehler * @param string $name 55*a1a3b679SAndreas Boehler * @throws DAV\Exception\NotFound 56*a1a3b679SAndreas Boehler * @return DAV\INode 57*a1a3b679SAndreas Boehler */ 58*a1a3b679SAndreas Boehler function getChild($name) { 59*a1a3b679SAndreas Boehler 60*a1a3b679SAndreas Boehler $path = $this->path . '/' . $name; 61*a1a3b679SAndreas Boehler 62*a1a3b679SAndreas Boehler if (!file_exists($path)) throw new NotFound('File could not be located'); 63*a1a3b679SAndreas Boehler if ($name == '.' || $name == '..') throw new Forbidden('Permission denied to . and ..'); 64*a1a3b679SAndreas Boehler 65*a1a3b679SAndreas Boehler if (is_dir($path)) { 66*a1a3b679SAndreas Boehler 67*a1a3b679SAndreas Boehler return new self($path, $this->acl, $this->owner); 68*a1a3b679SAndreas Boehler 69*a1a3b679SAndreas Boehler } else { 70*a1a3b679SAndreas Boehler 71*a1a3b679SAndreas Boehler return new File($path, $this->acl, $this->owner); 72*a1a3b679SAndreas Boehler 73*a1a3b679SAndreas Boehler } 74*a1a3b679SAndreas Boehler 75*a1a3b679SAndreas Boehler } 76*a1a3b679SAndreas Boehler 77*a1a3b679SAndreas Boehler /** 78*a1a3b679SAndreas Boehler * Returns the owner principal 79*a1a3b679SAndreas Boehler * 80*a1a3b679SAndreas Boehler * This must be a url to a principal, or null if there's no owner 81*a1a3b679SAndreas Boehler * 82*a1a3b679SAndreas Boehler * @return string|null 83*a1a3b679SAndreas Boehler */ 84*a1a3b679SAndreas Boehler function getOwner() { 85*a1a3b679SAndreas Boehler 86*a1a3b679SAndreas Boehler return $this->owner; 87*a1a3b679SAndreas Boehler 88*a1a3b679SAndreas Boehler } 89*a1a3b679SAndreas Boehler 90*a1a3b679SAndreas Boehler /** 91*a1a3b679SAndreas Boehler * Returns a group principal 92*a1a3b679SAndreas Boehler * 93*a1a3b679SAndreas Boehler * This must be a url to a principal, or null if there's no owner 94*a1a3b679SAndreas Boehler * 95*a1a3b679SAndreas Boehler * @return string|null 96*a1a3b679SAndreas Boehler */ 97*a1a3b679SAndreas Boehler function getGroup() { 98*a1a3b679SAndreas Boehler 99*a1a3b679SAndreas Boehler return null; 100*a1a3b679SAndreas Boehler 101*a1a3b679SAndreas Boehler } 102*a1a3b679SAndreas Boehler 103*a1a3b679SAndreas Boehler /** 104*a1a3b679SAndreas Boehler * Returns a list of ACE's for this node. 105*a1a3b679SAndreas Boehler * 106*a1a3b679SAndreas Boehler * Each ACE has the following properties: 107*a1a3b679SAndreas Boehler * * 'privilege', a string such as {DAV:}read or {DAV:}write. These are 108*a1a3b679SAndreas Boehler * currently the only supported privileges 109*a1a3b679SAndreas Boehler * * 'principal', a url to the principal who owns the node 110*a1a3b679SAndreas Boehler * * 'protected' (optional), indicating that this ACE is not allowed to 111*a1a3b679SAndreas Boehler * be updated. 112*a1a3b679SAndreas Boehler * 113*a1a3b679SAndreas Boehler * @return array 114*a1a3b679SAndreas Boehler */ 115*a1a3b679SAndreas Boehler function getACL() { 116*a1a3b679SAndreas Boehler 117*a1a3b679SAndreas Boehler return $this->acl; 118*a1a3b679SAndreas Boehler 119*a1a3b679SAndreas Boehler } 120*a1a3b679SAndreas Boehler 121*a1a3b679SAndreas Boehler /** 122*a1a3b679SAndreas Boehler * Updates the ACL 123*a1a3b679SAndreas Boehler * 124*a1a3b679SAndreas Boehler * This method will receive a list of new ACE's as an array argument. 125*a1a3b679SAndreas Boehler * 126*a1a3b679SAndreas Boehler * @param array $acl 127*a1a3b679SAndreas Boehler * @return void 128*a1a3b679SAndreas Boehler */ 129*a1a3b679SAndreas Boehler function setACL(array $acl) { 130*a1a3b679SAndreas Boehler 131*a1a3b679SAndreas Boehler throw new Forbidden('Setting ACL is not allowed here'); 132*a1a3b679SAndreas Boehler 133*a1a3b679SAndreas Boehler } 134*a1a3b679SAndreas Boehler 135*a1a3b679SAndreas Boehler /** 136*a1a3b679SAndreas Boehler * Returns the list of supported privileges for this node. 137*a1a3b679SAndreas Boehler * 138*a1a3b679SAndreas Boehler * The returned data structure is a list of nested privileges. 139*a1a3b679SAndreas Boehler * See Sabre\DAVACL\Plugin::getDefaultSupportedPrivilegeSet for a simple 140*a1a3b679SAndreas Boehler * standard structure. 141*a1a3b679SAndreas Boehler * 142*a1a3b679SAndreas Boehler * If null is returned from this method, the default privilege set is used, 143*a1a3b679SAndreas Boehler * which is fine for most common usecases. 144*a1a3b679SAndreas Boehler * 145*a1a3b679SAndreas Boehler * @return array|null 146*a1a3b679SAndreas Boehler */ 147*a1a3b679SAndreas Boehler function getSupportedPrivilegeSet() { 148*a1a3b679SAndreas Boehler 149*a1a3b679SAndreas Boehler return null; 150*a1a3b679SAndreas Boehler 151*a1a3b679SAndreas Boehler } 152*a1a3b679SAndreas Boehler 153*a1a3b679SAndreas Boehler} 154