From e9ea5b1caeebae4d54e17577aa4cfa9049c3be73 Mon Sep 17 00:00:00 2001 From: Lance Pioch Date: Sun, 17 Mar 2024 13:16:39 -0400 Subject: [PATCH] Even more static analysis! --- .../Spatie/Fractalistic/Fractal.php | 6 +-- app/Http/Controllers/Admin/ApiController.php | 1 - app/Http/Controllers/Admin/BaseController.php | 3 +- .../Controllers/Admin/DatabaseController.php | 1 - .../Admin/Servers/CreateServerController.php | 1 - .../Admin/Settings/AdvancedController.php | 1 - .../Admin/Settings/IndexController.php | 1 - .../Admin/Settings/MailController.php | 1 - .../Api/Client/Servers/StartupController.php | 3 +- .../Auth/LoginCheckpointController.php | 2 +- .../Client/Server/ResourceBelongsToServer.php | 4 +- .../RequireTwoFactorAuthentication.php | 3 +- .../Api/Application/ApplicationApiRequest.php | 2 +- app/Models/Egg.php | 6 +-- .../Backups/InitiateBackupService.php | 1 - .../Databases/DatabaseManagementService.php | 45 ++++++------------- .../Schedules/ProcessScheduleService.php | 3 +- phpstan.neon | 2 +- 18 files changed, 31 insertions(+), 55 deletions(-) diff --git a/app/Extensions/Spatie/Fractalistic/Fractal.php b/app/Extensions/Spatie/Fractalistic/Fractal.php index c3ad57801..fba04f66f 100644 --- a/app/Extensions/Spatie/Fractalistic/Fractal.php +++ b/app/Extensions/Spatie/Fractalistic/Fractal.php @@ -20,20 +20,20 @@ class Fractal extends SpatieFractal public function createData(): Scope { // Set the serializer by default. - if (is_null($this->serializer)) { + if (empty($this->serializer)) { $this->serializer = new PanelSerializer(); } // Automatically set the paginator on the response object if the // data being provided implements a paginator. - if (is_null($this->paginator) && $this->data instanceof LengthAwarePaginator) { + if ($this->data instanceof LengthAwarePaginator) { $this->paginator = new IlluminatePaginatorAdapter($this->data); } // If the resource name is not set attempt to pull it off the transformer // itself and set it automatically. if ( - is_null($this->resourceName) + empty($this->resourceName) && $this->transformer instanceof TransformerAbstract && method_exists($this->transformer, 'getResourceName') ) { diff --git a/app/Http/Controllers/Admin/ApiController.php b/app/Http/Controllers/Admin/ApiController.php index 5430950b5..f0b2adc36 100644 --- a/app/Http/Controllers/Admin/ApiController.php +++ b/app/Http/Controllers/Admin/ApiController.php @@ -22,7 +22,6 @@ class ApiController extends Controller public function __construct( private AlertsMessageBag $alert, private KeyCreationService $keyCreationService, - private ViewFactory $view, ) { } diff --git a/app/Http/Controllers/Admin/BaseController.php b/app/Http/Controllers/Admin/BaseController.php index 39c2adf6e..3db8aa145 100644 --- a/app/Http/Controllers/Admin/BaseController.php +++ b/app/Http/Controllers/Admin/BaseController.php @@ -3,7 +3,6 @@ namespace App\Http\Controllers\Admin; use Illuminate\View\View; -use Illuminate\View\Factory as ViewFactory; use App\Http\Controllers\Controller; use App\Services\Helpers\SoftwareVersionService; @@ -12,7 +11,7 @@ class BaseController extends Controller /** * BaseController constructor. */ - public function __construct(private SoftwareVersionService $version, private ViewFactory $view) + public function __construct(private SoftwareVersionService $version) { } diff --git a/app/Http/Controllers/Admin/DatabaseController.php b/app/Http/Controllers/Admin/DatabaseController.php index 2ab9cb33c..bacbff0a1 100644 --- a/app/Http/Controllers/Admin/DatabaseController.php +++ b/app/Http/Controllers/Admin/DatabaseController.php @@ -24,7 +24,6 @@ class DatabaseController extends Controller private HostCreationService $creationService, private HostDeletionService $deletionService, private HostUpdateService $updateService, - private ViewFactory $view ) { } diff --git a/app/Http/Controllers/Admin/Servers/CreateServerController.php b/app/Http/Controllers/Admin/Servers/CreateServerController.php index fdef2f70e..cd555d5e3 100644 --- a/app/Http/Controllers/Admin/Servers/CreateServerController.php +++ b/app/Http/Controllers/Admin/Servers/CreateServerController.php @@ -20,7 +20,6 @@ class CreateServerController extends Controller public function __construct( private AlertsMessageBag $alert, private ServerCreationService $creationService, - private ViewFactory $view ) { } diff --git a/app/Http/Controllers/Admin/Settings/AdvancedController.php b/app/Http/Controllers/Admin/Settings/AdvancedController.php index 02903b084..534392dc1 100644 --- a/app/Http/Controllers/Admin/Settings/AdvancedController.php +++ b/app/Http/Controllers/Admin/Settings/AdvancedController.php @@ -21,7 +21,6 @@ class AdvancedController extends Controller private AlertsMessageBag $alert, private ConfigRepository $config, private Kernel $kernel, - private ViewFactory $view ) { } diff --git a/app/Http/Controllers/Admin/Settings/IndexController.php b/app/Http/Controllers/Admin/Settings/IndexController.php index dbf87e7ef..4bb3bbdee 100644 --- a/app/Http/Controllers/Admin/Settings/IndexController.php +++ b/app/Http/Controllers/Admin/Settings/IndexController.php @@ -24,7 +24,6 @@ class IndexController extends Controller private AlertsMessageBag $alert, private Kernel $kernel, private SoftwareVersionService $versionService, - private ViewFactory $view ) { } diff --git a/app/Http/Controllers/Admin/Settings/MailController.php b/app/Http/Controllers/Admin/Settings/MailController.php index 239d15fc8..c4addcf1b 100644 --- a/app/Http/Controllers/Admin/Settings/MailController.php +++ b/app/Http/Controllers/Admin/Settings/MailController.php @@ -26,7 +26,6 @@ class MailController extends Controller private ConfigRepository $config, private Encrypter $encrypter, private Kernel $kernel, - private ViewFactory $view ) { } diff --git a/app/Http/Controllers/Api/Client/Servers/StartupController.php b/app/Http/Controllers/Api/Client/Servers/StartupController.php index 27fb691cb..11bbd9527 100644 --- a/app/Http/Controllers/Api/Client/Servers/StartupController.php +++ b/app/Http/Controllers/Api/Client/Servers/StartupController.php @@ -50,10 +50,9 @@ class StartupController extends ClientApiController */ public function update(UpdateStartupVariableRequest $request, Server $server): array { - /** @var \App\Models\EggVariable $variable */ $variable = $server->variables()->where('env_variable', $request->input('key'))->first(); - if (is_null($variable) || !$variable->user_viewable) { + if (!$variable || !$variable->user_viewable) { throw new BadRequestHttpException('The environment variable you are trying to edit does not exist.'); } elseif (!$variable->user_editable) { throw new BadRequestHttpException('The environment variable you are trying to edit is read-only.'); diff --git a/app/Http/Controllers/Auth/LoginCheckpointController.php b/app/Http/Controllers/Auth/LoginCheckpointController.php index 473b12f26..3b147f86c 100644 --- a/app/Http/Controllers/Auth/LoginCheckpointController.php +++ b/app/Http/Controllers/Auth/LoginCheckpointController.php @@ -69,7 +69,7 @@ class LoginCheckpointController extends AbstractLoginController } else { $decrypted = $this->encrypter->decrypt($user->totp_secret); - if ($this->google2FA->verifyKey($decrypted, (string) $request->input('authentication_code') ?? '', config('panel.auth.2fa.window'))) { + if ($this->google2FA->verifyKey($decrypted, (string) $request->input('authentication_code'), config('panel.auth.2fa.window'))) { Event::dispatch(new ProvidedAuthenticationToken($user)); return $this->sendLoginResponse($user, $request); diff --git a/app/Http/Middleware/Api/Client/Server/ResourceBelongsToServer.php b/app/Http/Middleware/Api/Client/Server/ResourceBelongsToServer.php index 2881702a3..0ead01f1d 100644 --- a/app/Http/Middleware/Api/Client/Server/ResourceBelongsToServer.php +++ b/app/Http/Middleware/Api/Client/Server/ResourceBelongsToServer.php @@ -27,7 +27,9 @@ class ResourceBelongsToServer public function handle(Request $request, \Closure $next): mixed { $params = $request->route()->parameters(); - if (is_null($params) || !$params['server'] instanceof Server) { + + $server = $params['server'] ?? null; + if (!$server instanceof Server) { throw new \InvalidArgumentException('This middleware cannot be used in a context that is missing a server in the parameters.'); } diff --git a/app/Http/Middleware/RequireTwoFactorAuthentication.php b/app/Http/Middleware/RequireTwoFactorAuthentication.php index 4ab925e5b..68174f0fe 100644 --- a/app/Http/Middleware/RequireTwoFactorAuthentication.php +++ b/app/Http/Middleware/RequireTwoFactorAuthentication.php @@ -35,7 +35,6 @@ class RequireTwoFactorAuthentication */ public function handle(Request $request, \Closure $next): mixed { - /** @var \App\Models\User $user */ $user = $request->user(); $uri = rtrim($request->getRequestUri(), '/') . '/'; $current = $request->route()->getName(); @@ -44,6 +43,8 @@ class RequireTwoFactorAuthentication return $next($request); } + /** @var \App\Models\User $user */ + $level = (int) config('panel.auth.2fa_required'); // If this setting is not configured, or the user is already using 2FA then we can just // send them right through, nothing else needs to be checked. diff --git a/app/Http/Requests/Api/Application/ApplicationApiRequest.php b/app/Http/Requests/Api/Application/ApplicationApiRequest.php index c29844252..a0e17c15d 100644 --- a/app/Http/Requests/Api/Application/ApplicationApiRequest.php +++ b/app/Http/Requests/Api/Application/ApplicationApiRequest.php @@ -37,12 +37,12 @@ abstract class ApplicationApiRequest extends FormRequest throw new PanelException('An ACL resource must be defined on API requests.'); } - /** @var ApiKey $token */ $token = $this->user()->currentAccessToken(); if ($token instanceof TransientToken) { return true; } + /** @var ApiKey $token */ if ($token->key_type === ApiKey::TYPE_ACCOUNT) { return true; } diff --git a/app/Models/Egg.php b/app/Models/Egg.php index 5ce9a3fde..d647a6390 100644 --- a/app/Models/Egg.php +++ b/app/Models/Egg.php @@ -146,7 +146,7 @@ class Egg extends Model */ public function getCopyScriptInstallAttribute(): ?string { - if (!is_null($this->script_install) || is_null($this->copy_script_from)) { + if (!empty($this->script_install) || empty($this->copy_script_from)) { return $this->script_install; } @@ -159,7 +159,7 @@ class Egg extends Model */ public function getCopyScriptEntryAttribute(): string { - if (!is_null($this->script_entry) || is_null($this->copy_script_from)) { + if (!empty($this->script_entry) || empty($this->copy_script_from)) { return $this->script_entry; } @@ -172,7 +172,7 @@ class Egg extends Model */ public function getCopyScriptContainerAttribute(): string { - if (!is_null($this->script_container) || is_null($this->copy_script_from)) { + if (!empty($this->script_container) || empty($this->copy_script_from)) { return $this->script_container; } diff --git a/app/Services/Backups/InitiateBackupService.php b/app/Services/Backups/InitiateBackupService.php index f312a840b..468f0d3cf 100644 --- a/app/Services/Backups/InitiateBackupService.php +++ b/app/Services/Backups/InitiateBackupService.php @@ -96,7 +96,6 @@ class InitiateBackupService // Get the oldest backup the server has that is not "locked" (indicating a backup that should // never be automatically purged). If we find a backup we will delete it and then continue with // this process. If no backup is found that can be used an exception is thrown. - /** @var \App\Models\Backup $oldest */ $oldest = $successful->where('is_locked', false)->orderBy('created_at')->first(); if (!$oldest) { throw new TooManyBackupsException($server->backup_limit); diff --git a/app/Services/Databases/DatabaseManagementService.php b/app/Services/Databases/DatabaseManagementService.php index efcccecca..0b0255be7 100644 --- a/app/Services/Databases/DatabaseManagementService.php +++ b/app/Services/Databases/DatabaseManagementService.php @@ -94,40 +94,23 @@ class DatabaseManagementService ), ]); - $database = null; + return $this->connection->transaction(function () use ($data, &$database) { + $database = $this->createModel($data); - try { - return $this->connection->transaction(function () use ($data, &$database) { - $database = $this->createModel($data); + $this->dynamic->set('dynamic', $data['database_host_id']); - $this->dynamic->set('dynamic', $data['database_host_id']); + $database->createDatabase($database->database); + $database->createUser( + $database->username, + $database->remote, + $this->encrypter->decrypt($database->password), + $database->max_connections + ); + $database->assignUserToDatabase($database->database, $database->username, $database->remote); + $database->flush(); - $database->createDatabase($database->database); - $database->createUser( - $database->username, - $database->remote, - $this->encrypter->decrypt($database->password), - $database->max_connections - ); - $database->assignUserToDatabase($database->database, $database->username, $database->remote); - $database->flush(); - - return $database; - }); - } catch (Exception $exception) { - try { - if ($database instanceof Database) { - $database->dropDatabase($database->database); - $database->dropUser($database->username, $database->remote); - $database->flush(); - } - } catch (Exception) { - // Do nothing here. We've already encountered an issue before this point so no - // reason to prioritize this error over the initial one. - } - - throw $exception; - } + return $database; + }); } /** diff --git a/app/Services/Schedules/ProcessScheduleService.php b/app/Services/Schedules/ProcessScheduleService.php index 33601d53b..5908fed2d 100644 --- a/app/Services/Schedules/ProcessScheduleService.php +++ b/app/Services/Schedules/ProcessScheduleService.php @@ -27,10 +27,9 @@ class ProcessScheduleService */ public function handle(Schedule $schedule, bool $now = false): void { - /** @var \App\Models\Task $task */ $task = $schedule->tasks()->orderBy('sequence_id')->first(); - if (is_null($task)) { + if (!$task) { throw new DisplayException('Cannot process schedule for task execution: no tasks are registered.'); } diff --git a/phpstan.neon b/phpstan.neon index d56f916ea..6636f150a 100644 --- a/phpstan.neon +++ b/phpstan.neon @@ -7,7 +7,7 @@ parameters: - app/ # Level 9 is the highest level - level: 3 + level: 4 ignoreErrors: # Prologue\Alerts defines its methods from its configuration file dynamically