Skip to content

Commit ff05834

Browse files
committed
Add: owner check to subscription endpoints
1 parent 646326b commit ff05834

2 files changed

Lines changed: 25 additions & 6 deletions

File tree

src/Subscription/Controller/SubscriberListController.php

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -176,7 +176,7 @@ public function getList(
176176
throw $this->createNotFoundException('Subscriber list not found.');
177177
}
178178

179-
$this->denyAccessUnlessOwnerOrPublic($list, $authUser);
179+
$this->denyAccessUnlessOwner($list, $authUser);
180180

181181
return $this->json($this->normalizer->normalize($list), Response::HTTP_OK);
182182
}
@@ -236,7 +236,7 @@ public function deleteList(
236236
throw $this->createNotFoundException('Subscriber list not found.');
237237
}
238238

239-
$this->denyAccessUnlessOwnerOrPublic($list, $authUser);
239+
$this->denyAccessUnlessOwner($list, $authUser);
240240

241241
$this->subscriberListManager->delete($list);
242242
$this->entityManager->flush();
@@ -356,7 +356,7 @@ public function updateList(
356356
throw $this->createNotFoundException('Subscriber list not found.');
357357
}
358358

359-
$this->denyAccessUnlessOwnerOrPublic($list, $authUser);
359+
$this->denyAccessUnlessOwner($list, $authUser);
360360

361361
/** @var CreateSubscriberListRequest $subscriberListRequest */
362362
$subscriberListRequest = $this->validator->validate($request, CreateSubscriberListRequest::class);
@@ -370,7 +370,7 @@ public function updateList(
370370
return $this->json($this->normalizer->normalize($data), Response::HTTP_OK);
371371
}
372372

373-
private function denyAccessUnlessOwnerOrPublic(SubscriberList $list, Administrator $user): void
373+
private function denyAccessUnlessOwner(SubscriberList $list, Administrator $user): void
374374
{
375375
if ($list->getOwner() === null) {
376376
return;

src/Subscription/Controller/SubscriptionController.php

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66

77
use Doctrine\ORM\EntityManagerInterface;
88
use OpenApi\Attributes as OA;
9+
use PhpList\Core\Domain\Identity\Model\Administrator;
910
use PhpList\Core\Domain\Subscription\Model\SubscriberList;
1011
use PhpList\Core\Domain\Subscription\Service\Manager\SubscriptionManager;
1112
use PhpList\Core\Security\Authentication;
@@ -122,12 +123,14 @@ public function createSubscription(
122123
Request $request,
123124
#[MapEntity(mapping: ['listId' => 'id'])] ?SubscriberList $list = null,
124125
): JsonResponse {
125-
$this->requireAuthentication($request);
126+
$authUser = $this->requireAuthentication($request);
126127

127128
if (!$list) {
128129
throw $this->createNotFoundException('Subscriber list not found.');
129130
}
130131

132+
$this->denyAccessUnlessOwner($list, $authUser);
133+
131134
/** @var SubscriptionRequest $subscriptionRequest */
132135
$subscriptionRequest = $this->validator->validate($request, SubscriptionRequest::class);
133136
$subscriptions = $this->subscriptionManager->createSubscriptions($list, $subscriptionRequest->emails);
@@ -188,10 +191,13 @@ public function deleteSubscriptions(
188191
Request $request,
189192
#[MapEntity(mapping: ['listId' => 'id'])] ?SubscriberList $list = null,
190193
): JsonResponse {
191-
$this->requireAuthentication($request);
194+
$authUser = $this->requireAuthentication($request);
192195
if (!$list) {
193196
throw $this->createNotFoundException('Subscriber list not found.');
194197
}
198+
199+
$this->denyAccessUnlessOwner($list, $authUser);
200+
195201
$subscriptionRequest = new SubscriptionRequest();
196202
$subscriptionRequest->emails = $request->query->all('emails');
197203

@@ -202,4 +208,17 @@ public function deleteSubscriptions(
202208

203209
return $this->json(null, Response::HTTP_NO_CONTENT);
204210
}
211+
212+
private function denyAccessUnlessOwner(SubscriberList $list, Administrator $user): void
213+
{
214+
if ($list->getOwner() === null) {
215+
return;
216+
}
217+
218+
if ($list->getOwner()->getId() === $user->getId()) {
219+
return;
220+
}
221+
222+
throw $this->createAccessDeniedException('Access denied.');
223+
}
205224
}

0 commit comments

Comments
 (0)