From 76ac1998cfbb8798ce69844fccc196673b5294af Mon Sep 17 00:00:00 2001 From: Charles Morgan Date: Sun, 16 May 2021 12:47:36 -0400 Subject: [PATCH] Don't allow backups to be made via schedules if limit = 0 (#3323) --- .../Client/Servers/ScheduleTaskController.php | 10 ++++++ .../components/dashboard/ApiKeyModal.tsx | 3 +- .../server/databases/DatabasesContainer.tsx | 2 +- .../schedules/ScheduleEditContainer.tsx | 2 +- .../server/schedules/TaskDetailsModal.tsx | 34 +++++++++++-------- .../CreateServerScheduleTaskTest.php | 12 ++++--- 6 files changed, 42 insertions(+), 21 deletions(-) diff --git a/app/Http/Controllers/Api/Client/Servers/ScheduleTaskController.php b/app/Http/Controllers/Api/Client/Servers/ScheduleTaskController.php index 12bcf968..4ceed655 100644 --- a/app/Http/Controllers/Api/Client/Servers/ScheduleTaskController.php +++ b/app/Http/Controllers/Api/Client/Servers/ScheduleTaskController.php @@ -39,6 +39,7 @@ class ScheduleTaskController extends ClientApiController * * @return array * + * @throws \Pterodactyl\Exceptions\Model\HttpForbiddenException * @throws \Pterodactyl\Exceptions\Model\DataValidationException * @throws \Pterodactyl\Exceptions\Service\ServiceLimitExceededException */ @@ -49,6 +50,10 @@ class ScheduleTaskController extends ClientApiController throw new ServiceLimitExceededException("Schedules may not have more than {$limit} tasks associated with them. Creating this task would put this schedule over the limit."); } + if ($server->backup_limit === 0 && $request->action === 'backup') { + throw new HttpForbiddenException("A backup task cannot be created when the server's backup limit is set to 0."); + } + /** @var \Pterodactyl\Models\Task|null $lastTask */ $lastTask = $schedule->tasks()->orderByDesc('sequence_id')->first(); @@ -72,6 +77,7 @@ class ScheduleTaskController extends ClientApiController * * @return array * + * @throws \Pterodactyl\Exceptions\Model\HttpForbiddenException * @throws \Pterodactyl\Exceptions\Model\DataValidationException * @throws \Pterodactyl\Exceptions\Repository\RecordNotFoundException */ @@ -81,6 +87,10 @@ class ScheduleTaskController extends ClientApiController throw new NotFoundHttpException(); } + if ($server->backup_limit === 0 && $request->action === 'backup') { + throw new HttpForbiddenException("A backup task cannot be created when the server's backup limit is set to 0."); + } + $this->repository->update($task->id, [ 'action' => $request->input('action'), 'payload' => $request->input('payload') ?? '', diff --git a/resources/scripts/components/dashboard/ApiKeyModal.tsx b/resources/scripts/components/dashboard/ApiKeyModal.tsx index ba6568b8..e2c129a5 100644 --- a/resources/scripts/components/dashboard/ApiKeyModal.tsx +++ b/resources/scripts/components/dashboard/ApiKeyModal.tsx @@ -3,6 +3,7 @@ import tw from 'twin.macro'; import Button from '@/components/elements/Button'; import asModal from '@/hoc/asModal'; import ModalContext from '@/context/ModalContext'; +import CopyOnClick from '@/components/elements/CopyOnClick'; interface Props { apiKey: string; @@ -19,7 +20,7 @@ const ApiKeyModal = ({ apiKey }: Props) => { shown again.

-                {apiKey}
+                {apiKey}