Skip to content

Commit fd84898

Browse files
committed
Add ServerTransferringException, use is_null
1 parent 5668a78 commit fd84898

File tree

9 files changed

+36
-14
lines changed

9 files changed

+36
-14
lines changed
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
<?php
2+
3+
namespace Pterodactyl\Exceptions\Http\Server;
4+
5+
use Illuminate\Http\Response;
6+
use Symfony\Component\HttpKernel\Exception\HttpException;
7+
8+
class ServerTransferringException extends HttpException
9+
{
10+
public function __construct()
11+
{
12+
parent::__construct(Response::HTTP_CONFLICT, 'Server is currently being transferred.');
13+
}
14+
}

app/Http/Controllers/Api/Client/Servers/WebsocketController.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ public function __invoke(ClientApiRequest $request, Server $server)
6161
$permissions = $this->permissionsService->handle($server, $user);
6262

6363
$node = null;
64-
if ($server->transfer !== null) {
64+
if (! is_null($server->transfer)) {
6565
// Check if the user has permissions to receive transfer logs.
6666
if (! in_array('admin.websocket.transfer', $permissions)) {
6767
throw new HttpException(Response::HTTP_FORBIDDEN, 'You do not have permission to view transfer logs');

app/Http/Controllers/Api/Remote/SftpAuthenticationController.php

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
use Pterodactyl\Repositories\Eloquent\ServerRepository;
1313
use Pterodactyl\Services\Servers\GetUserPermissionsService;
1414
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
15+
use Pterodactyl\Exceptions\Http\Server\ServerTransferringException;
1516
use Symfony\Component\HttpKernel\Exception\BadRequestHttpException;
1617
use Pterodactyl\Http\Requests\Api\Remote\SftpAuthenticationFormRequest;
1718
use Symfony\Component\HttpKernel\Exception\TooManyRequestsHttpException;
@@ -110,9 +111,14 @@ public function __invoke(SftpAuthenticationFormRequest $request): JsonResponse
110111
}
111112
}
112113

113-
// Remeber, for security purposes, only reveal the existence of the server to people that
114+
// Prevent SFTP access to servers that are being transferred.
115+
if (! is_null($server->transfer)) {
116+
throw new ServerTransferringException();
117+
}
118+
119+
// Remember, for security purposes, only reveal the existence of the server to people that
114120
// have provided valid credentials, and have permissions to know about it.
115-
if ($server->installed !== 1 || $server->suspended || $server->transfer !== null) {
121+
if ($server->installed !== 1 || $server->suspended) {
116122
throw new BadRequestHttpException(
117123
'Server is not installed or is currently suspended.'
118124
);
@@ -132,7 +138,7 @@ public function __invoke(SftpAuthenticationFormRequest $request): JsonResponse
132138
* @param \Illuminate\Http\Request $request
133139
* @return string
134140
*/
135-
protected function throttleKey(Request $request)
141+
protected function throttleKey(Request $request): string
136142
{
137143
$username = explode('.', strrev($request->input('username', '')));
138144

app/Http/Middleware/Api/Client/Server/AuthenticateServerAccess.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ public function handle(Request $request, Closure $next)
7979
}
8080
}
8181

82-
if ($server->transfer !== null) {
82+
if (! is_null($server->transfer)) {
8383
if (! $user->root_admin || ($user->root_admin && ! $request->routeIs($this->except))) {
8484
throw new ConflictHttpException('Server is currently being transferred.');
8585
}

app/Http/Middleware/Server/AccessingValidServer.php

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
use Illuminate\Contracts\Config\Repository as ConfigRepository;
1010
use Pterodactyl\Contracts\Repository\ServerRepositoryInterface;
1111
use Symfony\Component\HttpKernel\Exception\ConflictHttpException;
12+
use Pterodactyl\Exceptions\Http\Server\ServerTransferringException;
1213
use Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException;
1314

1415
class AccessingValidServer
@@ -80,9 +81,9 @@ public function handle(Request $request, Closure $next)
8081
return $this->response->view('errors.installing', [], 409);
8182
}
8283

83-
if ($server->transfer !== null) {
84+
if (! is_null($server->transfer)) {
8485
if ($isApiRequest) {
85-
throw new ConflictHttpException('Server is currently being transferred.');
86+
throw new ServerTransferringException();
8687
}
8788

8889
return $this->response->view('errors.transferring', [], 409);

app/Services/Servers/SuspensionService.php

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
use Illuminate\Database\ConnectionInterface;
88
use Pterodactyl\Repositories\Wings\DaemonServerRepository;
99
use Symfony\Component\HttpKernel\Exception\ConflictHttpException;
10+
use Pterodactyl\Exceptions\Http\Server\ServerTransferringException;
1011

1112
class SuspensionService
1213
{
@@ -58,8 +59,8 @@ public function toggle(Server $server, $action = self::ACTION_SUSPEND)
5859
}
5960

6061
// Check if the server is currently being transferred.
61-
if ($server->transfer !== null) {
62-
throw new ConflictHttpException('Server is currently being transferred');
62+
if (! is_null($server->transfer)) {
63+
throw new ServerTransferringException();
6364
}
6465

6566
$this->connection->transaction(function () use ($action, $server) {
@@ -68,7 +69,7 @@ public function toggle(Server $server, $action = self::ACTION_SUSPEND)
6869
]);
6970

7071
// Only send the suspension request to wings if the server is not currently being transferred.
71-
if ($server->transfer === null) {
72+
if (is_null($server->transfer)) {
7273
$this->daemonServerRepository->setServer($server)->suspend($action === self::ACTION_UNSUSPEND);
7374
}
7475
});

app/Transformers/Api/Client/ServerTransformer.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ public function transform(Server $server): array
7272
],
7373
'is_suspended' => $server->suspended,
7474
'is_installing' => $server->installed !== 1,
75-
'is_transferring' => $server->transfer !== null,
75+
'is_transferring' => ! is_null($server->transfer),
7676
];
7777
}
7878

resources/scripts/routers/ServerRouter.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ const ServerRouter = ({ match, location }: RouteComponentProps<{ id: string }>)
6666
getServer(match.params.id)
6767
.catch(error => {
6868
if (error.response?.status === 409) {
69-
if (error.response.data?.errors[0]?.detail?.includes('transfer')) {
69+
if (error.response.data?.errors[0]?.code === 'ServerTransferringException') {
7070
setTransferring(true);
7171
} else {
7272
setInstalling(true);

resources/views/admin/servers/view/manage.blade.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@
7272
<form action="{{ route('admin.servers.view.manage.suspension', $server->id) }}" method="POST">
7373
{!! csrf_field() !!}
7474
<input type="hidden" name="action" value="suspend" />
75-
<button type="submit" class="btn btn-warning @if($server->transfer !== null) disabled @endif">Suspend Server</button>
75+
<button type="submit" class="btn btn-warning @if(! is_null($server->transfer)) disabled @endif">Suspend Server</button>
7676
</form>
7777
</div>
7878
</div>
@@ -97,7 +97,7 @@
9797
</div>
9898
@endif
9999

100-
@if($server->transfer === null)
100+
@if(is_null($server->transfer))
101101
<div class="col-sm-4">
102102
<div class="box box-success">
103103
<div class="box-header with-border">

0 commit comments

Comments
 (0)