aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndy Scherzinger <info@andy-scherzinger.de>2025-02-20 17:42:29 +0100
committerGitHub <noreply@github.com>2025-02-20 17:42:29 +0100
commit047378e7b0aafc6268d3df44bb46c02df49b6458 (patch)
treeaa8c8ed2cc875ac92cb41f14554ed7e958e7e71a
parent74c2579078ef0414a5b0db465edbb21e585eae67 (diff)
parentfd591b0b9b9209d88b19ca5d0a9302b4b1e6028e (diff)
downloadnextcloud-server-047378e7b0aafc6268d3df44bb46c02df49b6458.tar.gz
nextcloud-server-047378e7b0aafc6268d3df44bb46c02df49b6458.zip
Merge pull request #50711 from nextcloud/fix/reminder-node-access
fix(files_reminders): Only allow updating reminders if the file is accessible
-rw-r--r--apps/files_reminders/lib/Controller/ApiController.php4
-rw-r--r--apps/files_reminders/lib/Service/ReminderService.php20
2 files changed, 18 insertions, 6 deletions
diff --git a/apps/files_reminders/lib/Controller/ApiController.php b/apps/files_reminders/lib/Controller/ApiController.php
index dbc340610b2..ee29b7ce494 100644
--- a/apps/files_reminders/lib/Controller/ApiController.php
+++ b/apps/files_reminders/lib/Controller/ApiController.php
@@ -57,7 +57,7 @@ class ApiController extends OCSController {
'dueDate' => $reminder->getDueDate()->format(DateTimeInterface::ATOM), // ISO 8601
];
return new DataResponse($reminderData, Http::STATUS_OK);
- } catch (DoesNotExistException $e) {
+ } catch (NodeNotFoundException|DoesNotExistException $e) {
$reminderData = [
'dueDate' => null,
];
@@ -125,7 +125,7 @@ class ApiController extends OCSController {
try {
$this->reminderService->remove($user, $fileId);
return new DataResponse([], Http::STATUS_OK);
- } catch (DoesNotExistException $e) {
+ } catch (NodeNotFoundException|DoesNotExistException $e) {
return new DataResponse([], Http::STATUS_NOT_FOUND);
}
}
diff --git a/apps/files_reminders/lib/Service/ReminderService.php b/apps/files_reminders/lib/Service/ReminderService.php
index 8bd6887e754..32dbab6d2dc 100644
--- a/apps/files_reminders/lib/Service/ReminderService.php
+++ b/apps/files_reminders/lib/Service/ReminderService.php
@@ -47,9 +47,11 @@ class ReminderService {
}
/**
+ * @throws NodeNotFoundException
* @throws DoesNotExistException
*/
public function getDueForUser(IUser $user, int $fileId): RichReminder {
+ $this->checkNode($user, $fileId);
$reminder = $this->reminderMapper->findDueForUser($user, $fileId);
return new RichReminder($reminder, $this->root);
}
@@ -74,6 +76,7 @@ class ReminderService {
*/
public function createOrUpdate(IUser $user, int $fileId, DateTime $dueDate): bool {
$now = new DateTime('now', new DateTimeZone('UTC'));
+ $this->checkNode($user, $fileId);
try {
$reminder = $this->reminderMapper->findDueForUser($user, $fileId);
$reminder->setDueDate($dueDate);
@@ -81,10 +84,6 @@ class ReminderService {
$this->reminderMapper->update($reminder);
return false;
} catch (DoesNotExistException $e) {
- $node = $this->root->getUserFolder($user->getUID())->getFirstNodeById($fileId);
- if (!$node) {
- throw new NodeNotFoundException();
- }
// Create new reminder if no reminder is found
$reminder = new Reminder();
$reminder->setUserId($user->getUID());
@@ -98,9 +97,11 @@ class ReminderService {
}
/**
+ * @throws NodeNotFoundException
* @throws DoesNotExistException
*/
public function remove(IUser $user, int $fileId): void {
+ $this->checkNode($user, $fileId);
$reminder = $this->reminderMapper->findDueForUser($user, $fileId);
$this->reminderMapper->delete($reminder);
}
@@ -161,4 +162,15 @@ class ReminderService {
$this->reminderMapper->delete($reminder);
}
}
+
+ /**
+ * @throws NodeNotFoundException
+ */
+ private function checkNode(IUser $user, int $fileId): void {
+ $userFolder = $this->root->getUserFolder($user->getUID());
+ $node = $userFolder->getFirstNodeById($fileId);
+ if ($node === null) {
+ throw new NodeNotFoundException();
+ }
+ }
}