Skip to content

Commit 23d594f

Browse files
committed
Update all of the permissions checking to be constant based
1 parent 605c154 commit 23d594f

18 files changed

+98
-40
lines changed

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

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,15 @@
44

55
use Cake\Chronos\Chronos;
66
use Lcobucci\JWT\Builder;
7-
use Illuminate\Http\Request;
87
use Lcobucci\JWT\Signer\Key;
98
use Illuminate\Http\Response;
109
use Pterodactyl\Models\Server;
1110
use Illuminate\Http\JsonResponse;
11+
use Pterodactyl\Models\Permission;
1212
use Lcobucci\JWT\Signer\Hmac\Sha256;
1313
use Illuminate\Contracts\Cache\Repository;
1414
use Symfony\Component\HttpKernel\Exception\HttpException;
15+
use Pterodactyl\Http\Requests\Api\Client\ClientApiRequest;
1516
use Pterodactyl\Http\Controllers\Api\Client\ClientApiController;
1617

1718
class WebsocketController extends ClientApiController
@@ -39,13 +40,13 @@ public function __construct(Repository $cache)
3940
* allows us to continually renew this token and avoid users mainitaining sessions wrongly,
4041
* as well as ensure that user's only perform actions they're allowed to.
4142
*
42-
* @param \Illuminate\Http\Request $request
43+
* @param \Pterodactyl\Http\Requests\Api\Client\ClientApiRequest $request
4344
* @param \Pterodactyl\Models\Server $server
4445
* @return \Illuminate\Http\JsonResponse
4546
*/
46-
public function __invoke(Request $request, Server $server)
47+
public function __invoke(ClientApiRequest $request, Server $server)
4748
{
48-
if (! $request->user()->can('websocket.*', $server)) {
49+
if ($request->user()->cannot(Permission::ACTION_WEBSOCKET, $server)) {
4950
throw new HttpException(
5051
Response::HTTP_FORBIDDEN, 'You do not have permission to connect to this server\'s websocket.'
5152
);

app/Http/Requests/Api/Client/Servers/Databases/DeleteDatabaseRequest.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
use Pterodactyl\Models\Server;
66
use Pterodactyl\Models\Database;
7+
use Pterodactyl\Models\Permission;
78
use Pterodactyl\Contracts\Http\ClientPermissionsRequest;
89
use Pterodactyl\Http\Requests\Api\Client\ClientApiRequest;
910

@@ -14,7 +15,7 @@ class DeleteDatabaseRequest extends ClientApiRequest implements ClientPermission
1415
*/
1516
public function permission(): string
1617
{
17-
return 'database.delete';
18+
return Permission::ACTION_DATABASE_DELETE;
1819
}
1920

2021
/**

app/Http/Requests/Api/Client/Servers/Databases/GetDatabasesRequest.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
namespace Pterodactyl\Http\Requests\Api\Client\Servers\Databases;
44

5+
use Pterodactyl\Models\Permission;
56
use Pterodactyl\Contracts\Http\ClientPermissionsRequest;
67
use Pterodactyl\Http\Requests\Api\Client\ClientApiRequest;
78

@@ -12,6 +13,6 @@ class GetDatabasesRequest extends ClientApiRequest implements ClientPermissionsR
1213
*/
1314
public function permission(): string
1415
{
15-
return 'database.read';
16+
return Permission::ACTION_DATABASE_READ;
1617
}
1718
}

app/Http/Requests/Api/Client/Servers/Databases/RotatePasswordRequest.php

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,18 +2,18 @@
22

33
namespace Pterodactyl\Http\Requests\Api\Client\Servers\Databases;
44

5-
use Pterodactyl\Models\Server;
5+
use Pterodactyl\Models\Permission;
66
use Pterodactyl\Http\Requests\Api\Client\ClientApiRequest;
77

88
class RotatePasswordRequest extends ClientApiRequest
99
{
1010
/**
1111
* Check that the user has permission to rotate the password.
1212
*
13-
* @return bool
13+
* @return string
1414
*/
15-
public function authorize(): bool
15+
public function permission(): string
1616
{
17-
return $this->user()->can('database.update', $this->getModel(Server::class));
17+
return Permission::ACTION_DATABASE_UPDATE;
1818
}
1919
}

app/Http/Requests/Api/Client/Servers/Databases/StoreDatabaseRequest.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
namespace Pterodactyl\Http\Requests\Api\Client\Servers\Databases;
44

5+
use Pterodactyl\Models\Permission;
56
use Pterodactyl\Contracts\Http\ClientPermissionsRequest;
67
use Pterodactyl\Http\Requests\Api\Client\ClientApiRequest;
78

@@ -12,7 +13,7 @@ class StoreDatabaseRequest extends ClientApiRequest implements ClientPermissions
1213
*/
1314
public function permission(): string
1415
{
15-
return 'database.create';
16+
return Permission::ACTION_DATABASE_CREATE;
1617
}
1718

1819
/**

app/Http/Requests/Api/Client/Servers/Files/CopyFileRequest.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
namespace Pterodactyl\Http\Requests\Api\Client\Servers\Files;
44

5+
use Pterodactyl\Models\Permission;
56
use Pterodactyl\Contracts\Http\ClientPermissionsRequest;
67
use Pterodactyl\Http\Requests\Api\Client\ClientApiRequest;
78

@@ -12,7 +13,7 @@ class CopyFileRequest extends ClientApiRequest implements ClientPermissionsReque
1213
*/
1314
public function permission(): string
1415
{
15-
return 'file.create';
16+
return Permission::ACTION_FILE_CREATE;
1617
}
1718

1819
/**

app/Http/Requests/Api/Client/Servers/Files/CreateFolderRequest.php

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,19 +2,19 @@
22

33
namespace Pterodactyl\Http\Requests\Api\Client\Servers\Files;
44

5-
use Pterodactyl\Models\Server;
5+
use Pterodactyl\Models\Permission;
66
use Pterodactyl\Http\Requests\Api\Client\ClientApiRequest;
77

88
class CreateFolderRequest extends ClientApiRequest
99
{
1010
/**
1111
* Checks that the authenticated user is allowed to create files on the server.
1212
*
13-
* @return bool
13+
* @return string
1414
*/
15-
public function authorize(): bool
15+
public function permission(): string
1616
{
17-
return $this->user()->can('file.create', $this->getModel(Server::class));
17+
return Permission::ACTION_FILE_CREATE;
1818
}
1919

2020
/**

app/Http/Requests/Api/Client/Servers/Files/DeleteFileRequest.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
namespace Pterodactyl\Http\Requests\Api\Client\Servers\Files;
44

5+
use Pterodactyl\Models\Permission;
56
use Pterodactyl\Contracts\Http\ClientPermissionsRequest;
67
use Pterodactyl\Http\Requests\Api\Client\ClientApiRequest;
78

@@ -12,7 +13,7 @@ class DeleteFileRequest extends ClientApiRequest implements ClientPermissionsReq
1213
*/
1314
public function permission(): string
1415
{
15-
return 'file.delete';
16+
return Permission::ACTION_FILE_DELETE;
1617
}
1718

1819
/**

app/Http/Requests/Api/Client/Servers/Files/GetFileContentsRequest.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
namespace Pterodactyl\Http\Requests\Api\Client\Servers\Files;
44

5+
use Pterodactyl\Models\Permission;
56
use Pterodactyl\Contracts\Http\ClientPermissionsRequest;
67
use Pterodactyl\Http\Requests\Api\Client\ClientApiRequest;
78

@@ -16,7 +17,7 @@ class GetFileContentsRequest extends ClientApiRequest implements ClientPermissio
1617
*/
1718
public function permission(): string
1819
{
19-
return 'file.read';
20+
return Permission::ACTION_FILE_READ;
2021
}
2122

2223
/**

app/Http/Requests/Api/Client/Servers/Files/ListFilesRequest.php

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
namespace Pterodactyl\Http\Requests\Api\Client\Servers\Files;
44

5-
use Pterodactyl\Models\Server;
5+
use Pterodactyl\Models\Permission;
66
use Pterodactyl\Http\Requests\Api\Client\ClientApiRequest;
77

88
class ListFilesRequest extends ClientApiRequest
@@ -11,11 +11,11 @@ class ListFilesRequest extends ClientApiRequest
1111
* Check that the user making this request to the API is authorized to list all
1212
* of the files that exist for a given server.
1313
*
14-
* @return bool
14+
* @return string
1515
*/
16-
public function authorize(): bool
16+
public function permission(): string
1717
{
18-
return $this->user()->can('file.read', $this->getModel(Server::class));
18+
return Permission::ACTION_FILE_READ;
1919
}
2020

2121
/**

0 commit comments

Comments
 (0)