summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lib/Controller/ChatController.php17
-rw-r--r--lib/Controller/RoomController.php6
-rw-r--r--lib/Dashboard/TalkWidget.php12
-rw-r--r--lib/Notification/Notifier.php10
-rw-r--r--lib/Search/MessageSearch.php11
-rw-r--r--tests/integration/spreedcheats/lib/Controller/ApiController.php2
-rw-r--r--tests/php/Notification/NotifierTest.php5
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
);