mirror of
https://github.com/nextcloud/server.git
synced 2026-05-28 04:32:30 -04:00
fix: disable both iTip and iMip messages
Signed-off-by: SebastianKrupinski <krupinskis05@gmail.com>
This commit is contained in:
parent
28ec9c7e80
commit
04cb122af2
4 changed files with 46 additions and 28 deletions
|
|
@ -97,14 +97,6 @@ class IMipPlugin extends SabreIMipPlugin {
|
|||
*/
|
||||
public function schedule(Message $iTipMessage) {
|
||||
|
||||
// do not send imip messages if external system already did
|
||||
/** @psalm-suppress UndefinedPropertyFetch */
|
||||
if ($iTipMessage->message?->VEVENT?->{'X-NC-DISABLE-SCHEDULING'}?->getValue() === 'true') {
|
||||
if (!$iTipMessage->scheduleStatus) {
|
||||
$iTipMessage->scheduleStatus = '1.0;We got the message, but iMip messages are disabled for this event';
|
||||
}
|
||||
return;
|
||||
}
|
||||
// Not sending any emails if the system considers the update insignificant
|
||||
if (!$iTipMessage->significantChange) {
|
||||
if (!$iTipMessage->scheduleStatus) {
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* SPDX-FileCopyrightText: 2016 Nextcloud GmbH and Nextcloud contributors
|
||||
* SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
|
|
@ -162,10 +163,15 @@ class Plugin extends \Sabre\CalDAV\Schedule\Plugin {
|
|||
|
||||
try {
|
||||
|
||||
// Do not generate iTip and iMip messages if scheduling is disabled for this message
|
||||
if ($request->getHeader('x-nc-scheduling') === 'false') {
|
||||
return;
|
||||
}
|
||||
|
||||
if (!$this->scheduleReply($this->server->httpRequest)) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
/** @var Calendar $calendarNode */
|
||||
$calendarNode = $this->server->tree->getNodeForPath($calendarPath);
|
||||
// extract addresses for owner
|
||||
|
|
|
|||
|
|
@ -997,23 +997,4 @@ class IMipPluginTest extends TestCase {
|
|||
$this->plugin->schedule($message);
|
||||
$this->assertEquals('1.1', $message->getScheduleStatus());
|
||||
}
|
||||
|
||||
public function testImipDisabledForEvent(): void {
|
||||
// construct iTip message with event and attendees
|
||||
$calendar = new VCalendar();
|
||||
$calendar->add('VEVENT', ['UID' => 'uid-1234']);
|
||||
$event = $calendar->VEVENT;
|
||||
$event->add('ORGANIZER', 'mailto:gandalf@wiz.ard');
|
||||
$event->add('ATTENDEE', 'mailto:' . 'frodo@hobb.it', ['RSVP' => 'TRUE', 'CN' => 'Frodo']);
|
||||
$event->add('X-NC-DISABLE-SCHEDULING', 'true');
|
||||
$message = new Message();
|
||||
$message->method = 'REQUEST';
|
||||
$message->message = $calendar;
|
||||
$message->sender = 'mailto:gandalf@wiz.ard';
|
||||
$message->senderName = 'Mr. Wizard';
|
||||
$message->recipient = 'mailto:' . 'frodo@hobb.it';
|
||||
|
||||
$this->plugin->schedule($message);
|
||||
$this->assertEquals('1.0;We got the message, but iMip messages are disabled for this event', $message->scheduleStatus);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* SPDX-FileCopyrightText: 2016 Nextcloud GmbH and Nextcloud contributors
|
||||
* SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
|
|
@ -738,4 +739,42 @@ class PluginTest extends TestCase {
|
|||
|
||||
}
|
||||
|
||||
/**
|
||||
* Test Calendar Event Creation with iTip and iMip disabled
|
||||
*
|
||||
* Should generate 2 messages for attendees User 2 and User External
|
||||
*/
|
||||
public function testCalendarObjectChangeWithSchedulingDisabled(): void {
|
||||
// construct server request
|
||||
$request = new Request(
|
||||
'PUT',
|
||||
'/remote.php/dav/calendars/user1/personal/B0DC78AE-6DD7-47E3-80BE-89F23E6D5383.ics',
|
||||
['x-nc-scheduling' => 'false']
|
||||
);
|
||||
$request->setBaseUrl('/remote.php/dav/');
|
||||
// construct server response
|
||||
$response = new Response();
|
||||
// construct server tree
|
||||
$tree = $this->createMock(Tree::class);
|
||||
$tree->expects($this->never())
|
||||
->method('getNodeForPath');
|
||||
// construct server properties and returns
|
||||
$this->server->httpRequest = $request;
|
||||
$this->server->tree = $tree;
|
||||
// construct empty calendar event
|
||||
$vCalendar = new VCalendar();
|
||||
$vEvent = $vCalendar->add('VEVENT', []);
|
||||
// define flags
|
||||
$newFlag = true;
|
||||
$modifiedFlag = false;
|
||||
// execute method
|
||||
$this->plugin->calendarObjectChange(
|
||||
$request,
|
||||
$response,
|
||||
$vCalendar,
|
||||
'calendars/user1/personal',
|
||||
$modifiedFlag,
|
||||
$newFlag
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue