summaryrefslogtreecommitdiffstats
path: root/apps/dav/lib/CalDAV/Publishing
diff options
context:
space:
mode:
authorThomas Citharel <tcit@tcit.fr>2016-07-31 20:18:35 +0200
committerLukas Reschke <lukas@statuscode.ch>2016-09-26 11:55:39 +0200
commit3921385ed3994c26674ec31606a41899fa8648ee (patch)
treeb5ace47668519e029a342f26e936056d790836c5 /apps/dav/lib/CalDAV/Publishing
parentebf23778f5a71b421021165627738e6e7ed5216f (diff)
downloadnextcloud-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.php199
-rw-r--r--apps/dav/lib/CalDAV/Publishing/Xml/Publisher.php99
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);
+ }
+ }
}