2019-12-09 22:03:10 -08:00
< ? php
2024-03-12 22:39:16 -04:00
namespace App\Http\Controllers\Api\Client\Servers ;
2019-12-09 22:03:10 -08:00
2024-03-12 22:39:16 -04:00
use App\Facades\Activity ;
use App\Http\Controllers\Api\Client\ClientApiController ;
2025-06-06 23:06:28 -04:00
use App\Http\Requests\Api\Client\Servers\Settings\DescriptionServerRequest ;
2024-09-29 00:35:57 +02:00
use App\Http\Requests\Api\Client\Servers\Settings\ReinstallServerRequest ;
2024-03-12 22:39:16 -04:00
use App\Http\Requests\Api\Client\Servers\Settings\RenameServerRequest ;
use App\Http\Requests\Api\Client\Servers\Settings\SetDockerImageRequest ;
2024-09-29 00:35:57 +02:00
use App\Models\Server ;
use App\Services\Servers\ReinstallServerService ;
2025-02-26 16:12:19 +01:00
use Dedoc\Scramble\Attributes\Group ;
2024-09-29 00:35:57 +02:00
use Illuminate\Http\JsonResponse ;
use Illuminate\Http\Response ;
use Symfony\Component\HttpKernel\Exception\BadRequestHttpException ;
2025-09-24 13:34:19 +02:00
use Throwable ;
2019-12-09 22:03:10 -08:00
2025-02-26 16:12:19 +01:00
#[Group('Server - Settings')]
2019-12-09 22:03:10 -08:00
class SettingsController extends ClientApiController
{
/**
* SettingsController constructor .
*/
2020-04-03 14:43:24 -07:00
public function __construct (
2022-10-14 10:59:20 -06:00
private ReinstallServerService $reinstallServerService
2020-04-03 14:43:24 -07:00
) {
2019-12-09 22:03:10 -08:00
parent :: __construct ();
}
/**
2025-02-26 16:12:19 +01:00
* Rename
*
2019-12-09 22:03:10 -08:00
* Renames a server .
*/
2022-10-14 10:59:20 -06:00
public function rename ( RenameServerRequest $request , Server $server ) : JsonResponse
2019-12-09 22:03:10 -08:00
{
2025-06-19 15:36:50 -04:00
$originalName = $server -> name ;
2022-11-21 13:41:26 -07:00
$name = $request -> input ( 'name' );
2024-03-16 15:01:21 -04:00
2025-06-06 23:06:28 -04:00
$server -> update ([ 'name' => $name ]);
if ( $server -> wasChanged ( 'name' )) {
2022-05-29 19:26:28 -04:00
Activity :: event ( 'server:settings.rename' )
2025-06-19 15:36:50 -04:00
-> property ([ 'old' => $originalName , 'new' => $name ])
2022-11-21 13:41:26 -07:00
-> log ();
}
2025-06-06 23:06:28 -04:00
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 );
}
2025-06-19 15:36:50 -04:00
$originalDescription = $server -> description ;
2025-06-06 23:06:28 -04:00
$description = $request -> input ( 'description' );
$server -> update ([ 'description' => $description ? ? '' ]);
if ( $server -> wasChanged ( 'description' )) {
2022-11-21 13:41:26 -07:00
Activity :: event ( 'server:settings.description' )
2025-06-19 15:36:50 -04:00
-> property ([ 'old' => $originalDescription , 'new' => $description ])
2022-05-29 19:26:28 -04:00
-> log ();
}
2020-06-28 10:40:41 -07:00
return new JsonResponse ([], Response :: HTTP_NO_CONTENT );
2020-04-03 14:43:24 -07:00
}
/**
2025-02-26 16:12:19 +01:00
* Reinstall
*
2020-04-03 14:43:24 -07:00
* Reinstalls the server on the daemon .
*
2025-09-08 13:12:33 -04:00
* @ throws Throwable
2020-04-03 14:43:24 -07:00
*/
2022-10-14 10:59:20 -06:00
public function reinstall ( ReinstallServerRequest $request , Server $server ) : JsonResponse
2020-04-03 14:43:24 -07:00
{
2020-10-05 21:54:29 -07:00
$this -> reinstallServerService -> handle ( $server );
2020-04-03 14:43:24 -07:00
2022-05-29 19:26:28 -04:00
Activity :: event ( 'server:reinstall' ) -> log ();
2020-06-28 10:40:41 -07:00
return new JsonResponse ([], Response :: HTTP_ACCEPTED );
2019-12-09 22:03:10 -08:00
}
2020-12-13 11:07:29 -08:00
/**
2025-02-26 16:12:19 +01:00
* Change docker image
*
2020-12-13 11:07:29 -08:00
* Changes the Docker image in use by the server .
*
2025-09-08 13:12:33 -04:00
* @ throws Throwable
2020-12-13 11:07:29 -08:00
*/
2022-10-14 10:59:20 -06:00
public function dockerImage ( SetDockerImageRequest $request , Server $server ) : JsonResponse
2020-12-13 11:07:29 -08:00
{
2026-07-09 09:55:11 -04:00
throw_unless ( in_array ( $server -> image , $server -> egg -> docker_images ), new BadRequestHttpException ( 'This server\'s Docker image has been manually set by an administrator and cannot be updated.' ));
2020-12-13 11:07:29 -08:00
2022-05-29 19:26:28 -04:00
$original = $server -> image ;
2020-12-13 11:07:29 -08:00
$server -> forceFill ([ 'image' => $request -> input ( 'docker_image' )]) -> saveOrFail ();
2022-05-29 19:26:28 -04:00
if ( $original !== $server -> image ) {
Activity :: event ( 'server:startup.image' )
-> property ([ 'old' => $original , 'new' => $request -> input ( 'docker_image' )])
-> log ();
}
2020-12-13 11:07:29 -08:00
return new JsonResponse ([], Response :: HTTP_NO_CONTENT );
}
2019-12-09 22:03:10 -08:00
}