Simplify logic in websocket control

This commit is contained in:
Dane Everitt 2020-12-24 09:20:23 -08:00
parent bb559422dc
commit 6c61577699
No known key found for this signature in database
GPG key ID: EEA66103B3D71F53

View file

@ -3,12 +3,11 @@
namespace Pterodactyl\Http\Controllers\Api\Client\Servers; namespace Pterodactyl\Http\Controllers\Api\Client\Servers;
use Carbon\CarbonImmutable; use Carbon\CarbonImmutable;
use Illuminate\Http\Response;
use Pterodactyl\Models\Server; use Pterodactyl\Models\Server;
use Illuminate\Http\JsonResponse; use Illuminate\Http\JsonResponse;
use Pterodactyl\Models\Permission; use Pterodactyl\Models\Permission;
use Pterodactyl\Services\Nodes\NodeJWTService; use Pterodactyl\Services\Nodes\NodeJWTService;
use Symfony\Component\HttpKernel\Exception\HttpException; use Pterodactyl\Exceptions\Http\HttpForbiddenException;
use Pterodactyl\Http\Requests\Api\Client\ClientApiRequest; use Pterodactyl\Http\Requests\Api\Client\ClientApiRequest;
use Pterodactyl\Services\Servers\GetUserPermissionsService; use Pterodactyl\Services\Servers\GetUserPermissionsService;
use Pterodactyl\Http\Controllers\Api\Client\ClientApiController; use Pterodactyl\Http\Controllers\Api\Client\ClientApiController;
@ -55,26 +54,22 @@ class WebsocketController extends ClientApiController
{ {
$user = $request->user(); $user = $request->user();
if ($user->cannot(Permission::ACTION_WEBSOCKET_CONNECT, $server)) { if ($user->cannot(Permission::ACTION_WEBSOCKET_CONNECT, $server)) {
throw new HttpException(Response::HTTP_FORBIDDEN, 'You do not have permission to connect to this server\'s websocket.'); throw new HttpForbiddenException('You do not have permission to connect to this server\'s websocket.');
} }
$permissions = $this->permissionsService->handle($server, $user); $permissions = $this->permissionsService->handle($server, $user);
$node = null; $node = $server->node;
if (! is_null($server->transfer)) { if (! is_null($server->transfer)) {
// Check if the user has permissions to receive transfer logs. // Check if the user has permissions to receive transfer logs.
if (! in_array('admin.websocket.transfer', $permissions)) { if (! in_array('admin.websocket.transfer', $permissions)) {
throw new HttpException(Response::HTTP_FORBIDDEN, 'You do not have permission to view transfer logs'); throw new HttpForbiddenException('You do not have permission to view server transfer logs.');
} }
// Redirect the websocket request to the new node if the server has been archived. // Redirect the websocket request to the new node if the server has been archived.
if ($server->transfer->archived) { if ($server->transfer->archived) {
$node = $server->transfer->newNode; $node = $server->transfer->newNode;
} else {
$node = $server->node;
} }
} else {
$node = $server->node;
} }
$token = $this->jwtService $token = $this->jwtService