mirror of
https://github.com/nextcloud/server.git
synced 2026-06-03 13:58:55 -04:00
fix(caldav): when message is a reply compare the message sender not the recipient
Signed-off-by: SebastianKrupinski <krupinskis05@gmail.com> Signed-off-by: Daniel Kesselberg <mail@danielkesselberg.de>
This commit is contained in:
parent
f0182226d4
commit
d7eb509b26
3 changed files with 77 additions and 3 deletions
|
|
@ -552,8 +552,11 @@ class IMipService {
|
|||
$vevent = $iTipMessage->message->VEVENT;
|
||||
$attendees = $vevent->select('ATTENDEE');
|
||||
foreach ($attendees as $attendee) {
|
||||
/** @var Property $attendee */
|
||||
if (strcasecmp($attendee->getValue(), $iTipMessage->recipient) === 0) {
|
||||
if ($iTipMessage->method === 'REPLY' && strcasecmp($attendee->getValue(), $iTipMessage->sender) === 0) {
|
||||
/** @var Property $attendee */
|
||||
return $attendee;
|
||||
} elseif (strcasecmp($attendee->getValue(), $iTipMessage->recipient) === 0) {
|
||||
/** @var Property $attendee */
|
||||
return $attendee;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -88,7 +88,7 @@ class IMipPluginTest extends TestCase {
|
|||
$this->timeFactory->method('getTime')->willReturn(1496912528); // 2017-01-01
|
||||
|
||||
$this->config = $this->createMock(IConfig::class);
|
||||
|
||||
|
||||
$this->user = $this->createMock(IUser::class);
|
||||
/*
|
||||
$this->user->method('getUID');
|
||||
|
|
|
|||
|
|
@ -18,6 +18,7 @@ use OCP\Security\ISecureRandom;
|
|||
use PHPUnit\Framework\MockObject\MockObject;
|
||||
use Sabre\VObject\Component\VCalendar;
|
||||
use Sabre\VObject\Component\VEvent;
|
||||
use Sabre\VObject\ITip\Message;
|
||||
use Sabre\VObject\Property\ICalendar\DateTime;
|
||||
use Test\TestCase;
|
||||
|
||||
|
|
@ -248,4 +249,74 @@ class IMipServiceTest extends TestCase {
|
|||
$occurrence = $this->service->getLastOccurrence($vCalendar);
|
||||
$this->assertEquals(1451606400, $occurrence);
|
||||
}
|
||||
|
||||
public function testGetCurrentAttendeeRequest(): void {
|
||||
// Construct ITip Message
|
||||
$message = new Message();
|
||||
$message->method = 'REQUEST';
|
||||
$message->sequence = 1;
|
||||
$message->sender = 'mailto:organizer@example.com';
|
||||
$message->senderName = 'The Organizer';
|
||||
$message->recipient = 'mailto:attendee@example.com';
|
||||
$message->recipientName = 'The Attendee';
|
||||
$message->significantChange = true;
|
||||
$message->message = new VCalendar();
|
||||
$message->message->add('VEVENT', ['UID' => '82496785-1915-4604-a5ce-4e2091639c9a', 'SEQUENCE' => 1]);
|
||||
$message->message->VEVENT->add('SUMMARY', 'Fellowship meeting');
|
||||
$message->message->VEVENT->add('DTSTART', (new \DateTime('NOW'))->modify('+1 hour'));
|
||||
$message->message->VEVENT->add('DTEND', (new \DateTime('NOW'))->modify('+2 hour'));
|
||||
$message->message->VEVENT->add('ORGANIZER', 'mailto:organizer@example.com', ['CN' => 'The Organizer']);
|
||||
$message->message->VEVENT->add('ATTENDEE', 'mailto:attendee@example.com', ['CN' => 'The Attendee']);
|
||||
// Test getCurrentAttendee
|
||||
$result = $this->service->getCurrentAttendee($message);
|
||||
// Evaluate Result
|
||||
$this->assertEquals($message->message->VEVENT->ATTENDEE, $result);
|
||||
}
|
||||
|
||||
public function testGetCurrentAttendeeReply(): void {
|
||||
// Construct ITip Message
|
||||
$message = new Message();
|
||||
$message->method = 'REPLY';
|
||||
$message->sequence = 2;
|
||||
$message->sender = 'mailto:attendee@example.com';
|
||||
$message->senderName = 'The Attendee';
|
||||
$message->recipient = 'mailto:organizer@example.com';
|
||||
$message->recipientName = 'The Organizer';
|
||||
$message->significantChange = true;
|
||||
$message->message = new VCalendar();
|
||||
$message->message->add('METHOD', 'REPLY');
|
||||
$message->message->add('VEVENT', ['UID' => '82496785-1915-4604-a5ce-4e2091639c9a', 'SEQUENCE' => 2]);
|
||||
$message->message->VEVENT->add('SUMMARY', 'Fellowship meeting');
|
||||
$message->message->VEVENT->add('DTSTART', (new \DateTime('NOW'))->modify('+1 hour'));
|
||||
$message->message->VEVENT->add('DTEND', (new \DateTime('NOW'))->modify('+2 hour'));
|
||||
$message->message->VEVENT->add('ORGANIZER', 'mailto:organizer@example.com', ['CN' => 'The Organizer']);
|
||||
$message->message->VEVENT->add('ATTENDEE', 'mailto:attendee@example.com', ['CN' => 'The Attendee']);
|
||||
// Test getCurrentAttendee
|
||||
$result = $this->service->getCurrentAttendee($message);
|
||||
// Evaluate Result
|
||||
$this->assertEquals($message->message->VEVENT->ATTENDEE, $result);
|
||||
}
|
||||
|
||||
public function testGetCurrentAttendeeMismatch(): void {
|
||||
// Construct ITip Message
|
||||
$message = new Message();
|
||||
$message->method = 'REQUEST';
|
||||
$message->sequence = 1;
|
||||
$message->sender = 'mailto:organizer@example.com';
|
||||
$message->senderName = 'The Organizer';
|
||||
$message->recipient = 'mailto:mismatch@example.com';
|
||||
$message->recipientName = 'The Mismatch';
|
||||
$message->significantChange = true;
|
||||
$message->message = new VCalendar();
|
||||
$message->message->add('VEVENT', ['UID' => '82496785-1915-4604-a5ce-4e2091639c9a', 'SEQUENCE' => 1]);
|
||||
$message->message->VEVENT->add('SUMMARY', 'Fellowship meeting');
|
||||
$message->message->VEVENT->add('DTSTART', (new \DateTime('NOW'))->modify('+1 hour'));
|
||||
$message->message->VEVENT->add('DTEND', (new \DateTime('NOW'))->modify('+2 hour'));
|
||||
$message->message->VEVENT->add('ORGANIZER', 'mailto:organizer@example.com', ['CN' => 'The Organizer']);
|
||||
$message->message->VEVENT->add('ATTENDEE', 'mailto:attendee@example.com', ['CN' => 'The Attendee']);
|
||||
// Test getCurrentAttendee
|
||||
$result = $this->service->getCurrentAttendee($message);
|
||||
// Evaluate Result
|
||||
$this->assertEquals(null, $result);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue