diff options
-rw-r--r-- | lib/Controller/ChatController.php | 17 | ||||
-rw-r--r-- | lib/Controller/RoomController.php | 6 | ||||
-rw-r--r-- | lib/Dashboard/TalkWidget.php | 12 | ||||
-rw-r--r-- | lib/Notification/Notifier.php | 10 | ||||
-rw-r--r-- | lib/Search/MessageSearch.php | 11 | ||||
-rw-r--r-- | tests/integration/spreedcheats/lib/Controller/ApiController.php | 2 | ||||
-rw-r--r-- | tests/php/Notification/NotifierTest.php | 5 |
7 files changed, 56 insertions, 7 deletions
diff --git a/lib/Controller/ChatController.php b/lib/Controller/ChatController.php index 5701fbeb7..99cd22b4a 100644 --- a/lib/Controller/ChatController.php +++ b/lib/Controller/ChatController.php @@ -466,7 +466,7 @@ class ChatController extends AEnvironmentAwareController { $this->preloadShares($comments); $i = 0; - $now = $this->timeFactory->getDateTime('now', new \DateTimeZone('UTC')); + $now = $this->timeFactory->getDateTime(); $messages = $commentIdToIndex = $parentIds = []; foreach ($comments as $comment) { $id = (int) $comment->getId(); @@ -475,7 +475,8 @@ class ChatController extends AEnvironmentAwareController { $expireDate = $message->getComment()->getExpireDate(); if ($expireDate instanceof \DateTime && $expireDate < $now) { - $message->setVisibility(false); + $commentIdToIndex[$id] = null; + continue; } if (!$message->getVisibility()) { @@ -528,6 +529,12 @@ class ChatController extends AEnvironmentAwareController { continue; } + $expireDate = $message->getComment()->getExpireDate(); + if ($expireDate instanceof \DateTime && $expireDate < $now) { + $commentIdToIndex[$id] = null; + continue; + } + $loadedParents[$parentId] = [ 'id' => (int) $parentId, 'deleted' => true, @@ -852,6 +859,12 @@ class ChatController extends AEnvironmentAwareController { $this->messageParser->parseMessage($message); + $now = $this->timeFactory->getDateTime(); + $expireDate = $message->getComment()->getExpireDate(); + if ($expireDate instanceof \DateTime && $expireDate < $now) { + continue; + } + if (!$message->getVisibility()) { continue; } diff --git a/lib/Controller/RoomController.php b/lib/Controller/RoomController.php index 1799b55fb..c3f1343e2 100644 --- a/lib/Controller/RoomController.php +++ b/lib/Controller/RoomController.php @@ -655,6 +655,12 @@ class RoomController extends AEnvironmentAwareController { return []; } + $now = $this->timeFactory->getDateTime(); + $expireDate = $message->getComment()->getExpireDate(); + if ($expireDate instanceof \DateTime && $expireDate < $now) { + return []; + } + return $message->toArray($this->getResponseFormat()); } diff --git a/lib/Dashboard/TalkWidget.php b/lib/Dashboard/TalkWidget.php index c053c0291..6137585a3 100644 --- a/lib/Dashboard/TalkWidget.php +++ b/lib/Dashboard/TalkWidget.php @@ -32,6 +32,7 @@ use OCA\Talk\Participant; use OCA\Talk\Room; use OCA\Talk\Service\AvatarService; use OCA\Talk\Service\ParticipantService; +use OCP\AppFramework\Utility\ITimeFactory; use OCP\Comments\IComment; use OCP\Dashboard\IAPIWidget; use OCP\Dashboard\IButtonWidget; @@ -56,6 +57,7 @@ class TalkWidget implements IAPIWidget, IIconWidget, IButtonWidget, IOptionWidge protected AvatarService $avatarService; protected ParticipantService $participantService; protected MessageParser $messageParser; + protected ITimeFactory $timeFactory; public function __construct( IUserSession $userSession, @@ -65,7 +67,8 @@ class TalkWidget implements IAPIWidget, IIconWidget, IButtonWidget, IOptionWidge Manager $manager, AvatarService $avatarService, ParticipantService $participantService, - MessageParser $messageParser + MessageParser $messageParser, + ITimeFactory $timeFactory ) { $this->userSession = $userSession; $this->talkConfig = $talkConfig; @@ -75,6 +78,7 @@ class TalkWidget implements IAPIWidget, IIconWidget, IButtonWidget, IOptionWidge $this->avatarService = $avatarService; $this->participantService = $participantService; $this->messageParser = $messageParser; + $this->timeFactory = $timeFactory; } /** @@ -183,7 +187,11 @@ class TalkWidget implements IAPIWidget, IIconWidget, IButtonWidget, IOptionWidge if ($lastMessage instanceof IComment) { $message = $this->messageParser->createMessage($room, $participant, $room->getLastMessage(), $this->l10n); $this->messageParser->parseMessage($message); - if ($message->getVisibility()) { + + $now = $this->timeFactory->getDateTime(); + $expireDate = $message->getComment()->getExpireDate(); + if ((!$expireDate instanceof \DateTime || $expireDate >= $now) + && $message->getVisibility()) { $placeholders = $replacements = []; foreach ($message->getMessageParameters() as $placeholder => $parameter) { diff --git a/lib/Notification/Notifier.php b/lib/Notification/Notifier.php index e22a8cfc3..46c6b7b77 100644 --- a/lib/Notification/Notifier.php +++ b/lib/Notification/Notifier.php @@ -38,6 +38,7 @@ use OCA\Talk\Participant; use OCA\Talk\Room; use OCA\Talk\Service\ParticipantService; use OCA\Talk\Webinary; +use OCP\AppFramework\Utility\ITimeFactory; use OCP\Comments\ICommentsManager; use OCP\Comments\NotFoundException; use OCP\HintException; @@ -68,6 +69,7 @@ class Notifier implements INotifier { protected INotificationManager $notificationManager; protected ICommentsManager $commentManager; protected MessageParser $messageParser; + protected ITimeFactory $timeFactory; protected Definitions $definitions; protected AddressHandler $addressHandler; @@ -87,6 +89,7 @@ class Notifier implements INotifier { INotificationManager $notificationManager, CommentsManager $commentManager, MessageParser $messageParser, + ITimeFactory $timeFactory, Definitions $definitions, AddressHandler $addressHandler) { $this->lFactory = $lFactory; @@ -100,6 +103,7 @@ class Notifier implements INotifier { $this->notificationManager = $notificationManager; $this->commentManager = $commentManager; $this->messageParser = $messageParser; + $this->timeFactory = $timeFactory; $this->definitions = $definitions; $this->addressHandler = $addressHandler; } @@ -385,6 +389,12 @@ class Notifier implements INotifier { throw new AlreadyProcessedException(); } + $now = $this->timeFactory->getDateTime(); + $expireDate = $message->getComment()->getExpireDate(); + if ($expireDate instanceof \DateTime && $expireDate < $now) { + throw new AlreadyProcessedException(); + } + if ($message->getMessageType() === ChatManager::VERB_MESSAGE_DELETED) { throw new AlreadyProcessedException(); } diff --git a/lib/Search/MessageSearch.php b/lib/Search/MessageSearch.php index e10bfc49d..3e1fe3c87 100644 --- a/lib/Search/MessageSearch.php +++ b/lib/Search/MessageSearch.php @@ -33,6 +33,7 @@ use OCA\Talk\Model\Attendee; use OCA\Talk\Room; use OCA\Talk\Service\ParticipantService; use OCA\Talk\Webinary; +use OCP\AppFramework\Utility\ITimeFactory; use OCP\Comments\IComment; use OCP\IL10N; use OCP\IURLGenerator; @@ -47,6 +48,7 @@ class MessageSearch implements IProvider { protected ParticipantService $participantService; protected ChatManager $chatManager; protected MessageParser $messageParser; + protected ITimeFactory $timeFactory; protected IURLGenerator $url; protected IL10N $l; @@ -55,6 +57,7 @@ class MessageSearch implements IProvider { ParticipantService $participantService, ChatManager $chatManager, MessageParser $messageParser, + ITimeFactory $timeFactory, IURLGenerator $url, IL10N $l ) { @@ -62,6 +65,7 @@ class MessageSearch implements IProvider { $this->participantService = $participantService; $this->chatManager = $chatManager; $this->messageParser = $messageParser; + $this->timeFactory = $timeFactory; $this->url = $url; $this->l = $l; } @@ -194,8 +198,13 @@ class MessageSearch implements IProvider { $messageStr = '…' . mb_substr($messageStr, $matchPosition - 10); } + $now = $this->timeFactory->getDateTime(); + $expireDate = $message->getComment()->getExpireDate(); + if ($expireDate instanceof \DateTime && $expireDate < $now) { + throw new UnauthorizedException('Expired'); + } + if (!$message->getVisibility()) { - $commentIdToIndex[$id] = null; throw new UnauthorizedException('Not visible'); } diff --git a/tests/integration/spreedcheats/lib/Controller/ApiController.php b/tests/integration/spreedcheats/lib/Controller/ApiController.php index a53234bee..4faf6f789 100644 --- a/tests/integration/spreedcheats/lib/Controller/ApiController.php +++ b/tests/integration/spreedcheats/lib/Controller/ApiController.php @@ -25,8 +25,6 @@ declare(strict_types=1); namespace OCA\SpreedCheats\Controller; -use OCA\Talk\BackgroundJob\ExpireChatMessages; -use OCP\AppFramework\Http; use OCP\AppFramework\OCSController; use OCP\AppFramework\Http\DataResponse; use OCP\IDBConnection; diff --git a/tests/php/Notification/NotifierTest.php b/tests/php/Notification/NotifierTest.php index 96026c575..6ec9a77c6 100644 --- a/tests/php/Notification/NotifierTest.php +++ b/tests/php/Notification/NotifierTest.php @@ -35,6 +35,7 @@ use OCA\Talk\Notification\Notifier; use OCA\Talk\Participant; use OCA\Talk\Room; use OCA\Talk\Service\ParticipantService; +use OCP\AppFramework\Utility\ITimeFactory; use OCP\Comments\IComment; use OCP\IL10N; use OCP\IURLGenerator; @@ -72,6 +73,8 @@ class NotifierTest extends TestCase { protected $commentsManager; /** @var MessageParser|MockObject */ protected $messageParser; + /** @var ITimeFactory|MockObject */ + protected $timeFactory; /** @var Definitions|MockObject */ protected $definitions; protected ?Notifier $notifier = null; @@ -92,6 +95,7 @@ class NotifierTest extends TestCase { $this->notificationManager = $this->createMock(INotificationManager::class); $this->commentsManager = $this->createMock(CommentsManager::class); $this->messageParser = $this->createMock(MessageParser::class); + $this->timeFactory = $this->createMock(ITimeFactory::class); $this->definitions = $this->createMock(Definitions::class); $this->addressHandler = $this->createMock(AddressHandler::class); @@ -107,6 +111,7 @@ class NotifierTest extends TestCase { $this->notificationManager, $this->commentsManager, $this->messageParser, + $this->timeFactory, $this->definitions, $this->addressHandler ); |