mirror of https://github.com/nextcloud/server
Add create method to extended calendar implementation
Signed-off-by: Anna Larch <anna@nextcloud.com> Signed-off-by: Christoph Wurst <christoph@winzerhof-wurst.at>
This commit is contained in:
parent
acbe4b46c3
commit
0401d6dc0f
|
@ -33,6 +33,8 @@ return array(
|
|||
'OCA\\DAV\\CalDAV\\Activity\\Setting\\Calendar' => $baseDir . '/../lib/CalDAV/Activity/Setting/Calendar.php',
|
||||
'OCA\\DAV\\CalDAV\\Activity\\Setting\\Event' => $baseDir . '/../lib/CalDAV/Activity/Setting/Event.php',
|
||||
'OCA\\DAV\\CalDAV\\Activity\\Setting\\Todo' => $baseDir . '/../lib/CalDAV/Activity/Setting/Todo.php',
|
||||
'OCA\\DAV\\CalDAV\\Auth\\CustomPrincipalPlugin' => $baseDir . '/../lib/CalDAV/Auth/CustomPrincipalPlugin.php',
|
||||
'OCA\\DAV\\CalDAV\\Auth\\PublicPrincipalPlugin' => $baseDir . '/../lib/CalDAV/Auth/PublicPrincipalPlugin.php',
|
||||
'OCA\\DAV\\CalDAV\\BirthdayCalendar\\EnablePlugin' => $baseDir . '/../lib/CalDAV/BirthdayCalendar/EnablePlugin.php',
|
||||
'OCA\\DAV\\CalDAV\\BirthdayService' => $baseDir . '/../lib/CalDAV/BirthdayService.php',
|
||||
'OCA\\DAV\\CalDAV\\CachedSubscription' => $baseDir . '/../lib/CalDAV/CachedSubscription.php',
|
||||
|
|
|
@ -48,6 +48,8 @@ class ComposerStaticInitDAV
|
|||
'OCA\\DAV\\CalDAV\\Activity\\Setting\\Calendar' => __DIR__ . '/..' . '/../lib/CalDAV/Activity/Setting/Calendar.php',
|
||||
'OCA\\DAV\\CalDAV\\Activity\\Setting\\Event' => __DIR__ . '/..' . '/../lib/CalDAV/Activity/Setting/Event.php',
|
||||
'OCA\\DAV\\CalDAV\\Activity\\Setting\\Todo' => __DIR__ . '/..' . '/../lib/CalDAV/Activity/Setting/Todo.php',
|
||||
'OCA\\DAV\\CalDAV\\Auth\\CustomPrincipalPlugin' => __DIR__ . '/..' . '/../lib/CalDAV/Auth/CustomPrincipalPlugin.php',
|
||||
'OCA\\DAV\\CalDAV\\Auth\\PublicPrincipalPlugin' => __DIR__ . '/..' . '/../lib/CalDAV/Auth/PublicPrincipalPlugin.php',
|
||||
'OCA\\DAV\\CalDAV\\BirthdayCalendar\\EnablePlugin' => __DIR__ . '/..' . '/../lib/CalDAV/BirthdayCalendar/EnablePlugin.php',
|
||||
'OCA\\DAV\\CalDAV\\BirthdayService' => __DIR__ . '/..' . '/../lib/CalDAV/BirthdayService.php',
|
||||
'OCA\\DAV\\CalDAV\\CachedSubscription' => __DIR__ . '/..' . '/../lib/CalDAV/CachedSubscription.php',
|
||||
|
|
|
@ -0,0 +1,38 @@
|
|||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
/**
|
||||
* CalDAV App
|
||||
*
|
||||
* @copyright 2021 Anna Larch <anna.larch@gmx.net>
|
||||
*
|
||||
* @author Anna Larch <anna.larch@gmx.net>
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 3 of the License, or any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU AFFERO GENERAL PUBLIC LICENSE for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public
|
||||
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
|
||||
namespace OCA\DAV\CalDAV\Auth;
|
||||
|
||||
use Sabre\DAV\Auth\Plugin;
|
||||
|
||||
/**
|
||||
* Set a custom principal uri to allow public requests to its calendar
|
||||
*/
|
||||
class CustomPrincipalPlugin extends Plugin {
|
||||
public function setCurrentPrincipal(?string $currentPrincipal): void {
|
||||
$this->currentPrincipal = $currentPrincipal;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,37 @@
|
|||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
/**
|
||||
* CalDAV App
|
||||
*
|
||||
* @copyright 2021 Anna Larch <anna.larch@gmx.net>
|
||||
*
|
||||
* @author Anna Larch <anna.larch@gmx.net>
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 3 of the License, or any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU AFFERO GENERAL PUBLIC LICENSE for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public
|
||||
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
namespace OCA\DAV\CalDAV\Auth;
|
||||
|
||||
use Sabre\DAV\Auth\Plugin;
|
||||
|
||||
/**
|
||||
* Defines the public facing principal option
|
||||
*/
|
||||
class PublicPrincipalPlugin extends Plugin {
|
||||
public function getCurrentPrincipal(): ?string {
|
||||
return 'principals/system/public';
|
||||
}
|
||||
}
|
|
@ -27,10 +27,14 @@ declare(strict_types=1);
|
|||
*/
|
||||
namespace OCA\DAV\CalDAV;
|
||||
|
||||
use OCP\Calendar\ICalendar;
|
||||
use OCA\DAV\CalDAV\Auth\CustomPrincipalPlugin;
|
||||
use OCA\DAV\CalDAV\InvitationResponse\InvitationResponseServer;
|
||||
use OCP\Calendar\Exceptions\CalendarException;
|
||||
use OCP\Calendar\ICreateFromString;
|
||||
use OCP\Constants;
|
||||
use Sabre\DAV\Exception\Conflict;
|
||||
|
||||
class CalendarImpl implements ICalendar {
|
||||
class CalendarImpl implements ICreateFromString {
|
||||
|
||||
/** @var CalDavBackend */
|
||||
private $backend;
|
||||
|
@ -48,7 +52,8 @@ class CalendarImpl implements ICalendar {
|
|||
* @param array $calendarInfo
|
||||
* @param CalDavBackend $backend
|
||||
*/
|
||||
public function __construct(Calendar $calendar, array $calendarInfo,
|
||||
public function __construct(Calendar $calendar,
|
||||
array $calendarInfo,
|
||||
CalDavBackend $backend) {
|
||||
$this->calendar = $calendar;
|
||||
$this->calendarInfo = $calendarInfo;
|
||||
|
@ -120,4 +125,35 @@ class CalendarImpl implements ICalendar {
|
|||
|
||||
return $result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a new calendar event for this calendar
|
||||
* by way of an ICS string
|
||||
*
|
||||
* @param string $name the file name - needs to contan the .ics ending
|
||||
* @param string $calendarData a string containing a valid VEVENT ics
|
||||
*
|
||||
* @throws CalendarException
|
||||
*/
|
||||
public function createFromString(string $name, string $calendarData): void {
|
||||
$server = new InvitationResponseServer(false);
|
||||
|
||||
/** @var CustomPrincipalPlugin $plugin */
|
||||
$plugin = $server->server->getPlugin('auth');
|
||||
// we're working around the previous implementation
|
||||
// that only allowed the public system principal to be used
|
||||
// so set the custom principal here
|
||||
$plugin->setCurrentPrincipal($this->calendar->getPrincipalURI());
|
||||
|
||||
$stream = fopen('php://memory', 'rb+');
|
||||
fwrite($stream, $calendarData);
|
||||
rewind($stream);
|
||||
try {
|
||||
$server->server->createFile($name, $stream);
|
||||
} catch (Conflict $e) {
|
||||
throw new CalendarException('Could not create new calendar event: ' . $e->getMessage(), 0, $e);
|
||||
} finally {
|
||||
fclose($stream);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -26,6 +26,8 @@
|
|||
namespace OCA\DAV\CalDAV\InvitationResponse;
|
||||
|
||||
use OCA\DAV\AppInfo\PluginManager;
|
||||
use OCA\DAV\CalDAV\Auth\CustomPrincipalPlugin;
|
||||
use OCA\DAV\CalDAV\Auth\PublicPrincipalPlugin;
|
||||
use OCA\DAV\Connector\Sabre\AnonymousOptionsPlugin;
|
||||
use OCA\DAV\Connector\Sabre\BlockLegacyClientPlugin;
|
||||
use OCA\DAV\Connector\Sabre\CachingTree;
|
||||
|
@ -33,7 +35,6 @@ use OCA\DAV\Connector\Sabre\DavAclPlugin;
|
|||
use OCA\DAV\Events\SabrePluginAuthInitEvent;
|
||||
use OCA\DAV\RootCollection;
|
||||
use OCP\EventDispatcher\IEventDispatcher;
|
||||
use Sabre\DAV\Auth\Plugin;
|
||||
use Sabre\VObject\ITip\Message;
|
||||
|
||||
class InvitationResponseServer {
|
||||
|
@ -44,7 +45,7 @@ class InvitationResponseServer {
|
|||
/**
|
||||
* InvitationResponseServer constructor.
|
||||
*/
|
||||
public function __construct() {
|
||||
public function __construct(bool $public = true) {
|
||||
$baseUri = \OC::$WEBROOT . '/remote.php/dav/';
|
||||
$logger = \OC::$server->getLogger();
|
||||
/** @var IEventDispatcher $dispatcher */
|
||||
|
@ -62,11 +63,13 @@ class InvitationResponseServer {
|
|||
|
||||
$this->server->addPlugin(new BlockLegacyClientPlugin(\OC::$server->getConfig()));
|
||||
$this->server->addPlugin(new AnonymousOptionsPlugin());
|
||||
$this->server->addPlugin(new class() extends Plugin {
|
||||
public function getCurrentPrincipal() {
|
||||
return 'principals/system/public';
|
||||
}
|
||||
});
|
||||
|
||||
// allow custom principal uri option
|
||||
if ($public) {
|
||||
$this->server->addPlugin(new PublicPrincipalPlugin());
|
||||
} else {
|
||||
$this->server->addPlugin(new CustomPrincipalPlugin());
|
||||
}
|
||||
|
||||
// allow setup of additional auth backends
|
||||
$event = new SabrePluginAuthInitEvent($this->server);
|
||||
|
|
|
@ -116,9 +116,11 @@ return array(
|
|||
'OCP\\BackgroundJob\\TimedJob' => $baseDir . '/lib/public/BackgroundJob/TimedJob.php',
|
||||
'OCP\\Broadcast\\Events\\IBroadcastEvent' => $baseDir . '/lib/public/Broadcast/Events/IBroadcastEvent.php',
|
||||
'OCP\\Calendar\\BackendTemporarilyUnavailableException' => $baseDir . '/lib/public/Calendar/BackendTemporarilyUnavailableException.php',
|
||||
'OCP\\Calendar\\Exceptions\\CalendarException' => $baseDir . '/lib/public/Calendar/Exceptions/CalendarException.php',
|
||||
'OCP\\Calendar\\ICalendar' => $baseDir . '/lib/public/Calendar/ICalendar.php',
|
||||
'OCP\\Calendar\\ICalendarProvider' => $baseDir . '/lib/public/Calendar/ICalendarProvider.php',
|
||||
'OCP\\Calendar\\ICalendarQuery' => $baseDir . '/lib/public/Calendar/ICalendarQuery.php',
|
||||
'OCP\\Calendar\\ICreateFromString' => $baseDir . '/lib/public/Calendar/ICreateFromString.php',
|
||||
'OCP\\Calendar\\IManager' => $baseDir . '/lib/public/Calendar/IManager.php',
|
||||
'OCP\\Calendar\\IMetadataProvider' => $baseDir . '/lib/public/Calendar/IMetadataProvider.php',
|
||||
'OCP\\Calendar\\Resource\\IBackend' => $baseDir . '/lib/public/Calendar/Resource/IBackend.php',
|
||||
|
|
|
@ -145,9 +145,11 @@ class ComposerStaticInit53792487c5a8370acc0b06b1a864ff4c
|
|||
'OCP\\BackgroundJob\\TimedJob' => __DIR__ . '/../../..' . '/lib/public/BackgroundJob/TimedJob.php',
|
||||
'OCP\\Broadcast\\Events\\IBroadcastEvent' => __DIR__ . '/../../..' . '/lib/public/Broadcast/Events/IBroadcastEvent.php',
|
||||
'OCP\\Calendar\\BackendTemporarilyUnavailableException' => __DIR__ . '/../../..' . '/lib/public/Calendar/BackendTemporarilyUnavailableException.php',
|
||||
'OCP\\Calendar\\Exceptions\\CalendarException' => __DIR__ . '/../../..' . '/lib/public/Calendar/Exceptions/CalendarException.php',
|
||||
'OCP\\Calendar\\ICalendar' => __DIR__ . '/../../..' . '/lib/public/Calendar/ICalendar.php',
|
||||
'OCP\\Calendar\\ICalendarProvider' => __DIR__ . '/../../..' . '/lib/public/Calendar/ICalendarProvider.php',
|
||||
'OCP\\Calendar\\ICalendarQuery' => __DIR__ . '/../../..' . '/lib/public/Calendar/ICalendarQuery.php',
|
||||
'OCP\\Calendar\\ICreateFromString' => __DIR__ . '/../../..' . '/lib/public/Calendar/ICreateFromString.php',
|
||||
'OCP\\Calendar\\IManager' => __DIR__ . '/../../..' . '/lib/public/Calendar/IManager.php',
|
||||
'OCP\\Calendar\\IMetadataProvider' => __DIR__ . '/../../..' . '/lib/public/Calendar/IMetadataProvider.php',
|
||||
'OCP\\Calendar\\Resource\\IBackend' => __DIR__ . '/../../..' . '/lib/public/Calendar/Resource/IBackend.php',
|
||||
|
|
|
@ -0,0 +1,33 @@
|
|||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
/**
|
||||
* @copyright 2021 Anna Larch <anna.larch@gmx.net>
|
||||
*
|
||||
* @author Anna Larch <anna.larch@gmx.net>
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 3 of the License, or any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU AFFERO GENERAL PUBLIC LICENSE for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public
|
||||
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
|
||||
namespace OCP\Calendar\Exceptions;
|
||||
|
||||
use Exception;
|
||||
|
||||
/**
|
||||
* @since 23.0.0
|
||||
*/
|
||||
class CalendarException extends Exception {
|
||||
}
|
|
@ -0,0 +1,41 @@
|
|||
<?php
|
||||
/**
|
||||
* @copyright 2021 Anna Larch <anna.larch@gmx.net>
|
||||
*
|
||||
* @author Anna Larch <anna.larch@gmx.net>
|
||||
*
|
||||
* @license GNU AGPL version 3 or any later version
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Affero General Public License as
|
||||
* published by the Free Software Foundation, either version 3 of the
|
||||
* License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Affero General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
namespace OCP\Calendar;
|
||||
|
||||
use OCP\Calendar\Exceptions\CalendarException;
|
||||
|
||||
/**
|
||||
* Extends the current ICalendar interface
|
||||
* to add a public write method
|
||||
*
|
||||
* @since 23.0.0
|
||||
*/
|
||||
interface ICreateFromString extends ICalendar {
|
||||
|
||||
/**
|
||||
* @since 23.0.0
|
||||
*
|
||||
* @throws CalendarException
|
||||
*/
|
||||
public function createFromString(string $name, string $calendarData): void;
|
||||
}
|
Loading…
Reference in New Issue