Skip to content

Commit 4b919ca

Browse files
committed
Correctly validation API calls to mark a backup as completed
Also block modifying a backup that is already marked as completed via the endpoint
1 parent e863683 commit 4b919ca

File tree

2 files changed

+16
-3
lines changed

2 files changed

+16
-3
lines changed

app/Http/Controllers/Api/Remote/Backups/BackupStatusController.php

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@
77
use Illuminate\Http\JsonResponse;
88
use Pterodactyl\Http\Controllers\Controller;
99
use Pterodactyl\Repositories\Eloquent\BackupRepository;
10+
use Pterodactyl\Exceptions\Http\HttpForbiddenException;
11+
use Symfony\Component\HttpKernel\Exception\BadRequestHttpException;
1012
use Pterodactyl\Http\Requests\Api\Remote\ReportBackupCompleteRequest;
1113

1214
class BackupStatusController extends Controller
@@ -32,10 +34,21 @@ public function __construct(BackupRepository $repository)
3234
* @param \Pterodactyl\Http\Requests\Api\Remote\ReportBackupCompleteRequest $request
3335
* @param string $backup
3436
* @return \Illuminate\Http\JsonResponse
37+
*
38+
* @throws \Pterodactyl\Exceptions\Repository\RecordNotFoundException
3539
*/
3640
public function __invoke(ReportBackupCompleteRequest $request, string $backup)
3741
{
38-
$this->repository->updateWhere([['uuid', '=', $backup]], [
42+
/** @var \Pterodactyl\Models\Backup $model */
43+
$model = $this->repository->findFirstWhere([[ 'uuid', '=', $backup ]]);
44+
45+
if (!is_null($model->completed_at)) {
46+
throw new BadRequestHttpException(
47+
'Cannot update the status of a backup that is already marked as completed.'
48+
);
49+
}
50+
51+
$model->update([
3952
'is_successful' => $request->input('successful') ? true : false,
4053
'checksum' => $request->input('checksum_type') . ':' . $request->input('checksum'),
4154
'bytes' => $request->input('size'),

app/Http/Requests/Api/Remote/ReportBackupCompleteRequest.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,9 @@ class ReportBackupCompleteRequest extends FormRequest
1212
public function rules()
1313
{
1414
return [
15-
'successful' => 'boolean',
15+
'successful' => 'present|boolean',
1616
'checksum' => 'nullable|string|required_if:successful,true',
17-
'checksum_type' => 'string|required_if:successful,true',
17+
'checksum_type' => 'nullable|string|required_if:successful,true',
1818
'size' => 'nullable|numeric|required_if:successful,true',
1919
];
2020
}

0 commit comments

Comments
 (0)