Skip to content

Commit 15b436d

Browse files
committed
Add endpoints required to store the results of a backup
1 parent ad9194a commit 15b436d

File tree

4 files changed

+104
-0
lines changed

4 files changed

+104
-0
lines changed
Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
<?php
2+
3+
namespace Pterodactyl\Http\Controllers\Api\Remote\Servers;
4+
5+
use Carbon\Carbon;
6+
use Illuminate\Http\Request;
7+
use Pterodactyl\Models\Server;
8+
use Illuminate\Http\JsonResponse;
9+
use Pterodactyl\Http\Controllers\Controller;
10+
use Pterodactyl\Repositories\Eloquent\BackupRepository;
11+
use Pterodactyl\Repositories\Eloquent\ServerRepository;
12+
use Pterodactyl\Http\Requests\Api\Remote\ReportBackupCompleteRequest;
13+
14+
class ServerBackupController extends Controller
15+
{
16+
/**
17+
* @var \Pterodactyl\Repositories\Eloquent\BackupRepository
18+
*/
19+
private $repository;
20+
21+
/**
22+
* @var \Pterodactyl\Repositories\Eloquent\ServerRepository
23+
*/
24+
private $serverRepository;
25+
26+
/**
27+
* ServerBackupController constructor.
28+
*
29+
* @param \Pterodactyl\Repositories\Eloquent\BackupRepository $repository
30+
* @param \Pterodactyl\Repositories\Eloquent\ServerRepository $serverRepository
31+
*/
32+
public function __construct(BackupRepository $repository, ServerRepository $serverRepository)
33+
{
34+
$this->repository = $repository;
35+
$this->serverRepository = $serverRepository;
36+
}
37+
38+
/**
39+
* Updates a server backup's state in the database depending on wether or not
40+
* it was successful.
41+
*
42+
* @param \Pterodactyl\Http\Requests\Api\Remote\ReportBackupCompleteRequest $request
43+
* @param string $uuid
44+
* @param string $backup
45+
* @return \Illuminate\Http\JsonResponse
46+
*
47+
* @throws \Pterodactyl\Exceptions\Repository\RecordNotFoundException
48+
*/
49+
public function __invoke(ReportBackupCompleteRequest $request, string $uuid, string $backup)
50+
{
51+
$server = $this->serverRepository->getByUuid($uuid);
52+
53+
$where = [
54+
['uuid', '=', $backup],
55+
['server_id', '=', $server->id],
56+
];
57+
58+
if ($request->input('successful')) {
59+
$this->repository->updateWhere($where, [
60+
'sha256_hash' => $request->input('sha256_hash'),
61+
'bytes' => $request->input('file_size'),
62+
'completed_at' => Carbon::now(),
63+
]);
64+
} else {
65+
$this->repository->deleteWhere($where);
66+
}
67+
68+
return JsonResponse::create([], JsonResponse::HTTP_NO_CONTENT);
69+
}
70+
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
<?php
2+
3+
namespace Pterodactyl\Http\Requests\Api\Remote;
4+
5+
use Illuminate\Foundation\Http\FormRequest;
6+
7+
class ReportBackupCompleteRequest extends FormRequest
8+
{
9+
/**
10+
* @return string[]
11+
*/
12+
public function rules()
13+
{
14+
return [
15+
'successful' => 'boolean',
16+
'sha256_hash' => 'string|required_if:successful,true',
17+
'file_size' => 'numeric|required_if:successful,true',
18+
];
19+
}
20+
}

app/Repositories/Eloquent/EloquentRepository.php

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -177,6 +177,18 @@ public function update($id, array $fields, bool $validate = true, bool $force =
177177
return ($this->withFresh) ? $instance->fresh() : $saved;
178178
}
179179

180+
/**
181+
* Update a model using the attributes passed.
182+
*
183+
* @param array|\Closure $attributes
184+
* @param array $values
185+
* @return int
186+
*/
187+
public function updateWhere($attributes, array $values)
188+
{
189+
return $this->getBuilder()->where($attributes)->update($values);
190+
}
191+
180192
/**
181193
* Perform a mass update where matching records are updated using whereIn.
182194
* This does not perform any model data validation.

routes/api-remote.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,4 +11,6 @@
1111
Route::get('/', 'Servers\ServerDetailsController');
1212
Route::get('/install', 'Servers\ServerInstallController@index');
1313
Route::post('/install', 'Servers\ServerInstallController@store');
14+
15+
Route::post('/backup/{backup}', 'Servers\ServerBackupController');
1416
});

0 commit comments

Comments
 (0)