Skip to content

Commit e7784bf

Browse files
authored
Merge branch 'develop' into feature/server-transfers-actually
2 parents 2f506d5 + 7b69b4b commit e7784bf

File tree

2 files changed

+63
-12
lines changed

2 files changed

+63
-12
lines changed

app/Repositories/Wings/DaemonBackupRepository.php

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,41 @@
33
namespace Pterodactyl\Repositories\Wings;
44

55
use Webmozart\Assert\Assert;
6+
use Pterodactyl\Models\Backup;
67
use Pterodactyl\Models\Server;
78
use Psr\Http\Message\ResponseInterface;
89
use GuzzleHttp\Exception\TransferException;
910
use Pterodactyl\Exceptions\Http\Connection\DaemonConnectionException;
1011

1112
class DaemonBackupRepository extends DaemonRepository
1213
{
14+
/**
15+
* Tells the remote Daemon to begin generating a backup for the server.
16+
*
17+
* @param \Pterodactyl\Models\Backup $backup
18+
* @return \Psr\Http\Message\ResponseInterface
19+
*
20+
* @throws \Pterodactyl\Exceptions\Http\Connection\DaemonConnectionException
21+
*/
22+
public function backup(Backup $backup): ResponseInterface
23+
{
24+
Assert::isInstanceOf($this->server, Server::class);
25+
26+
try {
27+
return $this->getHttpClient()->post(
28+
sprintf('/api/servers/%s/backup', $this->server->uuid),
29+
[
30+
'json' => [
31+
'uuid' => $backup->uuid,
32+
'ignored_files' => explode(PHP_EOL, $backup->ignored_files),
33+
],
34+
]
35+
);
36+
} catch (TransferException $exception) {
37+
throw new DaemonConnectionException($exception);
38+
}
39+
}
40+
1341
/**
1442
* Returns a stream of a backup's contents from the Wings instance so that we
1543
* do not need to send the user directly to the Daemon.

app/Services/Backups/InitiateBackupService.php

Lines changed: 35 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,9 @@
66
use Carbon\CarbonImmutable;
77
use Pterodactyl\Models\Backup;
88
use Pterodactyl\Models\Server;
9+
use Illuminate\Database\ConnectionInterface;
910
use Pterodactyl\Repositories\Eloquent\BackupRepository;
11+
use Pterodactyl\Repositories\Wings\DaemonBackupRepository;
1012

1113
class InitiateBackupService
1214
{
@@ -20,14 +22,31 @@ class InitiateBackupService
2022
*/
2123
private $repository;
2224

25+
/**
26+
* @var \Illuminate\Database\ConnectionInterface
27+
*/
28+
private $connection;
29+
30+
/**
31+
* @var \Pterodactyl\Repositories\Wings\DaemonBackupRepository
32+
*/
33+
private $daemonBackupRepository;
34+
2335
/**
2436
* InitiateBackupService constructor.
2537
*
2638
* @param \Pterodactyl\Repositories\Eloquent\BackupRepository $repository
39+
* @param \Illuminate\Database\ConnectionInterface $connection
40+
* @param \Pterodactyl\Repositories\Wings\DaemonBackupRepository $daemonBackupRepository
2741
*/
28-
public function __construct(BackupRepository $repository)
29-
{
42+
public function __construct(
43+
BackupRepository $repository,
44+
ConnectionInterface $connection,
45+
DaemonBackupRepository $daemonBackupRepository
46+
) {
3047
$this->repository = $repository;
48+
$this->connection = $connection;
49+
$this->daemonBackupRepository = $daemonBackupRepository;
3150
}
3251

3352
/**
@@ -50,19 +69,23 @@ public function setIgnoredFiles(?string $ignored)
5069
* @param string|null $name
5170
* @return \Pterodactyl\Models\Backup
5271
*
53-
* @throws \Exception
72+
* @throws \Throwable
5473
*/
5574
public function handle(Server $server, string $name = null): Backup
5675
{
57-
/** @var \Pterodactyl\Models\Backup $backup */
58-
$backup = $this->repository->create([
59-
'server_id' => $server->id,
60-
'uuid' => Uuid::uuid4()->toString(),
61-
'name' => trim($name) ?: sprintf('Backup at %s', CarbonImmutable::now()->toDateTimeString()),
62-
'ignored_files' => $this->ignoredFiles ?? '',
63-
'disk' => 'local',
64-
], true, true);
76+
return $this->connection->transaction(function () use ($server, $name) {
77+
/** @var \Pterodactyl\Models\Backup $backup */
78+
$backup = $this->repository->create([
79+
'server_id' => $server->id,
80+
'uuid' => Uuid::uuid4()->toString(),
81+
'name' => trim($name) ?: sprintf('Backup at %s', CarbonImmutable::now()->toDateTimeString()),
82+
'ignored_files' => $this->ignoredFiles ?? '',
83+
'disk' => 'local',
84+
], true, true);
85+
86+
$this->daemonBackupRepository->setServer($server)->backup($backup);
6587

66-
return $backup;
88+
return $backup;
89+
});
6790
}
6891
}

0 commit comments

Comments
 (0)