diff options
author | Thomas Citharel <tcit@tcit.fr> | 2016-07-31 20:18:35 +0200 |
---|---|---|
committer | Lukas Reschke <lukas@statuscode.ch> | 2016-09-26 11:55:39 +0200 |
commit | 3921385ed3994c26674ec31606a41899fa8648ee (patch) | |
tree | b5ace47668519e029a342f26e936056d790836c5 /apps/dav/lib/CalDAV/Publishing | |
parent | ebf23778f5a71b421021165627738e6e7ed5216f (diff) | |
download | nextcloud-server-3921385ed3994c26674ec31606a41899fa8648ee.tar.gz nextcloud-server-3921385ed3994c26674ec31606a41899fa8648ee.zip |
fix things (indentation, tests, comments, backend custom implementation
Diffstat (limited to 'apps/dav/lib/CalDAV/Publishing')
-rw-r--r-- | apps/dav/lib/CalDAV/Publishing/PublishPlugin.php | 199 | ||||
-rw-r--r-- | apps/dav/lib/CalDAV/Publishing/Xml/Publisher.php | 99 |
2 files changed, 141 insertions, 157 deletions
diff --git a/apps/dav/lib/CalDAV/Publishing/PublishPlugin.php b/apps/dav/lib/CalDAV/Publishing/PublishPlugin.php index 4e82d166fc0..e0bcfb7ef6a 100644 --- a/apps/dav/lib/CalDAV/Publishing/PublishPlugin.php +++ b/apps/dav/lib/CalDAV/Publishing/PublishPlugin.php @@ -16,9 +16,9 @@ use OCP\IConfig; class PublishPlugin extends ServerPlugin { - const NS_CALENDARSERVER = 'http://calendarserver.org/ns/'; + const NS_CALENDARSERVER = 'http://calendarserver.org/ns/'; - /** + /** * Reference to SabreDAV server object. * * @var \Sabre\DAV\Server @@ -28,29 +28,30 @@ class PublishPlugin extends ServerPlugin /** * Config instance to get instance secret. * - * @var OCP\IConfig + * @var IConfig */ protected $config; /** * URL Generator for absolute URLs. * - * @var OCP\IURLGenerator + * @var IURLGenerator */ protected $urlGenerator; - /** - * PublishPlugin constructor. - * - * @param IURLGenerator $urlGenerator - */ + /** + * PublishPlugin constructor. + * + * @param IConfig $config + * @param IURLGenerator $urlGenerator + */ public function __construct(IConfig $config, IURLGenerator $urlGenerator) { $this->config = $config; $this->urlGenerator = $urlGenerator; } - /** + /** * This method should return a list of server-features. * * This is for example 'versioning' and is added to the DAV: header @@ -58,7 +59,7 @@ class PublishPlugin extends ServerPlugin * * @return string[] */ - public function getFeatures() + public function getFeatures() { return ['oc-calendar-publishing']; // May have to be changed to be detected } @@ -92,10 +93,9 @@ class PublishPlugin extends ServerPlugin $this->server->on('method:POST', [$this, 'httpPost']); $this->server->on('propFind', [$this, 'propFind']); -// $this->server->on('method:OPTIONS', [$this, 'httpOptions'], 5); } - public function propFind(PropFind $propFind, INode $node) + public function propFind(PropFind $propFind, INode $node) { if ($node instanceof Calendar) { $token = md5($this->config->getSystemValue('secret', '').$node->getResourceId()); @@ -104,130 +104,113 @@ class PublishPlugin extends ServerPlugin $propFind->handle('{'.self::NS_CALENDARSERVER.'}publish-url', function () use ($node, $publishUrl) { if ($node->getPublishStatus()) { - return new Publisher($publishUrl, true); // We return the publish-url only if the calendar is published. + // We return the publish-url only if the calendar is published. + return new Publisher($publishUrl, true); } }); $propFind->handle('{'.self::NS_CALENDARSERVER.'}pre-publish-url', function () use ($node, $publishUrl) { - return new Publisher($publishUrl, false); // The pre-publish-url is always returned + // The pre-publish-url is always returned + return new Publisher($publishUrl, false); }); } } - /** - * We intercept this to handle POST requests on calendars. - * - * @param RequestInterface $request - * @param ResponseInterface $response - * - * @return null|bool - */ - public function httpPost(RequestInterface $request, ResponseInterface $response) - { - $path = $request->getPath(); + /** + * We intercept this to handle POST requests on calendars. + * + * @param RequestInterface $request + * @param ResponseInterface $response + * + * @return null|bool + */ + public function httpPost(RequestInterface $request, ResponseInterface $response) + { + $path = $request->getPath(); - // Only handling xml - $contentType = $request->getHeader('Content-Type'); - if (strpos($contentType, 'application/xml') === false && strpos($contentType, 'text/xml') === false) { - return; - } + // Only handling xml + $contentType = $request->getHeader('Content-Type'); + if (strpos($contentType, 'application/xml') === false && strpos($contentType, 'text/xml') === false) { + return; + } - // Making sure the node exists - try { - $node = $this->server->tree->getNodeForPath($path); - } catch (NotFound $e) { - return; - } + // Making sure the node exists + try { + $node = $this->server->tree->getNodeForPath($path); + } catch (NotFound $e) { + return; + } - $requestBody = $request->getBodyAsString(); + $requestBody = $request->getBodyAsString(); - // If this request handler could not deal with this POST request, it - // will return 'null' and other plugins get a chance to handle the - // request. - // - // However, we already requested the full body. This is a problem, - // because a body can only be read once. This is why we preemptively - // re-populated the request body with the existing data. - $request->setBody($requestBody); + // If this request handler could not deal with this POST request, it + // will return 'null' and other plugins get a chance to handle the + // request. + // + // However, we already requested the full body. This is a problem, + // because a body can only be read once. This is why we preemptively + // re-populated the request body with the existing data. + $request->setBody($requestBody); - $message = $this->server->xml->parse($requestBody, $request->getUrl(), $documentType); + $this->server->xml->parse($requestBody, $request->getUrl(), $documentType); - switch ($documentType) { + switch ($documentType) { - case '{'.self::NS_CALENDARSERVER.'}publish-calendar' : + case '{'.self::NS_CALENDARSERVER.'}publish-calendar' : - // We can only deal with IShareableCalendar objects - if (!$node instanceof Calendar) { - return; - } - $this->server->transactionType = 'post-publish-calendar'; + // We can only deal with IShareableCalendar objects + if (!$node instanceof Calendar) { + return; + } + $this->server->transactionType = 'post-publish-calendar'; - // Getting ACL info - $acl = $this->server->getPlugin('acl'); + // Getting ACL info + $acl = $this->server->getPlugin('acl'); - // If there's no ACL support, we allow everything - if ($acl) { - $acl->checkPrivileges($path, '{DAV:}write'); - } + // If there's no ACL support, we allow everything + if ($acl) { + $acl->checkPrivileges($path, '{DAV:}write'); + } - $node->setPublishStatus(true); + $node->setPublishStatus(true); - // iCloud sends back the 202, so we will too. - $response->setStatus(202); + // iCloud sends back the 202, so we will too. + $response->setStatus(202); - // Adding this because sending a response body may cause issues, - // and I wanted some type of indicator the response was handled. - $response->setHeader('X-Sabre-Status', 'everything-went-well'); + // Adding this because sending a response body may cause issues, + // and I wanted some type of indicator the response was handled. + $response->setHeader('X-Sabre-Status', 'everything-went-well'); - // Breaking the event chain - return false; + // Breaking the event chain + return false; - case '{'.self::NS_CALENDARSERVER.'}unpublish-calendar' : + case '{'.self::NS_CALENDARSERVER.'}unpublish-calendar' : - // We can only deal with IShareableCalendar objects - if (!$node instanceof Calendar) { - return; - } - $this->server->transactionType = 'post-unpublish-calendar'; + // We can only deal with IShareableCalendar objects + if (!$node instanceof Calendar) { + return; + } + $this->server->transactionType = 'post-unpublish-calendar'; - // Getting ACL info - $acl = $this->server->getPlugin('acl'); + // Getting ACL info + $acl = $this->server->getPlugin('acl'); - // If there's no ACL support, we allow everything - if ($acl) { - $acl->checkPrivileges($path, '{DAV:}write'); - } + // If there's no ACL support, we allow everything + if ($acl) { + $acl->checkPrivileges($path, '{DAV:}write'); + } - $node->setPublishStatus(false); + $node->setPublishStatus(false); - $response->setStatus(200); + $response->setStatus(200); - // Adding this because sending a response body may cause issues, - // and I wanted some type of indicator the response was handled. - $response->setHeader('X-Sabre-Status', 'everything-went-well'); + // Adding this because sending a response body may cause issues, + // and I wanted some type of indicator the response was handled. + $response->setHeader('X-Sabre-Status', 'everything-went-well'); - // Breaking the event chain - return false; + // Breaking the event chain + return false; - } - } - - public function httpOptions(RequestInterface $request, ResponseInterface $response) { - if ($request->getPath() == 'public-calendars') { - $methods = $this->server->getAllowedMethods($request->getPath()); - - $response->setHeader('Allow', strtoupper(implode(', ', $methods))); - $features = ['1', '3', 'extended-mkcol']; - - $response->setHeader('DAV', implode(', ', $features)); - $response->setHeader('MS-Author-Via', 'DAV'); - $response->setHeader('Accept-Ranges', 'bytes'); - $response->setHeader('Content-Length', '0'); - $response->setStatus(200); - - // Sending back false will interupt the event chain and tell the server - // we've handled this method. - return false; - } - } + } + } } diff --git a/apps/dav/lib/CalDAV/Publishing/Xml/Publisher.php b/apps/dav/lib/CalDAV/Publishing/Xml/Publisher.php index 45a7fe0257b..375954ffaf3 100644 --- a/apps/dav/lib/CalDAV/Publishing/Xml/Publisher.php +++ b/apps/dav/lib/CalDAV/Publishing/Xml/Publisher.php @@ -8,57 +8,58 @@ use Sabre\Xml\XmlSerializable; class Publisher implements XmlSerializable { - /** - * @var string $publishUrl - */ - protected $publishUrl; + /** + * @var string $publishUrl + */ + protected $publishUrl; - /** - * @var boolean $isPublished - */ - protected $isPublished; + /** + * @var boolean $isPublished + */ + protected $isPublished; - /** - * @param string $publishUrl - * @param boolean $isPublished - */ - function __construct($publishUrl, $isPublished) { - $this->publishUrl = $publishUrl; - $this->isPublished = $isPublished; - } + /** + * @param string $publishUrl + * @param boolean $isPublished + */ + function __construct($publishUrl, $isPublished) { + $this->publishUrl = $publishUrl; + $this->isPublished = $isPublished; + } - /** - * @return string - */ - function getValue() { - return $this->publishUrl; - } + /** + * @return string + */ + function getValue() { + return $this->publishUrl; + } - /** - * The xmlSerialize metod is called during xml writing. - * - * Use the $writer argument to write its own xml serialization. - * - * An important note: do _not_ create a parent element. Any element - * implementing XmlSerializble should only ever write what's considered - * its 'inner xml'. - * - * The parent of the current element is responsible for writing a - * containing element. - * - * This allows serializers to be re-used for different element names. - * - * If you are opening new elements, you must also close them again. - * - * @param Writer $writer - * @return void - */ - function xmlSerialize(Writer $writer) { - if (!$this->isPublished) { - $writer->write($this->publishUrl); // for pre-publish-url - } else { - $writer->writeElement('{DAV:}href', $this->publishUrl); // for publish-url - } - - } + /** + * The xmlSerialize metod is called during xml writing. + * + * Use the $writer argument to write its own xml serialization. + * + * An important note: do _not_ create a parent element. Any element + * implementing XmlSerializble should only ever write what's considered + * its 'inner xml'. + * + * The parent of the current element is responsible for writing a + * containing element. + * + * This allows serializers to be re-used for different element names. + * + * If you are opening new elements, you must also close them again. + * + * @param Writer $writer + * @return void + */ + function xmlSerialize(Writer $writer) { + if (!$this->isPublished) { + // for pre-publish-url + $writer->write($this->publishUrl); + } else { + // for publish-url + $writer->writeElement('{DAV:}href', $this->publishUrl); + } + } } |