diff --git a/app/Http/Controllers/Api/Client/Servers/SettingsController.php b/app/Http/Controllers/Api/Client/Servers/SettingsController.php index 169f825b5..6bc765a08 100644 --- a/app/Http/Controllers/Api/Client/Servers/SettingsController.php +++ b/app/Http/Controllers/Api/Client/Servers/SettingsController.php @@ -4,6 +4,7 @@ namespace App\Http\Controllers\Api\Client\Servers; use App\Facades\Activity; use App\Http\Controllers\Api\Client\ClientApiController; +use App\Http\Requests\Api\Client\Servers\Settings\DescriptionServerRequest; use App\Http\Requests\Api\Client\Servers\Settings\ReinstallServerRequest; use App\Http\Requests\Api\Client\Servers\Settings\RenameServerRequest; use App\Http\Requests\Api\Client\Servers\Settings\SetDockerImageRequest; @@ -34,24 +35,36 @@ class SettingsController extends ClientApiController public function rename(RenameServerRequest $request, Server $server): JsonResponse { $name = $request->input('name'); - $description = $request->has('description') ? (string) $request->input('description') : $server->description; - if ($server->name !== $name) { + $server->update(['name' => $name]); + + if ($server->wasChanged('name')) { Activity::event('server:settings.rename') - ->property(['old' => $server->name, 'new' => $name]) + ->property(['old' => $server->getOriginal('name'), 'new' => $name]) ->log(); - $server->name = $name; } - if ($server->description !== $description && config('panel.editable_server_descriptions')) { + return new JsonResponse([], Response::HTTP_NO_CONTENT); + } + + /** + * Update server description + */ + public function description(DescriptionServerRequest $request, Server $server): JsonResponse + { + if (!config('panel.editable_server_descriptions')) { + return new JsonResponse([], Response::HTTP_FORBIDDEN); + } + + $description = $request->input('description'); + $server->update(['description' => $description ?? '']); + + if ($server->wasChanged('description')) { Activity::event('server:settings.description') - ->property(['old' => $server->description, 'new' => $description]) + ->property(['old' => $server->getOriginal('description'), 'new' => $description]) ->log(); - $server->description = $description; } - $server->save(); - return new JsonResponse([], Response::HTTP_NO_CONTENT); } @@ -80,7 +93,7 @@ class SettingsController extends ClientApiController */ public function dockerImage(SetDockerImageRequest $request, Server $server): JsonResponse { - if (!in_array($server->image, array_values($server->egg->docker_images))) { + if (!in_array($server->image, $server->egg->docker_images)) { throw new BadRequestHttpException('This server\'s Docker image has been manually set by an administrator and cannot be updated.'); } diff --git a/app/Http/Requests/Api/Client/Servers/Settings/DescriptionServerRequest.php b/app/Http/Requests/Api/Client/Servers/Settings/DescriptionServerRequest.php new file mode 100644 index 000000000..ba2fa2125 --- /dev/null +++ b/app/Http/Requests/Api/Client/Servers/Settings/DescriptionServerRequest.php @@ -0,0 +1,30 @@ + 'string|nullable', + ]; + } +} diff --git a/app/Http/Requests/Api/Client/Servers/Settings/RenameServerRequest.php b/app/Http/Requests/Api/Client/Servers/Settings/RenameServerRequest.php index c68e0d444..fb7d8e677 100644 --- a/app/Http/Requests/Api/Client/Servers/Settings/RenameServerRequest.php +++ b/app/Http/Requests/Api/Client/Servers/Settings/RenameServerRequest.php @@ -26,7 +26,6 @@ class RenameServerRequest extends ClientApiRequest implements ClientPermissionsR { return [ 'name' => Server::getRules()['name'], - 'description' => 'string|nullable', ]; } } diff --git a/app/Models/Permission.php b/app/Models/Permission.php index d9f489102..82718f06f 100644 --- a/app/Models/Permission.php +++ b/app/Models/Permission.php @@ -97,6 +97,8 @@ class Permission extends Model implements Validatable public const ACTION_SETTINGS_RENAME = 'settings.rename'; + public const ACTION_SETTINGS_DESCRIPTION = 'settings.description'; + public const ACTION_SETTINGS_REINSTALL = 'settings.reinstall'; public const ACTION_ACTIVITY_READ = 'activity.read'; @@ -176,7 +178,7 @@ class Permission extends Model implements Validatable [ 'name' => 'settings', 'icon' => 'tabler-settings', - 'permissions' => ['rename', 'reinstall'], + 'permissions' => ['rename', 'description', 'reinstall'], ], [ 'name' => 'activity', diff --git a/lang/en/server/users.php b/lang/en/server/users.php index cb570da58..99486bd48 100644 --- a/lang/en/server/users.php +++ b/lang/en/server/users.php @@ -16,7 +16,8 @@ return [ 'startup_update' => 'Allows a user to modify the startup variables for the server.', 'startup_docker_image' => 'Allows a user to modify the Docker image used when running the server.', 'settings_reinstall' => 'Allows a user to trigger a reinstall of this server.', - 'settings_rename' => 'Allows a user to rename this server and change the description of it.', + 'settings_rename' => 'Allows a user to rename this server.', + 'settings_description' => 'Allows a user to change the description of this server.', 'activity_read' => 'Allows a user to view the activity logs for the server.', 'websocket_*' => 'Allows a user access to the websocket for this server.', 'control_console' => 'Allows a user to send data to the server console.', diff --git a/routes/api-client.php b/routes/api-client.php index 0feceeb78..c5ab1d3ba 100644 --- a/routes/api-client.php +++ b/routes/api-client.php @@ -129,6 +129,7 @@ Route::prefix('/servers/{server:uuid}')->middleware([ServerSubject::class, Authe Route::prefix('/settings')->group(function () { Route::post('/rename', [Client\Servers\SettingsController::class, 'rename']); + Route::post('/description', [Client\Servers\SettingsController::class, 'description']); Route::post('/reinstall', [Client\Servers\SettingsController::class, 'reinstall']); Route::put('/docker-image', [Client\Servers\SettingsController::class, 'dockerImage']); }); diff --git a/tests/Integration/Api/Client/Server/SettingsControllerTest.php b/tests/Integration/Api/Client/Server/SettingsControllerTest.php index a0a722651..ded84ce1d 100644 --- a/tests/Integration/Api/Client/Server/SettingsControllerTest.php +++ b/tests/Integration/Api/Client/Server/SettingsControllerTest.php @@ -21,11 +21,9 @@ class SettingsControllerTest extends ClientApiIntegrationTestCase /** @var \App\Models\Server $server */ [$user, $server] = $this->generateTestAccount($permissions); $originalName = $server->name; - $originalDescription = $server->description; $response = $this->actingAs($user)->postJson("/api/client/servers/$server->uuid/settings/rename", [ 'name' => '', - 'description' => '', ]); $response->assertStatus(Response::HTTP_UNPROCESSABLE_ENTITY); @@ -33,18 +31,15 @@ class SettingsControllerTest extends ClientApiIntegrationTestCase $server = $server->refresh(); $this->assertSame($originalName, $server->name); - $this->assertSame($originalDescription, $server->description); $this->actingAs($user) ->postJson("/api/client/servers/$server->uuid/settings/rename", [ 'name' => 'Test Server Name', - 'description' => 'This is a test server.', ]) ->assertStatus(Response::HTTP_NO_CONTENT); $server = $server->refresh(); $this->assertSame('Test Server Name', $server->name); - $this->assertSame('This is a test server.', $server->description); } /**