From 7d45379f3173ca245bde8d18544eb0525f964774 Mon Sep 17 00:00:00 2001 From: Dane Everitt Date: Fri, 3 Apr 2020 13:46:45 -0700 Subject: [PATCH] Add back support for reinstalling a server --- app/Models/Server.php | 4 +++ .../Wings/DaemonServerRepository.php | 14 ++++++-- .../Servers/ReinstallServerService.php | 33 ++++++++----------- 3 files changed, 28 insertions(+), 23 deletions(-) diff --git a/app/Models/Server.php b/app/Models/Server.php index 9bdb19ff1..ebe6d2ee7 100644 --- a/app/Models/Server.php +++ b/app/Models/Server.php @@ -61,6 +61,10 @@ class Server extends Validable */ const RESOURCE_NAME = 'server'; + const STATUS_INSTALLING = 0; + const STATUS_INSTALLED = 1; + const STATUS_INSTALL_FAILED = 2; + /** * The table associated with the model. * diff --git a/app/Repositories/Wings/DaemonServerRepository.php b/app/Repositories/Wings/DaemonServerRepository.php index ae4d1333a..3461e4cc9 100644 --- a/app/Repositories/Wings/DaemonServerRepository.php +++ b/app/Repositories/Wings/DaemonServerRepository.php @@ -2,7 +2,6 @@ namespace Pterodactyl\Repositories\Wings; -use BadMethodCallException; use Webmozart\Assert\Assert; use Pterodactyl\Models\Server; use GuzzleHttp\Exception\TransferException; @@ -13,7 +12,6 @@ class DaemonServerRepository extends DaemonRepository /** * Returns details about a server from the Daemon instance. * - * @return array * @throws \Pterodactyl\Exceptions\Http\Connection\DaemonConnectionException */ public function getDetails(): array @@ -89,10 +87,20 @@ class DaemonServerRepository extends DaemonRepository /** * Reinstall a server on the daemon. + * + * @throws \Pterodactyl\Exceptions\Http\Connection\DaemonConnectionException */ public function reinstall(): void { - throw new BadMethodCallException('Method is not implemented.'); + Assert::isInstanceOf($this->server, Server::class); + + try { + $this->getHttpClient()->post(sprintf( + '/api/servers/%s/reinstall', $this->server->uuid + )); + } catch (TransferException $exception) { + throw new DaemonConnectionException($exception); + } } /** diff --git a/app/Services/Servers/ReinstallServerService.php b/app/Services/Servers/ReinstallServerService.php index 6242eeea2..27955c475 100644 --- a/app/Services/Servers/ReinstallServerService.php +++ b/app/Services/Servers/ReinstallServerService.php @@ -3,11 +3,9 @@ namespace Pterodactyl\Services\Servers; use Pterodactyl\Models\Server; -use GuzzleHttp\Exception\RequestException; use Illuminate\Database\ConnectionInterface; use Pterodactyl\Repositories\Wings\DaemonServerRepository; use Pterodactyl\Contracts\Repository\ServerRepositoryInterface; -use Pterodactyl\Exceptions\Http\Connection\DaemonConnectionException; class ReinstallServerService { @@ -44,28 +42,23 @@ class ReinstallServerService } /** - * @param int|\Pterodactyl\Models\Server $server + * Reinstall a server on the remote daemon. * - * @throws \Pterodactyl\Exceptions\DisplayException - * @throws \Pterodactyl\Exceptions\Model\DataValidationException - * @throws \Pterodactyl\Exceptions\Repository\RecordNotFoundException + * @param \Pterodactyl\Models\Server $server + * @return \Pterodactyl\Models\Server + * + * @throws \Throwable */ - public function reinstall($server) + public function reinstall(Server $server) { - if (! $server instanceof Server) { - $server = $this->repository->find($server); - } + $this->database->transaction(function () use ($server) { + $this->repository->withoutFreshModel()->update($server->id, [ + 'installed' => Server::STATUS_INSTALLING, + ]); - $this->database->beginTransaction(); - $this->repository->withoutFreshModel()->update($server->id, [ - 'installed' => 0, - ], true, true); - - try { $this->daemonServerRepository->setServer($server)->reinstall(); - $this->database->commit(); - } catch (RequestException $exception) { - throw new DaemonConnectionException($exception); - } + }); + + return $server->refresh(); } }