summaryrefslogtreecommitdiffstats
path: root/apps/dav
diff options
context:
space:
mode:
authorSebastianKrupinski <krupinskis05@gmail.com>2024-04-17 10:40:31 -0400
committerSebastianKrupinski <krupinskis05@gmail.com>2024-06-26 17:45:22 -0400
commit77291ce2aec53b77fe067aed6c44242b9b18b8de (patch)
tree9179e6e73070c2086239d964a1646ca051621932 /apps/dav
parentf65d956a7219b30dd16a11682b2d31c430dd8040 (diff)
downloadnextcloud-server-77291ce2aec53b77fe067aed6c44242b9b18b8de.tar.gz
nextcloud-server-77291ce2aec53b77fe067aed6c44242b9b18b8de.zip
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>
Diffstat (limited to 'apps/dav')
-rw-r--r--apps/dav/lib/CalDAV/Schedule/IMipService.php7
-rw-r--r--apps/dav/tests/unit/CalDAV/Schedule/IMipServiceTest.php71
2 files changed, 76 insertions, 2 deletions
diff --git a/apps/dav/lib/CalDAV/Schedule/IMipService.php b/apps/dav/lib/CalDAV/Schedule/IMipService.php
index 95c6b5739af..1a99a859279 100644
--- a/apps/dav/lib/CalDAV/Schedule/IMipService.php
+++ b/apps/dav/lib/CalDAV/Schedule/IMipService.php
@@ -569,8 +569,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;
}
}
diff --git a/apps/dav/tests/unit/CalDAV/Schedule/IMipServiceTest.php b/apps/dav/tests/unit/CalDAV/Schedule/IMipServiceTest.php
index 14273109826..fd48d04dc8e 100644
--- a/apps/dav/tests/unit/CalDAV/Schedule/IMipServiceTest.php
+++ b/apps/dav/tests/unit/CalDAV/Schedule/IMipServiceTest.php
@@ -41,6 +41,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;
@@ -271,4 +272,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);
+ }
}