diff --git a/app/Actions/Application/StopApplication.php b/app/Actions/Application/StopApplication.php
index 642b4ba45..ed929573e 100644
--- a/app/Actions/Application/StopApplication.php
+++ b/app/Actions/Application/StopApplication.php
@@ -4,6 +4,7 @@ namespace App\Actions\Application;
use App\Actions\Server\CleanupDocker;
use App\Models\Application;
+use Exception;
use Lorisleiva\Actions\Concerns\AsAction;
class StopApplication
@@ -23,7 +24,7 @@ class StopApplication
if ($server->isSwarm()) {
instant_remote_process(["docker stack rm {$application->uuid}"], $server);
- return;
+ return null;
}
$containersToStop = $application->getContainersToStop($previewDeployments);
@@ -36,8 +37,10 @@ class StopApplication
if ($dockerCleanup) {
CleanupDocker::dispatch($server, true);
}
- } catch (\Exception $e) {
+ } catch (Exception $e) {
return $e->getMessage();
}
+
+ return null;
}
}
diff --git a/app/Actions/Application/StopApplicationOneServer.php b/app/Actions/Application/StopApplicationOneServer.php
index b13b10efd..a55efc3f3 100644
--- a/app/Actions/Application/StopApplicationOneServer.php
+++ b/app/Actions/Application/StopApplicationOneServer.php
@@ -4,6 +4,7 @@ namespace App\Actions\Application;
use App\Models\Application;
use App\Models\Server;
+use Exception;
use Lorisleiva\Actions\Concerns\AsAction;
class StopApplicationOneServer
@@ -13,7 +14,7 @@ class StopApplicationOneServer
public function handle(Application $application, Server $server)
{
if ($application->destination->server->isSwarm()) {
- return;
+ return null;
}
if (! $server->isFunctional()) {
return 'Server is not functional';
@@ -31,8 +32,10 @@ class StopApplicationOneServer
}
}
}
- } catch (\Exception $e) {
+ } catch (Exception $e) {
return $e->getMessage();
}
+
+ return null;
}
}
diff --git a/app/Actions/CoolifyTask/PrepareCoolifyTask.php b/app/Actions/CoolifyTask/PrepareCoolifyTask.php
index 3f76a2e3c..fd6f697c6 100644
--- a/app/Actions/CoolifyTask/PrepareCoolifyTask.php
+++ b/app/Actions/CoolifyTask/PrepareCoolifyTask.php
@@ -4,6 +4,7 @@ namespace App\Actions\CoolifyTask;
use App\Data\CoolifyTaskArgs;
use App\Jobs\CoolifyTask;
+use Illuminate\Database\Eloquent\Model;
use Spatie\Activitylog\Models\Activity;
/**
@@ -17,36 +18,36 @@ class PrepareCoolifyTask
protected CoolifyTaskArgs $remoteProcessArgs;
- public function __construct(CoolifyTaskArgs $remoteProcessArgs)
+ public function __construct(CoolifyTaskArgs $coolifyTaskArgs)
{
- $this->remoteProcessArgs = $remoteProcessArgs;
+ $this->remoteProcessArgs = $coolifyTaskArgs;
- if ($remoteProcessArgs->model) {
- $properties = $remoteProcessArgs->toArray();
+ if ($coolifyTaskArgs->model instanceof Model) {
+ $properties = $coolifyTaskArgs->toArray();
unset($properties['model']);
$this->activity = activity()
->withProperties($properties)
- ->performedOn($remoteProcessArgs->model)
- ->event($remoteProcessArgs->type)
+ ->performedOn($coolifyTaskArgs->model)
+ ->event($coolifyTaskArgs->type)
->log('[]');
} else {
$this->activity = activity()
- ->withProperties($remoteProcessArgs->toArray())
- ->event($remoteProcessArgs->type)
+ ->withProperties($coolifyTaskArgs->toArray())
+ ->event($coolifyTaskArgs->type)
->log('[]');
}
}
public function __invoke(): Activity
{
- $job = new CoolifyTask(
+ $coolifyTask = new CoolifyTask(
activity: $this->activity,
ignore_errors: $this->remoteProcessArgs->ignore_errors,
call_event_on_finish: $this->remoteProcessArgs->call_event_on_finish,
call_event_data: $this->remoteProcessArgs->call_event_data,
);
- dispatch($job);
+ dispatch($coolifyTask);
$this->activity->refresh();
return $this->activity;
diff --git a/app/Actions/CoolifyTask/RunRemoteProcess.php b/app/Actions/CoolifyTask/RunRemoteProcess.php
index 981b81378..78e995342 100644
--- a/app/Actions/CoolifyTask/RunRemoteProcess.php
+++ b/app/Actions/CoolifyTask/RunRemoteProcess.php
@@ -11,7 +11,10 @@ use Illuminate\Process\ProcessResult;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Log;
use Illuminate\Support\Facades\Process;
+use JsonException;
+use RuntimeException;
use Spatie\Activitylog\Models\Activity;
+use Throwable;
class RunRemoteProcess
{
@@ -21,9 +24,9 @@ class RunRemoteProcess
public bool $ignore_errors;
- public $call_event_on_finish = null;
+ public $call_event_on_finish;
- public $call_event_data = null;
+ public $call_event_data;
protected $time_start;
@@ -41,7 +44,7 @@ class RunRemoteProcess
public function __construct(Activity $activity, bool $hide_from_output = false, bool $ignore_errors = false, $call_event_on_finish = null, $call_event_data = null)
{
if ($activity->getExtraProperty('type') !== ActivityTypes::INLINE->value && $activity->getExtraProperty('type') !== ActivityTypes::COMMAND->value) {
- throw new \RuntimeException('Incompatible Activity to run a remote command.');
+ throw new RuntimeException('Incompatible Activity to run a remote command.');
}
$this->activity = $activity;
@@ -63,7 +66,7 @@ class RunRemoteProcess
associative: true,
flags: JSON_THROW_ON_ERROR | JSON_UNESCAPED_UNICODE
);
- } catch (\JsonException $exception) {
+ } catch (JsonException $exception) {
return '';
}
@@ -79,12 +82,12 @@ class RunRemoteProcess
$status = ProcessStatus::IN_PROGRESS;
$timeout = config('constants.ssh.command_timeout');
- $process = Process::timeout($timeout)->start($this->getCommand(), $this->handleOutput(...));
+ $invokedProcess = Process::timeout($timeout)->start($this->getCommand(), $this->handleOutput(...));
$this->activity->properties = $this->activity->properties->merge([
- 'process_id' => $process->id(),
+ 'process_id' => $invokedProcess->id(),
]);
- $processResult = $process->wait();
+ $processResult = $invokedProcess->wait();
// $processResult = Process::timeout($timeout)->run($this->getCommand(), $this->handleOutput(...));
if ($this->activity->properties->get('status') === ProcessStatus::ERROR->value) {
$status = ProcessStatus::ERROR;
@@ -111,7 +114,7 @@ class RunRemoteProcess
]);
$this->activity->save();
if ($processResult->exitCode() != 0 && ! $this->ignore_errors) {
- throw new \RuntimeException($processResult->errorOutput(), $processResult->exitCode());
+ throw new RuntimeException($processResult->errorOutput(), $processResult->exitCode());
}
if ($this->call_event_on_finish) {
try {
@@ -124,7 +127,7 @@ class RunRemoteProcess
'userId' => $this->activity->causer_id,
]));
}
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
Log::error('Error calling event: '.$e->getMessage());
}
}
diff --git a/app/Actions/Database/StartClickhouse.php b/app/Actions/Database/StartClickhouse.php
index f218fcabb..9d7114b1e 100644
--- a/app/Actions/Database/StartClickhouse.php
+++ b/app/Actions/Database/StartClickhouse.php
@@ -16,9 +16,9 @@ class StartClickhouse
public string $configuration_dir;
- public function handle(StandaloneClickhouse $database)
+ public function handle(StandaloneClickhouse $standaloneClickhouse)
{
- $this->database = $database;
+ $this->database = $standaloneClickhouse;
$container_name = $this->database->uuid;
$this->configuration_dir = database_configuration_dir().'/'.$container_name;
@@ -103,12 +103,12 @@ class StartClickhouse
$this->commands[] = "echo '{$docker_compose_base64}' | base64 -d | tee $this->configuration_dir/docker-compose.yml > /dev/null";
$readme = generate_readme_file($this->database->name, now());
$this->commands[] = "echo '{$readme}' > $this->configuration_dir/README.md";
- $this->commands[] = "echo 'Pulling {$database->image} image.'";
+ $this->commands[] = "echo 'Pulling {$standaloneClickhouse->image} image.'";
$this->commands[] = "docker compose -f $this->configuration_dir/docker-compose.yml pull";
$this->commands[] = "docker compose -f $this->configuration_dir/docker-compose.yml up -d";
$this->commands[] = "echo 'Database started.'";
- return remote_process($this->commands, $database->destination->server, callEventOnFinish: 'DatabaseStatusChanged');
+ return remote_process($this->commands, $standaloneClickhouse->destination->server, callEventOnFinish: 'DatabaseStatusChanged');
}
private function generate_local_persistent_volumes()
diff --git a/app/Actions/Database/StartDatabase.php b/app/Actions/Database/StartDatabase.php
index e2fa6fc87..0b2a3ce26 100644
--- a/app/Actions/Database/StartDatabase.php
+++ b/app/Actions/Database/StartDatabase.php
@@ -25,28 +25,28 @@ class StartDatabase
return 'Server is not functional';
}
switch ($database->getMorphClass()) {
- case \App\Models\StandalonePostgresql::class:
+ case StandalonePostgresql::class:
$activity = StartPostgresql::run($database);
break;
- case \App\Models\StandaloneRedis::class:
+ case StandaloneRedis::class:
$activity = StartRedis::run($database);
break;
- case \App\Models\StandaloneMongodb::class:
+ case StandaloneMongodb::class:
$activity = StartMongodb::run($database);
break;
- case \App\Models\StandaloneMysql::class:
+ case StandaloneMysql::class:
$activity = StartMysql::run($database);
break;
- case \App\Models\StandaloneMariadb::class:
+ case StandaloneMariadb::class:
$activity = StartMariadb::run($database);
break;
- case \App\Models\StandaloneKeydb::class:
+ case StandaloneKeydb::class:
$activity = StartKeydb::run($database);
break;
- case \App\Models\StandaloneDragonfly::class:
+ case StandaloneDragonfly::class:
$activity = StartDragonfly::run($database);
break;
- case \App\Models\StandaloneClickhouse::class:
+ case StandaloneClickhouse::class:
$activity = StartClickhouse::run($database);
break;
}
diff --git a/app/Actions/Database/StartDatabaseProxy.php b/app/Actions/Database/StartDatabaseProxy.php
index 3ddf6c036..89ed5935b 100644
--- a/app/Actions/Database/StartDatabaseProxy.php
+++ b/app/Actions/Database/StartDatabaseProxy.php
@@ -28,7 +28,7 @@ class StartDatabaseProxy
$server = data_get($database, 'destination.server');
$containerName = data_get($database, 'uuid');
$proxyContainerName = "{$database->uuid}-proxy";
- if ($database->getMorphClass() === \App\Models\ServiceDatabase::class) {
+ if ($database->getMorphClass() === ServiceDatabase::class) {
$databaseType = $database->databaseType();
// $connectPredefined = data_get($database, 'service.connect_to_docker_network');
$network = $database->service->uuid;
@@ -36,54 +36,54 @@ class StartDatabaseProxy
$proxyContainerName = "{$database->service->uuid}-proxy";
switch ($databaseType) {
case 'standalone-mariadb':
- $type = \App\Models\StandaloneMariadb::class;
+ $type = StandaloneMariadb::class;
$containerName = "mariadb-{$database->service->uuid}";
break;
case 'standalone-mongodb':
- $type = \App\Models\StandaloneMongodb::class;
+ $type = StandaloneMongodb::class;
$containerName = "mongodb-{$database->service->uuid}";
break;
case 'standalone-mysql':
- $type = \App\Models\StandaloneMysql::class;
+ $type = StandaloneMysql::class;
$containerName = "mysql-{$database->service->uuid}";
break;
case 'standalone-postgresql':
- $type = \App\Models\StandalonePostgresql::class;
+ $type = StandalonePostgresql::class;
$containerName = "postgresql-{$database->service->uuid}";
break;
case 'standalone-redis':
- $type = \App\Models\StandaloneRedis::class;
+ $type = StandaloneRedis::class;
$containerName = "redis-{$database->service->uuid}";
break;
case 'standalone-keydb':
- $type = \App\Models\StandaloneKeydb::class;
+ $type = StandaloneKeydb::class;
$containerName = "keydb-{$database->service->uuid}";
break;
case 'standalone-dragonfly':
- $type = \App\Models\StandaloneDragonfly::class;
+ $type = StandaloneDragonfly::class;
$containerName = "dragonfly-{$database->service->uuid}";
break;
case 'standalone-clickhouse':
- $type = \App\Models\StandaloneClickhouse::class;
+ $type = StandaloneClickhouse::class;
$containerName = "clickhouse-{$database->service->uuid}";
break;
}
}
- if ($type === \App\Models\StandaloneRedis::class) {
+ if ($type === StandaloneRedis::class) {
$internalPort = 6379;
- } elseif ($type === \App\Models\StandalonePostgresql::class) {
+ } elseif ($type === StandalonePostgresql::class) {
$internalPort = 5432;
- } elseif ($type === \App\Models\StandaloneMongodb::class) {
+ } elseif ($type === StandaloneMongodb::class) {
$internalPort = 27017;
- } elseif ($type === \App\Models\StandaloneMysql::class) {
+ } elseif ($type === StandaloneMysql::class) {
$internalPort = 3306;
- } elseif ($type === \App\Models\StandaloneMariadb::class) {
+ } elseif ($type === StandaloneMariadb::class) {
$internalPort = 3306;
- } elseif ($type === \App\Models\StandaloneKeydb::class) {
+ } elseif ($type === StandaloneKeydb::class) {
$internalPort = 6379;
- } elseif ($type === \App\Models\StandaloneDragonfly::class) {
+ } elseif ($type === StandaloneDragonfly::class) {
$internalPort = 6379;
- } elseif ($type === \App\Models\StandaloneClickhouse::class) {
+ } elseif ($type === StandaloneClickhouse::class) {
$internalPort = 9000;
}
$configuration_dir = database_proxy_dir($database->uuid);
diff --git a/app/Actions/Database/StartDragonfly.php b/app/Actions/Database/StartDragonfly.php
index 4f9f45b7c..7ddac1c1d 100644
--- a/app/Actions/Database/StartDragonfly.php
+++ b/app/Actions/Database/StartDragonfly.php
@@ -16,9 +16,9 @@ class StartDragonfly
public string $configuration_dir;
- public function handle(StandaloneDragonfly $database)
+ public function handle(StandaloneDragonfly $standaloneDragonfly)
{
- $this->database = $database;
+ $this->database = $standaloneDragonfly;
$startCommand = "dragonfly --requirepass {$this->database->dragonfly_password}";
@@ -100,12 +100,12 @@ class StartDragonfly
$this->commands[] = "echo '{$docker_compose_base64}' | base64 -d | tee $this->configuration_dir/docker-compose.yml > /dev/null";
$readme = generate_readme_file($this->database->name, now());
$this->commands[] = "echo '{$readme}' > $this->configuration_dir/README.md";
- $this->commands[] = "echo 'Pulling {$database->image} image.'";
+ $this->commands[] = "echo 'Pulling {$standaloneDragonfly->image} image.'";
$this->commands[] = "docker compose -f $this->configuration_dir/docker-compose.yml pull";
$this->commands[] = "docker compose -f $this->configuration_dir/docker-compose.yml up -d";
$this->commands[] = "echo 'Database started.'";
- return remote_process($this->commands, $database->destination->server, callEventOnFinish: 'DatabaseStatusChanged');
+ return remote_process($this->commands, $standaloneDragonfly->destination->server, callEventOnFinish: 'DatabaseStatusChanged');
}
private function generate_local_persistent_volumes()
diff --git a/app/Actions/Database/StartKeydb.php b/app/Actions/Database/StartKeydb.php
index 6c733d318..8e5da12f4 100644
--- a/app/Actions/Database/StartKeydb.php
+++ b/app/Actions/Database/StartKeydb.php
@@ -17,9 +17,9 @@ class StartKeydb
public string $configuration_dir;
- public function handle(StandaloneKeydb $database)
+ public function handle(StandaloneKeydb $standaloneKeydb)
{
- $this->database = $database;
+ $this->database = $standaloneKeydb;
$startCommand = "keydb-server --requirepass {$this->database->keydb_password} --appendonly yes";
@@ -92,7 +92,7 @@ class StartKeydb
if (count($volume_names) > 0) {
$docker_compose['volumes'] = $volume_names;
}
- if (! is_null($this->database->keydb_conf) || ! empty($this->database->keydb_conf)) {
+ if (! is_null($this->database->keydb_conf) || $this->database->keydb_conf !== null) {
$docker_compose['services'][$container_name]['volumes'][] = [
'type' => 'bind',
'source' => $this->configuration_dir.'/keydb.conf',
@@ -110,12 +110,12 @@ class StartKeydb
$this->commands[] = "echo '{$docker_compose_base64}' | base64 -d | tee $this->configuration_dir/docker-compose.yml > /dev/null";
$readme = generate_readme_file($this->database->name, now());
$this->commands[] = "echo '{$readme}' > $this->configuration_dir/README.md";
- $this->commands[] = "echo 'Pulling {$database->image} image.'";
+ $this->commands[] = "echo 'Pulling {$standaloneKeydb->image} image.'";
$this->commands[] = "docker compose -f $this->configuration_dir/docker-compose.yml pull";
$this->commands[] = "docker compose -f $this->configuration_dir/docker-compose.yml up -d";
$this->commands[] = "echo 'Database started.'";
- return remote_process($this->commands, $database->destination->server, callEventOnFinish: 'DatabaseStatusChanged');
+ return remote_process($this->commands, $standaloneKeydb->destination->server, callEventOnFinish: 'DatabaseStatusChanged');
}
private function generate_local_persistent_volumes()
diff --git a/app/Actions/Database/StartMariadb.php b/app/Actions/Database/StartMariadb.php
index 299b07385..f161754d1 100644
--- a/app/Actions/Database/StartMariadb.php
+++ b/app/Actions/Database/StartMariadb.php
@@ -16,9 +16,9 @@ class StartMariadb
public string $configuration_dir;
- public function handle(StandaloneMariadb $database)
+ public function handle(StandaloneMariadb $standaloneMariadb)
{
- $this->database = $database;
+ $this->database = $standaloneMariadb;
$container_name = $this->database->uuid;
$this->configuration_dir = database_configuration_dir().'/'.$container_name;
@@ -87,7 +87,7 @@ class StartMariadb
if (count($volume_names) > 0) {
$docker_compose['volumes'] = $volume_names;
}
- if (! is_null($this->database->mariadb_conf) || ! empty($this->database->mariadb_conf)) {
+ if (! is_null($this->database->mariadb_conf) || $this->database->mariadb_conf !== null) {
$docker_compose['services'][$container_name]['volumes'][] = [
'type' => 'bind',
'source' => $this->configuration_dir.'/custom-config.cnf',
@@ -105,12 +105,12 @@ class StartMariadb
$this->commands[] = "echo '{$docker_compose_base64}' | base64 -d | tee $this->configuration_dir/docker-compose.yml > /dev/null";
$readme = generate_readme_file($this->database->name, now());
$this->commands[] = "echo '{$readme}' > $this->configuration_dir/README.md";
- $this->commands[] = "echo 'Pulling {$database->image} image.'";
+ $this->commands[] = "echo 'Pulling {$standaloneMariadb->image} image.'";
$this->commands[] = "docker compose -f $this->configuration_dir/docker-compose.yml pull";
$this->commands[] = "docker compose -f $this->configuration_dir/docker-compose.yml up -d";
$this->commands[] = "echo 'Database started.'";
- return remote_process($this->commands, $database->destination->server, callEventOnFinish: 'DatabaseStatusChanged');
+ return remote_process($this->commands, $standaloneMariadb->destination->server, callEventOnFinish: 'DatabaseStatusChanged');
}
private function generate_local_persistent_volumes()
diff --git a/app/Actions/Database/StartMongodb.php b/app/Actions/Database/StartMongodb.php
index 89d35ca7b..f04d3d76b 100644
--- a/app/Actions/Database/StartMongodb.php
+++ b/app/Actions/Database/StartMongodb.php
@@ -16,9 +16,9 @@ class StartMongodb
public string $configuration_dir;
- public function handle(StandaloneMongodb $database)
+ public function handle(StandaloneMongodb $standaloneMongodb)
{
- $this->database = $database;
+ $this->database = $standaloneMongodb;
$startCommand = 'mongod';
@@ -99,7 +99,7 @@ class StartMongodb
if (count($volume_names) > 0) {
$docker_compose['volumes'] = $volume_names;
}
- if (! is_null($this->database->mongo_conf) || ! empty($this->database->mongo_conf)) {
+ if (! is_null($this->database->mongo_conf) || $this->database->mongo_conf !== null) {
$docker_compose['services'][$container_name]['volumes'][] = [
'type' => 'bind',
'source' => $this->configuration_dir.'/mongod.conf',
@@ -125,12 +125,12 @@ class StartMongodb
$this->commands[] = "echo '{$docker_compose_base64}' | base64 -d | tee $this->configuration_dir/docker-compose.yml > /dev/null";
$readme = generate_readme_file($this->database->name, now());
$this->commands[] = "echo '{$readme}' > $this->configuration_dir/README.md";
- $this->commands[] = "echo 'Pulling {$database->image} image.'";
+ $this->commands[] = "echo 'Pulling {$standaloneMongodb->image} image.'";
$this->commands[] = "docker compose -f $this->configuration_dir/docker-compose.yml pull";
$this->commands[] = "docker compose -f $this->configuration_dir/docker-compose.yml up -d";
$this->commands[] = "echo 'Database started.'";
- return remote_process($this->commands, $database->destination->server, callEventOnFinish: 'DatabaseStatusChanged');
+ return remote_process($this->commands, $standaloneMongodb->destination->server, callEventOnFinish: 'DatabaseStatusChanged');
}
private function generate_local_persistent_volumes()
diff --git a/app/Actions/Database/StartMysql.php b/app/Actions/Database/StartMysql.php
index 73db1512a..fcdb4225f 100644
--- a/app/Actions/Database/StartMysql.php
+++ b/app/Actions/Database/StartMysql.php
@@ -16,9 +16,9 @@ class StartMysql
public string $configuration_dir;
- public function handle(StandaloneMysql $database)
+ public function handle(StandaloneMysql $standaloneMysql)
{
- $this->database = $database;
+ $this->database = $standaloneMysql;
$container_name = $this->database->uuid;
$this->configuration_dir = database_configuration_dir().'/'.$container_name;
@@ -87,7 +87,7 @@ class StartMysql
if (count($volume_names) > 0) {
$docker_compose['volumes'] = $volume_names;
}
- if (! is_null($this->database->mysql_conf) || ! empty($this->database->mysql_conf)) {
+ if (! is_null($this->database->mysql_conf) || $this->database->mysql_conf !== null) {
$docker_compose['services'][$container_name]['volumes'][] = [
'type' => 'bind',
'source' => $this->configuration_dir.'/custom-config.cnf',
@@ -105,12 +105,12 @@ class StartMysql
$this->commands[] = "echo '{$docker_compose_base64}' | base64 -d | tee $this->configuration_dir/docker-compose.yml > /dev/null";
$readme = generate_readme_file($this->database->name, now());
$this->commands[] = "echo '{$readme}' > $this->configuration_dir/README.md";
- $this->commands[] = "echo 'Pulling {$database->image} image.'";
+ $this->commands[] = "echo 'Pulling {$standaloneMysql->image} image.'";
$this->commands[] = "docker compose -f $this->configuration_dir/docker-compose.yml pull";
$this->commands[] = "docker compose -f $this->configuration_dir/docker-compose.yml up -d";
$this->commands[] = "echo 'Database started.'";
- return remote_process($this->commands, $database->destination->server, callEventOnFinish: 'DatabaseStatusChanged');
+ return remote_process($this->commands, $standaloneMysql->destination->server, callEventOnFinish: 'DatabaseStatusChanged');
}
private function generate_local_persistent_volumes()
diff --git a/app/Actions/Database/StartPostgresql.php b/app/Actions/Database/StartPostgresql.php
index 035849340..a65ad24ce 100644
--- a/app/Actions/Database/StartPostgresql.php
+++ b/app/Actions/Database/StartPostgresql.php
@@ -18,9 +18,9 @@ class StartPostgresql
public string $configuration_dir;
- public function handle(StandalonePostgresql $database)
+ public function handle(StandalonePostgresql $standalonePostgresql)
{
- $this->database = $database;
+ $this->database = $standalonePostgresql;
$container_name = $this->database->uuid;
$this->configuration_dir = database_configuration_dir().'/'.$container_name;
if (isDev()) {
@@ -97,15 +97,13 @@ class StartPostgresql
if (count($volume_names) > 0) {
$docker_compose['volumes'] = $volume_names;
}
- if (count($this->init_scripts) > 0) {
- foreach ($this->init_scripts as $init_script) {
- $docker_compose['services'][$container_name]['volumes'][] = [
- 'type' => 'bind',
- 'source' => $init_script,
- 'target' => '/docker-entrypoint-initdb.d/'.basename($init_script),
- 'read_only' => true,
- ];
- }
+ foreach ($this->init_scripts as $init_script) {
+ $docker_compose['services'][$container_name]['volumes'][] = [
+ 'type' => 'bind',
+ 'source' => $init_script,
+ 'target' => '/docker-entrypoint-initdb.d/'.basename($init_script),
+ 'read_only' => true,
+ ];
}
if (filled($this->database->postgres_conf)) {
$docker_compose['services'][$container_name]['volumes'][] = [
@@ -129,12 +127,12 @@ class StartPostgresql
$this->commands[] = "echo '{$docker_compose_base64}' | base64 -d | tee $this->configuration_dir/docker-compose.yml > /dev/null";
$readme = generate_readme_file($this->database->name, now());
$this->commands[] = "echo '{$readme}' > $this->configuration_dir/README.md";
- $this->commands[] = "echo 'Pulling {$database->image} image.'";
+ $this->commands[] = "echo 'Pulling {$standalonePostgresql->image} image.'";
$this->commands[] = "docker compose -f $this->configuration_dir/docker-compose.yml pull";
$this->commands[] = "docker compose -f $this->configuration_dir/docker-compose.yml up -d";
$this->commands[] = "echo 'Database started.'";
- return remote_process($this->commands, $database->destination->server, callEventOnFinish: 'DatabaseStatusChanged');
+ return remote_process($this->commands, $standalonePostgresql->destination->server, callEventOnFinish: 'DatabaseStatusChanged');
}
private function generate_local_persistent_volumes()
diff --git a/app/Actions/Database/StartRedis.php b/app/Actions/Database/StartRedis.php
index 1beebd134..a32af8c96 100644
--- a/app/Actions/Database/StartRedis.php
+++ b/app/Actions/Database/StartRedis.php
@@ -17,9 +17,9 @@ class StartRedis
public string $configuration_dir;
- public function handle(StandaloneRedis $database)
+ public function handle(StandaloneRedis $standaloneRedis)
{
- $this->database = $database;
+ $this->database = $standaloneRedis;
$container_name = $this->database->uuid;
$this->configuration_dir = database_configuration_dir().'/'.$container_name;
@@ -96,7 +96,7 @@ class StartRedis
if (count($volume_names) > 0) {
$docker_compose['volumes'] = $volume_names;
}
- if (! is_null($this->database->redis_conf) || ! empty($this->database->redis_conf)) {
+ if (! is_null($this->database->redis_conf) || $this->database->redis_conf !== null) {
$docker_compose['services'][$container_name]['volumes'][] = [
'type' => 'bind',
'source' => $this->configuration_dir.'/redis.conf',
@@ -114,12 +114,12 @@ class StartRedis
$this->commands[] = "echo '{$docker_compose_base64}' | base64 -d | tee $this->configuration_dir/docker-compose.yml > /dev/null";
$readme = generate_readme_file($this->database->name, now());
$this->commands[] = "echo '{$readme}' > $this->configuration_dir/README.md";
- $this->commands[] = "echo 'Pulling {$database->image} image.'";
+ $this->commands[] = "echo 'Pulling {$standaloneRedis->image} image.'";
$this->commands[] = "docker compose -f $this->configuration_dir/docker-compose.yml pull";
$this->commands[] = "docker compose -f $this->configuration_dir/docker-compose.yml up -d";
$this->commands[] = "echo 'Database started.'";
- return remote_process($this->commands, $database->destination->server, callEventOnFinish: 'DatabaseStatusChanged');
+ return remote_process($this->commands, $standaloneRedis->destination->server, callEventOnFinish: 'DatabaseStatusChanged');
}
private function generate_local_persistent_volumes()
diff --git a/app/Actions/Database/StopDatabase.php b/app/Actions/Database/StopDatabase.php
index e4cea7cee..2db2ddfc4 100644
--- a/app/Actions/Database/StopDatabase.php
+++ b/app/Actions/Database/StopDatabase.php
@@ -26,10 +26,8 @@ class StopDatabase
}
$this->stopContainer($database, $database->uuid, 300);
- if (! $isDeleteOperation) {
- if ($dockerCleanup) {
- CleanupDocker::dispatch($server, true);
- }
+ if (! $isDeleteOperation && $dockerCleanup) {
+ CleanupDocker::dispatch($server, true);
}
if ($database->is_public) {
@@ -43,10 +41,10 @@ class StopDatabase
{
$server = $database->destination->server;
- $process = Process::timeout($timeout)->start("docker stop --time=$timeout $containerName");
+ $invokedProcess = Process::timeout($timeout)->start("docker stop --time=$timeout $containerName");
$startTime = time();
- while ($process->running()) {
+ while ($invokedProcess->running()) {
if (time() - $startTime >= $timeout) {
$this->forceStopContainer($containerName, $server);
break;
@@ -66,10 +64,4 @@ class StopDatabase
{
instant_remote_process(command: ["docker rm -f $containerName"], server: $server, throwError: false);
}
-
- private function deleteConnectedNetworks($uuid, $server)
- {
- instant_remote_process(["docker network disconnect {$uuid} coolify-proxy"], $server, false);
- instant_remote_process(["docker network rm {$uuid}"], $server, false);
- }
}
diff --git a/app/Actions/Database/StopDatabaseProxy.php b/app/Actions/Database/StopDatabaseProxy.php
index 9ee794351..451a5d3dd 100644
--- a/app/Actions/Database/StopDatabaseProxy.php
+++ b/app/Actions/Database/StopDatabaseProxy.php
@@ -24,7 +24,7 @@ class StopDatabaseProxy
{
$server = data_get($database, 'destination.server');
$uuid = $database->uuid;
- if ($database->getMorphClass() === \App\Models\ServiceDatabase::class) {
+ if ($database->getMorphClass() === ServiceDatabase::class) {
$uuid = $database->service->uuid;
$server = data_get($database, 'service.server');
}
diff --git a/app/Actions/Docker/GetContainersStatus.php b/app/Actions/Docker/GetContainersStatus.php
index 706356930..aa19d680b 100644
--- a/app/Actions/Docker/GetContainersStatus.php
+++ b/app/Actions/Docker/GetContainersStatus.php
@@ -47,20 +47,20 @@ class GetContainersStatus
$this->applications = $this->applications->filter(function ($value, $key) use ($skip_these_applications) {
return ! $skip_these_applications->pluck('id')->contains($value->id);
});
- if ($this->containers === null) {
+ if (! $this->containers instanceof Collection) {
['containers' => $this->containers, 'containerReplicates' => $this->containerReplicates] = $this->server->getContainers();
}
if (is_null($this->containers)) {
- return;
+ return null;
}
if ($this->containerReplicates) {
- foreach ($this->containerReplicates as $containerReplica) {
- $name = data_get($containerReplica, 'Name');
- $this->containers = $this->containers->map(function ($container) use ($name, $containerReplica) {
+ foreach ($this->containerReplicates as $containerReplicate) {
+ $name = data_get($containerReplicate, 'Name');
+ $this->containers = $this->containers->map(function ($container) use ($name, $containerReplicate) {
if (data_get($container, 'Spec.Name') === $name) {
- $replicas = data_get($containerReplica, 'Replicas');
+ $replicas = data_get($containerReplicate, 'Replicas');
$running = str($replicas)->explode('/')[0];
$total = str($replicas)->explode('/')[1];
if ($running === $total) {
@@ -102,7 +102,7 @@ class GetContainersStatus
if (str($applicationId)->contains('-')) {
$applicationId = str($applicationId)->before('-');
}
- $preview = ApplicationPreview::where('application_id', $applicationId)->where('pull_request_id', $pullRequestId)->first();
+ $preview = ApplicationPreview::query()->where('application_id', $applicationId)->where('pull_request_id', $pullRequestId)->first();
if ($preview) {
$foundApplicationPreviews[] = $preview->id;
$statusFromDb = $preview->status;
@@ -112,7 +112,7 @@ class GetContainersStatus
$preview->update(['last_online_at' => now()]);
}
} else {
- //Notify user that this container should not be there.
+ // Notify user that this container should not be there.
}
} else {
$application = $this->applications->where('id', $applicationId)->first();
@@ -125,7 +125,7 @@ class GetContainersStatus
$application->update(['last_online_at' => now()]);
}
} else {
- //Notify user that this container should not be there.
+ // Notify user that this container should not be there.
}
}
} else {
@@ -136,7 +136,7 @@ class GetContainersStatus
if ($type === 'service') {
$database_id = data_get($labels, 'coolify.service.subId');
if ($database_id) {
- $service_db = ServiceDatabase::where('id', $database_id)->first();
+ $service_db = ServiceDatabase::query()->where('id', $database_id)->first();
if ($service_db) {
$uuid = data_get($service_db, 'service.uuid');
if ($uuid) {
@@ -145,9 +145,9 @@ class GetContainersStatus
$foundTcpProxy = $this->containers->filter(function ($value, $key) use ($uuid) {
if ($this->server->isSwarm()) {
return data_get($value, 'Spec.Name') === "coolify-proxy_$uuid";
- } else {
- return data_get($value, 'Name') === "/$uuid-proxy";
}
+
+ return data_get($value, 'Name') === "/$uuid-proxy";
})->first();
if (! $foundTcpProxy) {
StartDatabaseProxy::run($service_db);
@@ -173,9 +173,9 @@ class GetContainersStatus
$foundTcpProxy = $this->containers->filter(function ($value, $key) use ($uuid) {
if ($this->server->isSwarm()) {
return data_get($value, 'Spec.Name') === "coolify-proxy_$uuid";
- } else {
- return data_get($value, 'Name') === "/$uuid-proxy";
}
+
+ return data_get($value, 'Name') === "/$uuid-proxy";
})->first();
if (! $foundTcpProxy) {
StartDatabaseProxy::run($database);
@@ -223,16 +223,14 @@ class GetContainersStatus
foreach ($apps as $app) {
if (in_array("$app->id-$app->name", $foundServices)) {
continue;
- } else {
- $exitedServices->push($app);
}
+ $exitedServices->push($app);
}
foreach ($dbs as $db) {
if (in_array("$db->id-$db->name", $foundServices)) {
continue;
- } else {
- $exitedServices->push($db);
}
+ $exitedServices->push($db);
}
}
$exitedServices = $exitedServices->unique('uuid');
@@ -243,17 +241,11 @@ class GetContainersStatus
$name = data_get($exitedService, 'name');
$fqdn = data_get($exitedService, 'fqdn');
if ($name) {
- if ($fqdn) {
- $containerName = "$name, available at $fqdn";
- } else {
- $containerName = $name;
- }
+ $containerName = $fqdn ? "$name, available at $fqdn" : $name;
+ } elseif ($fqdn) {
+ $containerName = $fqdn;
} else {
- if ($fqdn) {
- $containerName = $fqdn;
- } else {
- $containerName = null;
- }
+ $containerName = null;
}
$projectUuid = data_get($service, 'environment.project.uuid');
$serviceUuid = data_get($service, 'uuid');
@@ -269,8 +261,8 @@ class GetContainersStatus
}
$notRunningApplications = $this->applications->pluck('id')->diff($foundApplications);
- foreach ($notRunningApplications as $applicationId) {
- $application = $this->applications->where('id', $applicationId)->first();
+ foreach ($notRunningApplications as $notRunningApplication) {
+ $application = $this->applications->where('id', $notRunningApplication)->first();
if (str($application->status)->startsWith('exited')) {
continue;
}
@@ -294,8 +286,8 @@ class GetContainersStatus
// $this->server->team?->notify(new ContainerStopped($containerName, $this->server, $url));
}
$notRunningApplicationPreviews = $previews->pluck('id')->diff($foundApplicationPreviews);
- foreach ($notRunningApplicationPreviews as $previewId) {
- $preview = $previews->where('id', $previewId)->first();
+ foreach ($notRunningApplicationPreviews as $notRunningApplicationPreview) {
+ $preview = $previews->where('id', $notRunningApplicationPreview)->first();
if (str($preview->status)->startsWith('exited')) {
continue;
}
@@ -319,21 +311,21 @@ class GetContainersStatus
// $this->server->team?->notify(new ContainerStopped($containerName, $this->server, $url));
}
$notRunningDatabases = $databases->pluck('id')->diff($foundDatabases);
- foreach ($notRunningDatabases as $database) {
- $database = $databases->where('id', $database)->first();
- if (str($database->status)->startsWith('exited')) {
+ foreach ($notRunningDatabases as $notRunningDatabase) {
+ $notRunningDatabase = $databases->where('id', $notRunningDatabase)->first();
+ if (str($notRunningDatabase->status)->startsWith('exited')) {
continue;
}
- $database->update(['status' => 'exited']);
+ $notRunningDatabase->update(['status' => 'exited']);
- $name = data_get($database, 'name');
- $fqdn = data_get($database, 'fqdn');
+ $name = data_get($notRunningDatabase, 'name');
+ $fqdn = data_get($notRunningDatabase, 'fqdn');
$containerName = $name;
- $projectUuid = data_get($database, 'environment.project.uuid');
- $environmentName = data_get($database, 'environment.name');
- $databaseUuid = data_get($database, 'uuid');
+ $projectUuid = data_get($notRunningDatabase, 'environment.project.uuid');
+ $environmentName = data_get($notRunningDatabase, 'environment.name');
+ $databaseUuid = data_get($notRunningDatabase, 'uuid');
if ($projectUuid && $databaseUuid && $environmentName) {
$url = base_url().'/project/'.$projectUuid.'/'.$environmentName.'/database/'.$databaseUuid;
@@ -342,5 +334,7 @@ class GetContainersStatus
}
// $this->server->team?->notify(new ContainerStopped($containerName, $this->server, $url));
}
+
+ return null;
}
}
diff --git a/app/Actions/Fortify/CreateNewUser.php b/app/Actions/Fortify/CreateNewUser.php
index ea2befd3a..d67db2a39 100644
--- a/app/Actions/Fortify/CreateNewUser.php
+++ b/app/Actions/Fortify/CreateNewUser.php
@@ -34,10 +34,10 @@ class CreateNewUser implements CreatesNewUsers
'password' => ['required', Password::defaults(), 'confirmed'],
])->validate();
- if (User::count() == 0) {
+ if (User::query()->count() == 0) {
// If this is the first user, make them the root user
// Team is already created in the database/seeders/ProductionSeeder.php
- $user = User::create([
+ $user = User::query()->create([
'id' => 0,
'name' => $input['name'],
'email' => strtolower($input['email']),
@@ -50,7 +50,7 @@ class CreateNewUser implements CreatesNewUsers
$settings->is_registration_enabled = false;
$settings->save();
} else {
- $user = User::create([
+ $user = User::query()->create([
'name' => $input['name'],
'email' => strtolower($input['email']),
'password' => Hash::make($input['password']),
diff --git a/app/Actions/Proxy/CheckConfiguration.php b/app/Actions/Proxy/CheckConfiguration.php
index bdeafd061..70bf5a221 100644
--- a/app/Actions/Proxy/CheckConfiguration.php
+++ b/app/Actions/Proxy/CheckConfiguration.php
@@ -3,6 +3,7 @@
namespace App\Actions\Proxy;
use App\Models\Server;
+use Exception;
use Lorisleiva\Actions\Concerns\AsAction;
class CheckConfiguration
@@ -25,7 +26,7 @@ class CheckConfiguration
$proxy_configuration = str(generate_default_proxy_configuration($server))->trim()->value();
}
if (! $proxy_configuration || is_null($proxy_configuration)) {
- throw new \Exception('Could not generate proxy configuration');
+ throw new Exception('Could not generate proxy configuration');
}
return $proxy_configuration;
diff --git a/app/Actions/Proxy/CheckProxy.php b/app/Actions/Proxy/CheckProxy.php
index 6c8dd5234..1dc5540c2 100644
--- a/app/Actions/Proxy/CheckProxy.php
+++ b/app/Actions/Proxy/CheckProxy.php
@@ -4,6 +4,7 @@ namespace App\Actions\Proxy;
use App\Enums\ProxyTypes;
use App\Models\Server;
+use Exception;
use Illuminate\Support\Facades\Log;
use Lorisleiva\Actions\Concerns\AsAction;
use Symfony\Component\Yaml\Yaml;
@@ -32,80 +33,74 @@ class CheckProxy
}
['uptime' => $uptime, 'error' => $error] = $server->validateConnection();
if (! $uptime) {
- throw new \Exception($error);
+ throw new Exception($error);
}
if (! $server->isProxyShouldRun()) {
if ($fromUI) {
- throw new \Exception('Proxy should not run. You selected the Custom Proxy.');
- } else {
- return false;
+ throw new Exception('Proxy should not run. You selected the Custom Proxy.');
}
+
+ return false;
}
if ($server->isSwarm()) {
$status = getContainerStatus($server, 'coolify-proxy_traefik');
$server->proxy->set('status', $status);
$server->save();
- if ($status === 'running') {
- return false;
- }
- return true;
- } else {
- $status = getContainerStatus($server, 'coolify-proxy');
- if ($status === 'running') {
- $server->proxy->set('status', 'running');
- $server->save();
-
- return false;
- }
- if ($server->settings->is_cloudflare_tunnel) {
- return false;
- }
- $ip = $server->ip;
- if ($server->id === 0) {
- $ip = 'host.docker.internal';
- }
-
- $portsToCheck = ['80', '443'];
-
- try {
- if ($server->proxyType() !== ProxyTypes::NONE->value) {
- $proxyCompose = CheckConfiguration::run($server);
- if (isset($proxyCompose)) {
- $yaml = Yaml::parse($proxyCompose);
- $portsToCheck = [];
- if ($server->proxyType() === ProxyTypes::TRAEFIK->value) {
- $ports = data_get($yaml, 'services.traefik.ports');
- } elseif ($server->proxyType() === ProxyTypes::CADDY->value) {
- $ports = data_get($yaml, 'services.caddy.ports');
- }
- if (isset($ports)) {
- foreach ($ports as $port) {
- $portsToCheck[] = str($port)->before(':')->value();
- }
- }
- }
- } else {
- $portsToCheck = [];
- }
- } catch (\Exception $e) {
- Log::error('Error checking proxy: '.$e->getMessage());
- }
- if (count($portsToCheck) === 0) {
- return false;
- }
- foreach ($portsToCheck as $port) {
- $connection = @fsockopen($ip, $port);
- if (is_resource($connection) && fclose($connection)) {
- if ($fromUI) {
- throw new \Exception("Port $port is in use.
You must stop the process using this port.
Docs: https://coolify.io/docs
Discord: https://coollabs.io/discord");
- } else {
- return false;
- }
- }
- }
-
- return true;
+ return $status !== 'running';
}
+ $status = getContainerStatus($server, 'coolify-proxy');
+ if ($status === 'running') {
+ $server->proxy->set('status', 'running');
+ $server->save();
+
+ return false;
+ }
+ if ($server->settings->is_cloudflare_tunnel) {
+ return false;
+ }
+ $ip = $server->ip;
+ if ($server->id === 0) {
+ $ip = 'host.docker.internal';
+ }
+ $portsToCheck = ['80', '443'];
+ try {
+ if ($server->proxyType() !== ProxyTypes::NONE->value) {
+ $proxyCompose = CheckConfiguration::run($server);
+ if (isset($proxyCompose)) {
+ $yaml = Yaml::parse($proxyCompose);
+ $portsToCheck = [];
+ if ($server->proxyType() === ProxyTypes::TRAEFIK->value) {
+ $ports = data_get($yaml, 'services.traefik.ports');
+ } elseif ($server->proxyType() === ProxyTypes::CADDY->value) {
+ $ports = data_get($yaml, 'services.caddy.ports');
+ }
+ if (isset($ports)) {
+ foreach ($ports as $port) {
+ $portsToCheck[] = str($port)->before(':')->value();
+ }
+ }
+ }
+ } else {
+ $portsToCheck = [];
+ }
+ } catch (Exception $e) {
+ Log::error('Error checking proxy: '.$e->getMessage());
+ }
+ if ($portsToCheck === []) {
+ return false;
+ }
+ foreach ($portsToCheck as $portToCheck) {
+ $connection = @fsockopen($ip, $portToCheck);
+ if (is_resource($connection) && fclose($connection)) {
+ if ($fromUI) {
+ throw new Exception("Port {$portToCheck} is in use.
You must stop the process using this port.
Docs: https://coolify.io/docs
Discord: https://coollabs.io/discord");
+ }
+
+ return false;
+ }
+ }
+
+ return true;
}
}
diff --git a/app/Actions/Proxy/StartProxy.php b/app/Actions/Proxy/StartProxy.php
index 9bc506d9b..f616f9395 100644
--- a/app/Actions/Proxy/StartProxy.php
+++ b/app/Actions/Proxy/StartProxy.php
@@ -5,6 +5,7 @@ namespace App\Actions\Proxy;
use App\Enums\ProxyTypes;
use App\Events\ProxyStarted;
use App\Models\Server;
+use Exception;
use Lorisleiva\Actions\Concerns\AsAction;
use Spatie\Activitylog\Models\Activity;
@@ -22,7 +23,7 @@ class StartProxy
$proxy_path = $server->proxyPath();
$configuration = CheckConfiguration::run($server);
if (! $configuration) {
- throw new \Exception('Configuration is not synced');
+ throw new Exception('Configuration is not synced');
}
SaveConfiguration::run($server, $configuration);
$docker_compose_yml_base64 = base64_encode($configuration);
@@ -38,10 +39,8 @@ class StartProxy
"echo 'Successfully started coolify-proxy.'",
]);
} else {
- if (isDev()) {
- if ($proxyType === ProxyTypes::CADDY->value) {
- $proxy_path = '/data/coolify/proxy/caddy';
- }
+ if (isDev() && $proxyType === ProxyTypes::CADDY->value) {
+ $proxy_path = '/data/coolify/proxy/caddy';
}
$caddyfile = 'import /dynamic/*.caddy';
$commands = $commands->merge([
@@ -65,14 +64,13 @@ class StartProxy
if ($async) {
return remote_process($commands, $server, callEventOnFinish: 'ProxyStarted', callEventData: $server);
- } else {
- instant_remote_process($commands, $server);
- $server->proxy->set('status', 'running');
- $server->proxy->set('type', $proxyType);
- $server->save();
- ProxyStarted::dispatch($server);
-
- return 'OK';
}
+ instant_remote_process($commands, $server);
+ $server->proxy->set('status', 'running');
+ $server->proxy->set('type', $proxyType);
+ $server->save();
+ ProxyStarted::dispatch($server);
+
+ return 'OK';
}
}
diff --git a/app/Actions/Server/ConfigureCloudflared.php b/app/Actions/Server/ConfigureCloudflared.php
index fc04e67a4..9364b268e 100644
--- a/app/Actions/Server/ConfigureCloudflared.php
+++ b/app/Actions/Server/ConfigureCloudflared.php
@@ -6,6 +6,7 @@ use App\Events\CloudflareTunnelConfigured;
use App\Models\Server;
use Lorisleiva\Actions\Concerns\AsAction;
use Symfony\Component\Yaml\Yaml;
+use Throwable;
class ConfigureCloudflared
{
@@ -39,7 +40,7 @@ class ConfigureCloudflared
'docker compose up -d --remove-orphans',
]);
instant_remote_process($commands, $server);
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
$server->settings->is_cloudflare_tunnel = false;
$server->settings->save();
throw $e;
diff --git a/app/Actions/Server/InstallDocker.php b/app/Actions/Server/InstallDocker.php
index cbcb20368..4c06afa8d 100644
--- a/app/Actions/Server/InstallDocker.php
+++ b/app/Actions/Server/InstallDocker.php
@@ -4,6 +4,7 @@ namespace App\Actions\Server;
use App\Models\Server;
use App\Models\StandaloneDocker;
+use Exception;
use Lorisleiva\Actions\Concerns\AsAction;
class InstallDocker
@@ -15,7 +16,7 @@ class InstallDocker
$dockerVersion = config('constants.docker.minimum_required_version');
$supported_os_type = $server->validateOS();
if (! $supported_os_type) {
- throw new \Exception('Server OS type is not supported for automated installation. Please install Docker manually before continuing: documentation.');
+ throw new Exception('Server OS type is not supported for automated installation. Please install Docker manually before continuing: documentation.');
}
$config = base64_encode('{
"log-driver": "json-file",
@@ -24,9 +25,9 @@ class InstallDocker
"max-file": "3"
}
}');
- $found = StandaloneDocker::where('server_id', $server->id);
- if ($found->count() == 0 && $server->id) {
- StandaloneDocker::create([
+ $builder = StandaloneDocker::query()->where('server_id', $server->id);
+ if ($builder->count() == 0 && $server->id) {
+ StandaloneDocker::query()->create([
'name' => 'coolify',
'network' => 'coolify',
'server_id' => $server->id,
@@ -44,66 +45,65 @@ class InstallDocker
'ls -l /tmp',
]);
- return remote_process($command, $server);
- } else {
- if ($supported_os_type->contains('debian')) {
- $command = $command->merge([
- "echo 'Installing Prerequisites...'",
- 'apt-get update -y',
- 'command -v curl >/dev/null || apt install -y curl',
- 'command -v wget >/dev/null || apt install -y wget',
- 'command -v git >/dev/null || apt install -y git',
- 'command -v jq >/dev/null || apt install -y jq',
- ]);
- } elseif ($supported_os_type->contains('rhel')) {
- $command = $command->merge([
- "echo 'Installing Prerequisites...'",
- 'command -v curl >/dev/null || dnf install -y curl',
- 'command -v wget >/dev/null || dnf install -y wget',
- 'command -v git >/dev/null || dnf install -y git',
- 'command -v jq >/dev/null || dnf install -y jq',
- ]);
- } elseif ($supported_os_type->contains('sles')) {
- $command = $command->merge([
- "echo 'Installing Prerequisites...'",
- 'zypper update -y',
- 'command -v curl >/dev/null || zypper install -y curl',
- 'command -v wget >/dev/null || zypper install -y wget',
- 'command -v git >/dev/null || zypper install -y git',
- 'command -v jq >/dev/null || zypper install -y jq',
- ]);
- } else {
- throw new \Exception('Unsupported OS');
- }
- $command = $command->merge([
- "echo 'Installing Docker Engine...'",
- "curl https://releases.rancher.com/install-docker/{$dockerVersion}.sh | sh || curl https://get.docker.com | sh -s -- --version {$dockerVersion}",
- "echo 'Configuring Docker Engine (merging existing configuration with the required)...'",
- 'test -s /etc/docker/daemon.json && cp /etc/docker/daemon.json "/etc/docker/daemon.json.original-$(date +"%Y%m%d-%H%M%S")"',
- "test ! -s /etc/docker/daemon.json && echo '{$config}' | base64 -d | tee /etc/docker/daemon.json > /dev/null",
- "echo '{$config}' | base64 -d | tee /etc/docker/daemon.json.coolify > /dev/null",
- 'jq . /etc/docker/daemon.json.coolify | tee /etc/docker/daemon.json.coolify.pretty > /dev/null',
- 'mv /etc/docker/daemon.json.coolify.pretty /etc/docker/daemon.json.coolify',
- "jq -s '.[0] * .[1]' /etc/docker/daemon.json.coolify /etc/docker/daemon.json | tee /etc/docker/daemon.json.appended > /dev/null",
- 'mv /etc/docker/daemon.json.appended /etc/docker/daemon.json',
- "echo 'Restarting Docker Engine...'",
- 'systemctl enable docker >/dev/null 2>&1 || true',
- 'systemctl restart docker',
- ]);
- if ($server->isSwarm()) {
- $command = $command->merge([
- 'docker network create --attachable --driver overlay coolify-overlay >/dev/null 2>&1 || true',
- ]);
- } else {
- $command = $command->merge([
- 'docker network create --attachable coolify >/dev/null 2>&1 || true',
- ]);
- $command = $command->merge([
- "echo 'Done!'",
- ]);
- }
-
return remote_process($command, $server);
}
+ if ($supported_os_type->contains('debian')) {
+ $command = $command->merge([
+ "echo 'Installing Prerequisites...'",
+ 'apt-get update -y',
+ 'command -v curl >/dev/null || apt install -y curl',
+ 'command -v wget >/dev/null || apt install -y wget',
+ 'command -v git >/dev/null || apt install -y git',
+ 'command -v jq >/dev/null || apt install -y jq',
+ ]);
+ } elseif ($supported_os_type->contains('rhel')) {
+ $command = $command->merge([
+ "echo 'Installing Prerequisites...'",
+ 'command -v curl >/dev/null || dnf install -y curl',
+ 'command -v wget >/dev/null || dnf install -y wget',
+ 'command -v git >/dev/null || dnf install -y git',
+ 'command -v jq >/dev/null || dnf install -y jq',
+ ]);
+ } elseif ($supported_os_type->contains('sles')) {
+ $command = $command->merge([
+ "echo 'Installing Prerequisites...'",
+ 'zypper update -y',
+ 'command -v curl >/dev/null || zypper install -y curl',
+ 'command -v wget >/dev/null || zypper install -y wget',
+ 'command -v git >/dev/null || zypper install -y git',
+ 'command -v jq >/dev/null || zypper install -y jq',
+ ]);
+ } else {
+ throw new Exception('Unsupported OS');
+ }
+ $command = $command->merge([
+ "echo 'Installing Docker Engine...'",
+ "curl https://releases.rancher.com/install-docker/{$dockerVersion}.sh | sh || curl https://get.docker.com | sh -s -- --version {$dockerVersion}",
+ "echo 'Configuring Docker Engine (merging existing configuration with the required)...'",
+ 'test -s /etc/docker/daemon.json && cp /etc/docker/daemon.json "/etc/docker/daemon.json.original-$(date +"%Y%m%d-%H%M%S")"',
+ "test ! -s /etc/docker/daemon.json && echo '{$config}' | base64 -d | tee /etc/docker/daemon.json > /dev/null",
+ "echo '{$config}' | base64 -d | tee /etc/docker/daemon.json.coolify > /dev/null",
+ 'jq . /etc/docker/daemon.json.coolify | tee /etc/docker/daemon.json.coolify.pretty > /dev/null',
+ 'mv /etc/docker/daemon.json.coolify.pretty /etc/docker/daemon.json.coolify',
+ "jq -s '.[0] * .[1]' /etc/docker/daemon.json.coolify /etc/docker/daemon.json | tee /etc/docker/daemon.json.appended > /dev/null",
+ 'mv /etc/docker/daemon.json.appended /etc/docker/daemon.json',
+ "echo 'Restarting Docker Engine...'",
+ 'systemctl enable docker >/dev/null 2>&1 || true',
+ 'systemctl restart docker',
+ ]);
+ if ($server->isSwarm()) {
+ $command = $command->merge([
+ 'docker network create --attachable --driver overlay coolify-overlay >/dev/null 2>&1 || true',
+ ]);
+ } else {
+ $command = $command->merge([
+ 'docker network create --attachable coolify >/dev/null 2>&1 || true',
+ ]);
+ $command = $command->merge([
+ "echo 'Done!'",
+ ]);
+ }
+
+ return remote_process($command, $server);
}
}
diff --git a/app/Actions/Server/ResourcesCheck.php b/app/Actions/Server/ResourcesCheck.php
index e6b90ba38..dda446f13 100644
--- a/app/Actions/Server/ResourcesCheck.php
+++ b/app/Actions/Server/ResourcesCheck.php
@@ -14,6 +14,7 @@ use App\Models\StandaloneMysql;
use App\Models\StandalonePostgresql;
use App\Models\StandaloneRedis;
use Lorisleiva\Actions\Concerns\AsAction;
+use Throwable;
class ResourcesCheck
{
@@ -23,19 +24,21 @@ class ResourcesCheck
{
$seconds = 60;
try {
- Application::where('last_online_at', '<', now()->subSeconds($seconds))->update(['status' => 'exited']);
- ServiceApplication::where('last_online_at', '<', now()->subSeconds($seconds))->update(['status' => 'exited']);
- ServiceDatabase::where('last_online_at', '<', now()->subSeconds($seconds))->update(['status' => 'exited']);
- StandalonePostgresql::where('last_online_at', '<', now()->subSeconds($seconds))->update(['status' => 'exited']);
- StandaloneRedis::where('last_online_at', '<', now()->subSeconds($seconds))->update(['status' => 'exited']);
- StandaloneMongodb::where('last_online_at', '<', now()->subSeconds($seconds))->update(['status' => 'exited']);
- StandaloneMysql::where('last_online_at', '<', now()->subSeconds($seconds))->update(['status' => 'exited']);
- StandaloneMariadb::where('last_online_at', '<', now()->subSeconds($seconds))->update(['status' => 'exited']);
- StandaloneKeydb::where('last_online_at', '<', now()->subSeconds($seconds))->update(['status' => 'exited']);
- StandaloneDragonfly::where('last_online_at', '<', now()->subSeconds($seconds))->update(['status' => 'exited']);
- StandaloneClickhouse::where('last_online_at', '<', now()->subSeconds($seconds))->update(['status' => 'exited']);
- } catch (\Throwable $e) {
+ Application::query()->where('last_online_at', '<', now()->subSeconds($seconds))->update(['status' => 'exited']);
+ ServiceApplication::query()->where('last_online_at', '<', now()->subSeconds($seconds))->update(['status' => 'exited']);
+ ServiceDatabase::query()->where('last_online_at', '<', now()->subSeconds($seconds))->update(['status' => 'exited']);
+ StandalonePostgresql::query()->where('last_online_at', '<', now()->subSeconds($seconds))->update(['status' => 'exited']);
+ StandaloneRedis::query()->where('last_online_at', '<', now()->subSeconds($seconds))->update(['status' => 'exited']);
+ StandaloneMongodb::query()->where('last_online_at', '<', now()->subSeconds($seconds))->update(['status' => 'exited']);
+ StandaloneMysql::query()->where('last_online_at', '<', now()->subSeconds($seconds))->update(['status' => 'exited']);
+ StandaloneMariadb::query()->where('last_online_at', '<', now()->subSeconds($seconds))->update(['status' => 'exited']);
+ StandaloneKeydb::query()->where('last_online_at', '<', now()->subSeconds($seconds))->update(['status' => 'exited']);
+ StandaloneDragonfly::query()->where('last_online_at', '<', now()->subSeconds($seconds))->update(['status' => 'exited']);
+ StandaloneClickhouse::query()->where('last_online_at', '<', now()->subSeconds($seconds))->update(['status' => 'exited']);
+ } catch (Throwable $e) {
return handleError($e);
}
+
+ return null;
}
}
diff --git a/app/Actions/Server/ServerCheck.php b/app/Actions/Server/ServerCheck.php
index 75b8501f3..ff3cb449c 100644
--- a/app/Actions/Server/ServerCheck.php
+++ b/app/Actions/Server/ServerCheck.php
@@ -16,6 +16,7 @@ use App\Models\ServiceDatabase;
use App\Notifications\Container\ContainerRestarted;
use Illuminate\Support\Arr;
use Lorisleiva\Actions\Concerns\AsAction;
+use Throwable;
class ServerCheck
{
@@ -61,11 +62,11 @@ class ServerCheck
}
if (isset($containerReplicates)) {
- foreach ($containerReplicates as $containerReplica) {
- $name = data_get($containerReplica, 'Name');
- $this->containers = $this->containers->map(function ($container) use ($name, $containerReplica) {
+ foreach ($containerReplicates as $containerReplicate) {
+ $name = data_get($containerReplicate, 'Name');
+ $this->containers = $this->containers->map(function ($container) use ($name, $containerReplicate) {
if (data_get($container, 'Spec.Name') === $name) {
- $replicas = data_get($containerReplica, 'Replicas');
+ $replicas = data_get($containerReplicate, 'Replicas');
$running = str($replicas)->explode('/')[0];
$total = str($replicas)->explode('/')[1];
if ($running === $total) {
@@ -95,9 +96,9 @@ class ServerCheck
$foundProxyContainer = $this->containers->filter(function ($value, $key) {
if ($this->server->isSwarm()) {
return data_get($value, 'Spec.Name') === 'coolify-proxy_traefik';
- } else {
- return data_get($value, 'Name') === '/coolify-proxy';
}
+
+ return data_get($value, 'Name') === '/coolify-proxy';
})->first();
if (! $foundProxyContainer) {
try {
@@ -106,7 +107,7 @@ class ServerCheck
StartProxy::run($this->server, false);
$this->server->team?->notify(new ContainerRestarted('coolify-proxy', $this->server));
}
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
}
} else {
$this->server->proxy->status = data_get($foundProxyContainer, 'State.Status');
@@ -116,9 +117,11 @@ class ServerCheck
}
}
}
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
return handleError($e);
}
+
+ return null;
}
private function checkLogDrainContainer()
@@ -141,12 +144,10 @@ class ServerCheck
foreach ($this->containers as $container) {
if ($this->isSentinel) {
$labels = Arr::undot(data_get($container, 'labels'));
+ } elseif ($this->server->isSwarm()) {
+ $labels = Arr::undot(data_get($container, 'Spec.Labels'));
} else {
- if ($this->server->isSwarm()) {
- $labels = Arr::undot(data_get($container, 'Spec.Labels'));
- } else {
- $labels = Arr::undot(data_get($container, 'Config.Labels'));
- }
+ $labels = Arr::undot(data_get($container, 'Config.Labels'));
}
$managed = data_get($labels, 'coolify.managed');
if (! $managed) {
@@ -177,12 +178,12 @@ class ServerCheck
if (str($applicationId)->contains('-')) {
$applicationId = str($applicationId)->before('-');
}
- $preview = ApplicationPreview::where('application_id', $applicationId)->where('pull_request_id', $pullRequestId)->first();
+ $preview = ApplicationPreview::query()->where('application_id', $applicationId)->where('pull_request_id', $pullRequestId)->first();
if ($preview) {
$preview->update(['status' => $containerStatus]);
}
} else {
- $application = Application::where('id', $applicationId)->first();
+ $application = Application::query()->where('id', $applicationId)->first();
if ($application) {
$application->update([
'status' => $containerStatus,
@@ -194,14 +195,14 @@ class ServerCheck
// Service
$subType = data_get($labels, 'coolify.service.subType');
$subId = data_get($labels, 'coolify.service.subId');
- $service = Service::where('id', $serviceId)->first();
+ $service = Service::query()->where('id', $serviceId)->first();
if (! $service) {
continue;
}
if ($subType === 'application') {
- $service = ServiceApplication::where('id', $subId)->first();
+ $service = ServiceApplication::query()->where('id', $subId)->first();
} else {
- $service = ServiceDatabase::where('id', $subId)->first();
+ $service = ServiceDatabase::query()->where('id', $subId)->first();
}
if ($service) {
$service->update([
@@ -214,14 +215,12 @@ class ServerCheck
$foundTcpProxy = $this->containers->filter(function ($value, $key) use ($uuid) {
if ($this->isSentinel) {
return data_get($value, 'name') === $uuid.'-proxy';
- } else {
-
- if ($this->server->isSwarm()) {
- return data_get($value, 'Spec.Name') === "coolify-proxy_$uuid";
- } else {
- return data_get($value, 'Name') === "/$uuid-proxy";
- }
}
+ if ($this->server->isSwarm()) {
+ return data_get($value, 'Spec.Name') === "coolify-proxy_$uuid";
+ }
+
+ return data_get($value, 'Name') === "/$uuid-proxy";
})->first();
if (! $foundTcpProxy) {
StartDatabaseProxy::run($service);
@@ -246,14 +245,12 @@ class ServerCheck
$foundTcpProxy = $this->containers->filter(function ($value, $key) use ($uuid) {
if ($this->isSentinel) {
return data_get($value, 'name') === $uuid.'-proxy';
- } else {
- if ($this->server->isSwarm()) {
- return data_get($value, 'Spec.Name') === "coolify-proxy_$uuid";
- } else {
-
- return data_get($value, 'Name') === "/$uuid-proxy";
- }
}
+ if ($this->server->isSwarm()) {
+ return data_get($value, 'Spec.Name') === "coolify-proxy_$uuid";
+ }
+
+ return data_get($value, 'Name') === "/$uuid-proxy";
})->first();
if (! $foundTcpProxy) {
StartDatabaseProxy::run($database);
diff --git a/app/Actions/Server/StartLogDrain.php b/app/Actions/Server/StartLogDrain.php
index 0d28a0099..c3752ef16 100644
--- a/app/Actions/Server/StartLogDrain.php
+++ b/app/Actions/Server/StartLogDrain.php
@@ -3,7 +3,9 @@
namespace App\Actions\Server;
use App\Models\Server;
+use Exception;
use Lorisleiva\Actions\Concerns\AsAction;
+use Throwable;
class StartLogDrain
{
@@ -31,9 +33,10 @@ class StartLogDrain
try {
if ($type === 'none') {
return 'No log drain is enabled.';
- } elseif ($type === 'newrelic') {
+ }
+ if ($type === 'newrelic') {
if (! $server->settings->is_logdrain_newrelic_enabled) {
- throw new \Exception('New Relic log drain is not enabled.');
+ throw new Exception('New Relic log drain is not enabled.');
}
$config = base64_encode("
[SERVICE]
@@ -68,7 +71,7 @@ class StartLogDrain
");
} elseif ($type === 'highlight') {
if (! $server->settings->is_logdrain_highlight_enabled) {
- throw new \Exception('Highlight log drain is not enabled.');
+ throw new Exception('Highlight log drain is not enabled.');
}
$config = base64_encode('
[SERVICE]
@@ -89,7 +92,7 @@ class StartLogDrain
');
} elseif ($type === 'axiom') {
if (! $server->settings->is_logdrain_axiom_enabled) {
- throw new \Exception('Axiom log drain is not enabled.');
+ throw new Exception('Axiom log drain is not enabled.');
}
$config = base64_encode("
[SERVICE]
@@ -129,12 +132,12 @@ class StartLogDrain
");
} elseif ($type === 'custom') {
if (! $server->settings->is_logdrain_custom_enabled) {
- throw new \Exception('Custom log drain is not enabled.');
+ throw new Exception('Custom log drain is not enabled.');
}
$config = base64_encode($server->settings->logdrain_custom_config);
$parsers = base64_encode($server->settings->logdrain_custom_config_parser);
} else {
- throw new \Exception('Unknown log drain type.');
+ throw new Exception('Unknown log drain type.');
}
if ($type !== 'custom') {
$parsers = base64_encode("
@@ -207,7 +210,7 @@ Files:
"touch $config_path/.env",
];
} else {
- throw new \Exception('Unknown log drain type.');
+ throw new Exception('Unknown log drain type.');
}
$restart_command = [
"echo 'Starting Fluent Bit'",
@@ -216,7 +219,7 @@ Files:
$command = array_merge($command, $add_envs_command, $restart_command);
return instant_remote_process($command, $server);
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
return handleError($e);
}
}
diff --git a/app/Actions/Server/StartSentinel.php b/app/Actions/Server/StartSentinel.php
index 587ac4a8d..e36ec34c2 100644
--- a/app/Actions/Server/StartSentinel.php
+++ b/app/Actions/Server/StartSentinel.php
@@ -3,6 +3,7 @@
namespace App\Actions\Server;
use App\Models\Server;
+use Exception;
use Lorisleiva\Actions\Concerns\AsAction;
class StartSentinel
@@ -27,7 +28,7 @@ class StartSentinel
$mountDir = '/data/coolify/sentinel';
$image = "ghcr.io/coollabsio/sentinel:$version";
if (! $endpoint) {
- throw new \Exception('You should set FQDN in Instance Settings.');
+ throw new Exception('You should set FQDN in Instance Settings.');
}
$environments = [
'TOKEN' => $token,
diff --git a/app/Actions/Server/StopLogDrain.php b/app/Actions/Server/StopLogDrain.php
index 96c2466de..79bd8ee1c 100644
--- a/app/Actions/Server/StopLogDrain.php
+++ b/app/Actions/Server/StopLogDrain.php
@@ -4,6 +4,7 @@ namespace App\Actions\Server;
use App\Models\Server;
use Lorisleiva\Actions\Concerns\AsAction;
+use Throwable;
class StopLogDrain
{
@@ -13,7 +14,7 @@ class StopLogDrain
{
try {
return instant_remote_process(['docker rm -f coolify-log-drain'], $server, false);
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
return handleError($e);
}
}
diff --git a/app/Actions/Server/UpdateCoolify.php b/app/Actions/Server/UpdateCoolify.php
index be9b4062c..add2355a8 100644
--- a/app/Actions/Server/UpdateCoolify.php
+++ b/app/Actions/Server/UpdateCoolify.php
@@ -25,7 +25,7 @@ class UpdateCoolify
return;
}
$settings = instanceSettings();
- $this->server = Server::find(0);
+ $this->server = Server::query()->find(0);
if (! $this->server) {
return;
}
diff --git a/app/Actions/Server/ValidateServer.php b/app/Actions/Server/ValidateServer.php
index 55b37a77c..36f10711f 100644
--- a/app/Actions/Server/ValidateServer.php
+++ b/app/Actions/Server/ValidateServer.php
@@ -3,6 +3,7 @@
namespace App\Actions\Server;
use App\Models\Server;
+use Exception;
use Lorisleiva\Actions\Concerns\AsAction;
class ValidateServer
@@ -34,7 +35,7 @@ class ValidateServer
$server->update([
'validation_logs' => $this->error,
]);
- throw new \Exception($this->error);
+ throw new Exception($this->error);
}
$this->supported_os_type = $server->validateOS();
if (! $this->supported_os_type) {
@@ -42,7 +43,7 @@ class ValidateServer
$server->update([
'validation_logs' => $this->error,
]);
- throw new \Exception($this->error);
+ throw new Exception($this->error);
}
$this->docker_installed = $server->validateDockerEngine();
@@ -52,18 +53,17 @@ class ValidateServer
$server->update([
'validation_logs' => $this->error,
]);
- throw new \Exception($this->error);
+ throw new Exception($this->error);
}
$this->docker_version = $server->validateDockerEngineVersion();
if ($this->docker_version) {
return 'OK';
- } else {
- $this->error = 'Docker Engine is not installed. Please install Docker manually before continuing: documentation.';
- $server->update([
- 'validation_logs' => $this->error,
- ]);
- throw new \Exception($this->error);
}
+ $this->error = 'Docker Engine is not installed. Please install Docker manually before continuing: documentation.';
+ $server->update([
+ 'validation_logs' => $this->error,
+ ]);
+ throw new Exception($this->error);
}
}
diff --git a/app/Actions/Service/DeleteService.php b/app/Actions/Service/DeleteService.php
index 9b87454da..65d2fdea2 100644
--- a/app/Actions/Service/DeleteService.php
+++ b/app/Actions/Service/DeleteService.php
@@ -4,6 +4,7 @@ namespace App\Actions\Service;
use App\Actions\Server\CleanupDocker;
use App\Models\Service;
+use Exception;
use Illuminate\Support\Facades\Log;
use Lorisleiva\Actions\Concerns\AsAction;
@@ -32,17 +33,15 @@ class DeleteService
$storagesToDelete->push($storage);
}
}
- foreach ($storagesToDelete as $storage) {
- $commands[] = "docker volume rm -f $storage->name";
+ foreach ($storagesToDelete as $storageToDelete) {
+ $commands[] = "docker volume rm -f $storageToDelete->name";
}
// Execute volume deletion first, this must be done first otherwise volumes will not be deleted.
- if (! empty($commands)) {
- foreach ($commands as $command) {
- $result = instant_remote_process([$command], $server, false);
- if ($result !== null && $result !== 0) {
- Log::error('Error deleting volumes: '.$result);
- }
+ foreach ($commands as $command) {
+ $result = instant_remote_process([$command], $server, false);
+ if ($result !== null && $result !== 0) {
+ Log::error('Error deleting volumes: '.$result);
}
}
}
@@ -52,8 +51,8 @@ class DeleteService
}
instant_remote_process(["docker rm -f $service->uuid"], $server, throwError: false);
- } catch (\Exception $e) {
- throw new \Exception($e->getMessage());
+ } catch (Exception $e) {
+ throw new Exception($e->getMessage(), $e->getCode(), $e);
} finally {
if ($deleteConfigurations) {
$service->delete_configurations();
diff --git a/app/Actions/Service/StopService.php b/app/Actions/Service/StopService.php
index 95b08b437..b99cf190a 100644
--- a/app/Actions/Service/StopService.php
+++ b/app/Actions/Service/StopService.php
@@ -4,6 +4,7 @@ namespace App\Actions\Service;
use App\Actions\Server\CleanupDocker;
use App\Models\Service;
+use Exception;
use Lorisleiva\Actions\Concerns\AsAction;
class StopService
@@ -29,8 +30,10 @@ class StopService
CleanupDocker::dispatch($server, true);
}
}
- } catch (\Exception $e) {
+ } catch (Exception $e) {
return $e->getMessage();
}
+
+ return null;
}
}
diff --git a/app/Actions/Shared/ComplexStatusCheck.php b/app/Actions/Shared/ComplexStatusCheck.php
index 5a7ba6637..1ce30a297 100644
--- a/app/Actions/Shared/ComplexStatusCheck.php
+++ b/app/Actions/Shared/ComplexStatusCheck.php
@@ -19,12 +19,11 @@ class ComplexStatusCheck
if ($is_main_server) {
$application->update(['status' => 'exited:unhealthy']);
- continue;
- } else {
- $application->additional_servers()->updateExistingPivot($server->id, ['status' => 'exited:unhealthy']);
-
continue;
}
+ $application->additional_servers()->updateExistingPivot($server->id, ['status' => 'exited:unhealthy']);
+
+ continue;
}
$container = instant_remote_process(["docker container inspect $(docker container ls -q --filter 'label=coolify.applicationId={$application->id}' --filter 'label=coolify.pullRequestId=0') --format '{{json .}}'"], $server, false);
$container = format_docker_command_output_to_json($container);
@@ -44,16 +43,14 @@ class ComplexStatusCheck
$additional_server->updateExistingPivot($server->id, ['status' => "$containerStatus:$containerHealth"]);
}
}
+ } elseif ($is_main_server) {
+ $application->update(['status' => 'exited:unhealthy']);
+
+ continue;
} else {
- if ($is_main_server) {
- $application->update(['status' => 'exited:unhealthy']);
+ $application->additional_servers()->updateExistingPivot($server->id, ['status' => 'exited:unhealthy']);
- continue;
- } else {
- $application->additional_servers()->updateExistingPivot($server->id, ['status' => 'exited:unhealthy']);
-
- continue;
- }
+ continue;
}
}
}
diff --git a/app/Actions/Shared/PullImage.php b/app/Actions/Shared/PullImage.php
index 4bd1cf453..38c9b4771 100644
--- a/app/Actions/Shared/PullImage.php
+++ b/app/Actions/Shared/PullImage.php
@@ -9,20 +9,20 @@ class PullImage
{
use AsAction;
- public function handle(Service $resource)
+ public function handle(Service $service)
{
- $resource->saveComposeConfigs();
+ $service->saveComposeConfigs();
- $commands[] = 'cd '.$resource->workdir();
- $commands[] = "echo 'Saved configuration files to {$resource->workdir()}.'";
+ $commands[] = 'cd '.$service->workdir();
+ $commands[] = "echo 'Saved configuration files to {$service->workdir()}.'";
$commands[] = 'docker compose pull';
- $server = data_get($resource, 'server');
+ $server = data_get($service, 'server');
if (! $server) {
return;
}
- instant_remote_process($commands, $resource->server);
+ instant_remote_process($commands, $service->server);
}
}
diff --git a/app/Console/Commands/AdminRemoveUser.php b/app/Console/Commands/AdminRemoveUser.php
index d4534399c..c1b6d5828 100644
--- a/app/Console/Commands/AdminRemoveUser.php
+++ b/app/Console/Commands/AdminRemoveUser.php
@@ -3,6 +3,7 @@
namespace App\Console\Commands;
use App\Models\User;
+use Exception;
use Illuminate\Console\Command;
class AdminRemoveUser extends Command
@@ -46,7 +47,7 @@ class AdminRemoveUser extends Command
$team->delete();
}
$user->delete();
- } catch (\Exception $e) {
+ } catch (Exception $e) {
$this->error('Failed to remove user.');
$this->error($e->getMessage());
diff --git a/app/Console/Commands/CheckApplicationDeploymentQueue.php b/app/Console/Commands/CheckApplicationDeploymentQueue.php
index e89d26f2c..1c8eb2597 100644
--- a/app/Console/Commands/CheckApplicationDeploymentQueue.php
+++ b/app/Console/Commands/CheckApplicationDeploymentQueue.php
@@ -15,7 +15,7 @@ class CheckApplicationDeploymentQueue extends Command
public function handle()
{
$seconds = $this->option('seconds');
- $deployments = ApplicationDeploymentQueue::whereIn('status', [
+ $deployments = ApplicationDeploymentQueue::query()->whereIn('status', [
ApplicationDeploymentStatus::IN_PROGRESS,
ApplicationDeploymentStatus::QUEUED,
])->where('created_at', '<=', now()->subSeconds($seconds))->get();
@@ -40,11 +40,11 @@ class CheckApplicationDeploymentQueue extends Command
}
}
- private function cancelDeployment(ApplicationDeploymentQueue $deployment)
+ private function cancelDeployment(ApplicationDeploymentQueue $applicationDeploymentQueue)
{
- $deployment->update(['status' => ApplicationDeploymentStatus::FAILED]);
- if ($deployment->server?->isFunctional()) {
- remote_process(['docker rm -f '.$deployment->deployment_uuid], $deployment->server, false);
+ $applicationDeploymentQueue->update(['status' => ApplicationDeploymentStatus::FAILED]);
+ if ($applicationDeploymentQueue->server?->isFunctional()) {
+ remote_process(['docker rm -f '.$applicationDeploymentQueue->deployment_uuid], $applicationDeploymentQueue->server, false);
}
}
}
diff --git a/app/Console/Commands/CleanupApplicationDeploymentQueue.php b/app/Console/Commands/CleanupApplicationDeploymentQueue.php
index 3aae28ae6..badc0737a 100644
--- a/app/Console/Commands/CleanupApplicationDeploymentQueue.php
+++ b/app/Console/Commands/CleanupApplicationDeploymentQueue.php
@@ -3,6 +3,7 @@
namespace App\Console\Commands;
use App\Models\ApplicationDeploymentQueue;
+use App\Models\Server;
use Illuminate\Console\Command;
class CleanupApplicationDeploymentQueue extends Command
@@ -14,9 +15,9 @@ class CleanupApplicationDeploymentQueue extends Command
public function handle()
{
$team_id = $this->option('team-id');
- $servers = \App\Models\Server::where('team_id', $team_id)->get();
+ $servers = Server::query()->where('team_id', $team_id)->get();
foreach ($servers as $server) {
- $deployments = ApplicationDeploymentQueue::whereIn('status', ['in_progress', 'queued'])->where('server_id', $server->id)->get();
+ $deployments = ApplicationDeploymentQueue::query()->whereIn('status', ['in_progress', 'queued'])->where('server_id', $server->id)->get();
foreach ($deployments as $deployment) {
$deployment->update(['status' => 'failed']);
instant_remote_process(['docker rm -f '.$deployment->deployment_uuid], $server, false);
diff --git a/app/Console/Commands/CleanupDatabase.php b/app/Console/Commands/CleanupDatabase.php
index a0adc8b36..7d57b8e8d 100644
--- a/app/Console/Commands/CleanupDatabase.php
+++ b/app/Console/Commands/CleanupDatabase.php
@@ -18,19 +18,14 @@ class CleanupDatabase extends Command
} else {
echo "Running database cleanup in dry-run mode...\n";
}
- if (isCloud()) {
- // Later on we can increase this to 180 days or dynamically set
- $keep_days = $this->option('keep-days') ?? 60;
- } else {
- $keep_days = $this->option('keep-days') ?? 60;
- }
+ $keep_days = isCloud() ? $this->option('keep-days') ?? 60 : $this->option('keep-days') ?? 60;
echo "Keep days: $keep_days\n";
// Cleanup failed jobs table
- $failed_jobs = DB::table('failed_jobs')->where('failed_at', '<', now()->subDays(1));
- $count = $failed_jobs->count();
+ $builder = DB::table('failed_jobs')->where('failed_at', '<', now()->subDays(1));
+ $count = $builder->count();
echo "Delete $count entries from failed_jobs.\n";
if ($this->option('yes')) {
- $failed_jobs->delete();
+ $builder->delete();
}
// Cleanup sessions table
diff --git a/app/Console/Commands/CleanupStuckedResources.php b/app/Console/Commands/CleanupStuckedResources.php
index def3d5a2c..c24ec7344 100644
--- a/app/Console/Commands/CleanupStuckedResources.php
+++ b/app/Console/Commands/CleanupStuckedResources.php
@@ -21,6 +21,7 @@ use App\Models\StandaloneMysql;
use App\Models\StandalonePostgresql;
use App\Models\StandaloneRedis;
use Illuminate\Console\Command;
+use Throwable;
class CleanupStuckedResources extends Command
{
@@ -42,18 +43,18 @@ class CleanupStuckedResources extends Command
foreach ($servers as $server) {
CleanupHelperContainersJob::dispatch($server);
}
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
echo "Error in cleaning stucked resources: {$e->getMessage()}\n";
}
try {
- $applicationsDeploymentQueue = ApplicationDeploymentQueue::get();
+ $applicationsDeploymentQueue = ApplicationDeploymentQueue::query()->get();
foreach ($applicationsDeploymentQueue as $applicationDeploymentQueue) {
if (is_null($applicationDeploymentQueue->application)) {
echo "Deleting stuck application deployment queue: {$applicationDeploymentQueue->id}\n";
$applicationDeploymentQueue->delete();
}
}
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
echo "Error in cleaning stuck application deployment queue: {$e->getMessage()}\n";
}
try {
@@ -62,18 +63,18 @@ class CleanupStuckedResources extends Command
echo "Deleting stuck application: {$application->name}\n";
$application->forceDelete();
}
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
echo "Error in cleaning stuck application: {$e->getMessage()}\n";
}
try {
- $applicationsPreviews = ApplicationPreview::get();
+ $applicationsPreviews = ApplicationPreview::query()->get();
foreach ($applicationsPreviews as $applicationPreview) {
if (! data_get($applicationPreview, 'application')) {
echo "Deleting stuck application preview: {$applicationPreview->uuid}\n";
$applicationPreview->delete();
}
}
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
echo "Error in cleaning stuck application: {$e->getMessage()}\n";
}
try {
@@ -82,16 +83,16 @@ class CleanupStuckedResources extends Command
echo "Deleting stuck postgresql: {$postgresql->name}\n";
$postgresql->forceDelete();
}
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
echo "Error in cleaning stuck postgresql: {$e->getMessage()}\n";
}
try {
$redis = StandaloneRedis::withTrashed()->whereNotNull('deleted_at')->get();
- foreach ($redis as $redis) {
- echo "Deleting stuck redis: {$redis->name}\n";
- $redis->forceDelete();
+ foreach ($redis as $redi) {
+ echo "Deleting stuck redis: {$redi->name}\n";
+ $redi->forceDelete();
}
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
echo "Error in cleaning stuck redis: {$e->getMessage()}\n";
}
try {
@@ -100,7 +101,7 @@ class CleanupStuckedResources extends Command
echo "Deleting stuck keydb: {$keydb->name}\n";
$keydb->forceDelete();
}
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
echo "Error in cleaning stuck keydb: {$e->getMessage()}\n";
}
try {
@@ -109,7 +110,7 @@ class CleanupStuckedResources extends Command
echo "Deleting stuck dragonfly: {$dragonfly->name}\n";
$dragonfly->forceDelete();
}
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
echo "Error in cleaning stuck dragonfly: {$e->getMessage()}\n";
}
try {
@@ -118,7 +119,7 @@ class CleanupStuckedResources extends Command
echo "Deleting stuck clickhouse: {$clickhouse->name}\n";
$clickhouse->forceDelete();
}
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
echo "Error in cleaning stuck clickhouse: {$e->getMessage()}\n";
}
try {
@@ -127,7 +128,7 @@ class CleanupStuckedResources extends Command
echo "Deleting stuck mongodb: {$mongodb->name}\n";
$mongodb->forceDelete();
}
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
echo "Error in cleaning stuck mongodb: {$e->getMessage()}\n";
}
try {
@@ -136,7 +137,7 @@ class CleanupStuckedResources extends Command
echo "Deleting stuck mysql: {$mysql->name}\n";
$mysql->forceDelete();
}
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
echo "Error in cleaning stuck mysql: {$e->getMessage()}\n";
}
try {
@@ -145,7 +146,7 @@ class CleanupStuckedResources extends Command
echo "Deleting stuck mariadb: {$mariadb->name}\n";
$mariadb->forceDelete();
}
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
echo "Error in cleaning stuck mariadb: {$e->getMessage()}\n";
}
try {
@@ -154,7 +155,7 @@ class CleanupStuckedResources extends Command
echo "Deleting stuck service: {$service->name}\n";
$service->forceDelete();
}
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
echo "Error in cleaning stuck service: {$e->getMessage()}\n";
}
try {
@@ -163,7 +164,7 @@ class CleanupStuckedResources extends Command
echo "Deleting stuck serviceapp: {$serviceApp->name}\n";
$serviceApp->forceDelete();
}
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
echo "Error in cleaning stuck serviceapp: {$e->getMessage()}\n";
}
try {
@@ -172,7 +173,7 @@ class CleanupStuckedResources extends Command
echo "Deleting stuck serviceapp: {$serviceDb->name}\n";
$serviceDb->forceDelete();
}
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
echo "Error in cleaning stuck serviceapp: {$e->getMessage()}\n";
}
try {
@@ -183,7 +184,7 @@ class CleanupStuckedResources extends Command
$scheduled_task->delete();
}
}
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
echo "Error in cleaning stuck scheduledtasks: {$e->getMessage()}\n";
}
@@ -195,7 +196,7 @@ class CleanupStuckedResources extends Command
$scheduled_backup->delete();
}
}
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
echo "Error in cleaning stuck scheduledbackups: {$e->getMessage()}\n";
}
@@ -222,7 +223,7 @@ class CleanupStuckedResources extends Command
continue;
}
}
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
echo "Error in application: {$e->getMessage()}\n";
}
try {
@@ -247,32 +248,32 @@ class CleanupStuckedResources extends Command
continue;
}
}
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
echo "Error in postgresql: {$e->getMessage()}\n";
}
try {
$redis = StandaloneRedis::all();
- foreach ($redis as $redis) {
- if (! data_get($redis, 'environment')) {
- echo 'Redis without environment: '.$redis->name.'\n';
- $redis->forceDelete();
+ foreach ($redis as $redi) {
+ if (! data_get($redi, 'environment')) {
+ echo 'Redis without environment: '.$redi->name.'\n';
+ $redi->forceDelete();
continue;
}
- if (! $redis->destination()) {
- echo 'Redis without destination: '.$redis->name.'\n';
- $redis->forceDelete();
+ if (! $redi->destination()) {
+ echo 'Redis without destination: '.$redi->name.'\n';
+ $redi->forceDelete();
continue;
}
- if (! data_get($redis, 'destination.server')) {
- echo 'Redis without server: '.$redis->name.'\n';
- $redis->forceDelete();
+ if (! data_get($redi, 'destination.server')) {
+ echo 'Redis without server: '.$redi->name.'\n';
+ $redi->forceDelete();
continue;
}
}
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
echo "Error in redis: {$e->getMessage()}\n";
}
@@ -298,7 +299,7 @@ class CleanupStuckedResources extends Command
continue;
}
}
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
echo "Error in mongodb: {$e->getMessage()}\n";
}
@@ -324,7 +325,7 @@ class CleanupStuckedResources extends Command
continue;
}
}
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
echo "Error in mysql: {$e->getMessage()}\n";
}
@@ -350,7 +351,7 @@ class CleanupStuckedResources extends Command
continue;
}
}
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
echo "Error in mariadb: {$e->getMessage()}\n";
}
@@ -376,33 +377,33 @@ class CleanupStuckedResources extends Command
continue;
}
}
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
echo "Error in service: {$e->getMessage()}\n";
}
try {
$serviceApplications = ServiceApplication::all();
- foreach ($serviceApplications as $service) {
- if (! data_get($service, 'service')) {
- echo 'ServiceApplication without service: '.$service->name.'\n';
- $service->forceDelete();
+ foreach ($serviceApplications as $serviceApplication) {
+ if (! data_get($serviceApplication, 'service')) {
+ echo 'ServiceApplication without service: '.$serviceApplication->name.'\n';
+ $serviceApplication->forceDelete();
continue;
}
}
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
echo "Error in serviceApplications: {$e->getMessage()}\n";
}
try {
$serviceDatabases = ServiceDatabase::all();
- foreach ($serviceDatabases as $service) {
- if (! data_get($service, 'service')) {
- echo 'ServiceDatabase without service: '.$service->name.'\n';
- $service->forceDelete();
+ foreach ($serviceDatabases as $serviceDatabase) {
+ if (! data_get($serviceDatabase, 'service')) {
+ echo 'ServiceDatabase without service: '.$serviceDatabase->name.'\n';
+ $serviceDatabase->forceDelete();
continue;
}
}
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
echo "Error in ServiceDatabases: {$e->getMessage()}\n";
}
}
diff --git a/app/Console/Commands/CleanupUnreachableServers.php b/app/Console/Commands/CleanupUnreachableServers.php
index def01b265..4182e4668 100644
--- a/app/Console/Commands/CleanupUnreachableServers.php
+++ b/app/Console/Commands/CleanupUnreachableServers.php
@@ -14,7 +14,7 @@ class CleanupUnreachableServers extends Command
public function handle()
{
echo "Running unreachable server cleanup...\n";
- $servers = Server::where('unreachable_count', 3)->where('unreachable_notification_sent', true)->where('updated_at', '<', now()->subDays(7))->get();
+ $servers = Server::query()->where('unreachable_count', 3)->where('unreachable_notification_sent', true)->where('updated_at', '<', now()->subDays(7))->get();
if ($servers->count() > 0) {
foreach ($servers as $server) {
echo "Cleanup unreachable server ($server->id) with name $server->name";
diff --git a/app/Console/Commands/CloudCheckSubscription.php b/app/Console/Commands/CloudCheckSubscription.php
index 6e237e84b..ac1d258b8 100644
--- a/app/Console/Commands/CloudCheckSubscription.php
+++ b/app/Console/Commands/CloudCheckSubscription.php
@@ -4,6 +4,7 @@ namespace App\Console\Commands;
use App\Models\Team;
use Illuminate\Console\Command;
+use Stripe\StripeClient;
class CloudCheckSubscription extends Command
{
@@ -26,19 +27,19 @@ class CloudCheckSubscription extends Command
*/
public function handle()
{
- $stripe = new \Stripe\StripeClient(config('subscription.stripe_api_key'));
- $activeSubscribers = Team::whereRelation('subscription', 'stripe_invoice_paid', true)->get();
- foreach ($activeSubscribers as $team) {
- $stripeSubscriptionId = $team->subscription->stripe_subscription_id;
- $stripeInvoicePaid = $team->subscription->stripe_invoice_paid;
- $stripeCustomerId = $team->subscription->stripe_customer_id;
+ $stripeClient = new StripeClient(config('subscription.stripe_api_key'));
+ $activeSubscribers = Team::query()->whereRelation('subscription', 'stripe_invoice_paid', true)->get();
+ foreach ($activeSubscribers as $activeSubscriber) {
+ $stripeSubscriptionId = $activeSubscriber->subscription->stripe_subscription_id;
+ $stripeInvoicePaid = $activeSubscriber->subscription->stripe_invoice_paid;
+ $stripeCustomerId = $activeSubscriber->subscription->stripe_customer_id;
if (! $stripeSubscriptionId) {
- echo "Team {$team->id} has no subscription, but invoice status is: {$stripeInvoicePaid}\n";
+ echo "Team {$activeSubscriber->id} has no subscription, but invoice status is: {$stripeInvoicePaid}\n";
echo "Link on Stripe: https://dashboard.stripe.com/customers/{$stripeCustomerId}\n";
continue;
}
- $subscription = $stripe->subscriptions->retrieve($stripeSubscriptionId);
+ $subscription = $stripeClient->subscriptions->retrieve($stripeSubscriptionId);
if ($subscription->status === 'active') {
continue;
}
diff --git a/app/Console/Commands/CloudCleanupSubscriptions.php b/app/Console/Commands/CloudCleanupSubscriptions.php
index 9dc6e24f5..f6afeeadf 100644
--- a/app/Console/Commands/CloudCleanupSubscriptions.php
+++ b/app/Console/Commands/CloudCleanupSubscriptions.php
@@ -4,7 +4,9 @@ namespace App\Console\Commands;
use App\Events\ServerReachabilityChanged;
use App\Models\Team;
+use Exception;
use Illuminate\Console\Command;
+use Stripe\StripeClient;
class CloudCleanupSubscriptions extends Command
{
@@ -21,7 +23,7 @@ class CloudCleanupSubscriptions extends Command
return;
}
$this->info('Cleaning up subcriptions teams');
- $stripe = new \Stripe\StripeClient(config('subscription.stripe_api_key'));
+ $stripeClient = new StripeClient(config('subscription.stripe_api_key'));
$teams = Team::all()->filter(function ($team) {
return $team->id !== 0;
@@ -47,34 +49,33 @@ class CloudCleanupSubscriptions extends Command
$this->disableServers($team);
continue;
- } else {
- $subscription = $stripe->subscriptions->retrieve(data_get($team, 'subscription.stripe_subscription_id'), []);
- $status = data_get($subscription, 'status');
- if ($status === 'active' || $status === 'past_due') {
- $team->subscription->update([
- 'stripe_invoice_paid' => true,
- 'stripe_trial_already_ended' => false,
- ]);
+ }
+ $subscription = $stripeClient->subscriptions->retrieve(data_get($team, 'subscription.stripe_subscription_id'), []);
+ $status = data_get($subscription, 'status');
+ if ($status === 'active' || $status === 'past_due') {
+ $team->subscription->update([
+ 'stripe_invoice_paid' => true,
+ 'stripe_trial_already_ended' => false,
+ ]);
- continue;
- }
- $this->info('Subscription status: '.$status);
- $this->info('Subscription id: '.data_get($team, 'subscription.stripe_subscription_id'));
- $confirm = $this->confirm('Do you want to cancel the subscription?', true);
- if (! $confirm) {
- $this->info("Skipping team {$team->id}");
- } else {
- $this->info("Cancelling subscription for team {$team->id}");
- $team->subscription->update([
- 'stripe_invoice_paid' => false,
- 'stripe_trial_already_ended' => false,
- 'stripe_subscription_id' => null,
- ]);
- $this->disableServers($team);
- }
+ continue;
+ }
+ $this->info('Subscription status: '.$status);
+ $this->info('Subscription id: '.data_get($team, 'subscription.stripe_subscription_id'));
+ $confirm = $this->confirm('Do you want to cancel the subscription?', true);
+ if (! $confirm) {
+ $this->info("Skipping team {$team->id}");
+ } else {
+ $this->info("Cancelling subscription for team {$team->id}");
+ $team->subscription->update([
+ 'stripe_invoice_paid' => false,
+ 'stripe_trial_already_ended' => false,
+ 'stripe_subscription_id' => null,
+ ]);
+ $this->disableServers($team);
}
}
- } catch (\Exception $e) {
+ } catch (Exception $e) {
$this->error($e->getMessage());
return;
diff --git a/app/Console/Commands/Dev.php b/app/Console/Commands/Dev.php
index 257de0a92..9beb4f4b6 100644
--- a/app/Console/Commands/Dev.php
+++ b/app/Console/Commands/Dev.php
@@ -33,7 +33,7 @@ class Dev extends Command
// Generate OpenAPI documentation
echo "Generating OpenAPI documentation.\n";
// https://github.com/OAI/OpenAPI-Specification/releases
- $process = Process::run([
+ $processResult = Process::run([
'/var/www/html/vendor/bin/openapi',
'app',
'-o',
@@ -41,11 +41,11 @@ class Dev extends Command
'--version',
'3.1.0',
]);
- $error = $process->errorOutput();
+ $error = $processResult->errorOutput();
$error = preg_replace('/^.*an object literal,.*$/m', '', $error);
$error = preg_replace('/^\h*\v+/m', '', $error);
echo $error;
- echo $process->output();
+ echo $processResult->output();
// Convert YAML to JSON
$yaml = file_get_contents('openapi.yaml');
$json = json_encode(Yaml::parse($yaml), JSON_PRETTY_PRINT);
@@ -69,7 +69,7 @@ class Dev extends Command
}
// Seed database if it's empty
- $settings = InstanceSettings::find(0);
+ $settings = InstanceSettings::query()->find(0);
if (! $settings) {
echo "Initializing instance, seeding database.\n";
Artisan::call('migrate --seed');
diff --git a/app/Console/Commands/Emails.php b/app/Console/Commands/Emails.php
index 33ddf3019..a55c515d7 100644
--- a/app/Console/Commands/Emails.php
+++ b/app/Console/Commands/Emails.php
@@ -12,7 +12,6 @@ use App\Notifications\Application\DeploymentFailed;
use App\Notifications\Application\DeploymentSuccess;
use App\Notifications\Application\StatusChanged;
use App\Notifications\Database\BackupFailed;
-use App\Notifications\Database\BackupSuccess;
use App\Notifications\Test;
use Exception;
use Illuminate\Console\Command;
@@ -43,7 +42,7 @@ class Emails extends Command
/**
* Execute the console command.
*/
- private ?MailMessage $mail = null;
+ private ?MailMessage $mailMessage = null;
private ?string $email = null;
@@ -69,15 +68,13 @@ class Emails extends Command
$emailsGathered = ['realusers-before-trial', 'realusers-server-lost-connection'];
if (isDev()) {
$this->email = 'test@example.com';
- } else {
- if (! in_array($type, $emailsGathered)) {
- $this->email = text('Email Address to send to:');
- }
+ } elseif (! in_array($type, $emailsGathered)) {
+ $this->email = text('Email Address to send to:');
}
set_transanctional_email_settings();
- $this->mail = new MailMessage;
- $this->mail->subject('Test Email');
+ $this->mailMessage = new MailMessage;
+ $this->mailMessage->subject('Test Email');
switch ($type) {
case 'updates':
$teams = Team::all();
@@ -102,18 +99,18 @@ class Emails extends Command
$confirmed = confirm('Are you sure?');
if ($confirmed) {
foreach ($emails as $email) {
- $this->mail = new MailMessage;
- $this->mail->subject('One-click Services, Docker Compose support');
+ $this->mailMessage = new MailMessage;
+ $this->mailMessage->subject('One-click Services, Docker Compose support');
$unsubscribeUrl = route('unsubscribe.marketing.emails', [
'token' => encrypt($email),
]);
- $this->mail->view('emails.updates', ['unsubscribeUrl' => $unsubscribeUrl]);
+ $this->mailMessage->view('emails.updates', ['unsubscribeUrl' => $unsubscribeUrl]);
$this->sendEmail($email);
}
}
break;
case 'emails-test':
- $this->mail = (new Test)->toMail();
+ $this->mailMessage = (new Test)->toMail();
$this->sendEmail();
break;
case 'application-deployment-success-daily':
@@ -123,41 +120,41 @@ class Emails extends Command
if ($deployments->isEmpty()) {
continue;
}
- $this->mail = (new DeploymentSuccess($application, 'test'))->toMail();
+ $this->mailMessage = (new DeploymentSuccess($application, 'test'))->toMail();
$this->sendEmail();
}
break;
case 'application-deployment-success':
$application = Application::all()->first();
- $this->mail = (new DeploymentSuccess($application, 'test'))->toMail();
+ $this->mailMessage = (new DeploymentSuccess($application, 'test'))->toMail();
$this->sendEmail();
break;
case 'application-deployment-failed':
$application = Application::all()->first();
$preview = ApplicationPreview::all()->first();
if (! $preview) {
- $preview = ApplicationPreview::create([
+ $preview = ApplicationPreview::query()->create([
'application_id' => $application->id,
'pull_request_id' => 1,
'pull_request_html_url' => 'http://example.com',
'fqdn' => $application->fqdn,
]);
}
- $this->mail = (new DeploymentFailed($application, 'test'))->toMail();
+ $this->mailMessage = (new DeploymentFailed($application, 'test'))->toMail();
$this->sendEmail();
- $this->mail = (new DeploymentFailed($application, 'test', $preview))->toMail();
+ $this->mailMessage = (new DeploymentFailed($application, 'test', $preview))->toMail();
$this->sendEmail();
break;
case 'application-status-changed':
$application = Application::all()->first();
- $this->mail = (new StatusChanged($application))->toMail();
+ $this->mailMessage = (new StatusChanged($application))->toMail();
$this->sendEmail();
break;
case 'backup-failed':
$backup = ScheduledDatabaseBackup::all()->first();
$db = StandalonePostgresql::all()->first();
if (! $backup) {
- $backup = ScheduledDatabaseBackup::create([
+ $backup = ScheduledDatabaseBackup::query()->create([
'enabled' => true,
'frequency' => 'daily',
'save_s3' => false,
@@ -167,14 +164,14 @@ class Emails extends Command
]);
}
$output = 'Because of an error, the backup of the database '.$db->name.' failed.';
- $this->mail = (new BackupFailed($backup, $db, $output))->toMail();
+ $this->mailMessage = (new BackupFailed($backup, $db, $output))->toMail();
$this->sendEmail();
break;
case 'backup-success':
$backup = ScheduledDatabaseBackup::all()->first();
$db = StandalonePostgresql::all()->first();
if (! $backup) {
- $backup = ScheduledDatabaseBackup::create([
+ $backup = ScheduledDatabaseBackup::query()->create([
'enabled' => true,
'frequency' => 'daily',
'save_s3' => false,
@@ -183,7 +180,7 @@ class Emails extends Command
'team_id' => 0,
]);
}
- //$this->mail = (new BackupSuccess($backup->frequency, $db->name))->toMail();
+ // $this->mail = (new BackupSuccess($backup->frequency, $db->name))->toMail();
$this->sendEmail();
break;
// case 'invitation-link':
@@ -201,10 +198,10 @@ class Emails extends Command
// $this->sendEmail();
// break;
case 'realusers-before-trial':
- $this->mail = new MailMessage;
- $this->mail->view('emails.before-trial-conversion');
- $this->mail->subject('Trial period has been added for all subscription plans.');
- $teams = Team::doesntHave('subscription')->where('id', '!=', 0)->get();
+ $this->mailMessage = new MailMessage;
+ $this->mailMessage->view('emails.before-trial-conversion');
+ $this->mailMessage->subject('Trial period has been added for all subscription plans.');
+ $teams = Team::query()->doesntHave('subscription')->where('id', '!=', 0)->get();
if (! $teams || $teams->isEmpty()) {
echo 'No teams found.'.PHP_EOL;
@@ -232,7 +229,7 @@ class Emails extends Command
break;
case 'realusers-server-lost-connection':
$serverId = text('Server Id');
- $server = Server::find($serverId);
+ $server = Server::query()->find($serverId);
if (! $server) {
throw new Exception('Server not found');
}
@@ -247,13 +244,13 @@ class Emails extends Command
foreach ($admins as $admin) {
$this->info($admin);
}
- $this->mail = new MailMessage;
- $this->mail->view('emails.server-lost-connection', [
+ $this->mailMessage = new MailMessage;
+ $this->mailMessage->view('emails.server-lost-connection', [
'name' => $server->name,
]);
- $this->mail->subject('Action required: Server '.$server->name.' lost connection.');
- foreach ($admins as $email) {
- $this->sendEmail($email);
+ $this->mailMessage->subject('Action required: Server '.$server->name.' lost connection.');
+ foreach ($admins as $admin) {
+ $this->sendEmail($admin);
}
break;
}
@@ -269,8 +266,8 @@ class Emails extends Command
[],
fn (Message $message) => $message
->to($this->email)
- ->subject($this->mail->subject)
- ->html((string) $this->mail->render())
+ ->subject($this->mailMessage->subject)
+ ->html((string) $this->mailMessage->render())
);
$this->info("Email sent to $this->email successfully. 📧");
}
diff --git a/app/Console/Commands/Horizon.php b/app/Console/Commands/Horizon.php
index d3e35ca5a..0debcae88 100644
--- a/app/Console/Commands/Horizon.php
+++ b/app/Console/Commands/Horizon.php
@@ -16,8 +16,7 @@ class Horizon extends Command
$this->info('Horizon is enabled on this server.');
$this->call('horizon');
exit(0);
- } else {
- exit(0);
}
+ exit(0);
}
}
diff --git a/app/Console/Commands/Init.php b/app/Console/Commands/Init.php
index cc9bee0a5..0197a91da 100644
--- a/app/Console/Commands/Init.php
+++ b/app/Console/Commands/Init.php
@@ -15,6 +15,7 @@ use Illuminate\Console\Command;
use Illuminate\Support\Facades\Artisan;
use Illuminate\Support\Facades\File;
use Illuminate\Support\Facades\Http;
+use Throwable;
class Init extends Command
{
@@ -22,7 +23,7 @@ class Init extends Command
protected $description = 'Cleanup instance related stuffs';
- public $servers = null;
+ public $servers;
public function handle()
{
@@ -35,8 +36,7 @@ class Init extends Command
}
$this->servers = Server::all();
- if (isCloud()) {
- } else {
+ if (! isCloud()) {
$this->send_alive_signal();
get_public_ips();
}
@@ -61,14 +61,14 @@ class Init extends Command
try {
$this->pullHelperImage();
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
//
}
if (isCloud()) {
try {
$this->pullTemplatesFromCDN();
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
echo "Could not pull templates from CDN: {$e->getMessage()}\n";
}
}
@@ -76,13 +76,13 @@ class Init extends Command
if (! isCloud()) {
try {
$this->pullTemplatesFromCDN();
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
echo "Could not pull templates from CDN: {$e->getMessage()}\n";
}
try {
$localhost = $this->servers->where('id', 0)->first();
$localhost->setupDynamicProxyConfiguration();
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
echo "Could not setup dynamic configuration: {$e->getMessage()}\n";
}
$settings = instanceSettings();
@@ -119,8 +119,8 @@ class Init extends Command
private function update_user_emails()
{
try {
- User::whereRaw('email ~ \'[A-Z]\'')->get()->each(fn (User $user) => $user->update(['email' => strtolower($user->email)]));
- } catch (\Throwable $e) {
+ User::query()->whereRaw('email ~ \'[A-Z]\'')->get()->each(fn (User $user) => $user->update(['email' => strtolower($user->email)]));
+ } catch (Throwable $e) {
echo "Error in updating user emails: {$e->getMessage()}\n";
}
}
@@ -128,8 +128,8 @@ class Init extends Command
private function update_traefik_labels()
{
try {
- Server::where('proxy->type', 'TRAEFIK_V2')->update(['proxy->type' => 'TRAEFIK']);
- } catch (\Throwable $e) {
+ Server::query()->where('proxy->type', 'TRAEFIK_V2')->update(['proxy->type' => 'TRAEFIK']);
+ } catch (Throwable $e) {
echo "Error in updating traefik labels: {$e->getMessage()}\n";
}
}
@@ -149,10 +149,12 @@ class Init extends Command
return instant_remote_process([
"rm -f $file",
], $server, false);
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
echo "Error in cleaning up unnecessary dynamic proxy configuration: {$e->getMessage()}\n";
}
}
+
+ return null;
}
private function cleanup_unused_network_from_coolify_proxy()
@@ -168,19 +170,19 @@ class Init extends Command
['networks' => $networks, 'allNetworks' => $allNetworks] = collectDockerNetworksByServer($server);
$removeNetworks = $allNetworks->diff($networks);
$commands = collect();
- foreach ($removeNetworks as $network) {
- $out = instant_remote_process(["docker network inspect -f json $network | jq '.[].Containers | if . == {} then null else . end'"], $server, false);
- if (empty($out)) {
- $commands->push("docker network disconnect $network coolify-proxy >/dev/null 2>&1 || true");
- $commands->push("docker network rm $network >/dev/null 2>&1 || true");
+ foreach ($removeNetworks as $removeNetwork) {
+ $out = instant_remote_process(["docker network inspect -f json {$removeNetwork} | jq '.[].Containers | if . == {} then null else . end'"], $server, false);
+ if ($out === null || $out === '' || $out === '0') {
+ $commands->push("docker network disconnect {$removeNetwork} coolify-proxy >/dev/null 2>&1 || true");
+ $commands->push("docker network rm {$removeNetwork} >/dev/null 2>&1 || true");
} else {
$data = collect(json_decode($out, true));
if ($data->count() === 1) {
// If only coolify-proxy itself is connected to that network (it should not be possible, but who knows)
$isCoolifyProxyItself = data_get($data->first(), 'Name') === 'coolify-proxy';
if ($isCoolifyProxyItself) {
- $commands->push("docker network disconnect $network coolify-proxy >/dev/null 2>&1 || true");
- $commands->push("docker network rm $network >/dev/null 2>&1 || true");
+ $commands->push("docker network disconnect {$removeNetwork} coolify-proxy >/dev/null 2>&1 || true");
+ $commands->push("docker network rm {$removeNetwork} >/dev/null 2>&1 || true");
}
}
}
@@ -188,7 +190,7 @@ class Init extends Command
if ($commands->isNotEmpty()) {
remote_process(command: $commands, type: ActivityTypes::INLINE->value, server: $server, ignore_errors: false);
}
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
echo "Error in cleaning up unused networks from coolify proxy: {$e->getMessage()}\n";
}
}
@@ -202,20 +204,20 @@ class Init extends Command
if ($database && $database->trashed()) {
echo "Restoring coolify db backup\n";
$database->restore();
- $scheduledBackup = ScheduledDatabaseBackup::find(0);
+ $scheduledBackup = ScheduledDatabaseBackup::query()->find(0);
if (! $scheduledBackup) {
- ScheduledDatabaseBackup::create([
+ ScheduledDatabaseBackup::query()->create([
'id' => 0,
'enabled' => true,
'save_s3' => false,
'frequency' => '0 0 * * *',
'database_id' => $database->id,
- 'database_type' => \App\Models\StandalonePostgresql::class,
+ 'database_type' => StandalonePostgresql::class,
'team_id' => 0,
]);
}
}
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
echo "Error in restoring coolify db backup: {$e->getMessage()}\n";
}
}
@@ -234,7 +236,7 @@ class Init extends Command
}
try {
Http::get("https://undead.coolify.io/v4/alive?appId=$id&version=$version");
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
echo "Error in sending live signal: {$e->getMessage()}\n";
}
}
@@ -246,12 +248,12 @@ class Init extends Command
if (isCloud()) {
return;
}
- $queued_inprogress_deployments = ApplicationDeploymentQueue::whereIn('status', [ApplicationDeploymentStatus::IN_PROGRESS->value, ApplicationDeploymentStatus::QUEUED->value])->get();
- foreach ($queued_inprogress_deployments as $deployment) {
- $deployment->status = ApplicationDeploymentStatus::FAILED->value;
- $deployment->save();
+ $queued_inprogress_deployments = ApplicationDeploymentQueue::query()->whereIn('status', [ApplicationDeploymentStatus::IN_PROGRESS->value, ApplicationDeploymentStatus::QUEUED->value])->get();
+ foreach ($queued_inprogress_deployments as $queued_inprogress_deployment) {
+ $queued_inprogress_deployment->status = ApplicationDeploymentStatus::FAILED->value;
+ $queued_inprogress_deployment->save();
}
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
echo "Error: {$e->getMessage()}\n";
}
}
diff --git a/app/Console/Commands/Migration.php b/app/Console/Commands/Migration.php
index 44c17203b..3f6e498ec 100644
--- a/app/Console/Commands/Migration.php
+++ b/app/Console/Commands/Migration.php
@@ -16,9 +16,8 @@ class Migration extends Command
$this->info('Migration is enabled on this server.');
$this->call('migrate', ['--force' => true, '--isolated' => true]);
exit(0);
- } else {
- $this->info('Migration is disabled on this server.');
- exit(0);
}
+ $this->info('Migration is disabled on this server.');
+ exit(0);
}
}
diff --git a/app/Console/Commands/OpenApi.php b/app/Console/Commands/OpenApi.php
index 6cbcb310c..a32170699 100644
--- a/app/Console/Commands/OpenApi.php
+++ b/app/Console/Commands/OpenApi.php
@@ -16,7 +16,7 @@ class OpenApi extends Command
// Generate OpenAPI documentation
echo "Generating OpenAPI documentation.\n";
// https://github.com/OAI/OpenAPI-Specification/releases
- $process = Process::run([
+ $processResult = Process::run([
'/var/www/html/vendor/bin/openapi',
'app',
'-o',
@@ -24,10 +24,10 @@ class OpenApi extends Command
'--version',
'3.1.0',
]);
- $error = $process->errorOutput();
+ $error = $processResult->errorOutput();
$error = preg_replace('/^.*an object literal,.*$/m', '', $error);
$error = preg_replace('/^\h*\v+/m', '', $error);
echo $error;
- echo $process->output();
+ echo $processResult->output();
}
}
diff --git a/app/Console/Commands/RootChangeEmail.php b/app/Console/Commands/RootChangeEmail.php
index c87a545c5..2027cdc49 100644
--- a/app/Console/Commands/RootChangeEmail.php
+++ b/app/Console/Commands/RootChangeEmail.php
@@ -3,6 +3,7 @@
namespace App\Console\Commands;
use App\Models\User;
+use Exception;
use Illuminate\Console\Command;
class RootChangeEmail extends Command
@@ -31,9 +32,9 @@ class RootChangeEmail extends Command
$email = $this->ask('Give me a new email for root user');
$this->info('Updating root email...');
try {
- User::find(0)->update(['email' => $email]);
+ User::query()->find(0)->update(['email' => $email]);
$this->info('Root user\'s email updated successfully.');
- } catch (\Exception $e) {
+ } catch (Exception $e) {
$this->error('Failed to update root user\'s email.');
return;
diff --git a/app/Console/Commands/RootResetPassword.php b/app/Console/Commands/RootResetPassword.php
index f36c11a4f..5b2210a6c 100644
--- a/app/Console/Commands/RootResetPassword.php
+++ b/app/Console/Commands/RootResetPassword.php
@@ -3,6 +3,7 @@
namespace App\Console\Commands;
use App\Models\User;
+use Exception;
use Illuminate\Console\Command;
use Illuminate\Support\Facades\Hash;
@@ -32,16 +33,16 @@ class RootResetPassword extends Command
$this->info('You are about to reset the root password.');
$password = password('Give me a new password for root user: ');
$passwordAgain = password('Again');
- if ($password != $passwordAgain) {
+ if ($password !== $passwordAgain) {
$this->error('Passwords do not match.');
return;
}
$this->info('Updating root password...');
try {
- User::find(0)->update(['password' => Hash::make($password)]);
+ User::query()->find(0)->update(['password' => Hash::make($password)]);
$this->info('Root password updated successfully.');
- } catch (\Exception $e) {
+ } catch (Exception $e) {
$this->error('Failed to update root password.');
return;
diff --git a/app/Console/Commands/Scheduler.php b/app/Console/Commands/Scheduler.php
index ee64368c3..90bbf2979 100644
--- a/app/Console/Commands/Scheduler.php
+++ b/app/Console/Commands/Scheduler.php
@@ -16,8 +16,7 @@ class Scheduler extends Command
$this->info('Scheduler is enabled on this server.');
$this->call('schedule:work');
exit(0);
- } else {
- exit(0);
}
+ exit(0);
}
}
diff --git a/app/Console/Commands/Seeder.php b/app/Console/Commands/Seeder.php
index e37b6a9d2..66f066515 100644
--- a/app/Console/Commands/Seeder.php
+++ b/app/Console/Commands/Seeder.php
@@ -16,9 +16,8 @@ class Seeder extends Command
$this->info('Seeder is enabled on this server.');
$this->call('db:seed', ['--class' => 'ProductionSeeder', '--force' => true]);
exit(0);
- } else {
- $this->info('Seeder is disabled on this server.');
- exit(0);
}
+ $this->info('Seeder is disabled on this server.');
+ exit(0);
}
}
diff --git a/app/Console/Commands/ServicesDelete.php b/app/Console/Commands/ServicesDelete.php
index b5a74166a..fc2dad770 100644
--- a/app/Console/Commands/ServicesDelete.php
+++ b/app/Console/Commands/ServicesDelete.php
@@ -62,8 +62,8 @@ class ServicesDelete extends Command
options: $servers->pluck('name', 'id')->sortKeys(),
);
- foreach ($serversToDelete as $server) {
- $toDelete = $servers->where('id', $server)->first();
+ foreach ($serversToDelete as $serverToDelete) {
+ $toDelete = $servers->where('id', $serverToDelete)->first();
if ($toDelete) {
$this->info($toDelete);
$confirmed = confirm('Are you sure you want to delete all selected resources?');
@@ -88,8 +88,8 @@ class ServicesDelete extends Command
$applications->pluck('name', 'id')->sortKeys(),
);
- foreach ($applicationsToDelete as $application) {
- $toDelete = $applications->where('id', $application)->first();
+ foreach ($applicationsToDelete as $applicationToDelete) {
+ $toDelete = $applications->where('id', $applicationToDelete)->first();
if ($toDelete) {
$this->info($toDelete);
$confirmed = confirm('Are you sure you want to delete all selected resources? ');
@@ -114,8 +114,8 @@ class ServicesDelete extends Command
$databases->pluck('name', 'id')->sortKeys(),
);
- foreach ($databasesToDelete as $database) {
- $toDelete = $databases->where('id', $database)->first();
+ foreach ($databasesToDelete as $databaseToDelete) {
+ $toDelete = $databases->where('id', $databaseToDelete)->first();
if ($toDelete) {
$this->info($toDelete);
$confirmed = confirm('Are you sure you want to delete all selected resources?');
@@ -140,8 +140,8 @@ class ServicesDelete extends Command
$services->pluck('name', 'id')->sortKeys(),
);
- foreach ($servicesToDelete as $service) {
- $toDelete = $services->where('id', $service)->first();
+ foreach ($servicesToDelete as $serviceToDelete) {
+ $toDelete = $services->where('id', $serviceToDelete)->first();
if ($toDelete) {
$this->info($toDelete);
$confirmed = confirm('Are you sure you want to delete all selected resources?');
diff --git a/app/Console/Commands/ServicesGenerate.php b/app/Console/Commands/ServicesGenerate.php
index b45707c5c..208031a15 100644
--- a/app/Console/Commands/ServicesGenerate.php
+++ b/app/Console/Commands/ServicesGenerate.php
@@ -45,7 +45,7 @@ class ServicesGenerate extends Command
$data = collect(explode(PHP_EOL, $content))->mapWithKeys(function ($line): array {
preg_match('/^#(?.*):(?.*)$/U', $line, $m);
- return $m ? [trim($m['key']) => trim($m['value'])] : [];
+ return $m !== [] ? [trim($m['key']) => trim($m['value'])] : [];
});
if (str($data->get('ignore'))->toBoolean()) {
diff --git a/app/Console/Commands/SyncBunny.php b/app/Console/Commands/SyncBunny.php
index df1903828..697808ead 100644
--- a/app/Console/Commands/SyncBunny.php
+++ b/app/Console/Commands/SyncBunny.php
@@ -6,6 +6,7 @@ use Illuminate\Console\Command;
use Illuminate\Http\Client\PendingRequest;
use Illuminate\Http\Client\Pool;
use Illuminate\Support\Facades\Http;
+use Throwable;
use function Laravel\Prompts\confirm;
@@ -114,7 +115,8 @@ class SyncBunny extends Command
$this->info('Service template uploaded & purged...');
return;
- } elseif ($only_version) {
+ }
+ if ($only_version) {
if ($nightly) {
$this->info('About to sync NIGHLTY versions.json to BunnyCDN.');
} else {
@@ -123,7 +125,6 @@ class SyncBunny extends Command
$file = file_get_contents($versions_location);
$json = json_decode($file, true);
$actual_version = data_get($json, 'coolify.v4.version');
-
$confirmed = confirm("Are you sure you want to sync to {$actual_version}?");
if (! $confirmed) {
return;
@@ -152,7 +153,7 @@ class SyncBunny extends Command
$pool->purge("$bunny_cdn/$bunny_cdn_path/$install_script"),
]);
$this->info('All files uploaded & purged...');
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
$this->error('Error: '.$e->getMessage());
}
}
diff --git a/app/Console/Kernel.php b/app/Console/Kernel.php
index e8781b01e..d09786942 100644
--- a/app/Console/Kernel.php
+++ b/app/Console/Kernel.php
@@ -6,13 +6,11 @@ use App\Jobs\CheckAndStartSentinelJob;
use App\Jobs\CheckForUpdatesJob;
use App\Jobs\CheckHelperImageJob;
use App\Jobs\CleanupInstanceStuffsJob;
-use App\Jobs\CleanupStaleMultiplexedConnections;
use App\Jobs\DatabaseBackupJob;
use App\Jobs\DockerCleanupJob;
use App\Jobs\PullTemplatesFromCDN;
use App\Jobs\ScheduledTaskJob;
use App\Jobs\ServerCheckJob;
-use App\Jobs\ServerCleanupMux;
use App\Jobs\ServerStorageCheckJob;
use App\Jobs\UpdateCoolifyJob;
use App\Models\InstanceSettings;
@@ -28,9 +26,9 @@ class Kernel extends ConsoleKernel
{
private $allServers;
- private Schedule $scheduleInstance;
+ private Schedule $schedule;
- private InstanceSettings $settings;
+ private InstanceSettings $instanceSettings;
private string $updateCheckFrequency;
@@ -38,13 +36,13 @@ class Kernel extends ConsoleKernel
protected function schedule(Schedule $schedule): void
{
- $this->scheduleInstance = $schedule;
- $this->allServers = Server::where('ip', '!=', '1.2.3.4');
+ $this->schedule = $schedule;
+ $this->allServers = Server::query()->where('ip', '!=', '1.2.3.4');
- $this->settings = instanceSettings();
- $this->updateCheckFrequency = $this->settings->update_check_frequency ?: '0 * * * *';
+ $this->instanceSettings = instanceSettings();
+ $this->updateCheckFrequency = $this->instanceSettings->update_check_frequency ?: '0 * * * *';
- $this->instanceTimezone = $this->settings->instance_timezone ?: config('app.timezone');
+ $this->instanceTimezone = $this->instanceSettings->instance_timezone ?: config('app.timezone');
if (validate_timezone($this->instanceTimezone) === false) {
$this->instanceTimezone = config('app.timezone');
@@ -54,9 +52,9 @@ class Kernel extends ConsoleKernel
if (isDev()) {
// Instance Jobs
- $this->scheduleInstance->command('horizon:snapshot')->everyMinute();
- $this->scheduleInstance->job(new CleanupInstanceStuffsJob)->everyMinute()->onOneServer();
- $this->scheduleInstance->job(new CheckHelperImageJob)->everyTenMinutes()->onOneServer();
+ $this->schedule->command('horizon:snapshot')->everyMinute();
+ $this->schedule->job(new CleanupInstanceStuffsJob)->everyMinute()->onOneServer();
+ $this->schedule->job(new CheckHelperImageJob)->everyTenMinutes()->onOneServer();
// Server Jobs
$this->checkResources();
@@ -64,16 +62,16 @@ class Kernel extends ConsoleKernel
$this->checkScheduledBackups();
$this->checkScheduledTasks();
- $this->scheduleInstance->command('uploads:clear')->everyTwoMinutes();
+ $this->schedule->command('uploads:clear')->everyTwoMinutes();
} else {
// Instance Jobs
- $this->scheduleInstance->command('horizon:snapshot')->everyFiveMinutes();
- $this->scheduleInstance->command('cleanup:unreachable-servers')->daily()->onOneServer();
+ $this->schedule->command('horizon:snapshot')->everyFiveMinutes();
+ $this->schedule->command('cleanup:unreachable-servers')->daily()->onOneServer();
- $this->scheduleInstance->job(new PullTemplatesFromCDN)->cron($this->updateCheckFrequency)->timezone($this->instanceTimezone)->onOneServer();
+ $this->schedule->job(new PullTemplatesFromCDN)->cron($this->updateCheckFrequency)->timezone($this->instanceTimezone)->onOneServer();
- $this->scheduleInstance->job(new CleanupInstanceStuffsJob)->everyTwoMinutes()->onOneServer();
+ $this->schedule->job(new CleanupInstanceStuffsJob)->everyTwoMinutes()->onOneServer();
$this->scheduleUpdates();
// Server Jobs
@@ -84,8 +82,8 @@ class Kernel extends ConsoleKernel
$this->checkScheduledBackups();
$this->checkScheduledTasks();
- $this->scheduleInstance->command('cleanup:database --yes')->daily();
- $this->scheduleInstance->command('uploads:clear')->everyTwoMinutes();
+ $this->schedule->command('cleanup:database --yes')->daily();
+ $this->schedule->command('uploads:clear')->everyTwoMinutes();
}
}
@@ -94,12 +92,12 @@ class Kernel extends ConsoleKernel
$servers = $this->allServers->whereRelation('settings', 'is_usable', true)->whereRelation('settings', 'is_reachable', true)->get();
foreach ($servers as $server) {
if ($server->isSentinelEnabled()) {
- $this->scheduleInstance->job(function () use ($server) {
+ $this->schedule->job(function () use ($server) {
CheckAndStartSentinelJob::dispatch($server);
})->cron($this->updateCheckFrequency)->timezone($this->instanceTimezone)->onOneServer();
}
}
- $this->scheduleInstance->job(new CheckHelperImageJob)
+ $this->schedule->job(new CheckHelperImageJob)
->cron($this->updateCheckFrequency)
->timezone($this->instanceTimezone)
->onOneServer();
@@ -107,14 +105,14 @@ class Kernel extends ConsoleKernel
private function scheduleUpdates(): void
{
- $this->scheduleInstance->job(new CheckForUpdatesJob)
+ $this->schedule->job(new CheckForUpdatesJob)
->cron($this->updateCheckFrequency)
->timezone($this->instanceTimezone)
->onOneServer();
- if ($this->settings->is_auto_update_enabled) {
- $autoUpdateFrequency = $this->settings->auto_update_frequency;
- $this->scheduleInstance->job(new UpdateCoolifyJob)
+ if ($this->instanceSettings->is_auto_update_enabled) {
+ $autoUpdateFrequency = $this->instanceSettings->auto_update_frequency;
+ $this->schedule->job(new UpdateCoolifyJob)
->cron($autoUpdateFrequency)
->timezone($this->instanceTimezone)
->onOneServer();
@@ -125,7 +123,7 @@ class Kernel extends ConsoleKernel
{
if (isCloud()) {
$servers = $this->allServers->whereHas('team.subscription')->get();
- $own = Team::find(0)->servers;
+ $own = Team::query()->find(0)->servers;
$servers = $servers->merge($own);
} else {
$servers = $this->allServers->get();
@@ -142,23 +140,23 @@ class Kernel extends ConsoleKernel
if (Carbon::parse($lastSentinelUpdate)->isBefore(now()->subSeconds($server->waitBeforeDoingSshCheck()))) {
// Check container status every minute if Sentinel does not activated
if (isCloud()) {
- $this->scheduleInstance->job(new ServerCheckJob($server))->timezone($serverTimezone)->everyFiveMinutes()->onOneServer();
+ $this->schedule->job(new ServerCheckJob($server))->timezone($serverTimezone)->everyFiveMinutes()->onOneServer();
} else {
- $this->scheduleInstance->job(new ServerCheckJob($server))->timezone($serverTimezone)->everyMinute()->onOneServer();
+ $this->schedule->job(new ServerCheckJob($server))->timezone($serverTimezone)->everyMinute()->onOneServer();
}
// $this->scheduleInstance->job(new \App\Jobs\ServerCheckNewJob($server))->everyFiveMinutes()->onOneServer();
- $this->scheduleInstance->job(new ServerStorageCheckJob($server))->cron($server->settings->server_disk_usage_check_frequency)->timezone($serverTimezone)->onOneServer();
+ $this->schedule->job(new ServerStorageCheckJob($server))->cron($server->settings->server_disk_usage_check_frequency)->timezone($serverTimezone)->onOneServer();
}
- $this->scheduleInstance->job(new DockerCleanupJob($server))->cron($server->settings->docker_cleanup_frequency)->timezone($serverTimezone)->onOneServer();
+ $this->schedule->job(new DockerCleanupJob($server))->cron($server->settings->docker_cleanup_frequency)->timezone($serverTimezone)->onOneServer();
// Cleanup multiplexed connections every hour
// $this->scheduleInstance->job(new ServerCleanupMux($server))->hourly()->onOneServer();
// Temporary solution until we have better memory management for Sentinel
if ($server->isSentinelEnabled()) {
- $this->scheduleInstance->job(function () use ($server) {
+ $this->schedule->job(function () use ($server) {
$server->restartContainer('coolify-sentinel');
})->daily()->onOneServer();
}
@@ -167,7 +165,7 @@ class Kernel extends ConsoleKernel
private function checkScheduledBackups(): void
{
- $scheduled_backups = ScheduledDatabaseBackup::where('enabled', true)->get();
+ $scheduled_backups = ScheduledDatabaseBackup::query()->where('enabled', true)->get();
if ($scheduled_backups->isEmpty()) {
return;
}
@@ -187,7 +185,7 @@ class Kernel extends ConsoleKernel
$scheduled_backup->frequency = VALID_CRON_STRINGS[$scheduled_backup->frequency];
}
$serverTimezone = data_get($server->settings, 'server_timezone', $this->instanceTimezone);
- $this->scheduleInstance->job(new DatabaseBackupJob(
+ $this->schedule->job(new DatabaseBackupJob(
backup: $scheduled_backup
))->cron($scheduled_backup->frequency)->timezone($serverTimezone)->onOneServer();
}
@@ -195,7 +193,7 @@ class Kernel extends ConsoleKernel
private function checkScheduledTasks(): void
{
- $scheduled_tasks = ScheduledTask::where('enabled', true)->get();
+ $scheduled_tasks = ScheduledTask::query()->where('enabled', true)->get();
if ($scheduled_tasks->isEmpty()) {
return;
}
@@ -208,15 +206,11 @@ class Kernel extends ConsoleKernel
continue;
}
- if ($application) {
- if (str($application->status)->contains('running') === false) {
- continue;
- }
+ if ($application && str($application->status)->contains('running') === false) {
+ continue;
}
- if ($service) {
- if (str($service->status)->contains('running') === false) {
- continue;
- }
+ if ($service && str($service->status)->contains('running') === false) {
+ continue;
}
$server = $scheduled_task->server();
@@ -228,7 +222,7 @@ class Kernel extends ConsoleKernel
$scheduled_task->frequency = VALID_CRON_STRINGS[$scheduled_task->frequency];
}
$serverTimezone = data_get($server->settings, 'server_timezone', $this->instanceTimezone);
- $this->scheduleInstance->job(new ScheduledTaskJob(
+ $this->schedule->job(new ScheduledTaskJob(
task: $scheduled_task
))->cron($scheduled_task->frequency)->timezone($serverTimezone)->onOneServer();
}
diff --git a/app/Data/ServerMetadata.php b/app/Data/ServerMetadata.php
index d95944b15..dadba854a 100644
--- a/app/Data/ServerMetadata.php
+++ b/app/Data/ServerMetadata.php
@@ -9,7 +9,7 @@ use Spatie\LaravelData\Data;
class ServerMetadata extends Data
{
public function __construct(
- public ?ProxyTypes $type,
- public ?ProxyStatus $status
+ public ?ProxyTypes $proxyTypes,
+ public ?ProxyStatus $proxyStatus
) {}
}
diff --git a/app/Events/ApplicationStatusChanged.php b/app/Events/ApplicationStatusChanged.php
index 4433248aa..ae24aefa2 100644
--- a/app/Events/ApplicationStatusChanged.php
+++ b/app/Events/ApplicationStatusChanged.php
@@ -2,6 +2,7 @@
namespace App\Events;
+use Exception;
use Illuminate\Broadcasting\InteractsWithSockets;
use Illuminate\Broadcasting\PrivateChannel;
use Illuminate\Contracts\Broadcasting\ShouldBroadcast;
@@ -20,7 +21,7 @@ class ApplicationStatusChanged implements ShouldBroadcast
$teamId = auth()->user()->currentTeam()->id ?? null;
}
if (is_null($teamId)) {
- throw new \Exception('Team id is null');
+ throw new Exception('Team id is null');
}
$this->teamId = $teamId;
}
diff --git a/app/Events/BackupCreated.php b/app/Events/BackupCreated.php
index 45b2aacb7..633ac59bc 100644
--- a/app/Events/BackupCreated.php
+++ b/app/Events/BackupCreated.php
@@ -2,6 +2,7 @@
namespace App\Events;
+use Exception;
use Illuminate\Broadcasting\InteractsWithSockets;
use Illuminate\Broadcasting\PrivateChannel;
use Illuminate\Contracts\Broadcasting\ShouldBroadcast;
@@ -20,7 +21,7 @@ class BackupCreated implements ShouldBroadcast
$teamId = auth()->user()->currentTeam()->id ?? null;
}
if (is_null($teamId)) {
- throw new \Exception('Team id is null');
+ throw new Exception('Team id is null');
}
$this->teamId = $teamId;
}
diff --git a/app/Events/CloudflareTunnelConfigured.php b/app/Events/CloudflareTunnelConfigured.php
index 3d7076d0d..d412d332a 100644
--- a/app/Events/CloudflareTunnelConfigured.php
+++ b/app/Events/CloudflareTunnelConfigured.php
@@ -2,6 +2,7 @@
namespace App\Events;
+use Exception;
use Illuminate\Broadcasting\InteractsWithSockets;
use Illuminate\Broadcasting\PrivateChannel;
use Illuminate\Contracts\Broadcasting\ShouldBroadcast;
@@ -20,7 +21,7 @@ class CloudflareTunnelConfigured implements ShouldBroadcast
$teamId = auth()->user()->currentTeam()->id ?? null;
}
if (is_null($teamId)) {
- throw new \Exception('Team id is null');
+ throw new Exception('Team id is null');
}
$this->teamId = $teamId;
}
diff --git a/app/Events/DatabaseProxyStopped.php b/app/Events/DatabaseProxyStopped.php
index 96b35a5ca..57313e5df 100644
--- a/app/Events/DatabaseProxyStopped.php
+++ b/app/Events/DatabaseProxyStopped.php
@@ -2,6 +2,7 @@
namespace App\Events;
+use Exception;
use Illuminate\Broadcasting\InteractsWithSockets;
use Illuminate\Broadcasting\PrivateChannel;
use Illuminate\Contracts\Broadcasting\ShouldBroadcast;
@@ -21,7 +22,7 @@ class DatabaseProxyStopped implements ShouldBroadcast
$teamId = Auth::user()?->currentTeam()?->id ?? null;
}
if (is_null($teamId)) {
- throw new \Exception('Team id is null');
+ throw new Exception('Team id is null');
}
$this->teamId = $teamId;
}
diff --git a/app/Events/DatabaseStatusChanged.php b/app/Events/DatabaseStatusChanged.php
index 913b21bc2..360592a3b 100644
--- a/app/Events/DatabaseStatusChanged.php
+++ b/app/Events/DatabaseStatusChanged.php
@@ -13,7 +13,7 @@ class DatabaseStatusChanged implements ShouldBroadcast
{
use Dispatchable, InteractsWithSockets, SerializesModels;
- public $userId = null;
+ public $userId;
public function __construct($userId = null)
{
@@ -21,7 +21,7 @@ class DatabaseStatusChanged implements ShouldBroadcast
$userId = Auth::id() ?? null;
}
if (is_null($userId)) {
- return false;
+ return;
}
$this->userId = $userId;
diff --git a/app/Events/FileStorageChanged.php b/app/Events/FileStorageChanged.php
index 57004cf4c..c3b16daa1 100644
--- a/app/Events/FileStorageChanged.php
+++ b/app/Events/FileStorageChanged.php
@@ -2,6 +2,7 @@
namespace App\Events;
+use Exception;
use Illuminate\Broadcasting\InteractsWithSockets;
use Illuminate\Broadcasting\PrivateChannel;
use Illuminate\Contracts\Broadcasting\ShouldBroadcast;
@@ -17,7 +18,7 @@ class FileStorageChanged implements ShouldBroadcast
public function __construct($teamId = null)
{
if (is_null($teamId)) {
- throw new \Exception('Team id is null');
+ throw new Exception('Team id is null');
}
$this->teamId = $teamId;
}
diff --git a/app/Events/ProxyStatusChanged.php b/app/Events/ProxyStatusChanged.php
index 35eedef70..2c79bb944 100644
--- a/app/Events/ProxyStatusChanged.php
+++ b/app/Events/ProxyStatusChanged.php
@@ -2,6 +2,7 @@
namespace App\Events;
+use Exception;
use Illuminate\Broadcasting\InteractsWithSockets;
use Illuminate\Broadcasting\PrivateChannel;
use Illuminate\Contracts\Broadcasting\ShouldBroadcast;
@@ -20,7 +21,7 @@ class ProxyStatusChanged implements ShouldBroadcast
$teamId = auth()->user()->currentTeam()->id ?? null;
}
if (is_null($teamId)) {
- throw new \Exception('Team id is null');
+ throw new Exception('Team id is null');
}
$this->teamId = $teamId;
}
diff --git a/app/Events/RestoreJobFinished.php b/app/Events/RestoreJobFinished.php
index d3adb7798..014e0f19e 100644
--- a/app/Events/RestoreJobFinished.php
+++ b/app/Events/RestoreJobFinished.php
@@ -17,18 +17,15 @@ class RestoreJobFinished
$tmpPath = data_get($data, 'tmpPath');
$container = data_get($data, 'container');
$serverId = data_get($data, 'serverId');
- if (filled($scriptPath) && filled($tmpPath) && filled($container) && filled($serverId)) {
- if (str($tmpPath)->startsWith('/tmp/')
- && str($scriptPath)->startsWith('/tmp/')
- && ! str($tmpPath)->contains('..')
- && ! str($scriptPath)->contains('..')
- && strlen($tmpPath) > 5 // longer than just "/tmp/"
- && strlen($scriptPath) > 5
- ) {
- $commands[] = "docker exec {$container} sh -c 'rm {$scriptPath}'";
- $commands[] = "docker exec {$container} sh -c 'rm {$tmpPath}'";
- instant_remote_process($commands, Server::find($serverId), throwError: true);
- }
+ if (filled($scriptPath) && filled($tmpPath) && filled($container) && filled($serverId) && (str($tmpPath)->startsWith('/tmp/')
+ && str($scriptPath)->startsWith('/tmp/')
+ && ! str($tmpPath)->contains('..')
+ && ! str($scriptPath)->contains('..')
+ && strlen($tmpPath) > 5 // longer than just "/tmp/"
+ && strlen($scriptPath) > 5)) {
+ $commands[] = "docker exec {$container} sh -c 'rm {$scriptPath}'";
+ $commands[] = "docker exec {$container} sh -c 'rm {$tmpPath}'";
+ instant_remote_process($commands, Server::query()->find($serverId), throwError: true);
}
}
}
diff --git a/app/Events/ScheduledTaskDone.php b/app/Events/ScheduledTaskDone.php
index c8b5547f6..5a1a8f0d5 100644
--- a/app/Events/ScheduledTaskDone.php
+++ b/app/Events/ScheduledTaskDone.php
@@ -2,6 +2,7 @@
namespace App\Events;
+use Exception;
use Illuminate\Broadcasting\InteractsWithSockets;
use Illuminate\Broadcasting\PrivateChannel;
use Illuminate\Contracts\Broadcasting\ShouldBroadcast;
@@ -20,7 +21,7 @@ class ScheduledTaskDone implements ShouldBroadcast
$teamId = auth()->user()->currentTeam()->id ?? null;
}
if (is_null($teamId)) {
- throw new \Exception('Team id is null');
+ throw new Exception('Team id is null');
}
$this->teamId = $teamId;
}
diff --git a/app/Events/ServiceStatusChanged.php b/app/Events/ServiceStatusChanged.php
index 3950022e1..2782464e1 100644
--- a/app/Events/ServiceStatusChanged.php
+++ b/app/Events/ServiceStatusChanged.php
@@ -21,7 +21,7 @@ class ServiceStatusChanged implements ShouldBroadcast
$userId = Auth::id() ?? null;
}
if (is_null($userId)) {
- return false;
+ return;
}
$this->userId = $userId;
}
diff --git a/app/Exceptions/Handler.php b/app/Exceptions/Handler.php
index 8c89bb07f..5acba9843 100644
--- a/app/Exceptions/Handler.php
+++ b/app/Exceptions/Handler.php
@@ -16,7 +16,7 @@ class Handler extends ExceptionHandler
/**
* A list of exception types with their corresponding custom log levels.
*
- * @var array, \Psr\Log\LogLevel::*>
+ * @var array, \Psr\Log\LogLevel::*>
*/
protected $levels = [
//
@@ -25,7 +25,7 @@ class Handler extends ExceptionHandler
/**
* A list of the exception types that are not reported.
*
- * @var array>
+ * @var array>
*/
protected $dontReport = [
ProcessException::class,
@@ -42,15 +42,15 @@ class Handler extends ExceptionHandler
'password_confirmation',
];
- private InstanceSettings $settings;
+ private InstanceSettings $instanceSettings;
- protected function unauthenticated($request, AuthenticationException $exception)
+ protected function unauthenticated($request, AuthenticationException $authenticationException)
{
- if ($request->is('api/*') || $request->expectsJson() || $this->shouldReturnJson($request, $exception)) {
- return response()->json(['message' => $exception->getMessage()], 401);
+ if ($request->is('api/*') || $request->expectsJson() || $this->shouldReturnJson($request, $authenticationException)) {
+ return response()->json(['message' => $authenticationException->getMessage()], 401);
}
- return redirect()->guest($exception->redirectTo($request) ?? route('login'));
+ return redirect()->guest($authenticationException->redirectTo($request) ?? route('login'));
}
/**
@@ -58,21 +58,21 @@ class Handler extends ExceptionHandler
*/
public function register(): void
{
- $this->reportable(function (Throwable $e) {
+ $this->reportable(function (Throwable $throwable) {
if (isDev()) {
return;
}
- if ($e instanceof RuntimeException) {
+ if ($throwable instanceof RuntimeException) {
return;
}
- $this->settings = instanceSettings();
- if ($this->settings->do_not_track) {
+ $this->instanceSettings = instanceSettings();
+ if ($this->instanceSettings->do_not_track) {
return;
}
app('sentry')->configureScope(
function (Scope $scope) {
$email = auth()?->user() ? auth()->user()->email : 'guest';
- $instanceAdmin = User::find(0)->email ?? 'admin@localhost';
+ $instanceAdmin = User::query()->find(0)->email ?? 'admin@localhost';
$scope->setUser(
[
'email' => $email,
@@ -81,10 +81,10 @@ class Handler extends ExceptionHandler
);
}
);
- if (str($e->getMessage())->contains('No space left on device')) {
+ if (str($throwable->getMessage())->contains('No space left on device')) {
return;
}
- Integration::captureUnhandledException($e);
+ Integration::captureUnhandledException($throwable);
});
}
}
diff --git a/app/Helpers/SshMultiplexingHelper.php b/app/Helpers/SshMultiplexingHelper.php
index 8da476b9e..1a10222bf 100644
--- a/app/Helpers/SshMultiplexingHelper.php
+++ b/app/Helpers/SshMultiplexingHelper.php
@@ -6,12 +6,13 @@ use App\Models\PrivateKey;
use App\Models\Server;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Process;
+use RuntimeException;
class SshMultiplexingHelper
{
public static function serverSshConfiguration(Server $server)
{
- $privateKey = PrivateKey::findOrFail($server->private_key_id);
+ $privateKey = PrivateKey::query()->findOrFail($server->private_key_id);
$sshKeyLocation = $privateKey->getKeyLocation();
$muxFilename = '/var/www/html/storage/app/ssh/mux/mux_'.$server->uuid;
@@ -35,9 +36,9 @@ class SshMultiplexingHelper
$checkCommand .= '-o ProxyCommand="cloudflared access ssh --hostname %h" ';
}
$checkCommand .= "{$server->user}@{$server->ip}";
- $process = Process::run($checkCommand);
+ $processResult = Process::run($checkCommand);
- if ($process->exitCode() !== 0) {
+ if ($processResult->exitCode() !== 0) {
return self::establishNewMultiplexedConnection($server);
}
@@ -60,12 +61,9 @@ class SshMultiplexingHelper
}
$establishCommand .= self::getCommonSshOptions($server, $sshKeyLocation, $connectionTimeout, $serverInterval);
$establishCommand .= "{$server->user}@{$server->ip}";
- $establishProcess = Process::run($establishCommand);
- if ($establishProcess->exitCode() !== 0) {
- return false;
- }
+ $processResult = Process::run($establishCommand);
- return true;
+ return $processResult->exitCode() === 0;
}
public static function removeMuxFile(Server $server)
@@ -103,15 +101,14 @@ class SshMultiplexingHelper
}
$scp_command .= self::getCommonSshOptions($server, $sshKeyLocation, config('constants.ssh.connection_timeout'), config('constants.ssh.server_interval'), isScp: true);
- $scp_command .= "{$source} {$server->user}@{$server->ip}:{$dest}";
- return $scp_command;
+ return $scp_command."{$source} {$server->user}@{$server->ip}:{$dest}";
}
public static function generateSshCommand(Server $server, string $command)
{
if ($server->settings->force_disabled) {
- throw new \RuntimeException('Server is disabled.');
+ throw new RuntimeException('Server is disabled.');
}
$sshConfig = self::serverSshConfiguration($server);
@@ -140,11 +137,9 @@ class SshMultiplexingHelper
$delimiter = base64_encode($delimiter);
$command = str_replace($delimiter, '', $command);
- $ssh_command .= "{$server->user}@{$server->ip} 'bash -se' << \\$delimiter".PHP_EOL
+ return $ssh_command.("{$server->user}@{$server->ip} 'bash -se' << \\$delimiter".PHP_EOL
.$command.PHP_EOL
- .$delimiter;
-
- return $ssh_command;
+ .$delimiter);
}
private static function isMultiplexingEnabled(): bool
@@ -156,9 +151,9 @@ class SshMultiplexingHelper
{
$keyLocation = $privateKey->getKeyLocation();
$checkKeyCommand = "ls $keyLocation 2>/dev/null";
- $keyCheckProcess = Process::run($checkKeyCommand);
+ $processResult = Process::run($checkKeyCommand);
- if ($keyCheckProcess->exitCode() !== 0) {
+ if ($processResult->exitCode() !== 0) {
$privateKey->storeInFileSystem();
}
}
diff --git a/app/Http/Controllers/Api/ApplicationsController.php b/app/Http/Controllers/Api/ApplicationsController.php
index 19975041b..fa009a2de 100644
--- a/app/Http/Controllers/Api/ApplicationsController.php
+++ b/app/Http/Controllers/Api/ApplicationsController.php
@@ -15,6 +15,7 @@ use App\Models\PrivateKey;
use App\Models\Project;
use App\Models\Server;
use App\Models\Service;
+use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use Illuminate\Validation\Rule;
use OpenApi\Attributes as OA;
@@ -89,7 +90,7 @@ class ApplicationsController extends Controller
if (is_null($teamId)) {
return invalidTokenResponse();
}
- $projects = Project::where('team_id', $teamId)->get();
+ $projects = Project::query()->where('team_id', $teamId)->get();
$applications = collect();
$applications->push($projects->pluck('applications')->flatten());
$applications = $applications->flatten();
@@ -717,7 +718,7 @@ class ApplicationsController extends Controller
}
$return = validateIncomingRequest($request);
- if ($return instanceof \Illuminate\Http\JsonResponse) {
+ if ($return instanceof JsonResponse) {
return $return;
}
$validator = customApiValidator($request->all(), [
@@ -731,12 +732,10 @@ class ApplicationsController extends Controller
]);
$extraFields = array_diff(array_keys($request->all()), $allowedFields);
- if ($validator->fails() || ! empty($extraFields)) {
+ if ($validator->fails() || $extraFields !== []) {
$errors = $validator->errors();
- if (! empty($extraFields)) {
- foreach ($extraFields as $field) {
- $errors->add($field, 'This field is not allowed.');
- }
+ foreach ($extraFields as $extraField) {
+ $errors->add($extraField, 'This field is not allowed.');
}
return response()->json([
@@ -825,15 +824,12 @@ class ApplicationsController extends Controller
if ($request->build_pack === 'dockercompose') {
$request->offsetSet('ports_exposes', '80');
}
-
$return = $this->validateDataApplications($request, $server);
- if ($return instanceof \Illuminate\Http\JsonResponse) {
+ if ($return instanceof JsonResponse) {
return $return;
}
-
$application = new Application;
removeUnnecessaryFieldsFromRequest($request);
-
$application->fill($request->all());
$dockerComposeDomainsJson = collect();
if ($request->has('docker_compose_domains')) {
@@ -848,7 +844,6 @@ class ApplicationsController extends Controller
if ($dockerComposeDomainsJson->count() > 0) {
$application->docker_compose_domains = $dockerComposeDomainsJson;
}
-
$application->fqdn = $fqdn;
$application->destination_id = $destination->id;
$application->destination_type = $destination->getMorphClass();
@@ -868,27 +863,24 @@ class ApplicationsController extends Controller
$application->save();
}
$application->isConfigurationChanged(true);
-
if ($instantDeploy) {
$deployment_uuid = new Cuid2;
-
queue_application_deployment(
application: $application,
deployment_uuid: $deployment_uuid,
no_questions_asked: true,
is_api: true,
);
- } else {
- if ($application->build_pack === 'dockercompose') {
- LoadComposeFile::dispatch($application);
- }
+ } elseif ($application->build_pack === 'dockercompose') {
+ LoadComposeFile::dispatch($application);
}
return response()->json(serializeApiResponse([
'uuid' => data_get($application, 'uuid'),
'domains' => data_get($application, 'domains'),
]))->setStatusCode(201);
- } elseif ($type === 'private-gh-app') {
+ }
+ if ($type === 'private-gh-app') {
$validationRules = [
'git_repository' => 'string|required',
'git_branch' => 'string|required',
@@ -900,7 +892,6 @@ class ApplicationsController extends Controller
'docker_compose_raw' => 'string|nullable',
];
$validationRules = array_merge(sharedDataApplications(), $validationRules);
-
$validator = customApiValidator($request->all(), $validationRules);
if ($validator->fails()) {
return response()->json([
@@ -908,16 +899,14 @@ class ApplicationsController extends Controller
'errors' => $validator->errors(),
], 422);
}
-
if (! $request->has('name')) {
$request->offsetSet('name', generate_application_name($request->git_repository, $request->git_branch));
}
if ($request->build_pack === 'dockercompose') {
$request->offsetSet('ports_exposes', '80');
}
-
$return = $this->validateDataApplications($request, $server);
- if ($return instanceof \Illuminate\Http\JsonResponse) {
+ if ($return instanceof JsonResponse) {
return $return;
}
$githubApp = GithubApp::whereTeamId($teamId)->where('uuid', $githubAppUuid)->first();
@@ -930,9 +919,7 @@ class ApplicationsController extends Controller
}
$application = new Application;
removeUnnecessaryFieldsFromRequest($request);
-
$application->fill($request->all());
-
$dockerComposeDomainsJson = collect();
if ($request->has('docker_compose_domains')) {
$yaml = Yaml::parse($application->docker_compose_raw);
@@ -969,28 +956,24 @@ class ApplicationsController extends Controller
$application->save();
}
$application->isConfigurationChanged(true);
-
if ($instantDeploy) {
$deployment_uuid = new Cuid2;
-
queue_application_deployment(
application: $application,
deployment_uuid: $deployment_uuid,
no_questions_asked: true,
is_api: true,
);
- } else {
- if ($application->build_pack === 'dockercompose') {
- LoadComposeFile::dispatch($application);
- }
+ } elseif ($application->build_pack === 'dockercompose') {
+ LoadComposeFile::dispatch($application);
}
return response()->json(serializeApiResponse([
'uuid' => data_get($application, 'uuid'),
'domains' => data_get($application, 'domains'),
]))->setStatusCode(201);
- } elseif ($type === 'private-deploy-key') {
-
+ }
+ if ($type === 'private-deploy-key') {
$validationRules = [
'git_repository' => 'string|required',
'git_branch' => 'string|required',
@@ -1001,10 +984,8 @@ class ApplicationsController extends Controller
'docker_compose_location' => 'string',
'docker_compose_raw' => 'string|nullable',
];
-
$validationRules = array_merge(sharedDataApplications(), $validationRules);
$validator = customApiValidator($request->all(), $validationRules);
-
if ($validator->fails()) {
return response()->json([
'message' => 'Validation failed.',
@@ -1017,21 +998,17 @@ class ApplicationsController extends Controller
if ($request->build_pack === 'dockercompose') {
$request->offsetSet('ports_exposes', '80');
}
-
$return = $this->validateDataApplications($request, $server);
- if ($return instanceof \Illuminate\Http\JsonResponse) {
+ if ($return instanceof JsonResponse) {
return $return;
}
$privateKey = PrivateKey::whereTeamId($teamId)->where('uuid', $request->private_key_uuid)->first();
if (! $privateKey) {
return response()->json(['message' => 'Private Key not found.'], 404);
}
-
$application = new Application;
removeUnnecessaryFieldsFromRequest($request);
-
$application->fill($request->all());
-
$dockerComposeDomainsJson = collect();
if ($request->has('docker_compose_domains')) {
$yaml = Yaml::parse($application->docker_compose_raw);
@@ -1066,33 +1043,29 @@ class ApplicationsController extends Controller
$application->save();
}
$application->isConfigurationChanged(true);
-
if ($instantDeploy) {
$deployment_uuid = new Cuid2;
-
queue_application_deployment(
application: $application,
deployment_uuid: $deployment_uuid,
no_questions_asked: true,
is_api: true,
);
- } else {
- if ($application->build_pack === 'dockercompose') {
- LoadComposeFile::dispatch($application);
- }
+ } elseif ($application->build_pack === 'dockercompose') {
+ LoadComposeFile::dispatch($application);
}
return response()->json(serializeApiResponse([
'uuid' => data_get($application, 'uuid'),
'domains' => data_get($application, 'domains'),
]))->setStatusCode(201);
- } elseif ($type === 'dockerfile') {
+ }
+ if ($type === 'dockerfile') {
$validationRules = [
'dockerfile' => 'string|required',
];
$validationRules = array_merge(sharedDataApplications(), $validationRules);
$validator = customApiValidator($request->all(), $validationRules);
-
if ($validator->fails()) {
return response()->json([
'message' => 'Validation failed.',
@@ -1102,9 +1075,8 @@ class ApplicationsController extends Controller
if (! $request->has('name')) {
$request->offsetSet('name', 'dockerfile-'.new Cuid2);
}
-
$return = $this->validateDataApplications($request, $server);
- if ($return instanceof \Illuminate\Http\JsonResponse) {
+ if ($return instanceof JsonResponse) {
return $return;
}
if (! isBase64Encoded($request->dockerfile)) {
@@ -1126,12 +1098,10 @@ class ApplicationsController extends Controller
}
$dockerFile = base64_decode($request->dockerfile);
removeUnnecessaryFieldsFromRequest($request);
-
$port = get_port_from_dockerfile($request->dockerfile);
if (! $port) {
$port = 80;
}
-
$application = new Application;
$application->fill($request->all());
$application->fqdn = $fqdn;
@@ -1141,8 +1111,6 @@ class ApplicationsController extends Controller
$application->destination_id = $destination->id;
$application->destination_type = $destination->getMorphClass();
$application->environment_id = $environment->id;
-
-
$application->git_repository = 'coollabsio/coolify';
$application->git_branch = 'main';
$application->save();
@@ -1156,7 +1124,6 @@ class ApplicationsController extends Controller
$application->save();
}
$application->isConfigurationChanged(true);
-
if ($instantDeploy) {
$deployment_uuid = new Cuid2;
@@ -1172,7 +1139,8 @@ class ApplicationsController extends Controller
'uuid' => data_get($application, 'uuid'),
'domains' => data_get($application, 'domains'),
]))->setStatusCode(201);
- } elseif ($type === 'dockerimage') {
+ }
+ if ($type === 'dockerimage') {
$validationRules = [
'docker_registry_image_name' => 'string|required',
'docker_registry_image_tag' => 'string',
@@ -1180,7 +1148,6 @@ class ApplicationsController extends Controller
];
$validationRules = array_merge(sharedDataApplications(), $validationRules);
$validator = customApiValidator($request->all(), $validationRules);
-
if ($validator->fails()) {
return response()->json([
'message' => 'Validation failed.',
@@ -1191,7 +1158,7 @@ class ApplicationsController extends Controller
$request->offsetSet('name', 'docker-image-'.new Cuid2);
}
$return = $this->validateDataApplications($request, $server);
- if ($return instanceof \Illuminate\Http\JsonResponse) {
+ if ($return instanceof JsonResponse) {
return $return;
}
if (! $request->docker_registry_image_tag) {
@@ -1199,14 +1166,12 @@ class ApplicationsController extends Controller
}
$application = new Application;
removeUnnecessaryFieldsFromRequest($request);
-
$application->fill($request->all());
$application->fqdn = $fqdn;
$application->build_pack = 'dockerimage';
$application->destination_id = $destination->id;
$application->destination_type = $destination->getMorphClass();
$application->environment_id = $environment->id;
-
$application->git_repository = 'coollabsio/coolify';
$application->git_branch = 'main';
$application->save();
@@ -1220,7 +1185,6 @@ class ApplicationsController extends Controller
$application->save();
}
$application->isConfigurationChanged(true);
-
if ($instantDeploy) {
$deployment_uuid = new Cuid2;
@@ -1236,16 +1200,14 @@ class ApplicationsController extends Controller
'uuid' => data_get($application, 'uuid'),
'domains' => data_get($application, 'domains'),
]))->setStatusCode(201);
- } elseif ($type === 'dockercompose') {
+ }
+ if ($type === 'dockercompose') {
$allowedFields = ['project_uuid', 'environment_name', 'environment_uuid', 'server_uuid', 'destination_uuid', 'type', 'name', 'description', 'instant_deploy', 'docker_compose_raw'];
-
$extraFields = array_diff(array_keys($request->all()), $allowedFields);
- if ($validator->fails() || ! empty($extraFields)) {
+ if ($validator->fails() || $extraFields !== []) {
$errors = $validator->errors();
- if (! empty($extraFields)) {
- foreach ($extraFields as $field) {
- $errors->add($field, 'This field is not allowed.');
- }
+ foreach ($extraFields as $extraField) {
+ $errors->add($extraField, 'This field is not allowed.');
}
return response()->json([
@@ -1261,7 +1223,6 @@ class ApplicationsController extends Controller
];
$validationRules = array_merge(sharedDataApplications(), $validationRules);
$validator = customApiValidator($request->all(), $validationRules);
-
if ($validator->fails()) {
return response()->json([
'message' => 'Validation failed.',
@@ -1269,7 +1230,7 @@ class ApplicationsController extends Controller
], 422);
}
$return = $this->validateDataApplications($request, $server);
- if ($return instanceof \Illuminate\Http\JsonResponse) {
+ if ($return instanceof JsonResponse) {
return $return;
}
if (! isBase64Encoded($request->docker_compose_raw)) {
@@ -1291,23 +1252,19 @@ class ApplicationsController extends Controller
}
$dockerCompose = base64_decode($request->docker_compose_raw);
$dockerComposeRaw = Yaml::dump(Yaml::parse($dockerCompose), 10, 2, Yaml::DUMP_MULTI_LINE_LITERAL_BLOCK);
-
// $isValid = validateComposeFile($dockerComposeRaw, $server_id);
// if ($isValid !== 'OK') {
// return $this->dispatch('error', "Invalid docker-compose file.\n$isValid");
// }
-
$service = new Service;
removeUnnecessaryFieldsFromRequest($request);
$service->fill($request->all());
-
$service->docker_compose_raw = $dockerComposeRaw;
$service->environment_id = $environment->id;
$service->server_id = $server->id;
$service->destination_id = $destination->id;
$service->destination_type = $destination->getMorphClass();
$service->save();
-
$service->name = "service-$service->uuid";
$service->parse(isNew: true);
if ($instantDeploy) {
@@ -1447,7 +1404,7 @@ class ApplicationsController extends Controller
public function delete_by_uuid(Request $request)
{
$teamId = getTeamIdFromToken();
- $cleanup = filter_var($request->query->get('cleanup', true), FILTER_VALIDATE_BOOLEAN);
+ filter_var($request->query->get('cleanup', true), FILTER_VALIDATE_BOOLEAN);
if (is_null($teamId)) {
return invalidTokenResponse();
}
@@ -1602,7 +1559,7 @@ class ApplicationsController extends Controller
], 400);
}
$return = validateIncomingRequest($request);
- if ($return instanceof \Illuminate\Http\JsonResponse) {
+ if ($return instanceof JsonResponse) {
return $return;
}
$application = Application::ownedByCurrentTeamAPI($teamId)->where('uuid', $request->uuid)->first();
@@ -1664,16 +1621,14 @@ class ApplicationsController extends Controller
}
}
$return = $this->validateDataApplications($request, $server);
- if ($return instanceof \Illuminate\Http\JsonResponse) {
+ if ($return instanceof JsonResponse) {
return $return;
}
$extraFields = array_diff(array_keys($request->all()), $allowedFields);
- if ($validator->fails() || ! empty($extraFields)) {
+ if ($validator->fails() || $extraFields !== []) {
$errors = $validator->errors();
- if (! empty($extraFields)) {
- foreach ($extraFields as $field) {
- $errors->add($field, 'This field is not allowed.');
- }
+ foreach ($extraFields as $extraField) {
+ $errors->add($extraField, 'This field is not allowed.');
}
return response()->json([
@@ -1696,7 +1651,7 @@ class ApplicationsController extends Controller
return $domain;
});
- if (count($errors) > 0) {
+ if ($errors !== []) {
return response()->json([
'message' => 'Validation failed.',
'errors' => $errors,
@@ -1755,11 +1710,11 @@ class ApplicationsController extends Controller
$application->save();
if ($instantDeploy) {
- $deployment_uuid = new Cuid2;
+ $cuid2 = new Cuid2;
queue_application_deployment(
application: $application,
- deployment_uuid: $deployment_uuid,
+ deployment_uuid: $cuid2,
is_api: true,
);
}
@@ -1935,7 +1890,7 @@ class ApplicationsController extends Controller
}
$return = validateIncomingRequest($request);
- if ($return instanceof \Illuminate\Http\JsonResponse) {
+ if ($return instanceof JsonResponse) {
return $return;
}
$application = Application::ownedByCurrentTeamAPI($teamId)->where('uuid', $request->uuid)->first();
@@ -1956,12 +1911,10 @@ class ApplicationsController extends Controller
]);
$extraFields = array_diff(array_keys($request->all()), $allowedFields);
- if ($validator->fails() || ! empty($extraFields)) {
+ if ($validator->fails() || $extraFields !== []) {
$errors = $validator->errors();
- if (! empty($extraFields)) {
- foreach ($extraFields as $field) {
- $errors->add($field, 'This field is not allowed.');
- }
+ foreach ($extraFields as $extraField) {
+ $errors->add($extraField, 'This field is not allowed.');
}
return response()->json([
@@ -1995,43 +1948,38 @@ class ApplicationsController extends Controller
$env->save();
return response()->json($this->removeSensitiveData($env))->setStatusCode(201);
- } else {
- return response()->json([
- 'message' => 'Environment variable not found.',
- ], 404);
}
- } else {
- $env = $application->environment_variables->where('key', $key)->first();
- if ($env) {
- $env->value = $request->value;
- if ($env->is_build_time != $is_build_time) {
- $env->is_build_time = $is_build_time;
- }
- if ($env->is_literal != $is_literal) {
- $env->is_literal = $is_literal;
- }
- if ($env->is_preview != $is_preview) {
- $env->is_preview = $is_preview;
- }
- if ($env->is_multiline != $request->is_multiline) {
- $env->is_multiline = $request->is_multiline;
- }
- if ($env->is_shown_once != $request->is_shown_once) {
- $env->is_shown_once = $request->is_shown_once;
- }
- $env->save();
- return response()->json($this->removeSensitiveData($env))->setStatusCode(201);
- } else {
- return response()->json([
- 'message' => 'Environment variable not found.',
- ], 404);
+ return response()->json([
+ 'message' => 'Environment variable not found.',
+ ], 404);
+ }
+ $env = $application->environment_variables->where('key', $key)->first();
+ if ($env) {
+ $env->value = $request->value;
+ if ($env->is_build_time != $is_build_time) {
+ $env->is_build_time = $is_build_time;
}
+ if ($env->is_literal != $is_literal) {
+ $env->is_literal = $is_literal;
+ }
+ if ($env->is_preview != $is_preview) {
+ $env->is_preview = $is_preview;
+ }
+ if ($env->is_multiline != $request->is_multiline) {
+ $env->is_multiline = $request->is_multiline;
+ }
+ if ($env->is_shown_once != $request->is_shown_once) {
+ $env->is_shown_once = $request->is_shown_once;
+ }
+ $env->save();
+
+ return response()->json($this->removeSensitiveData($env))->setStatusCode(201);
}
return response()->json([
- 'message' => 'Something is not okay. Are you okay?',
- ], 500);
+ 'message' => 'Environment variable not found.',
+ ], 404);
}
#[OA\Patch(
@@ -2124,7 +2072,7 @@ class ApplicationsController extends Controller
}
$return = validateIncomingRequest($request);
- if ($return instanceof \Illuminate\Http\JsonResponse) {
+ if ($return instanceof JsonResponse) {
return $return;
}
$application = Application::ownedByCurrentTeamAPI($teamId)->where('uuid', $request->uuid)->first();
@@ -2330,12 +2278,10 @@ class ApplicationsController extends Controller
]);
$extraFields = array_diff(array_keys($request->all()), $allowedFields);
- if ($validator->fails() || ! empty($extraFields)) {
+ if ($validator->fails() || $extraFields !== []) {
$errors = $validator->errors();
- if (! empty($extraFields)) {
- foreach ($extraFields as $field) {
- $errors->add($field, 'This field is not allowed.');
- }
+ foreach ($extraFields as $extraField) {
+ $errors->add($extraField, 'This field is not allowed.');
}
return response()->json([
@@ -2352,51 +2298,44 @@ class ApplicationsController extends Controller
return response()->json([
'message' => 'Environment variable already exists. Use PATCH request to update it.',
], 409);
- } else {
- $env = $application->environment_variables()->create([
- 'key' => $request->key,
- 'value' => $request->value,
- 'is_preview' => $request->is_preview ?? false,
- 'is_build_time' => $request->is_build_time ?? false,
- 'is_literal' => $request->is_literal ?? false,
- 'is_multiline' => $request->is_multiline ?? false,
- 'is_shown_once' => $request->is_shown_once ?? false,
- 'resourceable_type' => get_class($application),
- 'resourceable_id' => $application->id,
- ]);
-
- return response()->json([
- 'uuid' => $env->uuid,
- ])->setStatusCode(201);
}
- } else {
- $env = $application->environment_variables->where('key', $key)->first();
- if ($env) {
- return response()->json([
- 'message' => 'Environment variable already exists. Use PATCH request to update it.',
- ], 409);
- } else {
- $env = $application->environment_variables()->create([
- 'key' => $request->key,
- 'value' => $request->value,
- 'is_preview' => $request->is_preview ?? false,
- 'is_build_time' => $request->is_build_time ?? false,
- 'is_literal' => $request->is_literal ?? false,
- 'is_multiline' => $request->is_multiline ?? false,
- 'is_shown_once' => $request->is_shown_once ?? false,
- 'resourceable_type' => get_class($application),
- 'resourceable_id' => $application->id,
- ]);
+ $env = $application->environment_variables()->create([
+ 'key' => $request->key,
+ 'value' => $request->value,
+ 'is_preview' => $request->is_preview ?? false,
+ 'is_build_time' => $request->is_build_time ?? false,
+ 'is_literal' => $request->is_literal ?? false,
+ 'is_multiline' => $request->is_multiline ?? false,
+ 'is_shown_once' => $request->is_shown_once ?? false,
+ 'resourceable_type' => get_class($application),
+ 'resourceable_id' => $application->id,
+ ]);
- return response()->json([
- 'uuid' => $env->uuid,
- ])->setStatusCode(201);
- }
+ return response()->json([
+ 'uuid' => $env->uuid,
+ ])->setStatusCode(201);
}
+ $env = $application->environment_variables->where('key', $key)->first();
+ if ($env) {
+ return response()->json([
+ 'message' => 'Environment variable already exists. Use PATCH request to update it.',
+ ], 409);
+ }
+ $env = $application->environment_variables()->create([
+ 'key' => $request->key,
+ 'value' => $request->value,
+ 'is_preview' => $request->is_preview ?? false,
+ 'is_build_time' => $request->is_build_time ?? false,
+ 'is_literal' => $request->is_literal ?? false,
+ 'is_multiline' => $request->is_multiline ?? false,
+ 'is_shown_once' => $request->is_shown_once ?? false,
+ 'resourceable_type' => get_class($application),
+ 'resourceable_id' => $application->id,
+ ]);
return response()->json([
- 'message' => 'Something went wrong.',
- ], 500);
+ 'uuid' => $env->uuid,
+ ])->setStatusCode(201);
}
#[OA\Delete(
@@ -2473,7 +2412,7 @@ class ApplicationsController extends Controller
'message' => 'Application not found.',
], 404);
}
- $found_env = EnvironmentVariable::where('uuid', $request->env_uuid)
+ $found_env = EnvironmentVariable::query()->where('uuid', $request->env_uuid)
->where('resourceable_type', Application::class)
->where('resourceable_id', $application->id)
->first();
@@ -2576,11 +2515,11 @@ class ApplicationsController extends Controller
return response()->json(['message' => 'Application not found.'], 404);
}
- $deployment_uuid = new Cuid2;
+ $cuid2 = new Cuid2;
queue_application_deployment(
application: $application,
- deployment_uuid: $deployment_uuid,
+ deployment_uuid: $cuid2,
force_rebuild: $force,
is_api: true,
no_questions_asked: $instant_deploy
@@ -2589,7 +2528,7 @@ class ApplicationsController extends Controller
return response()->json(
[
'message' => 'Deployment request queued.',
- 'deployment_uuid' => $deployment_uuid->toString(),
+ 'deployment_uuid' => $cuid2->toString(),
],
200
);
@@ -2737,11 +2676,11 @@ class ApplicationsController extends Controller
return response()->json(['message' => 'Application not found.'], 404);
}
- $deployment_uuid = new Cuid2;
+ $cuid2 = new Cuid2;
queue_application_deployment(
application: $application,
- deployment_uuid: $deployment_uuid,
+ deployment_uuid: $cuid2,
restart_only: true,
is_api: true,
);
@@ -2749,7 +2688,7 @@ class ApplicationsController extends Controller
return response()->json(
[
'message' => 'Restart request queued.',
- 'deployment_uuid' => $deployment_uuid->toString(),
+ 'deployment_uuid' => $cuid2->toString(),
],
);
}
@@ -2836,7 +2775,7 @@ class ApplicationsController extends Controller
return response()->json(['message' => 'Application not found.'], 404);
}
$return = validateIncomingRequest($request);
- if ($return instanceof \Illuminate\Http\JsonResponse) {
+ if ($return instanceof JsonResponse) {
return $return;
}
$validator = customApiValidator($request->all(), [
@@ -2844,12 +2783,10 @@ class ApplicationsController extends Controller
]);
$extraFields = array_diff(array_keys($request->all()), $allowedFields);
- if ($validator->fails() || ! empty($extraFields)) {
+ if ($validator->fails() || $extraFields !== []) {
$errors = $validator->errors();
- if (! empty($extraFields)) {
- foreach ($extraFields as $field) {
- $errors->add($field, 'This field is not allowed.');
- }
+ foreach ($extraFields as $extraField) {
+ $errors->add($extraField, 'This field is not allowed.');
}
return response()->json([
@@ -2932,7 +2869,7 @@ class ApplicationsController extends Controller
return str($domain)->trim()->lower();
});
- if (count($errors) > 0) {
+ if ($errors !== []) {
return response()->json([
'message' => 'Validation failed.',
'errors' => $errors,
@@ -2947,5 +2884,7 @@ class ApplicationsController extends Controller
], 422);
}
}
+
+ return null;
}
}
diff --git a/app/Http/Controllers/Api/DatabasesController.php b/app/Http/Controllers/Api/DatabasesController.php
index 504665f6a..74d0dd88e 100644
--- a/app/Http/Controllers/Api/DatabasesController.php
+++ b/app/Http/Controllers/Api/DatabasesController.php
@@ -12,6 +12,7 @@ use App\Http\Controllers\Controller;
use App\Jobs\DeleteResourceJob;
use App\Models\Project;
use App\Models\Server;
+use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use OpenApi\Attributes as OA;
@@ -73,7 +74,7 @@ class DatabasesController extends Controller
if (is_null($teamId)) {
return invalidTokenResponse();
}
- $projects = Project::where('team_id', $teamId)->get();
+ $projects = Project::query()->where('team_id', $teamId)->get();
$databases = collect();
foreach ($projects as $project) {
$databases = $databases->merge($project->databases());
@@ -246,7 +247,7 @@ class DatabasesController extends Controller
}
$return = validateIncomingRequest($request);
- if ($return instanceof \Illuminate\Http\JsonResponse) {
+ if ($return instanceof JsonResponse) {
return $return;
}
$validator = customApiValidator($request->all(), [
@@ -276,10 +277,8 @@ class DatabasesController extends Controller
if (! $database) {
return response()->json(['message' => 'Database not found.'], 404);
}
- if ($request->is_public && $request->public_port) {
- if (isPublicPortAlreadyUsed($database->destination->server, $request->public_port, $database->id)) {
- return response()->json(['message' => 'Public port already used by another database.'], 400);
- }
+ if ($request->is_public && $request->public_port && isPublicPortAlreadyUsed($database->destination->server, $request->public_port, $database->id)) {
+ return response()->json(['message' => 'Public port already used by another database.'], 400);
}
switch ($database->type()) {
case 'standalone-postgresql':
@@ -472,12 +471,10 @@ class DatabasesController extends Controller
break;
}
$extraFields = array_diff(array_keys($request->all()), $allowedFields);
- if ($validator->fails() || ! empty($extraFields)) {
+ if ($validator->fails() || $extraFields !== []) {
$errors = $validator->errors();
- if (! empty($extraFields)) {
- foreach ($extraFields as $field) {
- $errors->add($field, 'This field is not allowed.');
- }
+ foreach ($extraFields as $extraField) {
+ $errors->add($extraField, 'This field is not allowed.');
}
return response()->json([
@@ -1019,7 +1016,7 @@ class DatabasesController extends Controller
return $this->create_database($request, NewDatabaseTypes::MONGODB);
}
- public function create_database(Request $request, NewDatabaseTypes $type)
+ public function create_database(Request $request, NewDatabaseTypes $newDatabaseTypes)
{
$allowedFields = ['name', 'description', 'image', 'public_port', 'is_public', 'project_uuid', 'environment_name', 'environment_uuid', 'server_uuid', 'destination_uuid', 'instant_deploy', 'limits_memory', 'limits_memory_swap', 'limits_memory_swappiness', 'limits_memory_reservation', 'limits_cpus', 'limits_cpuset', 'limits_cpu_shares', 'postgres_user', 'postgres_password', 'postgres_db', 'postgres_initdb_args', 'postgres_host_auth_method', 'postgres_conf', 'clickhouse_admin_user', 'clickhouse_admin_password', 'dragonfly_password', 'redis_password', 'redis_conf', 'keydb_password', 'keydb_conf', 'mariadb_conf', 'mariadb_root_password', 'mariadb_user', 'mariadb_password', 'mariadb_database', 'mongo_conf', 'mongo_initdb_root_username', 'mongo_initdb_root_password', 'mongo_initdb_database', 'mysql_root_password', 'mysql_password', 'mysql_user', 'mysql_database', 'mysql_conf'];
@@ -1029,17 +1026,15 @@ class DatabasesController extends Controller
}
$return = validateIncomingRequest($request);
- if ($return instanceof \Illuminate\Http\JsonResponse) {
+ if ($return instanceof JsonResponse) {
return $return;
}
$extraFields = array_diff(array_keys($request->all()), $allowedFields);
- if (! empty($extraFields)) {
+ if ($extraFields !== []) {
$errors = collect([]);
- if (! empty($extraFields)) {
- foreach ($extraFields as $field) {
- $errors->add($field, 'This field is not allowed.');
- }
+ foreach ($extraFields as $extraField) {
+ $errors->add($extraField);
}
return response()->json([
@@ -1080,10 +1075,8 @@ class DatabasesController extends Controller
return response()->json(['message' => 'Server has multiple destinations and you do not set destination_uuid.'], 400);
}
$destination = $destinations->first();
- if ($request->has('public_port') && $request->is_public) {
- if (isPublicPortAlreadyUsed($server, $request->public_port)) {
- return response()->json(['message' => 'Public port already used by another database.'], 400);
- }
+ if ($request->has('public_port') && $request->is_public && isPublicPortAlreadyUsed($server, $request->public_port)) {
+ return response()->json(['message' => 'Public port already used by another database.'], 400);
}
$validator = customApiValidator($request->all(), [
'name' => 'string|max:255',
@@ -1111,17 +1104,15 @@ class DatabasesController extends Controller
'errors' => $validator->errors(),
], 422);
}
- if ($request->public_port) {
- if ($request->public_port < 1024 || $request->public_port > 65535) {
- return response()->json([
- 'message' => 'Validation failed.',
- 'errors' => [
- 'public_port' => 'The public port should be between 1024 and 65535.',
- ],
- ], 422);
- }
+ if ($request->public_port && ($request->public_port < 1024 || $request->public_port > 65535)) {
+ return response()->json([
+ 'message' => 'Validation failed.',
+ 'errors' => [
+ 'public_port' => 'The public port should be between 1024 and 65535.',
+ ],
+ ], 422);
}
- if ($type === NewDatabaseTypes::POSTGRESQL) {
+ if ($newDatabaseTypes === NewDatabaseTypes::POSTGRESQL) {
$allowedFields = ['name', 'description', 'image', 'public_port', 'is_public', 'project_uuid', 'environment_name', 'environment_uuid', 'server_uuid', 'destination_uuid', 'instant_deploy', 'limits_memory', 'limits_memory_swap', 'limits_memory_swappiness', 'limits_memory_reservation', 'limits_cpus', 'limits_cpuset', 'limits_cpu_shares', 'postgres_user', 'postgres_password', 'postgres_db', 'postgres_initdb_args', 'postgres_host_auth_method', 'postgres_conf'];
$validator = customApiValidator($request->all(), [
'postgres_user' => 'string',
@@ -1132,12 +1123,10 @@ class DatabasesController extends Controller
'postgres_conf' => 'string',
]);
$extraFields = array_diff(array_keys($request->all()), $allowedFields);
- if ($validator->fails() || ! empty($extraFields)) {
+ if ($validator->fails() || $extraFields !== []) {
$errors = $validator->errors();
- if (! empty($extraFields)) {
- foreach ($extraFields as $field) {
- $errors->add($field, 'This field is not allowed.');
- }
+ foreach ($extraFields as $extraField) {
+ $errors->add($extraField, 'This field is not allowed.');
}
return response()->json([
@@ -1180,19 +1169,18 @@ class DatabasesController extends Controller
}
return response()->json(serializeApiResponse($payload))->setStatusCode(201);
- } elseif ($type === NewDatabaseTypes::MARIADB) {
+ }
+ if ($newDatabaseTypes === NewDatabaseTypes::MARIADB) {
$allowedFields = ['name', 'description', 'image', 'public_port', 'is_public', 'project_uuid', 'environment_name', 'environment_uuid', 'server_uuid', 'destination_uuid', 'instant_deploy', 'limits_memory', 'limits_memory_swap', 'limits_memory_swappiness', 'limits_memory_reservation', 'limits_cpus', 'limits_cpuset', 'limits_cpu_shares', 'mariadb_conf', 'mariadb_root_password', 'mariadb_user', 'mariadb_password', 'mariadb_database'];
$validator = customApiValidator($request->all(), [
'clickhouse_admin_user' => 'string',
'clickhouse_admin_password' => 'string',
]);
$extraFields = array_diff(array_keys($request->all()), $allowedFields);
- if ($validator->fails() || ! empty($extraFields)) {
+ if ($validator->fails() || $extraFields !== []) {
$errors = $validator->errors();
- if (! empty($extraFields)) {
- foreach ($extraFields as $field) {
- $errors->add($field, 'This field is not allowed.');
- }
+ foreach ($extraFields as $extraField) {
+ $errors->add($extraField, 'This field is not allowed.');
}
return response()->json([
@@ -1225,7 +1213,6 @@ class DatabasesController extends Controller
if ($instantDeploy) {
StartDatabase::dispatch($database);
}
-
$database->refresh();
$payload = [
'uuid' => $database->uuid,
@@ -1236,7 +1223,8 @@ class DatabasesController extends Controller
}
return response()->json(serializeApiResponse($payload))->setStatusCode(201);
- } elseif ($type === NewDatabaseTypes::MYSQL) {
+ }
+ if ($newDatabaseTypes === NewDatabaseTypes::MYSQL) {
$allowedFields = ['name', 'description', 'image', 'public_port', 'is_public', 'project_uuid', 'environment_name', 'environment_uuid', 'server_uuid', 'destination_uuid', 'instant_deploy', 'limits_memory', 'limits_memory_swap', 'limits_memory_swappiness', 'limits_memory_reservation', 'limits_cpus', 'limits_cpuset', 'limits_cpu_shares', 'mysql_root_password', 'mysql_password', 'mysql_user', 'mysql_database', 'mysql_conf'];
$validator = customApiValidator($request->all(), [
'mysql_root_password' => 'string',
@@ -1246,12 +1234,10 @@ class DatabasesController extends Controller
'mysql_conf' => 'string',
]);
$extraFields = array_diff(array_keys($request->all()), $allowedFields);
- if ($validator->fails() || ! empty($extraFields)) {
+ if ($validator->fails() || $extraFields !== []) {
$errors = $validator->errors();
- if (! empty($extraFields)) {
- foreach ($extraFields as $field) {
- $errors->add($field, 'This field is not allowed.');
- }
+ foreach ($extraFields as $extraField) {
+ $errors->add($extraField, 'This field is not allowed.');
}
return response()->json([
@@ -1284,7 +1270,6 @@ class DatabasesController extends Controller
if ($instantDeploy) {
StartDatabase::dispatch($database);
}
-
$database->refresh();
$payload = [
'uuid' => $database->uuid,
@@ -1295,19 +1280,18 @@ class DatabasesController extends Controller
}
return response()->json(serializeApiResponse($payload))->setStatusCode(201);
- } elseif ($type === NewDatabaseTypes::REDIS) {
+ }
+ if ($newDatabaseTypes === NewDatabaseTypes::REDIS) {
$allowedFields = ['name', 'description', 'image', 'public_port', 'is_public', 'project_uuid', 'environment_name', 'environment_uuid', 'server_uuid', 'destination_uuid', 'instant_deploy', 'limits_memory', 'limits_memory_swap', 'limits_memory_swappiness', 'limits_memory_reservation', 'limits_cpus', 'limits_cpuset', 'limits_cpu_shares', 'redis_password', 'redis_conf'];
$validator = customApiValidator($request->all(), [
'redis_password' => 'string',
'redis_conf' => 'string',
]);
$extraFields = array_diff(array_keys($request->all()), $allowedFields);
- if ($validator->fails() || ! empty($extraFields)) {
+ if ($validator->fails() || $extraFields !== []) {
$errors = $validator->errors();
- if (! empty($extraFields)) {
- foreach ($extraFields as $field) {
- $errors->add($field, 'This field is not allowed.');
- }
+ foreach ($extraFields as $extraField) {
+ $errors->add($extraField, 'This field is not allowed.');
}
return response()->json([
@@ -1340,7 +1324,6 @@ class DatabasesController extends Controller
if ($instantDeploy) {
StartDatabase::dispatch($database);
}
-
$database->refresh();
$payload = [
'uuid' => $database->uuid,
@@ -1351,19 +1334,17 @@ class DatabasesController extends Controller
}
return response()->json(serializeApiResponse($payload))->setStatusCode(201);
- } elseif ($type === NewDatabaseTypes::DRAGONFLY) {
+ }
+ if ($newDatabaseTypes === NewDatabaseTypes::DRAGONFLY) {
$allowedFields = ['name', 'description', 'image', 'public_port', 'is_public', 'project_uuid', 'environment_name', 'environment_uuid', 'server_uuid', 'destination_uuid', 'instant_deploy', 'limits_memory', 'limits_memory_swap', 'limits_memory_swappiness', 'limits_memory_reservation', 'limits_cpus', 'limits_cpuset', 'limits_cpu_shares', 'dragonfly_password'];
$validator = customApiValidator($request->all(), [
'dragonfly_password' => 'string',
]);
-
$extraFields = array_diff(array_keys($request->all()), $allowedFields);
- if ($validator->fails() || ! empty($extraFields)) {
+ if ($validator->fails() || $extraFields !== []) {
$errors = $validator->errors();
- if (! empty($extraFields)) {
- foreach ($extraFields as $field) {
- $errors->add($field, 'This field is not allowed.');
- }
+ foreach ($extraFields as $extraField) {
+ $errors->add($extraField, 'This field is not allowed.');
}
return response()->json([
@@ -1371,7 +1352,6 @@ class DatabasesController extends Controller
'errors' => $errors,
], 422);
}
-
removeUnnecessaryFieldsFromRequest($request);
$database = create_standalone_dragonfly($environment->id, $destination->uuid, $request->all());
if ($instantDeploy) {
@@ -1381,19 +1361,18 @@ class DatabasesController extends Controller
return response()->json(serializeApiResponse([
'uuid' => $database->uuid,
]))->setStatusCode(201);
- } elseif ($type === NewDatabaseTypes::KEYDB) {
+ }
+ if ($newDatabaseTypes === NewDatabaseTypes::KEYDB) {
$allowedFields = ['name', 'description', 'image', 'public_port', 'is_public', 'project_uuid', 'environment_name', 'environment_uuid', 'server_uuid', 'destination_uuid', 'instant_deploy', 'limits_memory', 'limits_memory_swap', 'limits_memory_swappiness', 'limits_memory_reservation', 'limits_cpus', 'limits_cpuset', 'limits_cpu_shares', 'keydb_password', 'keydb_conf'];
$validator = customApiValidator($request->all(), [
'keydb_password' => 'string',
'keydb_conf' => 'string',
]);
$extraFields = array_diff(array_keys($request->all()), $allowedFields);
- if ($validator->fails() || ! empty($extraFields)) {
+ if ($validator->fails() || $extraFields !== []) {
$errors = $validator->errors();
- if (! empty($extraFields)) {
- foreach ($extraFields as $field) {
- $errors->add($field, 'This field is not allowed.');
- }
+ foreach ($extraFields as $extraField) {
+ $errors->add($extraField, 'This field is not allowed.');
}
return response()->json([
@@ -1426,7 +1405,6 @@ class DatabasesController extends Controller
if ($instantDeploy) {
StartDatabase::dispatch($database);
}
-
$database->refresh();
$payload = [
'uuid' => $database->uuid,
@@ -1437,19 +1415,18 @@ class DatabasesController extends Controller
}
return response()->json(serializeApiResponse($payload))->setStatusCode(201);
- } elseif ($type === NewDatabaseTypes::CLICKHOUSE) {
+ }
+ if ($newDatabaseTypes === NewDatabaseTypes::CLICKHOUSE) {
$allowedFields = ['name', 'description', 'image', 'public_port', 'is_public', 'project_uuid', 'environment_name', 'environment_uuid', 'server_uuid', 'destination_uuid', 'instant_deploy', 'limits_memory', 'limits_memory_swap', 'limits_memory_swappiness', 'limits_memory_reservation', 'limits_cpus', 'limits_cpuset', 'limits_cpu_shares', 'clickhouse_admin_user', 'clickhouse_admin_password'];
$validator = customApiValidator($request->all(), [
'clickhouse_admin_user' => 'string',
'clickhouse_admin_password' => 'string',
]);
$extraFields = array_diff(array_keys($request->all()), $allowedFields);
- if ($validator->fails() || ! empty($extraFields)) {
+ if ($validator->fails() || $extraFields !== []) {
$errors = $validator->errors();
- if (! empty($extraFields)) {
- foreach ($extraFields as $field) {
- $errors->add($field, 'This field is not allowed.');
- }
+ foreach ($extraFields as $extraField) {
+ $errors->add($extraField, 'This field is not allowed.');
}
return response()->json([
@@ -1462,65 +1439,6 @@ class DatabasesController extends Controller
if ($instantDeploy) {
StartDatabase::dispatch($database);
}
-
- $database->refresh();
- $payload = [
- 'uuid' => $database->uuid,
- 'internal_db_url' => $database->internal_db_url,
- ];
- if ($database->is_public && $database->public_port) {
- $payload['external_db_url'] = $database->external_db_url;
- }
-
- return response()->json(serializeApiResponse($payload))->setStatusCode(201);
- } elseif ($type === NewDatabaseTypes::MONGODB) {
- $allowedFields = ['name', 'description', 'image', 'public_port', 'is_public', 'project_uuid', 'environment_name', 'environment_uuid', 'server_uuid', 'destination_uuid', 'instant_deploy', 'limits_memory', 'limits_memory_swap', 'limits_memory_swappiness', 'limits_memory_reservation', 'limits_cpus', 'limits_cpuset', 'limits_cpu_shares', 'mongo_conf', 'mongo_initdb_root_username', 'mongo_initdb_root_password', 'mongo_initdb_database'];
- $validator = customApiValidator($request->all(), [
- 'mongo_conf' => 'string',
- 'mongo_initdb_root_username' => 'string',
- 'mongo_initdb_root_password' => 'string',
- 'mongo_initdb_database' => 'string',
- ]);
- $extraFields = array_diff(array_keys($request->all()), $allowedFields);
- if ($validator->fails() || ! empty($extraFields)) {
- $errors = $validator->errors();
- if (! empty($extraFields)) {
- foreach ($extraFields as $field) {
- $errors->add($field, 'This field is not allowed.');
- }
- }
-
- return response()->json([
- 'message' => 'Validation failed.',
- 'errors' => $errors,
- ], 422);
- }
- removeUnnecessaryFieldsFromRequest($request);
- if ($request->has('mongo_conf')) {
- if (! isBase64Encoded($request->mongo_conf)) {
- return response()->json([
- 'message' => 'Validation failed.',
- 'errors' => [
- 'mongo_conf' => 'The mongo_conf should be base64 encoded.',
- ],
- ], 422);
- }
- $mongoConf = base64_decode($request->mongo_conf);
- if (mb_detect_encoding($mongoConf, 'ASCII', true) === false) {
- return response()->json([
- 'message' => 'Validation failed.',
- 'errors' => [
- 'mongo_conf' => 'The mongo_conf should be base64 encoded.',
- ],
- ], 422);
- }
- $request->offsetSet('mongo_conf', $mongoConf);
- }
- $database = create_standalone_mongodb($environment->id, $destination->uuid, $request->all());
- if ($instantDeploy) {
- StartDatabase::dispatch($database);
- }
-
$database->refresh();
$payload = [
'uuid' => $database->uuid,
@@ -1532,8 +1450,60 @@ class DatabasesController extends Controller
return response()->json(serializeApiResponse($payload))->setStatusCode(201);
}
+ $allowedFields = ['name', 'description', 'image', 'public_port', 'is_public', 'project_uuid', 'environment_name', 'environment_uuid', 'server_uuid', 'destination_uuid', 'instant_deploy', 'limits_memory', 'limits_memory_swap', 'limits_memory_swappiness', 'limits_memory_reservation', 'limits_cpus', 'limits_cpuset', 'limits_cpu_shares', 'mongo_conf', 'mongo_initdb_root_username', 'mongo_initdb_root_password', 'mongo_initdb_database'];
+ $validator = customApiValidator($request->all(), [
+ 'mongo_conf' => 'string',
+ 'mongo_initdb_root_username' => 'string',
+ 'mongo_initdb_root_password' => 'string',
+ 'mongo_initdb_database' => 'string',
+ ]);
+ $extraFields = array_diff(array_keys($request->all()), $allowedFields);
+ if ($validator->fails() || $extraFields !== []) {
+ $errors = $validator->errors();
+ foreach ($extraFields as $extraField) {
+ $errors->add($extraField, 'This field is not allowed.');
+ }
- return response()->json(['message' => 'Invalid database type requested.'], 400);
+ return response()->json([
+ 'message' => 'Validation failed.',
+ 'errors' => $errors,
+ ], 422);
+ }
+ removeUnnecessaryFieldsFromRequest($request);
+ if ($request->has('mongo_conf')) {
+ if (! isBase64Encoded($request->mongo_conf)) {
+ return response()->json([
+ 'message' => 'Validation failed.',
+ 'errors' => [
+ 'mongo_conf' => 'The mongo_conf should be base64 encoded.',
+ ],
+ ], 422);
+ }
+ $mongoConf = base64_decode($request->mongo_conf);
+ if (mb_detect_encoding($mongoConf, 'ASCII', true) === false) {
+ return response()->json([
+ 'message' => 'Validation failed.',
+ 'errors' => [
+ 'mongo_conf' => 'The mongo_conf should be base64 encoded.',
+ ],
+ ], 422);
+ }
+ $request->offsetSet('mongo_conf', $mongoConf);
+ }
+ $database = create_standalone_mongodb($environment->id, $destination->uuid, $request->all());
+ if ($instantDeploy) {
+ StartDatabase::dispatch($database);
+ }
+ $database->refresh();
+ $payload = [
+ 'uuid' => $database->uuid,
+ 'internal_db_url' => $database->internal_db_url,
+ ];
+ if ($database->is_public && $database->public_port) {
+ $payload['external_db_url'] = $database->external_db_url;
+ }
+
+ return response()->json(serializeApiResponse($payload))->setStatusCode(201);
}
#[OA\Delete(
@@ -1594,7 +1564,7 @@ class DatabasesController extends Controller
public function delete_by_uuid(Request $request)
{
$teamId = getTeamIdFromToken();
- $cleanup = filter_var($request->query->get('cleanup', true), FILTER_VALIDATE_BOOLEAN);
+ filter_var($request->query->get('cleanup', true), FILTER_VALIDATE_BOOLEAN);
if (is_null($teamId)) {
return invalidTokenResponse();
}
diff --git a/app/Http/Controllers/Api/DeployController.php b/app/Http/Controllers/Api/DeployController.php
index 73b452f86..2a6c37e0b 100644
--- a/app/Http/Controllers/Api/DeployController.php
+++ b/app/Http/Controllers/Api/DeployController.php
@@ -5,8 +5,10 @@ namespace App\Http\Controllers\Api;
use App\Actions\Database\StartDatabase;
use App\Actions\Service\StartService;
use App\Http\Controllers\Controller;
+use App\Models\Application;
use App\Models\ApplicationDeploymentQueue;
use App\Models\Server;
+use App\Models\Service;
use App\Models\Tag;
use Illuminate\Http\Request;
use OpenApi\Attributes as OA;
@@ -65,7 +67,7 @@ class DeployController extends Controller
return invalidTokenResponse();
}
$servers = Server::whereTeamId($teamId)->get();
- $deployments_per_server = ApplicationDeploymentQueue::whereIn('status', ['in_progress', 'queued'])->whereIn('server_id', $servers->pluck('id'))->get()->sortBy('id');
+ $deployments_per_server = ApplicationDeploymentQueue::query()->whereIn('status', ['in_progress', 'queued'])->whereIn('server_id', $servers->pluck('id'))->get()->sortBy('id');
$deployments_per_server = $deployments_per_server->map(function ($deployment) {
return $this->removeSensitiveData($deployment);
});
@@ -121,7 +123,7 @@ class DeployController extends Controller
if (! $uuid) {
return response()->json(['message' => 'UUID is required.'], 400);
}
- $deployment = ApplicationDeploymentQueue::where('deployment_uuid', $uuid)->first();
+ $deployment = ApplicationDeploymentQueue::query()->where('deployment_uuid', $uuid)->first();
if (! $deployment) {
return response()->json(['message' => 'Deployment not found.'], 404);
}
@@ -196,7 +198,8 @@ class DeployController extends Controller
}
if ($tags) {
return $this->by_tags($tags, $teamId, $force);
- } elseif ($uuids) {
+ }
+ if ($uuids) {
return $this->by_uuids($uuids, $teamId, $force);
}
@@ -245,7 +248,7 @@ class DeployController extends Controller
$deployments = collect();
$payload = collect();
foreach ($tags as $tag) {
- $found_tag = Tag::where(['name' => $tag, 'team_id' => $team_id])->first();
+ $found_tag = Tag::query()->where(['name' => $tag, 'team_id' => $team_id])->first();
if (! $found_tag) {
// $message->push("Tag {$tag} not found.");
continue;
@@ -257,15 +260,15 @@ class DeployController extends Controller
continue;
}
- foreach ($applications as $resource) {
- ['message' => $return_message, 'deployment_uuid' => $deployment_uuid] = $this->deploy_resource($resource, $force);
+ foreach ($applications as $application) {
+ ['message' => $return_message, 'deployment_uuid' => $deployment_uuid] = $this->deploy_resource($application, $force);
if ($deployment_uuid) {
- $deployments->push(['resource_uuid' => $resource->uuid, 'deployment_uuid' => $deployment_uuid->toString()]);
+ $deployments->push(['resource_uuid' => $application->uuid, 'deployment_uuid' => $deployment_uuid->toString()]);
}
$message = $message->merge($return_message);
}
- foreach ($services as $resource) {
- ['message' => $return_message] = $this->deploy_resource($resource, $force);
+ foreach ($services as $service) {
+ ['message' => $return_message] = $this->deploy_resource($service, $force);
$message = $message->merge($return_message);
}
}
@@ -289,7 +292,7 @@ class DeployController extends Controller
return ['message' => "Resource ($resource) not found.", 'deployment_uuid' => $deployment_uuid];
}
switch ($resource?->getMorphClass()) {
- case \App\Models\Application::class:
+ case Application::class:
$deployment_uuid = new Cuid2;
queue_application_deployment(
application: $resource,
@@ -298,7 +301,7 @@ class DeployController extends Controller
);
$message = "Application {$resource->name} deployment queued.";
break;
- case \App\Models\Service::class:
+ case Service::class:
StartService::run($resource);
$message = "Service {$resource->name} started. It could take a while, be patient.";
break;
diff --git a/app/Http/Controllers/Api/ProjectController.php b/app/Http/Controllers/Api/ProjectController.php
index de008c84e..c79338ac4 100644
--- a/app/Http/Controllers/Api/ProjectController.php
+++ b/app/Http/Controllers/Api/ProjectController.php
@@ -4,6 +4,7 @@ namespace App\Http\Controllers\Api;
use App\Http\Controllers\Controller;
use App\Models\Project;
+use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use OpenApi\Attributes as OA;
@@ -96,6 +97,7 @@ class ProjectController extends Controller
}
$project->load(['environments']);
+
return response()->json(
serializeApiResponse($project),
);
@@ -223,7 +225,7 @@ class ProjectController extends Controller
}
$return = validateIncomingRequest($request);
- if ($return instanceof \Illuminate\Http\JsonResponse) {
+ if ($return instanceof JsonResponse) {
return $return;
}
$validator = customApiValidator($request->all(), [
@@ -232,12 +234,10 @@ class ProjectController extends Controller
]);
$extraFields = array_diff(array_keys($request->all()), $allowedFields);
- if ($validator->fails() || ! empty($extraFields)) {
+ if ($validator->fails() || $extraFields !== []) {
$errors = $validator->errors();
- if (! empty($extraFields)) {
- foreach ($extraFields as $field) {
- $errors->add($field, 'This field is not allowed.');
- }
+ foreach ($extraFields as $extraField) {
+ $errors->add($extraField, 'This field is not allowed.');
}
return response()->json([
@@ -246,7 +246,7 @@ class ProjectController extends Controller
], 422);
}
- $project = Project::create([
+ $project = Project::query()->create([
'name' => $request->name,
'description' => $request->description,
'team_id' => $teamId,
@@ -321,7 +321,7 @@ class ProjectController extends Controller
}
$return = validateIncomingRequest($request);
- if ($return instanceof \Illuminate\Http\JsonResponse) {
+ if ($return instanceof JsonResponse) {
return $return;
}
$validator = customApiValidator($request->all(), [
@@ -330,12 +330,10 @@ class ProjectController extends Controller
]);
$extraFields = array_diff(array_keys($request->all()), $allowedFields);
- if ($validator->fails() || ! empty($extraFields)) {
+ if ($validator->fails() || $extraFields !== []) {
$errors = $validator->errors();
- if (! empty($extraFields)) {
- foreach ($extraFields as $field) {
- $errors->add($field, 'This field is not allowed.');
- }
+ foreach ($extraFields as $extraField) {
+ $errors->add($extraField, 'This field is not allowed.');
}
return response()->json([
diff --git a/app/Http/Controllers/Api/ResourcesController.php b/app/Http/Controllers/Api/ResourcesController.php
index ad12c83ab..f3f6b72ac 100644
--- a/app/Http/Controllers/Api/ResourcesController.php
+++ b/app/Http/Controllers/Api/ResourcesController.php
@@ -43,7 +43,7 @@ class ResourcesController extends Controller
if (is_null($teamId)) {
return invalidTokenResponse();
}
- $projects = Project::where('team_id', $teamId)->get();
+ $projects = Project::query()->where('team_id', $teamId)->get();
$resources = collect();
$resources->push($projects->pluck('applications')->flatten());
$resources->push($projects->pluck('services')->flatten());
diff --git a/app/Http/Controllers/Api/SecurityController.php b/app/Http/Controllers/Api/SecurityController.php
index a14b0da20..27b1129c1 100644
--- a/app/Http/Controllers/Api/SecurityController.php
+++ b/app/Http/Controllers/Api/SecurityController.php
@@ -4,6 +4,7 @@ namespace App\Http\Controllers\Api;
use App\Http\Controllers\Controller;
use App\Models\PrivateKey;
+use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use OpenApi\Attributes as OA;
@@ -58,7 +59,7 @@ class SecurityController extends Controller
if (is_null($teamId)) {
return invalidTokenResponse();
}
- $keys = PrivateKey::where('team_id', $teamId)->get();
+ $keys = PrivateKey::query()->where('team_id', $teamId)->get();
return response()->json($this->removeSensitiveData($keys));
}
@@ -102,7 +103,7 @@ class SecurityController extends Controller
return invalidTokenResponse();
}
- $key = PrivateKey::where('team_id', $teamId)->where('uuid', $request->uuid)->first();
+ $key = PrivateKey::query()->where('team_id', $teamId)->where('uuid', $request->uuid)->first();
if (is_null($key)) {
return response()->json([
@@ -172,7 +173,7 @@ class SecurityController extends Controller
return invalidTokenResponse();
}
$return = validateIncomingRequest($request);
- if ($return instanceof \Illuminate\Http\JsonResponse) {
+ if ($return instanceof JsonResponse) {
return $return;
}
$validator = customApiValidator($request->all(), [
@@ -195,7 +196,7 @@ class SecurityController extends Controller
if (! $request->description) {
$request->offsetSet('description', 'Created by Coolify via API');
}
- $key = PrivateKey::create([
+ $privateKey = PrivateKey::query()->create([
'team_id' => $teamId,
'name' => $request->name,
'description' => $request->description,
@@ -203,7 +204,7 @@ class SecurityController extends Controller
]);
return response()->json(serializeApiResponse([
- 'uuid' => $key->uuid,
+ 'uuid' => $privateKey->uuid,
]))->setStatusCode(201);
}
@@ -267,7 +268,7 @@ class SecurityController extends Controller
return invalidTokenResponse();
}
$return = validateIncomingRequest($request);
- if ($return instanceof \Illuminate\Http\JsonResponse) {
+ if ($return instanceof JsonResponse) {
return $return;
}
@@ -278,12 +279,10 @@ class SecurityController extends Controller
]);
$extraFields = array_diff(array_keys($request->all()), $allowedFields);
- if ($validator->fails() || ! empty($extraFields)) {
+ if ($validator->fails() || $extraFields !== []) {
$errors = $validator->errors();
- if (! empty($extraFields)) {
- foreach ($extraFields as $field) {
- $errors->add($field, 'This field is not allowed.');
- }
+ foreach ($extraFields as $extraField) {
+ $errors->add($extraField, 'This field is not allowed.');
}
return response()->json([
@@ -291,7 +290,7 @@ class SecurityController extends Controller
'errors' => $errors,
], 422);
}
- $foundKey = PrivateKey::where('team_id', $teamId)->where('uuid', $request->uuid)->first();
+ $foundKey = PrivateKey::query()->where('team_id', $teamId)->where('uuid', $request->uuid)->first();
if (is_null($foundKey)) {
return response()->json([
'message' => 'Private Key not found.',
@@ -355,7 +354,7 @@ class SecurityController extends Controller
return response()->json(['message' => 'UUID is required.'], 422);
}
- $key = PrivateKey::where('team_id', $teamId)->where('uuid', $request->uuid)->first();
+ $key = PrivateKey::query()->where('team_id', $teamId)->where('uuid', $request->uuid)->first();
if (is_null($key)) {
return response()->json(['message' => 'Private Key not found.'], 404);
}
diff --git a/app/Http/Controllers/Api/ServersController.php b/app/Http/Controllers/Api/ServersController.php
index b1deb5321..a5de2a17d 100644
--- a/app/Http/Controllers/Api/ServersController.php
+++ b/app/Http/Controllers/Api/ServersController.php
@@ -11,6 +11,7 @@ use App\Models\Application;
use App\Models\PrivateKey;
use App\Models\Project;
use App\Models\Server as ModelsServer;
+use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use OpenApi\Attributes as OA;
use Stringable;
@@ -294,7 +295,7 @@ class ServersController extends Controller
return response()->json(serializeApiResponse($domains));
}
- $projects = Project::where('team_id', $teamId)->get();
+ $projects = Project::query()->where('team_id', $teamId)->get();
$domains = collect();
$applications = $projects->pluck('applications')->flatten();
$settings = instanceSettings();
@@ -305,8 +306,8 @@ class ServersController extends Controller
$f = str($fqdn)->replace('http://', '')->replace('https://', '')->explode('/');
return str(str($f[0])->explode(':')[0]);
- })->filter(function (Stringable $fqdn) {
- return $fqdn->isNotEmpty();
+ })->filter(function (Stringable $stringable) {
+ return $stringable->isNotEmpty();
});
if ($ip === 'host.docker.internal') {
@@ -341,13 +342,13 @@ class ServersController extends Controller
foreach ($services as $service) {
$service_applications = $service->applications;
if ($service_applications->count() > 0) {
- foreach ($service_applications as $application) {
- $fqdn = str($application->fqdn)->explode(',')->map(function ($fqdn) {
+ foreach ($service_applications as $service_application) {
+ $fqdn = str($service_application->fqdn)->explode(',')->map(function ($fqdn) {
$f = str($fqdn)->replace('http://', '')->replace('https://', '')->explode('/');
return str(str($f[0])->explode(':')[0]);
- })->filter(function (Stringable $fqdn) {
- return $fqdn->isNotEmpty();
+ })->filter(function (Stringable $stringable) {
+ return $stringable->isNotEmpty();
});
if ($ip === 'host.docker.internal') {
if ($settings->public_ipv4) {
@@ -459,7 +460,7 @@ class ServersController extends Controller
}
$return = validateIncomingRequest($request);
- if ($return instanceof \Illuminate\Http\JsonResponse) {
+ if ($return instanceof JsonResponse) {
return $return;
}
$validator = customApiValidator($request->all(), [
@@ -475,12 +476,10 @@ class ServersController extends Controller
]);
$extraFields = array_diff(array_keys($request->all()), $allowedFields);
- if ($validator->fails() || ! empty($extraFields)) {
+ if ($validator->fails() || $extraFields !== []) {
$errors = $validator->errors();
- if (! empty($extraFields)) {
- foreach ($extraFields as $field) {
- $errors->add($field, 'This field is not allowed.');
- }
+ foreach ($extraFields as $extraField) {
+ $errors->add($extraField, 'This field is not allowed.');
}
return response()->json([
@@ -616,7 +615,7 @@ class ServersController extends Controller
}
$return = validateIncomingRequest($request);
- if ($return instanceof \Illuminate\Http\JsonResponse) {
+ if ($return instanceof JsonResponse) {
return $return;
}
$validator = customApiValidator($request->all(), [
@@ -632,12 +631,10 @@ class ServersController extends Controller
]);
$extraFields = array_diff(array_keys($request->all()), $allowedFields);
- if ($validator->fails() || ! empty($extraFields)) {
+ if ($validator->fails() || $extraFields !== []) {
$errors = $validator->errors();
- if (! empty($extraFields)) {
- foreach ($extraFields as $field) {
- $errors->add($field, 'This field is not allowed.');
- }
+ foreach ($extraFields as $extraField) {
+ $errors->add($extraField, 'This field is not allowed.');
}
return response()->json([
diff --git a/app/Http/Controllers/Api/ServicesController.php b/app/Http/Controllers/Api/ServicesController.php
index 03d9d209c..0bcb3ea97 100644
--- a/app/Http/Controllers/Api/ServicesController.php
+++ b/app/Http/Controllers/Api/ServicesController.php
@@ -11,6 +11,7 @@ use App\Models\EnvironmentVariable;
use App\Models\Project;
use App\Models\Server;
use App\Models\Service;
+use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use OpenApi\Attributes as OA;
@@ -75,7 +76,7 @@ class ServicesController extends Controller
if (is_null($teamId)) {
return invalidTokenResponse();
}
- $projects = Project::where('team_id', $teamId)->get();
+ $projects = Project::query()->where('team_id', $teamId)->get();
$services = collect();
foreach ($projects as $project) {
$services->push($project->services()->get());
@@ -245,7 +246,7 @@ class ServicesController extends Controller
}
$return = validateIncomingRequest($request);
- if ($return instanceof \Illuminate\Http\JsonResponse) {
+ if ($return instanceof JsonResponse) {
return $return;
}
$validator = customApiValidator($request->all(), [
@@ -261,12 +262,10 @@ class ServicesController extends Controller
]);
$extraFields = array_diff(array_keys($request->all()), $allowedFields);
- if ($validator->fails() || ! empty($extraFields)) {
+ if ($validator->fails() || $extraFields !== []) {
$errors = $validator->errors();
- if (! empty($extraFields)) {
- foreach ($extraFields as $field) {
- $errors->add($field, 'This field is not allowed.');
- }
+ foreach ($extraFields as $extraField) {
+ $errors->add($extraField, 'This field is not allowed.');
}
return response()->json([
@@ -315,7 +314,7 @@ class ServicesController extends Controller
$oneClickDotEnvs = data_get($services, "$oneClickServiceName.envs", null);
if ($oneClickDotEnvs) {
$oneClickDotEnvs = str(base64_decode($oneClickDotEnvs))->split('/\r\n|\r|\n/')->filter(function ($value) {
- return ! empty($value);
+ return $value !== '' && $value !== '0';
});
}
if ($oneClickService) {
@@ -331,7 +330,7 @@ class ServicesController extends Controller
if ($oneClickServiceName === 'cloudflared') {
data_set($service_payload, 'connect_to_docker_network', true);
}
- $service = Service::create($service_payload);
+ $service = Service::query()->create($service_payload);
$service->name = "$oneClickServiceName-".$service->uuid;
$service->save();
if ($oneClickDotEnvs?->count() > 0) {
@@ -343,7 +342,7 @@ class ServicesController extends Controller
$command = $value->after('SERVICE_')->beforeLast('_');
$generatedValue = generateEnvValue($command->value(), $service);
}
- EnvironmentVariable::create([
+ EnvironmentVariable::query()->create([
'key' => $key,
'value' => $generatedValue,
'resourceable_id' => $service->id,
@@ -373,11 +372,9 @@ class ServicesController extends Controller
}
return response()->json(['message' => 'Service not found.'], 404);
- } else {
- return response()->json(['message' => 'Invalid service type.', 'valid_service_types' => $serviceKeys], 400);
}
- return response()->json(['message' => 'Invalid service type.'], 400);
+ return response()->json(['message' => 'Invalid service type.', 'valid_service_types' => $serviceKeys], 400);
}
#[OA\Get(
@@ -428,7 +425,7 @@ class ServicesController extends Controller
if (! $request->uuid) {
return response()->json(['message' => 'UUID is required.'], 404);
}
- $service = Service::whereRelation('environment.project.team', 'id', $teamId)->whereUuid($request->uuid)->first();
+ $service = Service::query()->whereRelation('environment.project.team', 'id', $teamId)->whereUuid($request->uuid)->first();
if (! $service) {
return response()->json(['message' => 'Service not found.'], 404);
}
@@ -493,7 +490,7 @@ class ServicesController extends Controller
if (! $request->uuid) {
return response()->json(['message' => 'UUID is required.'], 404);
}
- $service = Service::whereRelation('environment.project.team', 'id', $teamId)->whereUuid($request->uuid)->first();
+ $service = Service::query()->whereRelation('environment.project.team', 'id', $teamId)->whereUuid($request->uuid)->first();
if (! $service) {
return response()->json(['message' => 'Service not found.'], 404);
}
@@ -566,7 +563,7 @@ class ServicesController extends Controller
if (is_null($teamId)) {
return invalidTokenResponse();
}
- $service = Service::whereRelation('environment.project.team', 'id', $teamId)->whereUuid($request->uuid)->first();
+ $service = Service::query()->whereRelation('environment.project.team', 'id', $teamId)->whereUuid($request->uuid)->first();
if (! $service) {
return response()->json(['message' => 'Service not found.'], 404);
}
@@ -670,7 +667,7 @@ class ServicesController extends Controller
return invalidTokenResponse();
}
- $service = Service::whereRelation('environment.project.team', 'id', $teamId)->whereUuid($request->uuid)->first();
+ $service = Service::query()->whereRelation('environment.project.team', 'id', $teamId)->whereUuid($request->uuid)->first();
if (! $service) {
return response()->json(['message' => 'Service not found.'], 404);
}
@@ -791,7 +788,7 @@ class ServicesController extends Controller
return invalidTokenResponse();
}
- $service = Service::whereRelation('environment.project.team', 'id', $teamId)->whereUuid($request->uuid)->first();
+ $service = Service::query()->whereRelation('environment.project.team', 'id', $teamId)->whereUuid($request->uuid)->first();
if (! $service) {
return response()->json(['message' => 'Service not found.'], 404);
}
@@ -907,7 +904,7 @@ class ServicesController extends Controller
return invalidTokenResponse();
}
- $service = Service::whereRelation('environment.project.team', 'id', $teamId)->whereUuid($request->uuid)->first();
+ $service = Service::query()->whereRelation('environment.project.team', 'id', $teamId)->whereUuid($request->uuid)->first();
if (! $service) {
return response()->json(['message' => 'Service not found.'], 404);
}
@@ -1009,12 +1006,12 @@ class ServicesController extends Controller
return invalidTokenResponse();
}
- $service = Service::whereRelation('environment.project.team', 'id', $teamId)->whereUuid($request->uuid)->first();
+ $service = Service::query()->whereRelation('environment.project.team', 'id', $teamId)->whereUuid($request->uuid)->first();
if (! $service) {
return response()->json(['message' => 'Service not found.'], 404);
}
- $env = EnvironmentVariable::where('uuid', $request->env_uuid)
+ $env = EnvironmentVariable::query()->where('uuid', $request->env_uuid)
->where('resourceable_type', Service::class)
->where('resourceable_id', $service->id)
->first();
@@ -1089,7 +1086,7 @@ class ServicesController extends Controller
if (! $uuid) {
return response()->json(['message' => 'UUID is required.'], 400);
}
- $service = Service::whereRelation('environment.project.team', 'id', $teamId)->whereUuid($request->uuid)->first();
+ $service = Service::query()->whereRelation('environment.project.team', 'id', $teamId)->whereUuid($request->uuid)->first();
if (! $service) {
return response()->json(['message' => 'Service not found.'], 404);
}
@@ -1167,7 +1164,7 @@ class ServicesController extends Controller
if (! $uuid) {
return response()->json(['message' => 'UUID is required.'], 400);
}
- $service = Service::whereRelation('environment.project.team', 'id', $teamId)->whereUuid($request->uuid)->first();
+ $service = Service::query()->whereRelation('environment.project.team', 'id', $teamId)->whereUuid($request->uuid)->first();
if (! $service) {
return response()->json(['message' => 'Service not found.'], 404);
}
@@ -1245,7 +1242,7 @@ class ServicesController extends Controller
if (! $uuid) {
return response()->json(['message' => 'UUID is required.'], 400);
}
- $service = Service::whereRelation('environment.project.team', 'id', $teamId)->whereUuid($request->uuid)->first();
+ $service = Service::query()->whereRelation('environment.project.team', 'id', $teamId)->whereUuid($request->uuid)->first();
if (! $service) {
return response()->json(['message' => 'Service not found.'], 404);
}
diff --git a/app/Http/Controllers/Controller.php b/app/Http/Controllers/Controller.php
index 522683efa..03d78bc0d 100644
--- a/app/Http/Controllers/Controller.php
+++ b/app/Http/Controllers/Controller.php
@@ -39,9 +39,9 @@ class Controller extends BaseController
return view('auth.verify-email');
}
- public function email_verify(EmailVerificationRequest $request)
+ public function email_verify(EmailVerificationRequest $emailVerificationRequest)
{
- $request->fulfill();
+ $emailVerificationRequest->fulfill();
return redirect(RouteServiceProvider::HOME);
}
@@ -139,9 +139,10 @@ class Controller extends BaseController
refreshSession($invitation->team);
return redirect()->route('team.index');
- } else {
- abort(400, 'Invitation expired.');
}
+ abort(400, 'Invitation expired.');
+
+ return null;
}
public function revoke_invitation()
diff --git a/app/Http/Controllers/MagicController.php b/app/Http/Controllers/MagicController.php
index 59c9b8b94..3bb905dbe 100644
--- a/app/Http/Controllers/MagicController.php
+++ b/app/Http/Controllers/MagicController.php
@@ -46,10 +46,7 @@ class MagicController extends Controller
public function newProject()
{
- $project = Project::firstOrCreate(
- ['name' => request()->query('name') ?? generate_random_name()],
- ['team_id' => currentTeam()->id]
- );
+ $project = Project::query()->firstOrCreate(['name' => request()->query('name') ?? generate_random_name()], ['team_id' => currentTeam()->id]);
return response()->json([
'project_uuid' => $project->uuid,
@@ -58,10 +55,7 @@ class MagicController extends Controller
public function newEnvironment()
{
- $environment = Environment::firstOrCreate(
- ['name' => request()->query('name') ?? generate_random_name()],
- ['project_id' => Project::ownedByCurrentTeam()->whereUuid(request()->query('project_uuid'))->firstOrFail()->id]
- );
+ $environment = Environment::query()->firstOrCreate(['name' => request()->query('name') ?? generate_random_name()], ['project_id' => Project::ownedByCurrentTeam()->whereUuid(request()->query('project_uuid'))->firstOrFail()->id]);
return response()->json([
'environment_name' => $environment->name,
@@ -70,12 +64,10 @@ class MagicController extends Controller
public function newTeam()
{
- $team = Team::create(
- [
- 'name' => request()->query('name') ?? generate_random_name(),
- 'personal_team' => false,
- ],
- );
+ $team = Team::query()->create([
+ 'name' => request()->query('name') ?? generate_random_name(),
+ 'personal_team' => false,
+ ]);
auth()->user()->teams()->attach($team, ['role' => 'admin']);
refreshSession();
diff --git a/app/Http/Controllers/OauthController.php b/app/Http/Controllers/OauthController.php
index 3a3f18c9c..b4a1806c1 100644
--- a/app/Http/Controllers/OauthController.php
+++ b/app/Http/Controllers/OauthController.php
@@ -3,6 +3,7 @@
namespace App\Http\Controllers;
use App\Models\User;
+use Exception;
use Illuminate\Support\Facades\Auth;
use Symfony\Component\HttpKernel\Exception\HttpException;
@@ -26,7 +27,7 @@ class OauthController extends Controller
abort(403, 'Registration is disabled');
}
- $user = User::create([
+ $user = User::query()->create([
'name' => $oauthUser->name,
'email' => $oauthUser->email,
]);
@@ -34,7 +35,7 @@ class OauthController extends Controller
Auth::login($user);
return redirect('/');
- } catch (\Exception $e) {
+ } catch (Exception $e) {
$errorCode = $e instanceof HttpException ? 'auth.failed' : 'auth.failed.callback';
return redirect()->route('login')->withErrors([__($errorCode)]);
diff --git a/app/Http/Controllers/UploadController.php b/app/Http/Controllers/UploadController.php
index 4d34a1000..57a5b3303 100644
--- a/app/Http/Controllers/UploadController.php
+++ b/app/Http/Controllers/UploadController.php
@@ -17,13 +17,13 @@ class UploadController extends BaseController
if (is_null($resource)) {
return response()->json(['error' => 'You do not have permission for this database'], 500);
}
- $receiver = new FileReceiver('file', $request, HandlerFactory::classFromRequest($request));
+ $fileReceiver = new FileReceiver('file', $request, HandlerFactory::classFromRequest($request));
- if ($receiver->isUploaded() === false) {
+ if ($fileReceiver->isUploaded() === false) {
throw new UploadMissingFileException;
}
- $save = $receiver->receive();
+ $save = $fileReceiver->receive();
if ($save->isFinished()) {
return $this->saveFile($save->getFile(), $resource);
@@ -57,22 +57,22 @@ class UploadController extends BaseController
// 'mime_type' => $mime
// ]);
// }
- protected function saveFile(UploadedFile $file, $resource)
+ protected function saveFile(UploadedFile $uploadedFile, $resource)
{
- $mime = str_replace('/', '-', $file->getMimeType());
+ $mime = str_replace('/', '-', $uploadedFile->getMimeType());
$filePath = "upload/{$resource->uuid}";
$finalPath = storage_path('app/'.$filePath);
- $file->move($finalPath, 'restore');
+ $uploadedFile->move($finalPath, 'restore');
return response()->json([
'mime_type' => $mime,
]);
}
- protected function createFilename(UploadedFile $file)
+ protected function createFilename(UploadedFile $uploadedFile)
{
- $extension = $file->getClientOriginalExtension();
- $filename = str_replace('.'.$extension, '', $file->getClientOriginalName()); // Filename without extension
+ $extension = $uploadedFile->getClientOriginalExtension();
+ $filename = str_replace('.'.$extension, '', $uploadedFile->getClientOriginalName()); // Filename without extension
$filename .= '_'.md5(time()).'.'.$extension;
diff --git a/app/Http/Controllers/Webhook/Bitbucket.php b/app/Http/Controllers/Webhook/Bitbucket.php
index 8c74f95e5..7e2b91616 100644
--- a/app/Http/Controllers/Webhook/Bitbucket.php
+++ b/app/Http/Controllers/Webhook/Bitbucket.php
@@ -30,7 +30,7 @@ class Bitbucket extends Controller
$json = json_encode($data);
Storage::disk('webhooks-during-maintenance')->put("{$epoch}_Bitbicket::manual_bitbucket", $json);
- return;
+ return null;
}
$return_payloads = collect([]);
$payload = $request->collect();
@@ -63,7 +63,7 @@ class Bitbucket extends Controller
$pull_request_html_url = data_get($payload, 'pullrequest.links.html.href');
$commit = data_get($payload, 'pullrequest.source.commit.hash');
}
- $applications = Application::where('git_repository', 'like', "%$full_name%");
+ $applications = Application::query()->where('git_repository', 'like', "%$full_name%");
$applications = $applications->where('git_branch', $branch)->get();
if ($applications->isEmpty()) {
return response([
@@ -122,10 +122,10 @@ class Bitbucket extends Controller
if ($x_bitbucket_event === 'pullrequest:created') {
if ($application->isPRDeployable()) {
$deployment_uuid = new Cuid2;
- $found = ApplicationPreview::where('application_id', $application->id)->where('pull_request_id', $pull_request_id)->first();
+ $found = ApplicationPreview::query()->where('application_id', $application->id)->where('pull_request_id', $pull_request_id)->first();
if (! $found) {
if ($application->build_pack === 'dockercompose') {
- $pr_app = ApplicationPreview::create([
+ $pr_app = ApplicationPreview::query()->create([
'git_type' => 'bitbucket',
'application_id' => $application->id,
'pull_request_id' => $pull_request_id,
@@ -134,7 +134,7 @@ class Bitbucket extends Controller
]);
$pr_app->generate_preview_fqdn_compose();
} else {
- ApplicationPreview::create([
+ ApplicationPreview::query()->create([
'git_type' => 'bitbucket',
'application_id' => $application->id,
'pull_request_id' => $pull_request_id,
@@ -165,7 +165,7 @@ class Bitbucket extends Controller
}
}
if ($x_bitbucket_event === 'pullrequest:rejected' || $x_bitbucket_event === 'pullrequest:fulfilled') {
- $found = ApplicationPreview::where('application_id', $application->id)->where('pull_request_id', $pull_request_id)->first();
+ $found = ApplicationPreview::query()->where('application_id', $application->id)->where('pull_request_id', $pull_request_id)->first();
if ($found) {
$found->delete();
$container_name = generateApplicationContainerName($application, $pull_request_id);
diff --git a/app/Http/Controllers/Webhook/Gitea.php b/app/Http/Controllers/Webhook/Gitea.php
index cc53f2034..8ddea3bc3 100644
--- a/app/Http/Controllers/Webhook/Gitea.php
+++ b/app/Http/Controllers/Webhook/Gitea.php
@@ -25,7 +25,7 @@ class Gitea extends Controller
return Str::contains($file, $x_gitea_delivery);
})->first();
if ($gitea_delivery_found) {
- return;
+ return null;
}
$data = [
'attributes' => $request->attributes->all(),
@@ -40,7 +40,7 @@ class Gitea extends Controller
$json = json_encode($data);
Storage::disk('webhooks-during-maintenance')->put("{$epoch}_Gitea::manual_{$x_gitea_delivery}", $json);
- return;
+ return null;
}
$x_gitea_event = Str::lower($request->header('X-Gitea-Event'));
$x_hub_signature_256 = Str::after($request->header('X-Hub-Signature-256'), 'sha256=');
@@ -76,7 +76,7 @@ class Gitea extends Controller
if (! $branch) {
return response('Nothing to do. No branch found in the request.');
}
- $applications = Application::where('git_repository', 'like', "%$full_name%");
+ $applications = Application::query()->where('git_repository', 'like', "%$full_name%");
if ($x_gitea_event === 'push') {
$applications = $applications->where('git_branch', $branch)->get();
if ($applications->isEmpty()) {
@@ -155,10 +155,10 @@ class Gitea extends Controller
if ($action === 'opened' || $action === 'synchronize' || $action === 'reopened') {
if ($application->isPRDeployable()) {
$deployment_uuid = new Cuid2;
- $found = ApplicationPreview::where('application_id', $application->id)->where('pull_request_id', $pull_request_id)->first();
+ $found = ApplicationPreview::query()->where('application_id', $application->id)->where('pull_request_id', $pull_request_id)->first();
if (! $found) {
if ($application->build_pack === 'dockercompose') {
- $pr_app = ApplicationPreview::create([
+ $pr_app = ApplicationPreview::query()->create([
'git_type' => 'gitea',
'application_id' => $application->id,
'pull_request_id' => $pull_request_id,
@@ -167,7 +167,7 @@ class Gitea extends Controller
]);
$pr_app->generate_preview_fqdn_compose();
} else {
- ApplicationPreview::create([
+ ApplicationPreview::query()->create([
'git_type' => 'gitea',
'application_id' => $application->id,
'pull_request_id' => $pull_request_id,
@@ -198,7 +198,7 @@ class Gitea extends Controller
}
}
if ($action === 'closed') {
- $found = ApplicationPreview::where('application_id', $application->id)->where('pull_request_id', $pull_request_id)->first();
+ $found = ApplicationPreview::query()->where('application_id', $application->id)->where('pull_request_id', $pull_request_id)->first();
if ($found) {
$found->delete();
$container_name = generateApplicationContainerName($application, $pull_request_id);
diff --git a/app/Http/Controllers/Webhook/Github.php b/app/Http/Controllers/Webhook/Github.php
index ac1d4ded2..d3a123480 100644
--- a/app/Http/Controllers/Webhook/Github.php
+++ b/app/Http/Controllers/Webhook/Github.php
@@ -31,7 +31,7 @@ class Github extends Controller
return Str::contains($file, $x_github_delivery);
})->first();
if ($github_delivery_found) {
- return;
+ return null;
}
$data = [
'attributes' => $request->attributes->all(),
@@ -46,7 +46,7 @@ class Github extends Controller
$json = json_encode($data);
Storage::disk('webhooks-during-maintenance')->put("{$epoch}_Github::manual_{$x_github_delivery}", $json);
- return;
+ return null;
}
$x_github_event = Str::lower($request->header('X-GitHub-Event'));
$x_hub_signature_256 = Str::after($request->header('X-Hub-Signature-256'), 'sha256=');
@@ -82,7 +82,7 @@ class Github extends Controller
if (! $branch) {
return response('Nothing to do. No branch found in the request.');
}
- $applications = Application::where('git_repository', 'like', "%$full_name%");
+ $applications = Application::query()->where('git_repository', 'like', "%$full_name%");
if ($x_github_event === 'push') {
$applications = $applications->where('git_branch', $branch)->get();
if ($applications->isEmpty()) {
@@ -161,10 +161,10 @@ class Github extends Controller
if ($action === 'opened' || $action === 'synchronize' || $action === 'reopened') {
if ($application->isPRDeployable()) {
$deployment_uuid = new Cuid2;
- $found = ApplicationPreview::where('application_id', $application->id)->where('pull_request_id', $pull_request_id)->first();
+ $found = ApplicationPreview::query()->where('application_id', $application->id)->where('pull_request_id', $pull_request_id)->first();
if (! $found) {
if ($application->build_pack === 'dockercompose') {
- $pr_app = ApplicationPreview::create([
+ $pr_app = ApplicationPreview::query()->create([
'git_type' => 'github',
'application_id' => $application->id,
'pull_request_id' => $pull_request_id,
@@ -173,7 +173,7 @@ class Github extends Controller
]);
$pr_app->generate_preview_fqdn_compose();
} else {
- ApplicationPreview::create([
+ ApplicationPreview::query()->create([
'git_type' => 'github',
'application_id' => $application->id,
'pull_request_id' => $pull_request_id,
@@ -204,7 +204,7 @@ class Github extends Controller
}
}
if ($action === 'closed') {
- $found = ApplicationPreview::where('application_id', $application->id)->where('pull_request_id', $pull_request_id)->first();
+ $found = ApplicationPreview::query()->where('application_id', $application->id)->where('pull_request_id', $pull_request_id)->first();
if ($found) {
$found->delete();
$container_name = generateApplicationContainerName($application, $pull_request_id);
@@ -245,7 +245,7 @@ class Github extends Controller
return Str::contains($file, $x_github_delivery);
})->first();
if ($github_delivery_found) {
- return;
+ return null;
}
$data = [
'attributes' => $request->attributes->all(),
@@ -260,7 +260,7 @@ class Github extends Controller
$json = json_encode($data);
Storage::disk('webhooks-during-maintenance')->put("{$epoch}_Github::normal_{$x_github_delivery}", $json);
- return;
+ return null;
}
$x_github_event = Str::lower($request->header('X-GitHub-Event'));
$x_github_hook_installation_target_id = $request->header('X-GitHub-Hook-Installation-Target-Id');
@@ -270,16 +270,14 @@ class Github extends Controller
// Just pong
return response('pong');
}
- $github_app = GithubApp::where('app_id', $x_github_hook_installation_target_id)->first();
+ $github_app = GithubApp::query()->where('app_id', $x_github_hook_installation_target_id)->first();
if (is_null($github_app)) {
return response('Nothing to do. No GitHub App found.');
}
$webhook_secret = data_get($github_app, 'webhook_secret');
$hmac = hash_hmac('sha256', $request->getContent(), $webhook_secret);
- if (config('app.env') !== 'local') {
- if (! hash_equals($x_hub_signature_256, $hmac)) {
- return response('Invalid signature.');
- }
+ if (config('app.env') !== 'local' && ! hash_equals($x_hub_signature_256, $hmac)) {
+ return response('Invalid signature.');
}
if ($x_github_event === 'installation' || $x_github_event === 'installation_repositories') {
// Installation handled by setup redirect url. Repositories queried on-demand.
@@ -312,7 +310,7 @@ class Github extends Controller
if (! $id || ! $branch) {
return response('Nothing to do. No id or branch found.');
}
- $applications = Application::where('repository_project_id', $id)->whereRelation('source', 'is_public', false);
+ $applications = Application::query()->where('repository_project_id', $id)->whereRelation('source', 'is_public', false);
if ($x_github_event === 'push') {
$applications = $applications->where('git_branch', $branch)->get();
if ($applications->isEmpty()) {
@@ -381,9 +379,9 @@ class Github extends Controller
if ($action === 'opened' || $action === 'synchronize' || $action === 'reopened') {
if ($application->isPRDeployable()) {
$deployment_uuid = new Cuid2;
- $found = ApplicationPreview::where('application_id', $application->id)->where('pull_request_id', $pull_request_id)->first();
+ $found = ApplicationPreview::query()->where('application_id', $application->id)->where('pull_request_id', $pull_request_id)->first();
if (! $found) {
- ApplicationPreview::create([
+ ApplicationPreview::query()->create([
'git_type' => 'github',
'application_id' => $application->id,
'pull_request_id' => $pull_request_id,
@@ -413,7 +411,7 @@ class Github extends Controller
}
}
if ($action === 'closed' || $action === 'close') {
- $found = ApplicationPreview::where('application_id', $application->id)->where('pull_request_id', $pull_request_id)->first();
+ $found = ApplicationPreview::query()->where('application_id', $application->id)->where('pull_request_id', $pull_request_id)->first();
if ($found) {
$containers = getCurrentApplicationContainerStatus($application->destination->server, $application->id, $pull_request_id);
if ($containers->isNotEmpty()) {
@@ -453,7 +451,7 @@ class Github extends Controller
try {
$code = $request->get('code');
$state = $request->get('state');
- $github_app = GithubApp::where('uuid', $state)->firstOrFail();
+ $github_app = GithubApp::query()->where('uuid', $state)->firstOrFail();
$api_url = data_get($github_app, 'api_url');
$data = Http::withBody(null)->accept('application/vnd.github+json')->post("$api_url/app-manifests/$code/conversions")->throw()->json();
$id = data_get($data, 'id');
@@ -462,7 +460,7 @@ class Github extends Controller
$client_secret = data_get($data, 'client_secret');
$private_key = data_get($data, 'pem');
$webhook_secret = data_get($data, 'webhook_secret');
- $private_key = PrivateKey::create([
+ $private_key = PrivateKey::query()->create([
'name' => "github-app-{$slug}",
'private_key' => $private_key,
'team_id' => $github_app->team_id,
@@ -501,11 +499,11 @@ class Github extends Controller
$json = json_encode($data);
Storage::disk('webhooks-during-maintenance')->put("{$epoch}_Github::install_{$installation_id}", $json);
- return;
+ return null;
}
$source = $request->get('source');
$setup_action = $request->get('setup_action');
- $github_app = GithubApp::where('uuid', $source)->firstOrFail();
+ $github_app = GithubApp::query()->where('uuid', $source)->firstOrFail();
if ($setup_action === 'install') {
$github_app->installation_id = $installation_id;
$github_app->save();
diff --git a/app/Http/Controllers/Webhook/Gitlab.php b/app/Http/Controllers/Webhook/Gitlab.php
index d8dcc0c3b..e97614a6f 100644
--- a/app/Http/Controllers/Webhook/Gitlab.php
+++ b/app/Http/Controllers/Webhook/Gitlab.php
@@ -31,7 +31,7 @@ class Gitlab extends Controller
$json = json_encode($data);
Storage::disk('webhooks-during-maintenance')->put("{$epoch}_Gitlab::manual_gitlab", $json);
- return;
+ return null;
}
$return_payloads = collect([]);
@@ -93,7 +93,7 @@ class Gitlab extends Controller
return response($return_payloads);
}
}
- $applications = Application::where('git_repository', 'like', "%$full_name%");
+ $applications = Application::query()->where('git_repository', 'like', "%$full_name%");
if ($x_gitlab_event === 'push') {
$applications = $applications->where('git_branch', $branch)->get();
if ($applications->isEmpty()) {
@@ -181,10 +181,10 @@ class Gitlab extends Controller
if ($action === 'open' || $action === 'opened' || $action === 'synchronize' || $action === 'reopened' || $action === 'reopen' || $action === 'update') {
if ($application->isPRDeployable()) {
$deployment_uuid = new Cuid2;
- $found = ApplicationPreview::where('application_id', $application->id)->where('pull_request_id', $pull_request_id)->first();
+ $found = ApplicationPreview::query()->where('application_id', $application->id)->where('pull_request_id', $pull_request_id)->first();
if (! $found) {
if ($application->build_pack === 'dockercompose') {
- $pr_app = ApplicationPreview::create([
+ $pr_app = ApplicationPreview::query()->create([
'git_type' => 'gitlab',
'application_id' => $application->id,
'pull_request_id' => $pull_request_id,
@@ -193,7 +193,7 @@ class Gitlab extends Controller
]);
$pr_app->generate_preview_fqdn_compose();
} else {
- ApplicationPreview::create([
+ ApplicationPreview::query()->create([
'git_type' => 'gitlab',
'application_id' => $application->id,
'pull_request_id' => $pull_request_id,
@@ -223,7 +223,7 @@ class Gitlab extends Controller
]);
}
} elseif ($action === 'closed' || $action === 'close' || $action === 'merge') {
- $found = ApplicationPreview::where('application_id', $application->id)->where('pull_request_id', $pull_request_id)->first();
+ $found = ApplicationPreview::query()->where('application_id', $application->id)->where('pull_request_id', $pull_request_id)->first();
if ($found) {
$found->delete();
$container_name = generateApplicationContainerName($application, $pull_request_id);
diff --git a/app/Http/Controllers/Webhook/Stripe.php b/app/Http/Controllers/Webhook/Stripe.php
index 83ba16699..9e07ebaf9 100644
--- a/app/Http/Controllers/Webhook/Stripe.php
+++ b/app/Http/Controllers/Webhook/Stripe.php
@@ -40,7 +40,7 @@ class Stripe extends Controller
return response('Webhook received. Cool cool cool cool cool.', 200);
}
- $this->webhook = Webhook::create([
+ $this->webhook = Webhook::query()->create([
'type' => 'stripe',
'payload' => $request->getContent(),
]);
diff --git a/app/Http/Kernel.php b/app/Http/Kernel.php
index a1ce20295..5ba787bed 100644
--- a/app/Http/Kernel.php
+++ b/app/Http/Kernel.php
@@ -2,7 +2,35 @@
namespace App\Http;
+use App\Http\Middleware\ApiAbility;
+use App\Http\Middleware\ApiSensitiveData;
+use App\Http\Middleware\Authenticate;
+use App\Http\Middleware\CheckForcePasswordReset;
+use App\Http\Middleware\DecideWhatToDoWithUser;
+use App\Http\Middleware\EncryptCookies;
+use App\Http\Middleware\PreventRequestsDuringMaintenance;
+use App\Http\Middleware\RedirectIfAuthenticated;
+use App\Http\Middleware\TrimStrings;
+use App\Http\Middleware\TrustProxies;
+use App\Http\Middleware\ValidateSignature;
+use App\Http\Middleware\VerifyCsrfToken;
+use Illuminate\Auth\Middleware\AuthenticateWithBasicAuth;
+use Illuminate\Auth\Middleware\Authorize;
+use Illuminate\Auth\Middleware\EnsureEmailIsVerified;
+use Illuminate\Auth\Middleware\RequirePassword;
+use Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse;
use Illuminate\Foundation\Http\Kernel as HttpKernel;
+use Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull;
+use Illuminate\Foundation\Http\Middleware\ValidatePostSize;
+use Illuminate\Http\Middleware\HandleCors;
+use Illuminate\Http\Middleware\SetCacheHeaders;
+use Illuminate\Routing\Middleware\SubstituteBindings;
+use Illuminate\Routing\Middleware\ThrottleRequests;
+use Illuminate\Session\Middleware\AuthenticateSession;
+use Illuminate\Session\Middleware\StartSession;
+use Illuminate\View\Middleware\ShareErrorsFromSession;
+use Laravel\Sanctum\Http\Middleware\CheckAbilities;
+use Laravel\Sanctum\Http\Middleware\CheckForAnyAbility;
class Kernel extends HttpKernel
{
@@ -15,12 +43,12 @@ class Kernel extends HttpKernel
*/
protected $middleware = [
// \App\Http\Middleware\TrustHosts::class,
- \App\Http\Middleware\TrustProxies::class,
- \Illuminate\Http\Middleware\HandleCors::class,
- \App\Http\Middleware\PreventRequestsDuringMaintenance::class,
- \Illuminate\Foundation\Http\Middleware\ValidatePostSize::class,
- \App\Http\Middleware\TrimStrings::class,
- \Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class,
+ TrustProxies::class,
+ HandleCors::class,
+ PreventRequestsDuringMaintenance::class,
+ ValidatePostSize::class,
+ TrimStrings::class,
+ ConvertEmptyStringsToNull::class,
];
@@ -31,21 +59,21 @@ class Kernel extends HttpKernel
*/
protected $middlewareGroups = [
'web' => [
- \App\Http\Middleware\EncryptCookies::class,
- \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
- \Illuminate\Session\Middleware\StartSession::class,
- \Illuminate\View\Middleware\ShareErrorsFromSession::class,
- \App\Http\Middleware\VerifyCsrfToken::class,
- \Illuminate\Routing\Middleware\SubstituteBindings::class,
- \App\Http\Middleware\CheckForcePasswordReset::class,
- \App\Http\Middleware\DecideWhatToDoWithUser::class,
+ EncryptCookies::class,
+ AddQueuedCookiesToResponse::class,
+ StartSession::class,
+ ShareErrorsFromSession::class,
+ VerifyCsrfToken::class,
+ SubstituteBindings::class,
+ CheckForcePasswordReset::class,
+ DecideWhatToDoWithUser::class,
],
'api' => [
// \Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful::class,
- \Illuminate\Routing\Middleware\ThrottleRequests::class.':api',
- \Illuminate\Routing\Middleware\SubstituteBindings::class,
+ ThrottleRequests::class.':api',
+ SubstituteBindings::class,
],
];
@@ -57,19 +85,19 @@ class Kernel extends HttpKernel
* @var array
*/
protected $middlewareAliases = [
- 'auth' => \App\Http\Middleware\Authenticate::class,
- 'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
- 'auth.session' => \Illuminate\Session\Middleware\AuthenticateSession::class,
- 'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class,
- 'can' => \Illuminate\Auth\Middleware\Authorize::class,
- 'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
- 'password.confirm' => \Illuminate\Auth\Middleware\RequirePassword::class,
- 'signed' => \App\Http\Middleware\ValidateSignature::class,
- 'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
- 'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
- 'abilities' => \Laravel\Sanctum\Http\Middleware\CheckAbilities::class,
- 'ability' => \Laravel\Sanctum\Http\Middleware\CheckForAnyAbility::class,
- 'api.ability' => \App\Http\Middleware\ApiAbility::class,
- 'api.sensitive' => \App\Http\Middleware\ApiSensitiveData::class,
+ 'auth' => Authenticate::class,
+ 'auth.basic' => AuthenticateWithBasicAuth::class,
+ 'auth.session' => AuthenticateSession::class,
+ 'cache.headers' => SetCacheHeaders::class,
+ 'can' => Authorize::class,
+ 'guest' => RedirectIfAuthenticated::class,
+ 'password.confirm' => RequirePassword::class,
+ 'signed' => ValidateSignature::class,
+ 'throttle' => ThrottleRequests::class,
+ 'verified' => EnsureEmailIsVerified::class,
+ 'abilities' => CheckAbilities::class,
+ 'ability' => CheckForAnyAbility::class,
+ 'api.ability' => ApiAbility::class,
+ 'api.sensitive' => ApiSensitiveData::class,
];
}
diff --git a/app/Http/Middleware/ApiAbility.php b/app/Http/Middleware/ApiAbility.php
index 324eeebaa..7ad16472a 100644
--- a/app/Http/Middleware/ApiAbility.php
+++ b/app/Http/Middleware/ApiAbility.php
@@ -2,6 +2,8 @@
namespace App\Http\Middleware;
+use Exception;
+use Illuminate\Auth\AuthenticationException;
use Laravel\Sanctum\Http\Middleware\CheckForAnyAbility;
class ApiAbility extends CheckForAnyAbility
@@ -14,11 +16,11 @@ class ApiAbility extends CheckForAnyAbility
}
return parent::handle($request, $next, ...$abilities);
- } catch (\Illuminate\Auth\AuthenticationException $e) {
+ } catch (AuthenticationException $e) {
return response()->json([
'message' => 'Unauthenticated.',
], 401);
- } catch (\Exception $e) {
+ } catch (Exception $e) {
return response()->json([
'message' => 'Missing required permissions: '.implode(', ', $abilities),
], 403);
diff --git a/app/Http/Middleware/ApiAllowed.php b/app/Http/Middleware/ApiAllowed.php
index dc6be5da3..7c14b7921 100644
--- a/app/Http/Middleware/ApiAllowed.php
+++ b/app/Http/Middleware/ApiAllowed.php
@@ -18,12 +18,10 @@ class ApiAllowed
return response()->json(['success' => true, 'message' => 'API is disabled.'], 403);
}
- if (! isDev()) {
- if ($settings->allowed_ips) {
- $allowedIps = explode(',', $settings->allowed_ips);
- if (! in_array($request->ip(), $allowedIps)) {
- return response()->json(['success' => true, 'message' => 'You are not allowed to access the API.'], 403);
- }
+ if (! isDev() && $settings->allowed_ips) {
+ $allowedIps = explode(',', $settings->allowed_ips);
+ if (! in_array($request->ip(), $allowedIps)) {
+ return response()->json(['success' => true, 'message' => 'You are not allowed to access the API.'], 403);
}
}
diff --git a/app/Http/Middleware/CheckForcePasswordReset.php b/app/Http/Middleware/CheckForcePasswordReset.php
index 78b1f896c..3e8fa9d02 100644
--- a/app/Http/Middleware/CheckForcePasswordReset.php
+++ b/app/Http/Middleware/CheckForcePasswordReset.php
@@ -11,7 +11,7 @@ class CheckForcePasswordReset
/**
* Handle an incoming request.
*
- * @param \Closure(\Illuminate\Http\Request): (\Symfony\Component\HttpFoundation\Response) $next
+ * @param Closure(Request):Response $next
*/
public function handle(Request $request, Closure $next): Response
{
diff --git a/app/Http/Middleware/DecideWhatToDoWithUser.php b/app/Http/Middleware/DecideWhatToDoWithUser.php
index 8b1c550df..f9e979de7 100644
--- a/app/Http/Middleware/DecideWhatToDoWithUser.php
+++ b/app/Http/Middleware/DecideWhatToDoWithUser.php
@@ -33,14 +33,12 @@ class DecideWhatToDoWithUser
return redirect()->route('verify.email');
}
- if (! isSubscriptionActive() && ! isSubscriptionOnGracePeriod()) {
- if (! in_array($request->path(), allowedPathsForUnsubscribedAccounts())) {
- if (Str::startsWith($request->path(), 'invitations')) {
- return $next($request);
- }
-
- return redirect()->route('subscription.index');
+ if (! isSubscriptionActive() && ! isSubscriptionOnGracePeriod() && ! in_array($request->path(), allowedPathsForUnsubscribedAccounts())) {
+ if (Str::startsWith($request->path(), 'invitations')) {
+ return $next($request);
}
+
+ return redirect()->route('subscription.index');
}
if (showBoarding() && ! in_array($request->path(), allowedPathsForBoardingAccounts())) {
if (Str::startsWith($request->path(), 'invitations')) {
diff --git a/app/Http/Middleware/RedirectIfAuthenticated.php b/app/Http/Middleware/RedirectIfAuthenticated.php
index afc78c4e5..075438ee5 100644
--- a/app/Http/Middleware/RedirectIfAuthenticated.php
+++ b/app/Http/Middleware/RedirectIfAuthenticated.php
@@ -13,11 +13,11 @@ class RedirectIfAuthenticated
/**
* Handle an incoming request.
*
- * @param \Closure(\Illuminate\Http\Request): (\Symfony\Component\HttpFoundation\Response) $next
+ * @param Closure(Request):Response $next
*/
public function handle(Request $request, Closure $next, string ...$guards): Response
{
- $guards = empty($guards) ? [null] : $guards;
+ $guards = $guards === [] ? [null] : $guards;
foreach ($guards as $guard) {
if (Auth::guard($guard)->check()) {
diff --git a/app/Jobs/ApplicationDeploymentJob.php b/app/Jobs/ApplicationDeploymentJob.php
index addaf436a..0aa812e12 100644
--- a/app/Jobs/ApplicationDeploymentJob.php
+++ b/app/Jobs/ApplicationDeploymentJob.php
@@ -88,7 +88,7 @@ class ApplicationDeploymentJob implements ShouldBeEncrypted, ShouldQueue
private bool $is_this_additional_server = false;
- private ?ApplicationPreview $preview = null;
+ private ?ApplicationPreview $applicationPreview = null;
private ?string $git_type = null;
@@ -174,8 +174,8 @@ class ApplicationDeploymentJob implements ShouldBeEncrypted, ShouldQueue
$this->nixpacks_plan_json = collect([]);
- $this->application_deployment_queue = ApplicationDeploymentQueue::find($application_deployment_queue_id);
- $this->application = Application::find($this->application_deployment_queue->application_id);
+ $this->application_deployment_queue = ApplicationDeploymentQueue::query()->find($application_deployment_queue_id);
+ $this->application = Application::query()->find($this->application_deployment_queue->application_id);
$this->build_pack = data_get($this->application, 'build_pack');
$this->build_args = collect([]);
@@ -199,7 +199,7 @@ class ApplicationDeploymentJob implements ShouldBeEncrypted, ShouldQueue
if ($source) {
$this->source = $source->getMorphClass()::where('id', $this->application->source->id)->first();
}
- $this->server = Server::find($this->application_deployment_queue->server_id);
+ $this->server = Server::query()->find($this->application_deployment_queue->server_id);
$this->timeout = $this->server->settings->dynamic_timeout;
$this->destination = $this->server->destinations()->where('id', $this->application_deployment_queue->destination_id)->first();
$this->server = $this->mainServer = $this->destination->server;
@@ -225,14 +225,12 @@ class ApplicationDeploymentJob implements ShouldBeEncrypted, ShouldQueue
// Set preview fqdn
if ($this->pull_request_id !== 0) {
- $this->preview = $this->application->generate_preview_fqdn($this->pull_request_id);
+ $this->applicationPreview = $this->application->generate_preview_fqdn($this->pull_request_id);
if ($this->application->is_github_based()) {
- ApplicationPullRequestUpdateJob::dispatch(application: $this->application, preview: $this->preview, deployment_uuid: $this->deployment_uuid, status: ProcessStatus::IN_PROGRESS);
+ ApplicationPullRequestUpdateJob::dispatch(application: $this->application, preview: $this->applicationPreview, deployment_uuid: $this->deployment_uuid, status: ProcessStatus::IN_PROGRESS);
}
- if ($this->application->build_pack === 'dockerfile') {
- if (data_get($this->application, 'dockerfile_location')) {
- $this->dockerfile_location = $this->application->dockerfile_location;
- }
+ if ($this->application->build_pack === 'dockerfile' && data_get($this->application, 'dockerfile_location')) {
+ $this->dockerfile_location = $this->application->dockerfile_location;
}
}
}
@@ -263,15 +261,15 @@ class ApplicationDeploymentJob implements ShouldBeEncrypted, ShouldQueue
if (count($allContainers) > 0) {
$allContainers = $allContainers[0];
$allContainers = collect($allContainers)->sort()->values();
- foreach ($allContainers as $container) {
- $containerName = data_get($container, 'Name');
+ foreach ($allContainers as $allContainer) {
+ $containerName = data_get($allContainer, 'Name');
if ($containerName === 'coolify-proxy') {
continue;
}
if (preg_match('/-(\d{12})/', $containerName)) {
continue;
}
- $containerIp = data_get($container, 'IPv4Address');
+ $containerIp = data_get($allContainer, 'IPv4Address');
if ($containerName && $containerIp) {
$containerIp = str($containerIp)->before('/');
$ips->put($containerName, $containerIp->value());
@@ -312,7 +310,7 @@ class ApplicationDeploymentJob implements ShouldBeEncrypted, ShouldQueue
$this->decide_what_to_do();
} catch (Exception $e) {
if ($this->pull_request_id !== 0 && $this->application->is_github_based()) {
- ApplicationPullRequestUpdateJob::dispatch(application: $this->application, preview: $this->preview, deployment_uuid: $this->deployment_uuid, status: ProcessStatus::ERROR);
+ ApplicationPullRequestUpdateJob::dispatch(application: $this->application, preview: $this->applicationPreview, deployment_uuid: $this->deployment_uuid, status: ProcessStatus::ERROR);
}
$this->fail($e);
throw $e;
@@ -340,7 +338,8 @@ class ApplicationDeploymentJob implements ShouldBeEncrypted, ShouldQueue
$this->just_restart();
return;
- } elseif ($this->pull_request_id !== 0) {
+ }
+ if ($this->pull_request_id !== 0) {
$this->deploy_pull_request();
} elseif ($this->application->dockerfile) {
$this->deploy_simple_dockerfile();
@@ -364,10 +363,8 @@ class ApplicationDeploymentJob implements ShouldBeEncrypted, ShouldQueue
GetContainersStatus::dispatch($this->server);
}
$this->next(ApplicationDeploymentStatus::FINISHED->value);
- if ($this->pull_request_id !== 0) {
- if ($this->application->is_github_based()) {
- ApplicationPullRequestUpdateJob::dispatch(application: $this->application, preview: $this->preview, deployment_uuid: $this->deployment_uuid, status: ProcessStatus::FINISHED);
- }
+ if ($this->pull_request_id !== 0 && $this->application->is_github_based()) {
+ ApplicationPullRequestUpdateJob::dispatch(application: $this->application, preview: $this->applicationPreview, deployment_uuid: $this->deployment_uuid, status: ProcessStatus::FINISHED);
}
$this->run_post_deployment_command();
$this->application->isConfigurationChanged(true);
@@ -470,7 +467,7 @@ class ApplicationDeploymentJob implements ShouldBeEncrypted, ShouldQueue
$yaml = $composeFile = $this->application->docker_compose_raw;
$this->save_environment_variables();
} else {
- $composeFile = $this->application->parse(pull_request_id: $this->pull_request_id, preview_id: data_get($this->preview, 'id'));
+ $composeFile = $this->application->parse(pull_request_id: $this->pull_request_id, preview_id: data_get($this->applicationPreview, 'id'));
$this->save_environment_variables();
if (! is_null($this->env_filename)) {
$services = collect(data_get($composeFile, 'services', []));
@@ -553,34 +550,32 @@ class ApplicationDeploymentJob implements ShouldBeEncrypted, ShouldQueue
['command' => $command, 'hidden' => true],
);
}
+ } elseif ($this->docker_compose_custom_start_command) {
+ $this->write_deployment_configurations();
+ $this->execute_remote_command(
+ [executeInDocker($this->deployment_uuid, "cd {$this->basedir} && {$this->docker_compose_custom_start_command}"), 'hidden' => true],
+ );
} else {
- if ($this->docker_compose_custom_start_command) {
+ $command = "{$this->coolify_variables} docker compose";
+ if ($this->preserveRepository) {
+ if ($this->env_filename) {
+ $command .= " --env-file {$server_workdir}/{$this->env_filename}";
+ }
+ $command .= " --project-name {$this->application->uuid} --project-directory {$server_workdir} -f {$server_workdir}{$this->docker_compose_location} up -d";
$this->write_deployment_configurations();
+
$this->execute_remote_command(
- [executeInDocker($this->deployment_uuid, "cd {$this->basedir} && {$this->docker_compose_custom_start_command}"), 'hidden' => true],
+ ['command' => $command, 'hidden' => true],
);
} else {
- $command = "{$this->coolify_variables} docker compose";
- if ($this->preserveRepository) {
- if ($this->env_filename) {
- $command .= " --env-file {$server_workdir}/{$this->env_filename}";
- }
- $command .= " --project-name {$this->application->uuid} --project-directory {$server_workdir} -f {$server_workdir}{$this->docker_compose_location} up -d";
- $this->write_deployment_configurations();
-
- $this->execute_remote_command(
- ['command' => $command, 'hidden' => true],
- );
- } else {
- if ($this->env_filename) {
- $command .= " --env-file {$this->workdir}/{$this->env_filename}";
- }
- $command .= " --project-name {$this->application->uuid} --project-directory {$this->workdir} -f {$this->workdir}{$this->docker_compose_location} up -d";
- $this->execute_remote_command(
- [executeInDocker($this->deployment_uuid, $command), 'hidden' => true],
- );
- $this->write_deployment_configurations();
+ if ($this->env_filename) {
+ $command .= " --env-file {$this->workdir}/{$this->env_filename}";
}
+ $command .= " --project-name {$this->application->uuid} --project-directory {$this->workdir} -f {$this->workdir}{$this->docker_compose_location} up -d";
+ $this->execute_remote_command(
+ [executeInDocker($this->deployment_uuid, $command), 'hidden' => true],
+ );
+ $this->write_deployment_configurations();
}
}
@@ -688,7 +683,7 @@ class ApplicationDeploymentJob implements ShouldBeEncrypted, ShouldQueue
$this->server = $this->build_server;
}
}
- if (isset($this->docker_compose_base64)) {
+ if ($this->docker_compose_base64 !== null) {
if ($this->use_build_server) {
$this->server = $this->original_server;
}
@@ -773,9 +768,7 @@ class ApplicationDeploymentJob implements ShouldBeEncrypted, ShouldQueue
}
} catch (Exception $e) {
$this->application_deployment_queue->addLogEntry('Failed to push image to docker registry. Please check debug logs for more information.');
- if ($forceFail) {
- throw new RuntimeException($e->getMessage(), 69420);
- }
+ throw new RuntimeException($e->getMessage(), 69420, $e);
}
}
@@ -846,9 +839,8 @@ class ApplicationDeploymentJob implements ShouldBeEncrypted, ShouldQueue
$this->rolling_update();
return true;
- } else {
- $this->application_deployment_queue->addLogEntry('Configuration changed. Rebuilding image.');
}
+ $this->application_deployment_queue->addLogEntry('Configuration changed. Rebuilding image.');
} else {
$this->application_deployment_queue->addLogEntry("Image not found ({$this->production_image_name}). Building new image.");
}
@@ -908,11 +900,11 @@ class ApplicationDeploymentJob implements ShouldBeEncrypted, ShouldQueue
}
}
if ($this->application->environment_variables_preview->where('key', 'COOLIFY_FQDN')->isEmpty()) {
- $envs->push("COOLIFY_FQDN={$this->preview->fqdn}");
- $envs->push("COOLIFY_DOMAIN_URL={$this->preview->fqdn}");
+ $envs->push("COOLIFY_FQDN={$this->applicationPreview->fqdn}");
+ $envs->push("COOLIFY_DOMAIN_URL={$this->applicationPreview->fqdn}");
}
if ($this->application->environment_variables_preview->where('key', 'COOLIFY_URL')->isEmpty()) {
- $url = str($this->preview->fqdn)->replace('http://', '')->replace('https://', '');
+ $url = str($this->applicationPreview->fqdn)->replace('http://', '')->replace('https://', '');
$envs->push("COOLIFY_URL={$url}");
$envs->push("COOLIFY_DOMAIN_FQDN={$url}");
}
@@ -927,24 +919,20 @@ class ApplicationDeploymentJob implements ShouldBeEncrypted, ShouldQueue
add_coolify_default_environment_variables($this->application, $envs, $this->application->environment_variables_preview);
- foreach ($sorted_environment_variables_preview as $env) {
- $real_value = $env->real_value;
- if ($env->version === '4.0.0-beta.239') {
- $real_value = $env->real_value;
+ foreach ($sorted_environment_variables_preview as $sorted_environment_variable_preview) {
+ $real_value = $sorted_environment_variable_preview->real_value;
+ if ($sorted_environment_variable_preview->version === '4.0.0-beta.239') {
+ $real_value = $sorted_environment_variable_preview->real_value;
+ } elseif ($sorted_environment_variable_preview->is_literal || $sorted_environment_variable_preview->is_multiline) {
+ $real_value = '\''.$real_value.'\'';
} else {
- if ($env->is_literal || $env->is_multiline) {
- $real_value = '\''.$real_value.'\'';
- } else {
- $real_value = escapeEnvVariables($env->real_value);
- }
+ $real_value = escapeEnvVariables($sorted_environment_variable_preview->real_value);
}
- $envs->push($env->key.'='.$real_value);
+ $envs->push($sorted_environment_variable_preview->key.'='.$real_value);
}
// Add PORT if not exists, use the first port as default
- if ($this->build_pack !== 'dockercompose') {
- if ($this->application->environment_variables_preview->where('key', 'PORT')->isEmpty()) {
- $envs->push("PORT={$ports[0]}");
- }
+ if ($this->build_pack !== 'dockercompose' && $this->application->environment_variables_preview->where('key', 'PORT')->isEmpty()) {
+ $envs->push("PORT={$ports[0]}");
}
// Add HOST if not exists
if ($this->application->environment_variables_preview->where('key', 'HOST')->isEmpty()) {
@@ -986,24 +974,20 @@ class ApplicationDeploymentJob implements ShouldBeEncrypted, ShouldQueue
add_coolify_default_environment_variables($this->application, $envs, $this->application->environment_variables);
- foreach ($sorted_environment_variables as $env) {
- $real_value = $env->real_value;
- if ($env->version === '4.0.0-beta.239') {
- $real_value = $env->real_value;
+ foreach ($sorted_environment_variables as $sorted_environment_variable) {
+ $real_value = $sorted_environment_variable->real_value;
+ if ($sorted_environment_variable->version === '4.0.0-beta.239') {
+ $real_value = $sorted_environment_variable->real_value;
+ } elseif ($sorted_environment_variable->is_literal || $sorted_environment_variable->is_multiline) {
+ $real_value = '\''.$real_value.'\'';
} else {
- if ($env->is_literal || $env->is_multiline) {
- $real_value = '\''.$real_value.'\'';
- } else {
- $real_value = escapeEnvVariables($env->real_value);
- }
+ $real_value = escapeEnvVariables($sorted_environment_variable->real_value);
}
- $envs->push($env->key.'='.$real_value);
+ $envs->push($sorted_environment_variable->key.'='.$real_value);
}
// Add PORT if not exists, use the first port as default
- if ($this->build_pack !== 'dockercompose') {
- if ($this->application->environment_variables->where('key', 'PORT')->isEmpty()) {
- $envs->push("PORT={$ports[0]}");
- }
+ if ($this->build_pack !== 'dockercompose' && $this->application->environment_variables->where('key', 'PORT')->isEmpty()) {
+ $envs->push("PORT={$ports[0]}");
}
// Add HOST if not exists
if ($this->application->environment_variables->where('key', 'HOST')->isEmpty()) {
@@ -1067,11 +1051,7 @@ class ApplicationDeploymentJob implements ShouldBeEncrypted, ShouldQueue
private function elixir_finetunes()
{
- if ($this->pull_request_id === 0) {
- $envType = 'environment_variables';
- } else {
- $envType = 'environment_variables_preview';
- }
+ $envType = $this->pull_request_id === 0 ? 'environment_variables' : 'environment_variables_preview';
$mix_env = $this->application->{$envType}->where('key', 'MIX_ENV')->first();
if ($mix_env) {
if ($mix_env->is_build_time === false) {
@@ -1106,11 +1086,7 @@ class ApplicationDeploymentJob implements ShouldBeEncrypted, ShouldQueue
private function laravel_finetunes()
{
- if ($this->pull_request_id === 0) {
- $envType = 'environment_variables';
- } else {
- $envType = 'environment_variables_preview';
- }
+ $envType = $this->pull_request_id === 0 ? 'environment_variables' : 'environment_variables_preview';
$nixpacks_php_fallback_path = $this->application->{$envType}->where('key', 'NIXPACKS_PHP_FALLBACK_PATH')->first();
$nixpacks_php_root_dir = $this->application->{$envType}->where('key', 'NIXPACKS_PHP_ROOT_DIR')->first();
@@ -1194,7 +1170,7 @@ class ApplicationDeploymentJob implements ShouldBeEncrypted, ShouldQueue
$this->application_deployment_queue->addLogEntry('Custom healthcheck found, skipping default healthcheck.');
}
// ray('New container name: ', $this->container_name);
- if ($this->container_name) {
+ if ($this->container_name !== '' && $this->container_name !== '0') {
$counter = 1;
$this->application_deployment_queue->addLogEntry('Waiting for healthcheck to pass on the new container.');
if ($this->full_healthcheck_url) {
@@ -1344,12 +1320,10 @@ class ApplicationDeploymentJob implements ShouldBeEncrypted, ShouldQueue
throw new RuntimeException('Docker config file (~/.docker/config.json) not found on the build server. Please run "docker login" to login to the docker registry on the server.');
}
$runCommand = "docker run -d --name {$this->deployment_uuid} --rm -v {$this->serverUserHomeDir}/.docker/config.json:/root/.docker/config.json:ro -v /var/run/docker.sock:/var/run/docker.sock {$helperImage}";
+ } elseif ($this->dockerConfigFileExists === 'OK') {
+ $runCommand = "docker run -d --network {$this->destination->network} --name {$this->deployment_uuid} --rm -v {$this->serverUserHomeDir}/.docker/config.json:/root/.docker/config.json:ro -v /var/run/docker.sock:/var/run/docker.sock {$helperImage}";
} else {
- if ($this->dockerConfigFileExists === 'OK') {
- $runCommand = "docker run -d --network {$this->destination->network} --name {$this->deployment_uuid} --rm -v {$this->serverUserHomeDir}/.docker/config.json:/root/.docker/config.json:ro -v /var/run/docker.sock:/var/run/docker.sock {$helperImage}";
- } else {
- $runCommand = "docker run -d --network {$this->destination->network} --name {$this->deployment_uuid} --rm -v /var/run/docker.sock:/var/run/docker.sock {$helperImage}";
- }
+ $runCommand = "docker run -d --network {$this->destination->network} --name {$this->deployment_uuid} --rm -v /var/run/docker.sock:/var/run/docker.sock {$helperImage}";
}
$this->application_deployment_queue->addLogEntry("Preparing container with helper image: $helperImage.");
$this->execute_remote_command(
@@ -1389,7 +1363,7 @@ class ApplicationDeploymentJob implements ShouldBeEncrypted, ShouldQueue
return;
}
foreach ($destination_ids as $destination_id) {
- $destination = StandaloneDocker::find($destination_id);
+ $destination = StandaloneDocker::query()->find($destination_id);
$server = $destination->server;
if ($server->team_id !== $this->mainServer->team_id) {
$this->application_deployment_queue->addLogEntry("Skipping deployment to {$server->name}. Not in the same team?!");
@@ -1417,17 +1391,13 @@ class ApplicationDeploymentJob implements ShouldBeEncrypted, ShouldQueue
private function set_coolify_variables()
{
$this->coolify_variables = "SOURCE_COMMIT={$this->commit} ";
- if ($this->pull_request_id === 0) {
- $fqdn = $this->application->fqdn;
- } else {
- $fqdn = $this->preview->fqdn;
- }
+ $fqdn = $this->pull_request_id === 0 ? $this->application->fqdn : $this->applicationPreview->fqdn;
if (isset($fqdn)) {
$this->coolify_variables .= "COOLIFY_FQDN={$fqdn} ";
$url = str($fqdn)->replace('http://', '')->replace('https://', '');
$this->coolify_variables .= "COOLIFY_URL={$url} ";
}
- if (isset($this->application->git_branch)) {
+ if (property_exists($this->application, 'git_branch') && $this->application->git_branch !== null) {
$this->coolify_variables .= "COOLIFY_BRANCH={$this->application->git_branch} ";
}
}
@@ -1598,9 +1568,8 @@ class ApplicationDeploymentJob implements ShouldBeEncrypted, ShouldQueue
if ($this->application->install_command) {
$nixpacks_command .= " --install-cmd \"{$this->application->install_command}\"";
}
- $nixpacks_command .= " {$this->workdir}";
- return $nixpacks_command;
+ return $nixpacks_command." {$this->workdir}";
}
private function generate_nixpacks_env_variables()
@@ -1666,7 +1635,7 @@ class ApplicationDeploymentJob implements ShouldBeEncrypted, ShouldQueue
});
if ($found_caddy_labels->count() === 0) {
if ($this->pull_request_id !== 0) {
- $domains = str(data_get($this->preview, 'fqdn'))->explode(',');
+ $domains = str(data_get($this->applicationPreview, 'fqdn'))->explode(',');
} else {
$domains = str(data_get($this->application, 'fqdn'))->explode(',');
}
@@ -1682,13 +1651,11 @@ class ApplicationDeploymentJob implements ShouldBeEncrypted, ShouldQueue
}
$this->application->custom_labels = base64_encode($labels->implode("\n"));
$this->application->save();
- } else {
- if (! $this->application->settings->is_container_label_readonly_enabled) {
- $labels = collect(generateLabelsApplication($this->application, $this->preview));
- }
+ } elseif (! $this->application->settings->is_container_label_readonly_enabled) {
+ $labels = collect(generateLabelsApplication($this->application, $this->applicationPreview));
}
if ($this->pull_request_id !== 0) {
- $labels = collect(generateLabelsApplication($this->application, $this->preview));
+ $labels = collect(generateLabelsApplication($this->application, $this->applicationPreview));
}
if ($this->application->settings->is_container_label_escape_enabled) {
$labels = $labels->map(function ($value, $key) {
@@ -1874,23 +1841,21 @@ class ApplicationDeploymentJob implements ShouldBeEncrypted, ShouldQueue
$docker_compose['services'][$this->application->uuid] = array_merge_recursive($docker_compose['services'][$this->application->uuid], $custom_compose);
}
}
- } else {
- if (count($custom_compose) > 0) {
- $ipv4 = data_get($custom_compose, 'ip.0');
- $ipv6 = data_get($custom_compose, 'ip6.0');
- data_forget($custom_compose, 'ip');
- data_forget($custom_compose, 'ip6');
- if ($ipv4 || $ipv6) {
- data_forget($docker_compose['services'][$this->container_name], 'networks');
- }
- if ($ipv4) {
- $docker_compose['services'][$this->container_name]['networks'][$this->destination->network]['ipv4_address'] = $ipv4;
- }
- if ($ipv6) {
- $docker_compose['services'][$this->container_name]['networks'][$this->destination->network]['ipv6_address'] = $ipv6;
- }
- $docker_compose['services'][$this->container_name] = array_merge_recursive($docker_compose['services'][$this->container_name], $custom_compose);
+ } elseif (count($custom_compose) > 0) {
+ $ipv4 = data_get($custom_compose, 'ip.0');
+ $ipv6 = data_get($custom_compose, 'ip6.0');
+ data_forget($custom_compose, 'ip');
+ data_forget($custom_compose, 'ip6');
+ if ($ipv4 || $ipv6) {
+ data_forget($docker_compose['services'][$this->container_name], 'networks');
}
+ if ($ipv4) {
+ $docker_compose['services'][$this->container_name]['networks'][$this->destination->network]['ipv4_address'] = $ipv4;
+ }
+ if ($ipv6) {
+ $docker_compose['services'][$this->container_name]['networks'][$this->destination->network]['ipv6_address'] = $ipv6;
+ }
+ $docker_compose['services'][$this->container_name] = array_merge_recursive($docker_compose['services'][$this->container_name], $custom_compose);
}
}
@@ -2105,86 +2070,82 @@ COPY ./nginx.conf /etc/nginx/conf.d/default.conf");
'hidden' => true,
]
);
- } else {
+ } elseif ($this->application->dockerfile) {
// Pure Dockerfile based deployment
- if ($this->application->dockerfile) {
- if ($this->force_rebuild) {
- $build_command = "docker build --no-cache --pull {$this->buildTarget} {$this->addHosts} --network host -f {$this->workdir}{$this->dockerfile_location} {$this->build_args} --progress plain -t {$this->production_image_name} {$this->workdir}";
- } else {
- $build_command = "docker build --pull {$this->buildTarget} {$this->addHosts} --network host -f {$this->workdir}{$this->dockerfile_location} {$this->build_args} --progress plain -t {$this->production_image_name} {$this->workdir}";
- }
- $base64_build_command = base64_encode($build_command);
- $this->execute_remote_command(
- [
- executeInDocker($this->deployment_uuid, "echo '{$base64_build_command}' | base64 -d | tee /artifacts/build.sh > /dev/null"),
- 'hidden' => true,
- ],
- [
- executeInDocker($this->deployment_uuid, 'cat /artifacts/build.sh'),
- 'hidden' => true,
- ],
- [
- executeInDocker($this->deployment_uuid, 'bash /artifacts/build.sh'),
- 'hidden' => true,
- ]
- );
+ if ($this->force_rebuild) {
+ $build_command = "docker build --no-cache --pull {$this->buildTarget} {$this->addHosts} --network host -f {$this->workdir}{$this->dockerfile_location} {$this->build_args} --progress plain -t {$this->production_image_name} {$this->workdir}";
} else {
- if ($this->application->build_pack === 'nixpacks') {
- $this->nixpacks_plan = base64_encode($this->nixpacks_plan);
- $this->execute_remote_command([executeInDocker($this->deployment_uuid, "echo '{$this->nixpacks_plan}' | base64 -d | tee /artifacts/thegameplan.json > /dev/null"), 'hidden' => true]);
- if ($this->force_rebuild) {
- $this->execute_remote_command([
- executeInDocker($this->deployment_uuid, "nixpacks build -c /artifacts/thegameplan.json --no-cache --no-error-without-start -n {$this->production_image_name} {$this->workdir} -o {$this->workdir}"),
- 'hidden' => true,
- ]);
- $build_command = "docker build --no-cache {$this->addHosts} --network host -f {$this->workdir}/.nixpacks/Dockerfile {$this->build_args} --progress plain -t {$this->production_image_name} {$this->workdir}";
- } else {
- $this->execute_remote_command([
- executeInDocker($this->deployment_uuid, "nixpacks build -c /artifacts/thegameplan.json --cache-key '{$this->application->uuid}' --no-error-without-start -n {$this->production_image_name} {$this->workdir} -o {$this->workdir}"),
- 'hidden' => true,
- ]);
- $build_command = "docker build {$this->addHosts} --network host -f {$this->workdir}/.nixpacks/Dockerfile {$this->build_args} --progress plain -t {$this->production_image_name} {$this->workdir}";
- }
- $base64_build_command = base64_encode($build_command);
- $this->execute_remote_command(
- [
- executeInDocker($this->deployment_uuid, "echo '{$base64_build_command}' | base64 -d | tee /artifacts/build.sh > /dev/null"),
- 'hidden' => true,
- ],
- [
- executeInDocker($this->deployment_uuid, 'cat /artifacts/build.sh'),
- 'hidden' => true,
- ],
- [
- executeInDocker($this->deployment_uuid, 'bash /artifacts/build.sh'),
- 'hidden' => true,
- ]
- );
- $this->execute_remote_command([executeInDocker($this->deployment_uuid, 'rm /artifacts/thegameplan.json'), 'hidden' => true]);
- } else {
- if ($this->force_rebuild) {
- $build_command = "docker build --no-cache {$this->buildTarget} {$this->addHosts} --network host -f {$this->workdir}{$this->dockerfile_location} {$this->build_args} --progress plain -t {$this->production_image_name} {$this->workdir}";
- $base64_build_command = base64_encode($build_command);
- } else {
- $build_command = "docker build {$this->buildTarget} {$this->addHosts} --network host -f {$this->workdir}{$this->dockerfile_location} {$this->build_args} --progress plain -t {$this->production_image_name} {$this->workdir}";
- $base64_build_command = base64_encode($build_command);
- }
- $this->execute_remote_command(
- [
- executeInDocker($this->deployment_uuid, "echo '{$base64_build_command}' | base64 -d | tee /artifacts/build.sh > /dev/null"),
- 'hidden' => true,
- ],
- [
- executeInDocker($this->deployment_uuid, 'cat /artifacts/build.sh'),
- 'hidden' => true,
- ],
- [
- executeInDocker($this->deployment_uuid, 'bash /artifacts/build.sh'),
- 'hidden' => true,
- ]
- );
- }
+ $build_command = "docker build --pull {$this->buildTarget} {$this->addHosts} --network host -f {$this->workdir}{$this->dockerfile_location} {$this->build_args} --progress plain -t {$this->production_image_name} {$this->workdir}";
}
+ $base64_build_command = base64_encode($build_command);
+ $this->execute_remote_command(
+ [
+ executeInDocker($this->deployment_uuid, "echo '{$base64_build_command}' | base64 -d | tee /artifacts/build.sh > /dev/null"),
+ 'hidden' => true,
+ ],
+ [
+ executeInDocker($this->deployment_uuid, 'cat /artifacts/build.sh'),
+ 'hidden' => true,
+ ],
+ [
+ executeInDocker($this->deployment_uuid, 'bash /artifacts/build.sh'),
+ 'hidden' => true,
+ ]
+ );
+ } elseif ($this->application->build_pack === 'nixpacks') {
+ $this->nixpacks_plan = base64_encode($this->nixpacks_plan);
+ $this->execute_remote_command([executeInDocker($this->deployment_uuid, "echo '{$this->nixpacks_plan}' | base64 -d | tee /artifacts/thegameplan.json > /dev/null"), 'hidden' => true]);
+ if ($this->force_rebuild) {
+ $this->execute_remote_command([
+ executeInDocker($this->deployment_uuid, "nixpacks build -c /artifacts/thegameplan.json --no-cache --no-error-without-start -n {$this->production_image_name} {$this->workdir} -o {$this->workdir}"),
+ 'hidden' => true,
+ ]);
+ $build_command = "docker build --no-cache {$this->addHosts} --network host -f {$this->workdir}/.nixpacks/Dockerfile {$this->build_args} --progress plain -t {$this->production_image_name} {$this->workdir}";
+ } else {
+ $this->execute_remote_command([
+ executeInDocker($this->deployment_uuid, "nixpacks build -c /artifacts/thegameplan.json --cache-key '{$this->application->uuid}' --no-error-without-start -n {$this->production_image_name} {$this->workdir} -o {$this->workdir}"),
+ 'hidden' => true,
+ ]);
+ $build_command = "docker build {$this->addHosts} --network host -f {$this->workdir}/.nixpacks/Dockerfile {$this->build_args} --progress plain -t {$this->production_image_name} {$this->workdir}";
+ }
+ $base64_build_command = base64_encode($build_command);
+ $this->execute_remote_command(
+ [
+ executeInDocker($this->deployment_uuid, "echo '{$base64_build_command}' | base64 -d | tee /artifacts/build.sh > /dev/null"),
+ 'hidden' => true,
+ ],
+ [
+ executeInDocker($this->deployment_uuid, 'cat /artifacts/build.sh'),
+ 'hidden' => true,
+ ],
+ [
+ executeInDocker($this->deployment_uuid, 'bash /artifacts/build.sh'),
+ 'hidden' => true,
+ ]
+ );
+ $this->execute_remote_command([executeInDocker($this->deployment_uuid, 'rm /artifacts/thegameplan.json'), 'hidden' => true]);
+ } else {
+ if ($this->force_rebuild) {
+ $build_command = "docker build --no-cache {$this->buildTarget} {$this->addHosts} --network host -f {$this->workdir}{$this->dockerfile_location} {$this->build_args} --progress plain -t {$this->production_image_name} {$this->workdir}";
+ $base64_build_command = base64_encode($build_command);
+ } else {
+ $build_command = "docker build {$this->buildTarget} {$this->addHosts} --network host -f {$this->workdir}{$this->dockerfile_location} {$this->build_args} --progress plain -t {$this->production_image_name} {$this->workdir}";
+ $base64_build_command = base64_encode($build_command);
+ }
+ $this->execute_remote_command(
+ [
+ executeInDocker($this->deployment_uuid, "echo '{$base64_build_command}' | base64 -d | tee /artifacts/build.sh > /dev/null"),
+ 'hidden' => true,
+ ],
+ [
+ executeInDocker($this->deployment_uuid, 'cat /artifacts/build.sh'),
+ 'hidden' => true,
+ ],
+ [
+ executeInDocker($this->deployment_uuid, 'bash /artifacts/build.sh'),
+ 'hidden' => true,
+ ]
+ );
}
$this->application_deployment_queue->addLogEntry('Building docker image completed.');
}
@@ -2214,7 +2175,7 @@ COPY ./nginx.conf /etc/nginx/conf.d/default.conf");
["docker kill $containerName", 'hidden' => true, 'ignore_errors' => true]
);
}
- } catch (\Exception $error) {
+ } catch (Exception $error) {
$this->application_deployment_queue->addLogEntry("Error stopping container $containerName: ".$error->getMessage(), 'stderr');
}
@@ -2267,16 +2228,14 @@ COPY ./nginx.conf /etc/nginx/conf.d/default.conf");
[executeInDocker($this->deployment_uuid, "docker compose --project-name {$this->application->uuid} --project-directory {$this->workdir} pull"), 'hidden' => true],
[executeInDocker($this->deployment_uuid, "{$this->coolify_variables} docker compose --project-name {$this->application->uuid} --project-directory {$this->workdir} up --build -d"), 'hidden' => true],
);
+ } elseif ($this->use_build_server) {
+ $this->execute_remote_command(
+ ["{$this->coolify_variables} docker compose --project-name {$this->application->uuid} --project-directory {$this->configuration_dir} -f {$this->configuration_dir}{$this->docker_compose_location} up --build -d", 'hidden' => true],
+ );
} else {
- if ($this->use_build_server) {
- $this->execute_remote_command(
- ["{$this->coolify_variables} docker compose --project-name {$this->application->uuid} --project-directory {$this->configuration_dir} -f {$this->configuration_dir}{$this->docker_compose_location} up --build -d", 'hidden' => true],
- );
- } else {
- $this->execute_remote_command(
- [executeInDocker($this->deployment_uuid, "{$this->coolify_variables} docker compose --project-name {$this->application->uuid} --project-directory {$this->workdir} -f {$this->workdir}{$this->docker_compose_location} up --build -d"), 'hidden' => true],
- );
- }
+ $this->execute_remote_command(
+ [executeInDocker($this->deployment_uuid, "{$this->coolify_variables} docker compose --project-name {$this->application->uuid} --project-directory {$this->workdir} -f {$this->workdir}{$this->docker_compose_location} up --build -d"), 'hidden' => true],
+ );
}
$this->application_deployment_queue->addLogEntry('New container started.');
}
@@ -2398,7 +2357,7 @@ COPY ./nginx.conf /etc/nginx/conf.d/default.conf");
]);
}
if ($this->application_deployment_queue->status === ApplicationDeploymentStatus::FAILED->value) {
- $this->application->environment->project->team?->notify(new DeploymentFailed($this->application, $this->deployment_uuid, $this->preview));
+ $this->application->environment->project->team?->notify(new DeploymentFailed($this->application, $this->deployment_uuid, $this->applicationPreview));
return;
}
@@ -2406,20 +2365,20 @@ COPY ./nginx.conf /etc/nginx/conf.d/default.conf");
if (! $this->only_this_server) {
$this->deploy_to_additional_destinations();
}
- $this->application->environment->project->team?->notify(new DeploymentSuccess($this->application, $this->deployment_uuid, $this->preview));
+ $this->application->environment->project->team?->notify(new DeploymentSuccess($this->application, $this->deployment_uuid, $this->applicationPreview));
}
}
- public function failed(Throwable $exception): void
+ public function failed(Throwable $throwable): void
{
$this->next(ApplicationDeploymentStatus::FAILED->value);
$this->application_deployment_queue->addLogEntry('Oops something is not okay, are you okay? 😢', 'stderr');
- if (str($exception->getMessage())->isNotEmpty()) {
- $this->application_deployment_queue->addLogEntry($exception->getMessage(), 'stderr');
+ if (str($throwable->getMessage())->isNotEmpty()) {
+ $this->application_deployment_queue->addLogEntry($throwable->getMessage(), 'stderr');
}
if ($this->application->build_pack !== 'dockercompose') {
- $code = $exception->getCode();
+ $code = $throwable->getCode();
if ($code !== 69420) {
// 69420 means failed to push the image to the registry, so we don't need to remove the new version as it is the currently running one
if ($this->application->settings->is_consistent_container_name_enabled || str($this->application->settings->custom_internal_name)->isNotEmpty()) {
diff --git a/app/Jobs/ApplicationPullRequestUpdateJob.php b/app/Jobs/ApplicationPullRequestUpdateJob.php
index ef8e6efb6..195f997b6 100755
--- a/app/Jobs/ApplicationPullRequestUpdateJob.php
+++ b/app/Jobs/ApplicationPullRequestUpdateJob.php
@@ -11,6 +11,7 @@ use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
+use Throwable;
class ApplicationPullRequestUpdateJob implements ShouldBeEncrypted, ShouldQueue
{
@@ -22,8 +23,8 @@ class ApplicationPullRequestUpdateJob implements ShouldBeEncrypted, ShouldQueue
public function __construct(
public Application $application,
- public ApplicationPreview $preview,
- public ProcessStatus $status,
+ public ApplicationPreview $applicationPreview,
+ public ProcessStatus $processStatus,
public ?string $deployment_uuid = null
) {
$this->onQueue('high');
@@ -33,39 +34,42 @@ class ApplicationPullRequestUpdateJob implements ShouldBeEncrypted, ShouldQueue
{
try {
if ($this->application->is_public_repository()) {
- return;
+ return null;
}
- if ($this->status === ProcessStatus::CLOSED) {
+ if ($this->processStatus === ProcessStatus::CLOSED) {
$this->delete_comment();
- return;
- } elseif ($this->status === ProcessStatus::IN_PROGRESS) {
+ return null;
+ }
+ if ($this->processStatus === ProcessStatus::IN_PROGRESS) {
$this->body = "The preview deployment is in progress. 🟡\n\n";
- } elseif ($this->status === ProcessStatus::FINISHED) {
+ } elseif ($this->processStatus === ProcessStatus::FINISHED) {
$this->body = "The preview deployment is ready. 🟢\n\n";
- if ($this->preview->fqdn) {
- $this->body .= "[Open Preview]({$this->preview->fqdn}) | ";
+ if ($this->applicationPreview->fqdn) {
+ $this->body .= "[Open Preview]({$this->applicationPreview->fqdn}) | ";
}
- } elseif ($this->status === ProcessStatus::ERROR) {
+ } elseif ($this->processStatus === ProcessStatus::ERROR) {
$this->body = "The preview deployment failed. 🔴\n\n";
}
$this->build_logs_url = base_url()."/project/{$this->application->environment->project->uuid}/{$this->application->environment->name}/application/{$this->application->uuid}/deployment/{$this->deployment_uuid}";
$this->body .= '[Open Build Logs]('.$this->build_logs_url.")\n\n\n";
$this->body .= 'Last updated at: '.now()->toDateTimeString().' CET';
- if ($this->preview->pull_request_issue_comment_id) {
+ if ($this->applicationPreview->pull_request_issue_comment_id) {
$this->update_comment();
} else {
$this->create_comment();
}
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
return $e;
}
+
+ return null;
}
private function update_comment()
{
- ['data' => $data] = githubApi(source: $this->application->source, endpoint: "/repos/{$this->application->git_repository}/issues/comments/{$this->preview->pull_request_issue_comment_id}", method: 'patch', data: [
+ ['data' => $data] = githubApi(source: $this->application->source, endpoint: "/repos/{$this->application->git_repository}/issues/comments/{$this->applicationPreview->pull_request_issue_comment_id}", method: 'patch', data: [
'body' => $this->body,
], throwError: false);
if (data_get($data, 'message') === 'Not Found') {
@@ -75,15 +79,15 @@ class ApplicationPullRequestUpdateJob implements ShouldBeEncrypted, ShouldQueue
private function create_comment()
{
- ['data' => $data] = githubApi(source: $this->application->source, endpoint: "/repos/{$this->application->git_repository}/issues/{$this->preview->pull_request_id}/comments", method: 'post', data: [
+ ['data' => $data] = githubApi(source: $this->application->source, endpoint: "/repos/{$this->application->git_repository}/issues/{$this->applicationPreview->pull_request_id}/comments", method: 'post', data: [
'body' => $this->body,
]);
- $this->preview->pull_request_issue_comment_id = $data['id'];
- $this->preview->save();
+ $this->applicationPreview->pull_request_issue_comment_id = $data['id'];
+ $this->applicationPreview->save();
}
private function delete_comment()
{
- githubApi(source: $this->application->source, endpoint: "/repos/{$this->application->git_repository}/issues/comments/{$this->preview->pull_request_issue_comment_id}", method: 'delete');
+ githubApi(source: $this->application->source, endpoint: "/repos/{$this->application->git_repository}/issues/comments/{$this->applicationPreview->pull_request_issue_comment_id}", method: 'delete');
}
}
diff --git a/app/Jobs/CheckAndStartSentinelJob.php b/app/Jobs/CheckAndStartSentinelJob.php
index 788db89ea..37d669d23 100644
--- a/app/Jobs/CheckAndStartSentinelJob.php
+++ b/app/Jobs/CheckAndStartSentinelJob.php
@@ -34,19 +34,18 @@ class CheckAndStartSentinelJob implements ShouldBeEncrypted, ShouldQueue
}
// If sentinel is running, check if it needs an update
$runningVersion = instant_remote_process(['docker exec coolify-sentinel sh -c "curl http://127.0.0.1:8888/api/version"'], $this->server, false);
- if (empty($runningVersion)) {
+ if ($runningVersion === null || $runningVersion === '' || $runningVersion === '0') {
$runningVersion = '0.0.0';
}
if ($latestVersion === '0.0.0' && $runningVersion === '0.0.0') {
StartSentinel::run(server: $this->server, restart: true, latestVersion: 'latest');
return;
- } else {
- if (version_compare($runningVersion, $latestVersion, '<')) {
- StartSentinel::run(server: $this->server, restart: true, latestVersion: $latestVersion);
+ }
+ if (version_compare($runningVersion, $latestVersion, '<')) {
+ StartSentinel::run(server: $this->server, restart: true, latestVersion: $latestVersion);
- return;
- }
+ return;
}
}
}
diff --git a/app/Jobs/CheckForUpdatesJob.php b/app/Jobs/CheckForUpdatesJob.php
index 1d3a345e1..2995dad02 100644
--- a/app/Jobs/CheckForUpdatesJob.php
+++ b/app/Jobs/CheckForUpdatesJob.php
@@ -10,6 +10,7 @@ use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
use Illuminate\Support\Facades\File;
use Illuminate\Support\Facades\Http;
+use Throwable;
class CheckForUpdatesJob implements ShouldBeEncrypted, ShouldQueue
{
@@ -37,7 +38,7 @@ class CheckForUpdatesJob implements ShouldBeEncrypted, ShouldQueue
$settings->update(['new_version_available' => false]);
}
}
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
// Consider implementing a notification to administrators
}
}
diff --git a/app/Jobs/CheckHelperImageJob.php b/app/Jobs/CheckHelperImageJob.php
index 6abb8a150..5269e2d22 100644
--- a/app/Jobs/CheckHelperImageJob.php
+++ b/app/Jobs/CheckHelperImageJob.php
@@ -9,6 +9,7 @@ use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
use Illuminate\Support\Facades\Http;
+use Throwable;
class CheckHelperImageJob implements ShouldBeEncrypted, ShouldQueue
{
@@ -16,8 +17,6 @@ class CheckHelperImageJob implements ShouldBeEncrypted, ShouldQueue
public $timeout = 1000;
- public function __construct() {}
-
public function handle(): void
{
try {
@@ -31,7 +30,7 @@ class CheckHelperImageJob implements ShouldBeEncrypted, ShouldQueue
$settings->update(['helper_version' => $latest_version]);
}
}
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
send_internal_notification('CheckHelperImageJob failed with: '.$e->getMessage());
throw $e;
}
diff --git a/app/Jobs/CleanupHelperContainersJob.php b/app/Jobs/CleanupHelperContainersJob.php
index f185ab781..f3a081d2b 100644
--- a/app/Jobs/CleanupHelperContainersJob.php
+++ b/app/Jobs/CleanupHelperContainersJob.php
@@ -10,6 +10,7 @@ use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
+use Throwable;
class CleanupHelperContainersJob implements ShouldBeEncrypted, ShouldBeUnique, ShouldQueue
{
@@ -27,7 +28,7 @@ class CleanupHelperContainersJob implements ShouldBeEncrypted, ShouldBeUnique, S
instant_remote_process(['docker container rm -f '.$containerId], $this->server, false);
}
}
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
send_internal_notification('CleanupHelperContainersJob failed with error: '.$e->getMessage());
}
}
diff --git a/app/Jobs/CleanupInstanceStuffsJob.php b/app/Jobs/CleanupInstanceStuffsJob.php
index 84f14ed02..35db94294 100644
--- a/app/Jobs/CleanupInstanceStuffsJob.php
+++ b/app/Jobs/CleanupInstanceStuffsJob.php
@@ -12,13 +12,12 @@ use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\Middleware\WithoutOverlapping;
use Illuminate\Queue\SerializesModels;
use Illuminate\Support\Facades\Log;
+use Throwable;
class CleanupInstanceStuffsJob implements ShouldBeEncrypted, ShouldBeUnique, ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
- public function __construct() {}
-
public function middleware(): array
{
return [(new WithoutOverlapping('cleanup-instance-stuffs'))->dontRelease()];
@@ -28,7 +27,7 @@ class CleanupInstanceStuffsJob implements ShouldBeEncrypted, ShouldBeUnique, Sho
{
try {
$this->cleanupInvitationLink();
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
Log::error('CleanupInstanceStuffsJob failed with error: '.$e->getMessage());
}
}
diff --git a/app/Jobs/CleanupStaleMultiplexedConnections.php b/app/Jobs/CleanupStaleMultiplexedConnections.php
index 6d49bee4b..126adf37e 100644
--- a/app/Jobs/CleanupStaleMultiplexedConnections.php
+++ b/app/Jobs/CleanupStaleMultiplexedConnections.php
@@ -28,7 +28,7 @@ class CleanupStaleMultiplexedConnections implements ShouldQueue
foreach ($muxFiles as $muxFile) {
$serverUuid = $this->extractServerUuidFromMuxFile($muxFile);
- $server = Server::where('uuid', $serverUuid)->first();
+ $server = Server::query()->where('uuid', $serverUuid)->first();
if (! $server) {
$this->removeMultiplexFile($muxFile);
@@ -57,7 +57,7 @@ class CleanupStaleMultiplexedConnections implements ShouldQueue
private function cleanupNonExistentServerConnections()
{
$muxFiles = Storage::disk('ssh-mux')->files();
- $existingServerUuids = Server::pluck('uuid')->toArray();
+ $existingServerUuids = Server::query()->pluck('uuid')->toArray();
foreach ($muxFiles as $muxFile) {
$serverUuid = $this->extractServerUuidFromMuxFile($muxFile);
diff --git a/app/Jobs/CoolifyTask.php b/app/Jobs/CoolifyTask.php
index 49a5ba8dd..ba63ffdc0 100755
--- a/app/Jobs/CoolifyTask.php
+++ b/app/Jobs/CoolifyTask.php
@@ -33,13 +33,13 @@ class CoolifyTask implements ShouldBeEncrypted, ShouldQueue
*/
public function handle(): void
{
- $remote_process = resolve(RunRemoteProcess::class, [
+ $runRemoteProcess = resolve(RunRemoteProcess::class, [
'activity' => $this->activity,
'ignore_errors' => $this->ignore_errors,
'call_event_on_finish' => $this->call_event_on_finish,
'call_event_data' => $this->call_event_data,
]);
- $remote_process();
+ $runRemoteProcess();
}
}
diff --git a/app/Jobs/DatabaseBackupJob.php b/app/Jobs/DatabaseBackupJob.php
index 6730dceb7..5fc602c6e 100644
--- a/app/Jobs/DatabaseBackupJob.php
+++ b/app/Jobs/DatabaseBackupJob.php
@@ -16,6 +16,7 @@ use App\Models\Team;
use App\Notifications\Database\BackupFailed;
use App\Notifications\Database\BackupSuccess;
use Carbon\Carbon;
+use Exception;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldBeEncrypted;
use Illuminate\Contracts\Queue\ShouldQueue;
@@ -23,6 +24,7 @@ use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
use Illuminate\Support\Str;
+use Throwable;
class DatabaseBackupJob implements ShouldBeEncrypted, ShouldQueue
{
@@ -56,7 +58,7 @@ class DatabaseBackupJob implements ShouldBeEncrypted, ShouldQueue
public ?S3Storage $s3 = null;
- public function __construct(public ScheduledDatabaseBackup $backup)
+ public function __construct(public ScheduledDatabaseBackup $scheduledDatabaseBackup)
{
$this->onQueue('high');
}
@@ -66,26 +68,26 @@ class DatabaseBackupJob implements ShouldBeEncrypted, ShouldQueue
try {
$databasesToBackup = null;
- $this->team = Team::find($this->backup->team_id);
+ $this->team = Team::query()->find($this->scheduledDatabaseBackup->team_id);
if (! $this->team) {
- $this->backup->delete();
+ $this->scheduledDatabaseBackup->delete();
return;
}
- if (data_get($this->backup, 'database_type') === \App\Models\ServiceDatabase::class) {
- $this->database = data_get($this->backup, 'database');
+ if (data_get($this->scheduledDatabaseBackup, 'database_type') === ServiceDatabase::class) {
+ $this->database = data_get($this->scheduledDatabaseBackup, 'database');
$this->server = $this->database->service->server;
- $this->s3 = $this->backup->s3;
+ $this->s3 = $this->scheduledDatabaseBackup->s3;
} else {
- $this->database = data_get($this->backup, 'database');
+ $this->database = data_get($this->scheduledDatabaseBackup, 'database');
$this->server = $this->database->destination->server;
- $this->s3 = $this->backup->s3;
+ $this->s3 = $this->scheduledDatabaseBackup->s3;
}
if (is_null($this->server)) {
- throw new \Exception('Server not found?!');
+ throw new Exception('Server not found?!');
}
if (is_null($this->database)) {
- throw new \Exception('Database not found?!');
+ throw new Exception('Database not found?!');
}
BackupCreated::dispatch($this->team->id);
@@ -94,7 +96,7 @@ class DatabaseBackupJob implements ShouldBeEncrypted, ShouldQueue
if (! $status->startsWith('running') && $this->database->id !== 0) {
return;
}
- if (data_get($this->backup, 'database_type') === \App\Models\ServiceDatabase::class) {
+ if (data_get($this->scheduledDatabaseBackup, 'database_type') === ServiceDatabase::class) {
$databaseType = $this->database->databaseType();
$serviceUuid = $this->database->service->uuid;
$serviceName = str($this->database->service->name)->slug();
@@ -108,21 +110,13 @@ class DatabaseBackupJob implements ShouldBeEncrypted, ShouldQueue
$user = $envs->filter(function ($env) {
return str($env)->startsWith('POSTGRES_USER=');
})->first();
- if ($user) {
- $this->database->postgres_user = str($user)->after('POSTGRES_USER=')->value();
- } else {
- $this->database->postgres_user = 'postgres';
- }
+ $this->database->postgres_user = $user ? str($user)->after('POSTGRES_USER=')->value() : 'postgres';
$db = $envs->filter(function ($env) {
return str($env)->startsWith('POSTGRES_DB=');
})->first();
- if ($db) {
- $databasesToBackup = str($db)->after('POSTGRES_DB=')->value();
- } else {
- $databasesToBackup = $this->database->postgres_user;
- }
+ $databasesToBackup = $db ? str($db)->after('POSTGRES_DB=')->value() : $this->database->postgres_user;
$this->postgres_password = $envs->filter(function ($env) {
return str($env)->startsWith('POSTGRES_PASSWORD=');
})->first();
@@ -150,7 +144,7 @@ class DatabaseBackupJob implements ShouldBeEncrypted, ShouldQueue
if ($db) {
$databasesToBackup = str($db)->after('MYSQL_DATABASE=')->value();
} else {
- throw new \Exception('MYSQL_DATABASE not found');
+ throw new Exception('MYSQL_DATABASE not found');
}
} elseif (str($databaseType)->contains('mariadb')) {
$this->container_name = "{$this->database->name}-$serviceUuid";
@@ -186,7 +180,7 @@ class DatabaseBackupJob implements ShouldBeEncrypted, ShouldQueue
if ($db) {
$databasesToBackup = str($db)->after('MYSQL_DATABASE=')->value();
} else {
- throw new \Exception('MARIADB_DATABASE or MYSQL_DATABASE not found');
+ throw new Exception('MARIADB_DATABASE or MYSQL_DATABASE not found');
}
}
}
@@ -195,7 +189,7 @@ class DatabaseBackupJob implements ShouldBeEncrypted, ShouldQueue
$this->container_name = $this->database->uuid;
$this->directory_name = $databaseName.'-'.$this->container_name;
$databaseType = $this->database->type();
- $databasesToBackup = data_get($this->backup, 'databases_to_backup');
+ $databasesToBackup = data_get($this->scheduledDatabaseBackup, 'databases_to_backup');
}
if (blank($databasesToBackup)) {
if (str($databaseType)->contains('postgres')) {
@@ -209,26 +203,24 @@ class DatabaseBackupJob implements ShouldBeEncrypted, ShouldQueue
} else {
return;
}
+ } elseif (str($databaseType)->contains('postgres')) {
+ // Format: db1,db2,db3
+ $databasesToBackup = explode(',', $databasesToBackup);
+ $databasesToBackup = array_map('trim', $databasesToBackup);
+ } elseif (str($databaseType)->contains('mongodb')) {
+ // Format: db1:collection1,collection2|db2:collection3,collection4
+ $databasesToBackup = explode('|', $databasesToBackup);
+ $databasesToBackup = array_map('trim', $databasesToBackup);
+ } elseif (str($databaseType)->contains('mysql')) {
+ // Format: db1,db2,db3
+ $databasesToBackup = explode(',', $databasesToBackup);
+ $databasesToBackup = array_map('trim', $databasesToBackup);
+ } elseif (str($databaseType)->contains('mariadb')) {
+ // Format: db1,db2,db3
+ $databasesToBackup = explode(',', $databasesToBackup);
+ $databasesToBackup = array_map('trim', $databasesToBackup);
} else {
- if (str($databaseType)->contains('postgres')) {
- // Format: db1,db2,db3
- $databasesToBackup = explode(',', $databasesToBackup);
- $databasesToBackup = array_map('trim', $databasesToBackup);
- } elseif (str($databaseType)->contains('mongodb')) {
- // Format: db1:collection1,collection2|db2:collection3,collection4
- $databasesToBackup = explode('|', $databasesToBackup);
- $databasesToBackup = array_map('trim', $databasesToBackup);
- } elseif (str($databaseType)->contains('mysql')) {
- // Format: db1,db2,db3
- $databasesToBackup = explode(',', $databasesToBackup);
- $databasesToBackup = array_map('trim', $databasesToBackup);
- } elseif (str($databaseType)->contains('mariadb')) {
- // Format: db1,db2,db3
- $databasesToBackup = explode(',', $databasesToBackup);
- $databasesToBackup = array_map('trim', $databasesToBackup);
- } else {
- return;
- }
+ return;
}
$this->backup_dir = backup_dir().'/databases/'.str($this->team->name)->slug().'-'.$this->team->id.'/'.$this->directory_name;
if ($this->database->name === 'coolify-db') {
@@ -237,82 +229,80 @@ class DatabaseBackupJob implements ShouldBeEncrypted, ShouldQueue
$ip = Str::slug($this->server->ip);
$this->backup_dir = backup_dir().'/coolify'."/coolify-db-$ip";
}
- foreach ($databasesToBackup as $database) {
+ foreach ($databasesToBackup as $databaseToBackup) {
$size = 0;
try {
if (str($databaseType)->contains('postgres')) {
- $this->backup_file = "/pg-dump-$database-".Carbon::now()->timestamp.'.dmp';
- if ($this->backup->dump_all) {
+ $this->backup_file = "/pg-dump-{$databaseToBackup}-".Carbon::now()->timestamp.'.dmp';
+ if ($this->scheduledDatabaseBackup->dump_all) {
$this->backup_file = '/pg-dump-all-'.Carbon::now()->timestamp.'.gz';
}
$this->backup_location = $this->backup_dir.$this->backup_file;
- $this->backup_log = ScheduledDatabaseBackupExecution::create([
- 'database_name' => $database,
+ $this->backup_log = ScheduledDatabaseBackupExecution::query()->create([
+ 'database_name' => $databaseToBackup,
'filename' => $this->backup_location,
- 'scheduled_database_backup_id' => $this->backup->id,
+ 'scheduled_database_backup_id' => $this->scheduledDatabaseBackup->id,
]);
- $this->backup_standalone_postgresql($database);
+ $this->backup_standalone_postgresql($databaseToBackup);
} elseif (str($databaseType)->contains('mongodb')) {
- if ($database === '*') {
- $database = 'all';
+ if ($databaseToBackup === '*') {
+ $databaseToBackup = 'all';
$databaseName = 'all';
+ } elseif (str($databaseToBackup)->contains(':')) {
+ $databaseName = str($databaseToBackup)->before(':');
} else {
- if (str($database)->contains(':')) {
- $databaseName = str($database)->before(':');
- } else {
- $databaseName = $database;
- }
+ $databaseName = $databaseToBackup;
}
$this->backup_file = "/mongo-dump-$databaseName-".Carbon::now()->timestamp.'.tar.gz';
$this->backup_location = $this->backup_dir.$this->backup_file;
- $this->backup_log = ScheduledDatabaseBackupExecution::create([
+ $this->backup_log = ScheduledDatabaseBackupExecution::query()->create([
'database_name' => $databaseName,
'filename' => $this->backup_location,
- 'scheduled_database_backup_id' => $this->backup->id,
+ 'scheduled_database_backup_id' => $this->scheduledDatabaseBackup->id,
]);
- $this->backup_standalone_mongodb($database);
+ $this->backup_standalone_mongodb($databaseToBackup);
} elseif (str($databaseType)->contains('mysql')) {
- $this->backup_file = "/mysql-dump-$database-".Carbon::now()->timestamp.'.dmp';
- if ($this->backup->dump_all) {
+ $this->backup_file = "/mysql-dump-{$databaseToBackup}-".Carbon::now()->timestamp.'.dmp';
+ if ($this->scheduledDatabaseBackup->dump_all) {
$this->backup_file = '/mysql-dump-all-'.Carbon::now()->timestamp.'.gz';
}
$this->backup_location = $this->backup_dir.$this->backup_file;
- $this->backup_log = ScheduledDatabaseBackupExecution::create([
- 'database_name' => $database,
+ $this->backup_log = ScheduledDatabaseBackupExecution::query()->create([
+ 'database_name' => $databaseToBackup,
'filename' => $this->backup_location,
- 'scheduled_database_backup_id' => $this->backup->id,
+ 'scheduled_database_backup_id' => $this->scheduledDatabaseBackup->id,
]);
- $this->backup_standalone_mysql($database);
+ $this->backup_standalone_mysql($databaseToBackup);
} elseif (str($databaseType)->contains('mariadb')) {
- $this->backup_file = "/mariadb-dump-$database-".Carbon::now()->timestamp.'.dmp';
- if ($this->backup->dump_all) {
+ $this->backup_file = "/mariadb-dump-{$databaseToBackup}-".Carbon::now()->timestamp.'.dmp';
+ if ($this->scheduledDatabaseBackup->dump_all) {
$this->backup_file = '/mariadb-dump-all-'.Carbon::now()->timestamp.'.gz';
}
$this->backup_location = $this->backup_dir.$this->backup_file;
- $this->backup_log = ScheduledDatabaseBackupExecution::create([
- 'database_name' => $database,
+ $this->backup_log = ScheduledDatabaseBackupExecution::query()->create([
+ 'database_name' => $databaseToBackup,
'filename' => $this->backup_location,
- 'scheduled_database_backup_id' => $this->backup->id,
+ 'scheduled_database_backup_id' => $this->scheduledDatabaseBackup->id,
]);
- $this->backup_standalone_mariadb($database);
+ $this->backup_standalone_mariadb($databaseToBackup);
} else {
- throw new \Exception('Unsupported database type');
+ throw new Exception('Unsupported database type');
}
$size = $this->calculate_size();
$this->remove_old_backups();
- if ($this->backup->save_s3) {
+ if ($this->scheduledDatabaseBackup->save_s3) {
$this->upload_to_s3();
}
- $this->team->notify(new BackupSuccess($this->backup, $this->database, $database));
+ $this->team->notify(new BackupSuccess($this->scheduledDatabaseBackup, $this->database, $databaseToBackup));
$this->backup_log->update([
'status' => 'success',
'message' => $this->backup_output,
'size' => $size,
]);
- } catch (\Throwable $e) {
- if ($this->backup_log) {
+ } catch (Throwable $e) {
+ if ($this->backup_log instanceof ScheduledDatabaseBackupExecution) {
$this->backup_log->update([
'status' => 'failed',
'message' => $this->backup_output,
@@ -320,13 +310,13 @@ class DatabaseBackupJob implements ShouldBeEncrypted, ShouldQueue
'filename' => null,
]);
}
- $this->team?->notify(new BackupFailed($this->backup, $this->database, $this->backup_output, $database));
+ $this->team?->notify(new BackupFailed($this->scheduledDatabaseBackup, $this->database, $this->backup_output, $databaseToBackup));
}
}
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
throw $e;
} finally {
- if ($this->team) {
+ if ($this->team instanceof Team) {
BackupCreated::dispatch($this->team->id);
}
}
@@ -358,12 +348,10 @@ class DatabaseBackupJob implements ShouldBeEncrypted, ShouldQueue
} else {
$commands[] = "docker exec $this->container_name mongodump --authenticationDatabase=admin --uri=$url --db $databaseName --gzip --archive > $this->backup_location";
}
+ } elseif (str($this->database->image)->startsWith('mongo:4')) {
+ $commands[] = "docker exec $this->container_name mongodump --uri=$url --gzip --excludeCollection ".$collectionsToExclude->implode(' --excludeCollection ')." --archive > $this->backup_location";
} else {
- if (str($this->database->image)->startsWith('mongo:4')) {
- $commands[] = "docker exec $this->container_name mongodump --uri=$url --gzip --excludeCollection ".$collectionsToExclude->implode(' --excludeCollection ')." --archive > $this->backup_location";
- } else {
- $commands[] = "docker exec $this->container_name mongodump --authenticationDatabase=admin --uri=$url --db $databaseName --gzip --excludeCollection ".$collectionsToExclude->implode(' --excludeCollection ')." --archive > $this->backup_location";
- }
+ $commands[] = "docker exec $this->container_name mongodump --authenticationDatabase=admin --uri=$url --db $databaseName --gzip --excludeCollection ".$collectionsToExclude->implode(' --excludeCollection ')." --archive > $this->backup_location";
}
}
$this->backup_output = instant_remote_process($commands, $this->server);
@@ -371,7 +359,7 @@ class DatabaseBackupJob implements ShouldBeEncrypted, ShouldQueue
if ($this->backup_output === '') {
$this->backup_output = null;
}
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
$this->add_to_backup_output($e->getMessage());
throw $e;
}
@@ -385,7 +373,7 @@ class DatabaseBackupJob implements ShouldBeEncrypted, ShouldQueue
if ($this->postgres_password) {
$backupCommand .= " -e PGPASSWORD=$this->postgres_password";
}
- if ($this->backup->dump_all) {
+ if ($this->scheduledDatabaseBackup->dump_all) {
$backupCommand .= " $this->container_name pg_dumpall --username {$this->database->postgres_user} | gzip > $this->backup_location";
} else {
$backupCommand .= " $this->container_name pg_dump --format=custom --no-acl --no-owner --username {$this->database->postgres_user} $database > $this->backup_location";
@@ -397,7 +385,7 @@ class DatabaseBackupJob implements ShouldBeEncrypted, ShouldQueue
if ($this->backup_output === '') {
$this->backup_output = null;
}
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
$this->add_to_backup_output($e->getMessage());
throw $e;
}
@@ -407,7 +395,7 @@ class DatabaseBackupJob implements ShouldBeEncrypted, ShouldQueue
{
try {
$commands[] = 'mkdir -p '.$this->backup_dir;
- if ($this->backup->dump_all) {
+ if ($this->scheduledDatabaseBackup->dump_all) {
$commands[] = "docker exec $this->container_name mysqldump -u root -p{$this->database->mysql_root_password} --all-databases --single-transaction --quick --lock-tables=false --compress | gzip > $this->backup_location";
} else {
$commands[] = "docker exec $this->container_name mysqldump -u root -p{$this->database->mysql_root_password} $database > $this->backup_location";
@@ -417,7 +405,7 @@ class DatabaseBackupJob implements ShouldBeEncrypted, ShouldQueue
if ($this->backup_output === '') {
$this->backup_output = null;
}
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
$this->add_to_backup_output($e->getMessage());
throw $e;
}
@@ -427,7 +415,7 @@ class DatabaseBackupJob implements ShouldBeEncrypted, ShouldQueue
{
try {
$commands[] = 'mkdir -p '.$this->backup_dir;
- if ($this->backup->dump_all) {
+ if ($this->scheduledDatabaseBackup->dump_all) {
$commands[] = "docker exec $this->container_name mariadb-dump -u root -p{$this->database->mariadb_root_password} --all-databases --single-transaction --quick --lock-tables=false --compress > $this->backup_location";
} else {
$commands[] = "docker exec $this->container_name mariadb-dump -u root -p{$this->database->mariadb_root_password} $database > $this->backup_location";
@@ -437,7 +425,7 @@ class DatabaseBackupJob implements ShouldBeEncrypted, ShouldQueue
if ($this->backup_output === '') {
$this->backup_output = null;
}
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
$this->add_to_backup_output($e->getMessage());
throw $e;
}
@@ -445,11 +433,7 @@ class DatabaseBackupJob implements ShouldBeEncrypted, ShouldQueue
private function add_to_backup_output($output): void
{
- if ($this->backup_output) {
- $this->backup_output = $this->backup_output."\n".$output;
- } else {
- $this->backup_output = $output;
- }
+ $this->backup_output = $this->backup_output ? $this->backup_output."\n".$output : $output;
}
private function calculate_size()
@@ -459,10 +443,10 @@ class DatabaseBackupJob implements ShouldBeEncrypted, ShouldQueue
private function remove_old_backups(): void
{
- if ($this->backup->number_of_backups_locally === 0) {
- $deletable = $this->backup->executions()->where('status', 'success');
+ if ($this->scheduledDatabaseBackup->number_of_backups_locally === 0) {
+ $deletable = $this->scheduledDatabaseBackup->executions()->where('status', 'success');
} else {
- $deletable = $this->backup->executions()->where('status', 'success')->skip($this->backup->number_of_backups_locally - 1);
+ $deletable = $this->scheduledDatabaseBackup->executions()->where('status', 'success')->skip($this->scheduledDatabaseBackup->number_of_backups_locally - 1);
}
foreach ($deletable->get() as $execution) {
delete_backup_locally($execution->filename, $this->server);
@@ -482,7 +466,7 @@ class DatabaseBackupJob implements ShouldBeEncrypted, ShouldQueue
$bucket = $this->s3->bucket;
$endpoint = $this->s3->endpoint;
$this->s3->testConnection(shouldSave: true);
- if (data_get($this->backup, 'database_type') === \App\Models\ServiceDatabase::class) {
+ if (data_get($this->scheduledDatabaseBackup, 'database_type') === ServiceDatabase::class) {
$network = $this->database->service->destination->network;
} else {
$network = $this->database->destination->network;
@@ -493,29 +477,29 @@ class DatabaseBackupJob implements ShouldBeEncrypted, ShouldQueue
if (isDev()) {
if ($this->database->name === 'coolify-db') {
$backup_location_from = '/var/lib/docker/volumes/coolify_dev_backups_data/_data/coolify/coolify-db-'.$this->server->ip.$this->backup_file;
- $commands[] = "docker run -d --network {$network} --name backup-of-{$this->backup->uuid} --rm -v $backup_location_from:$this->backup_location:ro {$fullImageName}";
+ $commands[] = "docker run -d --network {$network} --name backup-of-{$this->scheduledDatabaseBackup->uuid} --rm -v $backup_location_from:$this->backup_location:ro {$fullImageName}";
} else {
$backup_location_from = '/var/lib/docker/volumes/coolify_dev_backups_data/_data/databases/'.str($this->team->name)->slug().'-'.$this->team->id.'/'.$this->directory_name.$this->backup_file;
- $commands[] = "docker run -d --network {$network} --name backup-of-{$this->backup->uuid} --rm -v $backup_location_from:$this->backup_location:ro {$fullImageName}";
+ $commands[] = "docker run -d --network {$network} --name backup-of-{$this->scheduledDatabaseBackup->uuid} --rm -v $backup_location_from:$this->backup_location:ro {$fullImageName}";
}
} else {
- $commands[] = "docker run -d --network {$network} --name backup-of-{$this->backup->uuid} --rm -v $this->backup_location:$this->backup_location:ro {$fullImageName}";
+ $commands[] = "docker run -d --network {$network} --name backup-of-{$this->scheduledDatabaseBackup->uuid} --rm -v $this->backup_location:$this->backup_location:ro {$fullImageName}";
}
if ($this->s3->isHetzner()) {
$endpointWithoutBucket = 'https://'.str($endpoint)->after('https://')->after('.')->value();
- $commands[] = "docker exec backup-of-{$this->backup->uuid} mc alias set --path=off --api=S3v4 temporary {$endpointWithoutBucket} $key $secret";
+ $commands[] = "docker exec backup-of-{$this->scheduledDatabaseBackup->uuid} mc alias set --path=off --api=S3v4 temporary {$endpointWithoutBucket} $key $secret";
} else {
- $commands[] = "docker exec backup-of-{$this->backup->uuid} mc config host add temporary {$endpoint} $key $secret";
+ $commands[] = "docker exec backup-of-{$this->scheduledDatabaseBackup->uuid} mc config host add temporary {$endpoint} $key $secret";
}
- $commands[] = "docker exec backup-of-{$this->backup->uuid} mc cp $this->backup_location temporary/$bucket{$this->backup_dir}/";
+ $commands[] = "docker exec backup-of-{$this->scheduledDatabaseBackup->uuid} mc cp $this->backup_location temporary/$bucket{$this->backup_dir}/";
instant_remote_process($commands, $this->server);
$this->add_to_backup_output('Uploaded to S3.');
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
$this->add_to_backup_output($e->getMessage());
throw $e;
} finally {
- $command = "docker rm -f backup-of-{$this->backup->uuid}";
+ $command = "docker rm -f backup-of-{$this->scheduledDatabaseBackup->uuid}";
instant_remote_process([$command], $this->server);
}
}
diff --git a/app/Jobs/DeleteResourceJob.php b/app/Jobs/DeleteResourceJob.php
index 8b9228e5f..b8fe20f68 100644
--- a/app/Jobs/DeleteResourceJob.php
+++ b/app/Jobs/DeleteResourceJob.php
@@ -24,6 +24,7 @@ use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
use Illuminate\Support\Facades\Artisan;
+use Throwable;
class DeleteResourceJob implements ShouldBeEncrypted, ShouldQueue
{
@@ -80,7 +81,7 @@ class DeleteResourceJob implements ShouldBeEncrypted, ShouldQueue
|| $this->resource instanceof StandaloneKeydb
|| $this->resource instanceof StandaloneDragonfly
|| $this->resource instanceof StandaloneClickhouse;
- $server = data_get($this->resource, 'server') ?? data_get($this->resource, 'destination.server');
+ $server = data_get($this->resource, 'server', data_get($this->resource, 'destination.server'));
if (($this->dockerCleanup || $isDatabase) && $server) {
CleanupDocker::dispatch($server, true);
}
@@ -88,7 +89,7 @@ class DeleteResourceJob implements ShouldBeEncrypted, ShouldQueue
if ($this->deleteConnectedNetworks && ! $isDatabase) {
$this->resource?->delete_connected_networks($this->resource->uuid);
}
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
throw $e;
} finally {
$this->resource->forceDelete();
diff --git a/app/Jobs/DockerCleanupJob.php b/app/Jobs/DockerCleanupJob.php
index 103c137b9..03db12027 100644
--- a/app/Jobs/DockerCleanupJob.php
+++ b/app/Jobs/DockerCleanupJob.php
@@ -13,6 +13,7 @@ use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\Middleware\WithoutOverlapping;
use Illuminate\Queue\SerializesModels;
+use Throwable;
class DockerCleanupJob implements ShouldBeEncrypted, ShouldQueue
{
@@ -66,7 +67,7 @@ class DockerCleanupJob implements ShouldBeEncrypted, ShouldQueue
} else {
$this->server->team?->notify(new DockerCleanupSuccess($this->server, 'No cleanup needed for '.$this->server->name));
}
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
$this->server->team?->notify(new DockerCleanupFailed($this->server, 'Docker cleanup job failed with the following error: '.$e->getMessage()));
throw $e;
}
diff --git a/app/Jobs/GithubAppPermissionJob.php b/app/Jobs/GithubAppPermissionJob.php
index d483fe4c2..95f4911ae 100644
--- a/app/Jobs/GithubAppPermissionJob.php
+++ b/app/Jobs/GithubAppPermissionJob.php
@@ -10,6 +10,7 @@ use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
use Illuminate\Support\Facades\Http;
+use Throwable;
class GithubAppPermissionJob implements ShouldBeEncrypted, ShouldQueue
{
@@ -22,25 +23,25 @@ class GithubAppPermissionJob implements ShouldBeEncrypted, ShouldQueue
return isDev() ? 1 : 3;
}
- public function __construct(public GithubApp $github_app) {}
+ public function __construct(public GithubApp $githubApp) {}
public function handle()
{
try {
- $github_access_token = generate_github_jwt_token($this->github_app);
+ $github_access_token = generate_github_jwt_token($this->githubApp);
$response = Http::withHeaders([
'Authorization' => "Bearer $github_access_token",
'Accept' => 'application/vnd.github+json',
- ])->get("{$this->github_app->api_url}/app");
+ ])->get("{$this->githubApp->api_url}/app");
$response = $response->json();
$permissions = data_get($response, 'permissions');
- $this->github_app->contents = data_get($permissions, 'contents');
- $this->github_app->metadata = data_get($permissions, 'metadata');
- $this->github_app->pull_requests = data_get($permissions, 'pull_requests');
- $this->github_app->administration = data_get($permissions, 'administration');
- $this->github_app->save();
- $this->github_app->makeVisible('client_secret')->makeVisible('webhook_secret');
- } catch (\Throwable $e) {
+ $this->githubApp->contents = data_get($permissions, 'contents');
+ $this->githubApp->metadata = data_get($permissions, 'metadata');
+ $this->githubApp->pull_requests = data_get($permissions, 'pull_requests');
+ $this->githubApp->administration = data_get($permissions, 'administration');
+ $this->githubApp->save();
+ $this->githubApp->makeVisible('client_secret')->makeVisible('webhook_secret');
+ } catch (Throwable $e) {
send_internal_notification('GithubAppPermissionJob failed with: '.$e->getMessage());
throw $e;
}
diff --git a/app/Jobs/PullTemplatesFromCDN.php b/app/Jobs/PullTemplatesFromCDN.php
index 45c536e06..1c82b2718 100644
--- a/app/Jobs/PullTemplatesFromCDN.php
+++ b/app/Jobs/PullTemplatesFromCDN.php
@@ -10,6 +10,7 @@ use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
use Illuminate\Support\Facades\File;
use Illuminate\Support\Facades\Http;
+use Throwable;
class PullTemplatesFromCDN implements ShouldBeEncrypted, ShouldQueue
{
@@ -35,7 +36,7 @@ class PullTemplatesFromCDN implements ShouldBeEncrypted, ShouldQueue
} else {
send_internal_notification('PullTemplatesAndVersions failed with: '.$response->status().' '.$response->body());
}
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
send_internal_notification('PullTemplatesAndVersions failed with: '.$e->getMessage());
}
}
diff --git a/app/Jobs/PushServerUpdateJob.php b/app/Jobs/PushServerUpdateJob.php
index 24f8d1e6b..7c7b39be9 100644
--- a/app/Jobs/PushServerUpdateJob.php
+++ b/app/Jobs/PushServerUpdateJob.php
@@ -14,6 +14,7 @@ use App\Models\Server;
use App\Models\ServiceApplication;
use App\Models\ServiceDatabase;
use App\Notifications\Container\ContainerRestarted;
+use Exception;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldBeEncrypted;
use Illuminate\Contracts\Queue\ShouldQueue;
@@ -21,6 +22,7 @@ use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
use Illuminate\Support\Collection;
+use Throwable;
class PushServerUpdateJob implements ShouldBeEncrypted, ShouldQueue
{
@@ -92,7 +94,7 @@ class PushServerUpdateJob implements ShouldBeEncrypted, ShouldQueue
{
// TODO: Swarm is not supported yet
if (! $this->data) {
- throw new \Exception('No data provided');
+ throw new Exception('No data provided');
}
$data = collect($this->data);
@@ -154,7 +156,7 @@ class PushServerUpdateJob implements ShouldBeEncrypted, ShouldQueue
}
$this->updateApplicationPreviewStatus($applicationId, $containerStatus);
}
- } catch (\Exception $e) {
+ } catch (Exception $e) {
}
} elseif ($labels->has('coolify.serviceId')) {
$serviceId = $labels->get('coolify.serviceId');
@@ -173,14 +175,12 @@ class PushServerUpdateJob implements ShouldBeEncrypted, ShouldQueue
if ($name === 'coolify-proxy' && $this->isRunning($containerStatus)) {
$this->foundProxy = true;
} elseif ($type === 'service' && $this->isRunning($containerStatus)) {
- } else {
- if ($this->allDatabaseUuids->contains($uuid) && $this->isRunning($containerStatus)) {
- $this->foundDatabaseUuids->push($uuid);
- if ($this->allTcpProxyUuids->contains($uuid) && $this->isRunning($containerStatus)) {
- $this->updateDatabaseStatus($uuid, $containerStatus, tcpProxy: true);
- } else {
- $this->updateDatabaseStatus($uuid, $containerStatus, tcpProxy: false);
- }
+ } elseif ($this->allDatabaseUuids->contains($uuid) && $this->isRunning($containerStatus)) {
+ $this->foundDatabaseUuids->push($uuid);
+ if ($this->allTcpProxyUuids->contains($uuid) && $this->isRunning($containerStatus)) {
+ $this->updateDatabaseStatus($uuid, $containerStatus, tcpProxy: true);
+ } else {
+ $this->updateDatabaseStatus($uuid, $containerStatus, tcpProxy: false);
}
}
}
@@ -224,7 +224,7 @@ class PushServerUpdateJob implements ShouldBeEncrypted, ShouldQueue
$notFoundApplicationIds = $this->allApplicationIds->diff($this->foundApplicationIds);
if ($notFoundApplicationIds->isNotEmpty()) {
$notFoundApplicationIds->each(function ($applicationId) {
- $application = Application::find($applicationId);
+ $application = Application::query()->find($applicationId);
if ($application) {
$application->status = 'exited';
$application->save();
@@ -238,7 +238,7 @@ class PushServerUpdateJob implements ShouldBeEncrypted, ShouldQueue
$notFoundApplicationPreviewsIds = $this->allApplicationPreviewsIds->diff($this->foundApplicationPreviewsIds);
if ($notFoundApplicationPreviewsIds->isNotEmpty()) {
$notFoundApplicationPreviewsIds->each(function ($applicationPreviewId) {
- $applicationPreview = ApplicationPreview::find($applicationPreviewId);
+ $applicationPreview = ApplicationPreview::query()->find($applicationPreviewId);
if ($applicationPreview) {
$applicationPreview->status = 'exited';
$applicationPreview->save();
@@ -257,7 +257,7 @@ class PushServerUpdateJob implements ShouldBeEncrypted, ShouldQueue
StartProxy::run($this->server, false);
$this->server->team?->notify(new ContainerRestarted('coolify-proxy', $this->server));
}
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
}
} else {
$connectProxyToDockerNetworks = connectProxyToNetworks($this->server);
@@ -327,7 +327,7 @@ class PushServerUpdateJob implements ShouldBeEncrypted, ShouldQueue
$notFoundServiceDatabaseIds = $this->allServiceDatabaseIds->diff($this->foundServiceDatabaseIds);
if ($notFoundServiceApplicationIds->isNotEmpty()) {
$notFoundServiceApplicationIds->each(function ($serviceApplicationId) {
- $application = ServiceApplication::find($serviceApplicationId);
+ $application = ServiceApplication::query()->find($serviceApplicationId);
if ($application) {
$application->status = 'exited';
$application->save();
@@ -336,7 +336,7 @@ class PushServerUpdateJob implements ShouldBeEncrypted, ShouldQueue
}
if ($notFoundServiceDatabaseIds->isNotEmpty()) {
$notFoundServiceDatabaseIds->each(function ($serviceDatabaseId) {
- $database = ServiceDatabase::find($serviceDatabaseId);
+ $database = ServiceDatabase::query()->find($serviceDatabaseId);
if ($database) {
$database->status = 'exited';
$database->save();
diff --git a/app/Jobs/ScheduledTaskJob.php b/app/Jobs/ScheduledTaskJob.php
index 90a10f3e9..de4b0757c 100644
--- a/app/Jobs/ScheduledTaskJob.php
+++ b/app/Jobs/ScheduledTaskJob.php
@@ -11,11 +11,14 @@ use App\Models\Service;
use App\Models\Team;
use App\Notifications\ScheduledTask\TaskFailed;
use App\Notifications\ScheduledTask\TaskSuccess;
+use Exception;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
+use RuntimeException;
+use Throwable;
class ScheduledTaskJob implements ShouldQueue
{
@@ -49,9 +52,9 @@ class ScheduledTaskJob implements ShouldQueue
} elseif ($application = $task->application()->first()) {
$this->resource = $application;
} else {
- throw new \RuntimeException('ScheduledTaskJob failed: No resource found.');
+ throw new RuntimeException('ScheduledTaskJob failed: No resource found.');
}
- $this->team = Team::findOrFail($task->team_id);
+ $this->team = Team::query()->findOrFail($task->team_id);
$this->server_timezone = $this->getServerTimezone();
}
@@ -59,17 +62,15 @@ class ScheduledTaskJob implements ShouldQueue
{
if ($this->resource instanceof Application) {
return $this->resource->destination->server->settings->server_timezone;
- } elseif ($this->resource instanceof Service) {
- return $this->resource->server->settings->server_timezone;
}
- return 'UTC';
+ return $this->resource->server->settings->server_timezone;
}
public function handle(): void
{
try {
- $this->task_log = ScheduledTaskExecution::create([
+ $this->task_log = ScheduledTaskExecution::query()->create([
'scheduled_task_id' => $this->task->id,
]);
@@ -95,17 +96,17 @@ class ScheduledTaskJob implements ShouldQueue
});
}
if (count($this->containers) == 0) {
- throw new \Exception('ScheduledTaskJob failed: No containers running.');
+ throw new Exception('ScheduledTaskJob failed: No containers running.');
}
if (count($this->containers) > 1 && empty($this->task->container)) {
- throw new \Exception('ScheduledTaskJob failed: More than one container exists but no container name was provided.');
+ throw new Exception('ScheduledTaskJob failed: More than one container exists but no container name was provided.');
}
- foreach ($this->containers as $containerName) {
- if (count($this->containers) == 1 || str_starts_with($containerName, $this->task->container.'-'.$this->resource->uuid)) {
+ foreach ($this->containers as $container) {
+ if (count($this->containers) == 1 || str_starts_with($container, $this->task->container.'-'.$this->resource->uuid)) {
$cmd = "sh -c '".str_replace("'", "'\''", $this->task->command)."'";
- $exec = "docker exec {$containerName} {$cmd}";
+ $exec = "docker exec {$container} {$cmd}";
$this->task_output = instant_remote_process([$exec], $this->server, true);
$this->task_log->update([
'status' => 'success',
@@ -119,9 +120,9 @@ class ScheduledTaskJob implements ShouldQueue
}
// No valid container was found.
- throw new \Exception('ScheduledTaskJob failed: No valid container was found. Is the container name correct?');
- } catch (\Throwable $e) {
- if ($this->task_log) {
+ throw new Exception('ScheduledTaskJob failed: No valid container was found. Is the container name correct?');
+ } catch (Throwable $e) {
+ if ($this->task_log instanceof ScheduledTaskExecution) {
$this->task_log->update([
'status' => 'failed',
'message' => $this->task_output ?? $e->getMessage(),
diff --git a/app/Jobs/SendMessageToDiscordJob.php b/app/Jobs/SendMessageToDiscordJob.php
index 99aeaeea2..4545cfdfb 100644
--- a/app/Jobs/SendMessageToDiscordJob.php
+++ b/app/Jobs/SendMessageToDiscordJob.php
@@ -30,7 +30,7 @@ class SendMessageToDiscordJob implements ShouldBeEncrypted, ShouldQueue
public int $maxExceptions = 5;
public function __construct(
- public DiscordMessage $message,
+ public DiscordMessage $discordMessage,
public string $webhookUrl
) {
$this->onQueue('high');
@@ -41,6 +41,6 @@ class SendMessageToDiscordJob implements ShouldBeEncrypted, ShouldQueue
*/
public function handle(): void
{
- Http::post($this->webhookUrl, $this->message->toPayload());
+ Http::post($this->webhookUrl, $this->discordMessage->toPayload());
}
}
diff --git a/app/Jobs/SendMessageToPushoverJob.php b/app/Jobs/SendMessageToPushoverJob.php
index 834a32b07..fa1acbeb5 100644
--- a/app/Jobs/SendMessageToPushoverJob.php
+++ b/app/Jobs/SendMessageToPushoverJob.php
@@ -10,6 +10,7 @@ use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
use Illuminate\Support\Facades\Http;
+use RuntimeException;
class SendMessageToPushoverJob implements ShouldBeEncrypted, ShouldQueue
{
@@ -30,7 +31,7 @@ class SendMessageToPushoverJob implements ShouldBeEncrypted, ShouldQueue
public int $maxExceptions = 5;
public function __construct(
- public PushoverMessage $message,
+ public PushoverMessage $pushoverMessage,
public string $token,
public string $user,
) {
@@ -42,9 +43,9 @@ class SendMessageToPushoverJob implements ShouldBeEncrypted, ShouldQueue
*/
public function handle(): void
{
- $response = Http::post('https://api.pushover.net/1/messages.json', $this->message->toPayload($this->token, $this->user));
+ $response = Http::post('https://api.pushover.net/1/messages.json', $this->pushoverMessage->toPayload($this->token, $this->user));
if ($response->failed()) {
- throw new \RuntimeException('Pushover notification failed with ' . $response->status() . ' status code.' . $response->body());
+ throw new RuntimeException('Pushover notification failed with '.$response->status().' status code.'.$response->body());
}
}
}
diff --git a/app/Jobs/SendMessageToSlackJob.php b/app/Jobs/SendMessageToSlackJob.php
index 470002d23..c27f45ad4 100644
--- a/app/Jobs/SendMessageToSlackJob.php
+++ b/app/Jobs/SendMessageToSlackJob.php
@@ -15,7 +15,7 @@ class SendMessageToSlackJob implements ShouldQueue
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
public function __construct(
- private SlackMessage $message,
+ private SlackMessage $slackMessage,
private string $webhookUrl
) {
$this->onQueue('high');
@@ -35,20 +35,20 @@ class SendMessageToSlackJob implements ShouldQueue
],
'attachments' => [
[
- 'color' => $this->message->color,
+ 'color' => $this->slackMessage->color,
'blocks' => [
[
'type' => 'header',
'text' => [
'type' => 'plain_text',
- 'text' => $this->message->title,
+ 'text' => $this->slackMessage->title,
],
],
[
'type' => 'section',
'text' => [
'type' => 'mrkdwn',
- 'text' => $this->message->description,
+ 'text' => $this->slackMessage->description,
],
],
],
diff --git a/app/Jobs/SendMessageToTelegramJob.php b/app/Jobs/SendMessageToTelegramJob.php
index 6b0a64ae3..734e47c88 100644
--- a/app/Jobs/SendMessageToTelegramJob.php
+++ b/app/Jobs/SendMessageToTelegramJob.php
@@ -10,6 +10,7 @@ use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
use Illuminate\Support\Facades\Http;
use Illuminate\Support\Str;
+use RuntimeException;
class SendMessageToTelegramJob implements ShouldBeEncrypted, ShouldQueue
{
@@ -44,18 +45,16 @@ class SendMessageToTelegramJob implements ShouldBeEncrypted, ShouldQueue
{
$url = 'https://api.telegram.org/bot'.$this->token.'/sendMessage';
$inlineButtons = [];
- if (! empty($this->buttons)) {
- foreach ($this->buttons as $button) {
- $buttonUrl = data_get($button, 'url');
- $text = data_get($button, 'text', 'Click here');
- if ($buttonUrl && Str::contains($buttonUrl, 'http://localhost')) {
- $buttonUrl = str_replace('http://localhost', config('app.url'), $buttonUrl);
- }
- $inlineButtons[] = [
- 'text' => $text,
- 'url' => $buttonUrl,
- ];
+ foreach ($this->buttons as $button) {
+ $buttonUrl = data_get($button, 'url');
+ $text = data_get($button, 'text', 'Click here');
+ if ($buttonUrl && Str::contains($buttonUrl, 'http://localhost')) {
+ $buttonUrl = str_replace('http://localhost', config('app.url'), $buttonUrl);
}
+ $inlineButtons[] = [
+ 'text' => $text,
+ 'url' => $buttonUrl,
+ ];
}
$payload = [
// 'parse_mode' => 'markdown',
@@ -72,7 +71,7 @@ class SendMessageToTelegramJob implements ShouldBeEncrypted, ShouldQueue
}
$response = Http::post($url, $payload);
if ($response->failed()) {
- throw new \RuntimeException('Telegram notification failed with '.$response->status().' status code.'.$response->body());
+ throw new RuntimeException('Telegram notification failed with '.$response->status().' status code.'.$response->body());
}
}
}
diff --git a/app/Jobs/ServerCheckJob.php b/app/Jobs/ServerCheckJob.php
index 9818d5c6a..847db6bb8 100644
--- a/app/Jobs/ServerCheckJob.php
+++ b/app/Jobs/ServerCheckJob.php
@@ -15,6 +15,7 @@ use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\Middleware\WithoutOverlapping;
use Illuminate\Queue\SerializesModels;
+use Throwable;
class ServerCheckJob implements ShouldBeEncrypted, ShouldQueue
{
@@ -60,9 +61,9 @@ class ServerCheckJob implements ShouldBeEncrypted, ShouldQueue
$foundProxyContainer = $this->containers->filter(function ($value, $key) {
if ($this->server->isSwarm()) {
return data_get($value, 'Spec.Name') === 'coolify-proxy_traefik';
- } else {
- return data_get($value, 'Name') === '/coolify-proxy';
}
+
+ return data_get($value, 'Name') === '/coolify-proxy';
})->first();
if (! $foundProxyContainer) {
try {
@@ -71,7 +72,7 @@ class ServerCheckJob implements ShouldBeEncrypted, ShouldQueue
StartProxy::run($this->server, false);
$this->server->team?->notify(new ContainerRestarted('coolify-proxy', $this->server));
}
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
}
} else {
$this->server->proxy->status = data_get($foundProxyContainer, 'State.Status');
@@ -81,9 +82,11 @@ class ServerCheckJob implements ShouldBeEncrypted, ShouldQueue
}
}
}
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
return handleError($e);
}
+
+ return null;
}
private function checkLogDrainContainer()
diff --git a/app/Jobs/ServerCheckNewJob.php b/app/Jobs/ServerCheckNewJob.php
index 3e8e60a31..21114f035 100644
--- a/app/Jobs/ServerCheckNewJob.php
+++ b/app/Jobs/ServerCheckNewJob.php
@@ -11,6 +11,7 @@ use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
+use Throwable;
class ServerCheckNewJob implements ShouldBeEncrypted, ShouldQueue
{
@@ -27,8 +28,10 @@ class ServerCheckNewJob implements ShouldBeEncrypted, ShouldQueue
try {
ServerCheck::run($this->server);
ResourcesCheck::dispatch($this->server);
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
return handleError($e);
}
+
+ return null;
}
}
diff --git a/app/Jobs/ServerCleanupMux.php b/app/Jobs/ServerCleanupMux.php
index b793c3eca..8b00e6247 100644
--- a/app/Jobs/ServerCleanupMux.php
+++ b/app/Jobs/ServerCleanupMux.php
@@ -10,6 +10,7 @@ use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
+use Throwable;
class ServerCleanupMux implements ShouldBeEncrypted, ShouldQueue
{
@@ -33,8 +34,10 @@ class ServerCleanupMux implements ShouldBeEncrypted, ShouldQueue
return 'Server is not reachable or not ready.';
}
SshMultiplexingHelper::removeMuxFile($this->server);
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
return handleError($e);
}
+
+ return null;
}
}
diff --git a/app/Jobs/ServerLimitCheckJob.php b/app/Jobs/ServerLimitCheckJob.php
index aa82c6dad..ecfbf9a84 100644
--- a/app/Jobs/ServerLimitCheckJob.php
+++ b/app/Jobs/ServerLimitCheckJob.php
@@ -11,6 +11,7 @@ use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
+use Throwable;
class ServerLimitCheckJob implements ShouldBeEncrypted, ShouldQueue
{
@@ -46,10 +47,12 @@ class ServerLimitCheckJob implements ShouldBeEncrypted, ShouldQueue
}
});
}
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
send_internal_notification('ServerLimitCheckJob failed with: '.$e->getMessage());
return handleError($e);
}
+
+ return null;
}
}
diff --git a/app/Jobs/ServerStorageCheckJob.php b/app/Jobs/ServerStorageCheckJob.php
index 9a8d86be1..499027f1e 100644
--- a/app/Jobs/ServerStorageCheckJob.php
+++ b/app/Jobs/ServerStorageCheckJob.php
@@ -11,6 +11,7 @@ use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
use Illuminate\Support\Facades\RateLimiter;
+use Throwable;
class ServerStorageCheckJob implements ShouldBeEncrypted, ShouldQueue
{
@@ -58,8 +59,10 @@ class ServerStorageCheckJob implements ShouldBeEncrypted, ShouldQueue
} else {
RateLimiter::hit('high-disk-usage:'.$this->server->id, 600);
}
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
return handleError($e);
}
+
+ return null;
}
}
diff --git a/app/Jobs/StripeProcessJob.php b/app/Jobs/StripeProcessJob.php
index d61c738f4..9fabc1ecf 100644
--- a/app/Jobs/StripeProcessJob.php
+++ b/app/Jobs/StripeProcessJob.php
@@ -4,9 +4,12 @@ namespace App\Jobs;
use App\Models\Subscription;
use App\Models\Team;
+use Exception;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Queue\Queueable;
use Illuminate\Support\Str;
+use RuntimeException;
+use Stripe\StripeClient;
class StripeProcessJob implements ShouldQueue
{
@@ -33,26 +36,26 @@ class StripeProcessJob implements ShouldQueue
$data = data_get($this->event, 'data.object');
switch ($type) {
case 'radar.early_fraud_warning.created':
- $stripe = new \Stripe\StripeClient(config('subscription.stripe_api_key'));
+ $stripeClient = new StripeClient(config('subscription.stripe_api_key'));
$id = data_get($data, 'id');
$charge = data_get($data, 'charge');
if ($charge) {
- $stripe->refunds->create(['charge' => $charge]);
+ $stripeClient->refunds->create(['charge' => $charge]);
}
$pi = data_get($data, 'payment_intent');
- $piData = $stripe->paymentIntents->retrieve($pi, []);
+ $piData = $stripeClient->paymentIntents->retrieve($pi, []);
$customerId = data_get($piData, 'customer');
- $subscription = Subscription::where('stripe_customer_id', $customerId)->first();
+ $subscription = Subscription::query()->where('stripe_customer_id', $customerId)->first();
if ($subscription) {
$subscriptionId = data_get($subscription, 'stripe_subscription_id');
- $stripe->subscriptions->cancel($subscriptionId, []);
+ $stripeClient->subscriptions->cancel($subscriptionId, []);
$subscription->update([
'stripe_invoice_paid' => false,
]);
send_internal_notification("Early fraud warning created Refunded, subscription canceled. Charge: {$charge}, id: {$id}, pi: {$pi}");
} else {
send_internal_notification("Early fraud warning: subscription not found. Charge: {$charge}, id: {$id}, pi: {$pi}");
- throw new \RuntimeException("Early fraud warning: subscription not found. Charge: {$charge}, id: {$id}, pi: {$pi}");
+ throw new RuntimeException("Early fraud warning: subscription not found. Charge: {$charge}, id: {$id}, pi: {$pi}");
}
break;
case 'checkout.session.completed':
@@ -65,13 +68,13 @@ class StripeProcessJob implements ShouldQueue
$teamId = Str::after($clientReferenceId, ':');
$subscriptionId = data_get($data, 'subscription');
$customerId = data_get($data, 'customer');
- $team = Team::find($teamId);
+ $team = Team::query()->find($teamId);
$found = $team->members->where('id', $userId)->first();
if (! $found->isAdmin()) {
send_internal_notification("User {$userId} is not an admin or owner of team {$team->id}, customerid: {$customerId}, subscriptionid: {$subscriptionId}.");
- throw new \RuntimeException("User {$userId} is not an admin or owner of team {$team->id}, customerid: {$customerId}, subscriptionid: {$subscriptionId}.");
+ throw new RuntimeException("User {$userId} is not an admin or owner of team {$team->id}, customerid: {$customerId}, subscriptionid: {$subscriptionId}.");
}
- $subscription = Subscription::where('team_id', $teamId)->first();
+ $subscription = Subscription::query()->where('team_id', $teamId)->first();
if ($subscription) {
send_internal_notification('Old subscription activated for team: '.$teamId);
$subscription->update([
@@ -81,7 +84,7 @@ class StripeProcessJob implements ShouldQueue
]);
} else {
send_internal_notification('New subscription for team: '.$teamId);
- Subscription::create([
+ Subscription::query()->create([
'team_id' => $teamId,
'stripe_subscription_id' => $subscriptionId,
'stripe_customer_id' => $customerId,
@@ -96,26 +99,26 @@ class StripeProcessJob implements ShouldQueue
send_internal_notification('Subscription excluded.');
break;
}
- $subscription = Subscription::where('stripe_customer_id', $customerId)->first();
+ $subscription = Subscription::query()->where('stripe_customer_id', $customerId)->first();
if ($subscription) {
$subscription->update([
'stripe_invoice_paid' => true,
]);
} else {
- throw new \RuntimeException("No subscription found for customer: {$customerId}");
+ throw new RuntimeException("No subscription found for customer: {$customerId}");
}
break;
case 'invoice.payment_failed':
$customerId = data_get($data, 'customer');
- $subscription = Subscription::where('stripe_customer_id', $customerId)->first();
+ $subscription = Subscription::query()->where('stripe_customer_id', $customerId)->first();
if (! $subscription) {
send_internal_notification('invoice.payment_failed failed but no subscription found in Coolify for customer: '.$customerId);
- throw new \RuntimeException("No subscription found for customer: {$customerId}");
+ throw new RuntimeException("No subscription found for customer: {$customerId}");
}
$team = data_get($subscription, 'team');
if (! $team) {
send_internal_notification('invoice.payment_failed failed but no team found in Coolify for customer: '.$customerId);
- throw new \RuntimeException("No team found in Coolify for customer: {$customerId}");
+ throw new RuntimeException("No team found in Coolify for customer: {$customerId}");
}
if (! $subscription->stripe_invoice_paid) {
SubscriptionInvoiceFailedJob::dispatch($team);
@@ -126,10 +129,10 @@ class StripeProcessJob implements ShouldQueue
break;
case 'payment_intent.payment_failed':
$customerId = data_get($data, 'customer');
- $subscription = Subscription::where('stripe_customer_id', $customerId)->first();
+ $subscription = Subscription::query()->where('stripe_customer_id', $customerId)->first();
if (! $subscription) {
send_internal_notification('payment_intent.payment_failed, no subscription found in Coolify for customer: '.$customerId);
- throw new \RuntimeException("No subscription found in Coolify for customer: {$customerId}");
+ throw new RuntimeException("No subscription found in Coolify for customer: {$customerId}");
}
if ($subscription->stripe_invoice_paid) {
send_internal_notification('payment_intent.payment_failed but invoice is active for customer: '.$customerId);
@@ -144,49 +147,48 @@ class StripeProcessJob implements ShouldQueue
$teamId = data_get($data, 'metadata.team_id');
$userId = data_get($data, 'metadata.user_id');
if (! $teamId || ! $userId) {
- $subscription = Subscription::where('stripe_customer_id', $customerId)->first();
+ $subscription = Subscription::query()->where('stripe_customer_id', $customerId)->first();
if ($subscription) {
- throw new \RuntimeException("Subscription already exists for customer: {$customerId}");
+ throw new RuntimeException("Subscription already exists for customer: {$customerId}");
}
- throw new \RuntimeException('No team id or user id found');
+ throw new RuntimeException('No team id or user id found');
}
- $team = Team::find($teamId);
+ $team = Team::query()->find($teamId);
$found = $team->members->where('id', $userId)->first();
if (! $found->isAdmin()) {
send_internal_notification("User {$userId} is not an admin or owner of team {$team->id}, customerid: {$customerId}.");
- throw new \RuntimeException("User {$userId} is not an admin or owner of team {$team->id}, customerid: {$customerId}.");
+ throw new RuntimeException("User {$userId} is not an admin or owner of team {$team->id}, customerid: {$customerId}.");
}
- $subscription = Subscription::where('team_id', $teamId)->first();
+ $subscription = Subscription::query()->where('team_id', $teamId)->first();
if ($subscription) {
send_internal_notification("Subscription already exists for team: {$teamId}");
- throw new \RuntimeException("Subscription already exists for team: {$teamId}");
- } else {
- Subscription::create([
- 'team_id' => $teamId,
- 'stripe_subscription_id' => $subscriptionId,
- 'stripe_customer_id' => $customerId,
- 'stripe_invoice_paid' => false,
- ]);
+ throw new RuntimeException("Subscription already exists for team: {$teamId}");
}
+ Subscription::query()->create([
+ 'team_id' => $teamId,
+ 'stripe_subscription_id' => $subscriptionId,
+ 'stripe_customer_id' => $customerId,
+ 'stripe_invoice_paid' => false,
+ ]);
case 'customer.subscription.updated':
$teamId = data_get($data, 'metadata.team_id');
$userId = data_get($data, 'metadata.user_id');
$customerId = data_get($data, 'customer');
$status = data_get($data, 'status');
- $subscriptionId = data_get($data, 'items.data.0.subscription') ?? data_get($data, 'id');
- $planId = data_get($data, 'items.data.0.plan.id') ?? data_get($data, 'plan.id');
+ $subscriptionId = data_get($data, 'items.data.0.subscription', data_get($data, 'id'));
+ $planId = data_get($data, 'items.data.0.plan.id', data_get($data, 'plan.id'));
if (Str::contains($excludedPlans, $planId)) {
send_internal_notification('Subscription excluded.');
break;
}
- $subscription = Subscription::where('stripe_customer_id', $customerId)->first();
+ $subscription = Subscription::query()->where('stripe_customer_id', $customerId)->first();
if (! $subscription) {
if ($status === 'incomplete_expired') {
send_internal_notification('Subscription incomplete expired');
- throw new \RuntimeException('Subscription incomplete expired');
+ throw new RuntimeException('Subscription incomplete expired');
}
if ($teamId) {
- $subscription = Subscription::create([
+ $subscription = Subscription::query()->create([
'team_id' => $teamId,
'stripe_subscription_id' => $subscriptionId,
'stripe_customer_id' => $customerId,
@@ -194,7 +196,7 @@ class StripeProcessJob implements ShouldQueue
]);
} else {
send_internal_notification('No subscription and team id found');
- throw new \RuntimeException('No subscription and team id found');
+ throw new RuntimeException('No subscription and team id found');
}
}
$cancelAtPeriodEnd = data_get($data, 'cancel_at_period_end');
@@ -217,19 +219,15 @@ class StripeProcessJob implements ShouldQueue
'stripe_plan_id' => $planId,
'stripe_cancel_at_period_end' => $cancelAtPeriodEnd,
]);
- if ($status === 'paused' || $status === 'incomplete_expired') {
- if ($subscription->stripe_subscription_id === $subscriptionId) {
- $subscription->update([
- 'stripe_invoice_paid' => false,
- ]);
- }
+ if (($status === 'paused' || $status === 'incomplete_expired') && $subscription->stripe_subscription_id === $subscriptionId) {
+ $subscription->update([
+ 'stripe_invoice_paid' => false,
+ ]);
}
- if ($status === 'active') {
- if ($subscription->stripe_subscription_id === $subscriptionId) {
- $subscription->update([
- 'stripe_invoice_paid' => true,
- ]);
- }
+ if ($status === 'active' && $subscription->stripe_subscription_id === $subscriptionId) {
+ $subscription->update([
+ 'stripe_invoice_paid' => true,
+ ]);
}
if ($feedback) {
$reason = "Cancellation feedback for {$customerId}: '".$feedback."'";
@@ -242,24 +240,24 @@ class StripeProcessJob implements ShouldQueue
case 'customer.subscription.deleted':
$customerId = data_get($data, 'customer');
$subscriptionId = data_get($data, 'id');
- $subscription = Subscription::where('stripe_customer_id', $customerId)->where('stripe_subscription_id', $subscriptionId)->first();
+ $subscription = Subscription::query()->where('stripe_customer_id', $customerId)->where('stripe_subscription_id', $subscriptionId)->first();
if ($subscription) {
$team = data_get($subscription, 'team');
if ($team) {
$team->subscriptionEnded();
} else {
send_internal_notification('Subscription deleted but no team found in Coolify for customer: '.$customerId);
- throw new \RuntimeException("No team found in Coolify for customer: {$customerId}");
+ throw new RuntimeException("No team found in Coolify for customer: {$customerId}");
}
} else {
send_internal_notification('Subscription deleted but no subscription found in Coolify for customer: '.$customerId);
- throw new \RuntimeException("No subscription found in Coolify for customer: {$customerId}");
+ throw new RuntimeException("No subscription found in Coolify for customer: {$customerId}");
}
break;
default:
- throw new \RuntimeException("Unhandled event type: {$type}");
+ throw new RuntimeException("Unhandled event type: {$type}");
}
- } catch (\Exception $e) {
+ } catch (Exception $e) {
send_internal_notification('StripeProcessJob error: '.$e->getMessage());
}
}
diff --git a/app/Jobs/SubscriptionInvoiceFailedJob.php b/app/Jobs/SubscriptionInvoiceFailedJob.php
index dc511f445..a42592827 100755
--- a/app/Jobs/SubscriptionInvoiceFailedJob.php
+++ b/app/Jobs/SubscriptionInvoiceFailedJob.php
@@ -10,6 +10,7 @@ use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Notifications\Messages\MailMessage;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
+use Throwable;
class SubscriptionInvoiceFailedJob implements ShouldBeEncrypted, ShouldQueue
{
@@ -24,17 +25,17 @@ class SubscriptionInvoiceFailedJob implements ShouldBeEncrypted, ShouldQueue
{
try {
$session = getStripeCustomerPortalSession($this->team);
- $mail = new MailMessage;
- $mail->view('emails.subscription-invoice-failed', [
+ $mailMessage = new MailMessage;
+ $mailMessage->view('emails.subscription-invoice-failed', [
'stripeCustomerPortal' => $session->url,
]);
- $mail->subject('Your last payment was failed for Coolify Cloud.');
- $this->team->members()->each(function ($member) use ($mail) {
+ $mailMessage->subject('Your last payment was failed for Coolify Cloud.');
+ $this->team->members()->each(function ($member) use ($mailMessage) {
if ($member->isAdmin()) {
- send_user_an_email($mail, $member->email);
+ send_user_an_email($mailMessage, $member->email);
}
});
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
send_internal_notification('SubscriptionInvoiceFailedJob failed with: '.$e->getMessage());
throw $e;
}
diff --git a/app/Jobs/UpdateCoolifyJob.php b/app/Jobs/UpdateCoolifyJob.php
index f0e43cbc0..958039e9e 100644
--- a/app/Jobs/UpdateCoolifyJob.php
+++ b/app/Jobs/UpdateCoolifyJob.php
@@ -11,6 +11,7 @@ use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
use Illuminate\Support\Facades\Log;
+use Throwable;
class UpdateCoolifyJob implements ShouldBeEncrypted, ShouldQueue
{
@@ -34,7 +35,7 @@ class UpdateCoolifyJob implements ShouldBeEncrypted, ShouldQueue
return;
}
- $server = Server::findOrFail(0);
+ $server = Server::query()->findOrFail(0);
if (! $server) {
Log::error('Server not found. Cannot proceed with update.');
@@ -46,7 +47,7 @@ class UpdateCoolifyJob implements ShouldBeEncrypted, ShouldQueue
$settings->update(['new_version_available' => false]);
Log::info('Coolify update completed successfully.');
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
Log::error('UpdateCoolifyJob failed: '.$e->getMessage());
// Consider implementing a notification to administrators
}
diff --git a/app/Listeners/MaintenanceModeDisabledNotification.php b/app/Listeners/MaintenanceModeDisabledNotification.php
index 6c3ab83d8..085dc569f 100644
--- a/app/Listeners/MaintenanceModeDisabledNotification.php
+++ b/app/Listeners/MaintenanceModeDisabledNotification.php
@@ -6,12 +6,11 @@ use Illuminate\Foundation\Events\MaintenanceModeDisabled as EventsMaintenanceMod
use Illuminate\Support\Facades\Request;
use Illuminate\Support\Facades\Storage;
use Symfony\Component\HttpFoundation\Request as SymfonyRequest;
+use Throwable;
class MaintenanceModeDisabledNotification
{
- public function __construct() {}
-
- public function handle(EventsMaintenanceModeDisabled $event): void
+ public function handle(EventsMaintenanceModeDisabled $eventsMaintenanceModeDisabled): void
{
$files = Storage::disk('webhooks-during-maintenance')->files();
$files = collect($files);
@@ -39,7 +38,7 @@ class MaintenanceModeDisabledNotification
try {
$instance = new $class;
$instance->$method($request);
- } catch (\Throwable $th) {
+ } catch (Throwable $th) {
} finally {
Storage::disk('webhooks-during-maintenance')->delete($file);
}
diff --git a/app/Listeners/MaintenanceModeEnabledNotification.php b/app/Listeners/MaintenanceModeEnabledNotification.php
index 5aab248ea..37170a034 100644
--- a/app/Listeners/MaintenanceModeEnabledNotification.php
+++ b/app/Listeners/MaintenanceModeEnabledNotification.php
@@ -17,5 +17,5 @@ class MaintenanceModeEnabledNotification
/**
* Handle the event.
*/
- public function handle(EventsMaintenanceModeEnabled $event): void {}
+ public function handle(EventsMaintenanceModeEnabled $eventsMaintenanceModeEnabled): void {}
}
diff --git a/app/Listeners/ProxyStartedNotification.php b/app/Listeners/ProxyStartedNotification.php
index 9045b1e5c..ffd6858cf 100644
--- a/app/Listeners/ProxyStartedNotification.php
+++ b/app/Listeners/ProxyStartedNotification.php
@@ -9,11 +9,9 @@ class ProxyStartedNotification
{
public Server $server;
- public function __construct() {}
-
- public function handle(ProxyStarted $event): void
+ public function handle(ProxyStarted $proxyStarted): void
{
- $this->server = data_get($event, 'data');
+ $this->server = data_get($proxyStarted, 'data');
$this->server->setupDefaultRedirect();
$this->server->setupDynamicProxyConfiguration();
$this->server->proxy->force_stop = false;
diff --git a/app/Livewire/ActivityMonitor.php b/app/Livewire/ActivityMonitor.php
index 2e36f34ee..18e1a565e 100644
--- a/app/Livewire/ActivityMonitor.php
+++ b/app/Livewire/ActivityMonitor.php
@@ -36,7 +36,7 @@ class ActivityMonitor extends Component
public function hydrateActivity()
{
- $this->activity = Activity::find($this->activityId);
+ $this->activity = Activity::query()->find($this->activityId);
}
public function polling()
@@ -51,22 +51,20 @@ class ActivityMonitor extends Component
// // $this->setStatus(ProcessStatus::ERROR);
// }
$this->isPollingActive = false;
- if ($exit_code === 0) {
- if ($this->eventToDispatch !== null) {
- if (str($this->eventToDispatch)->startsWith('App\\Events\\')) {
- $causer_id = data_get($this->activity, 'causer_id');
- $user = User::find($causer_id);
- if ($user) {
- foreach ($user->teams as $team) {
- $teamId = $team->id;
- $this->eventToDispatch::dispatch($teamId);
- }
+ if ($exit_code === 0 && $this->eventToDispatch !== null) {
+ if (str($this->eventToDispatch)->startsWith('App\\Events\\')) {
+ $causer_id = data_get($this->activity, 'causer_id');
+ $user = User::query()->find($causer_id);
+ if ($user) {
+ foreach ($user->teams as $team) {
+ $teamId = $team->id;
+ $this->eventToDispatch::dispatch($teamId);
}
-
- return;
}
- $this->dispatch($this->eventToDispatch);
+
+ return;
}
+ $this->dispatch($this->eventToDispatch);
}
}
}
diff --git a/app/Livewire/Admin/Index.php b/app/Livewire/Admin/Index.php
index b5f6d2929..88fc2aa9d 100644
--- a/app/Livewire/Admin/Index.php
+++ b/app/Livewire/Admin/Index.php
@@ -6,7 +6,6 @@ use App\Models\Team;
use App\Models\User;
use Illuminate\Support\Collection;
use Illuminate\Support\Facades\Auth;
-use Illuminate\Support\Facades\Cache;
use Livewire\Component;
class Index extends Component
@@ -28,25 +27,29 @@ class Index extends Component
return redirect()->route('dashboard');
}
$this->getSubscribers();
+
+ return null;
}
public function back()
{
if (session('impersonating')) {
session()->forget('impersonating');
- $user = User::find(0);
+ $user = User::query()->find(0);
$team_to_switch_to = $user->teams->first();
Auth::login($user);
refreshSession($team_to_switch_to);
return redirect(request()->header('Referer'));
}
+
+ return null;
}
public function submitSearch()
{
if ($this->search !== '') {
- $this->foundUsers = User::where(function ($query) {
+ $this->foundUsers = User::query()->where(function ($query) {
$query->where('name', 'like', "%{$this->search}%")
->orWhere('email', 'like', "%{$this->search}%");
})->get();
@@ -55,8 +58,8 @@ class Index extends Component
public function getSubscribers()
{
- $this->inactiveSubscribers = Team::whereRelation('subscription', 'stripe_invoice_paid', false)->count();
- $this->activeSubscribers = Team::whereRelation('subscription', 'stripe_invoice_paid', true)->count();
+ $this->inactiveSubscribers = Team::query()->whereRelation('subscription', 'stripe_invoice_paid', false)->count();
+ $this->activeSubscribers = Team::query()->whereRelation('subscription', 'stripe_invoice_paid', true)->count();
}
public function switchUser(int $user_id)
@@ -65,7 +68,7 @@ class Index extends Component
return redirect()->route('dashboard');
}
session(['impersonating' => true]);
- $user = User::find($user_id);
+ $user = User::query()->find($user_id);
$team_to_switch_to = $user->teams->first();
// Cache::forget("team:{$user->id}");
Auth::login($user);
diff --git a/app/Livewire/Boarding/Index.php b/app/Livewire/Boarding/Index.php
index 15eabfec5..18e8cc85b 100644
--- a/app/Livewire/Boarding/Index.php
+++ b/app/Livewire/Boarding/Index.php
@@ -7,8 +7,10 @@ use App\Models\PrivateKey;
use App\Models\Project;
use App\Models\Server;
use App\Models\Team;
+use Exception;
use Illuminate\Support\Collection;
use Livewire\Component;
+use Throwable;
use Visus\Cuid2\Cuid2;
class Index extends Component
@@ -90,6 +92,8 @@ uZx9iFkCELtxrh31QJ68AAAAEXNhaWxANzZmZjY2ZDJlMmRkAQIDBA==
$this->remoteServerDescription = 'Created by Coolify';
$this->remoteServerHost = 'coolify-testing-host';
}
+
+ return null;
}
public function explanation()
@@ -98,6 +102,8 @@ uZx9iFkCELtxrh31QJ68AAAAEXNhaWxANzZmZjY2ZDJlMmRkAQIDBA==
return $this->setServerType('remote');
}
$this->currentState = 'select-server-type';
+
+ return null;
}
public function restartBoarding()
@@ -107,7 +113,7 @@ uZx9iFkCELtxrh31QJ68AAAAEXNhaWxANzZmZjY2ZDJlMmRkAQIDBA==
public function skipBoarding()
{
- Team::find(currentTeam()->id)->update([
+ Team::query()->find(currentTeam()->id)->update([
'show_boarding' => false,
]);
refreshSession();
@@ -119,15 +125,16 @@ uZx9iFkCELtxrh31QJ68AAAAEXNhaWxANzZmZjY2ZDJlMmRkAQIDBA==
{
$this->selectedServerType = $type;
if ($this->selectedServerType === 'localhost') {
- $this->createdServer = Server::find(0);
+ $this->createdServer = Server::query()->find(0);
$this->selectedExistingServer = 0;
if (! $this->createdServer) {
return $this->dispatch('error', 'Localhost server is not found. Something went wrong during installation. Please try to reinstall or contact support.');
}
$this->serverPublicKey = $this->createdServer->privateKey->getPublicKey();
- return $this->validateServer('localhost');
- } elseif ($this->selectedServerType === 'remote') {
+ return $this->validateServer();
+ }
+ if ($this->selectedServerType === 'remote') {
if (isDev()) {
$this->privateKeys = PrivateKey::ownedByCurrentTeam(['name'])->get();
} else {
@@ -142,15 +149,17 @@ uZx9iFkCELtxrh31QJ68AAAAEXNhaWxANzZmZjY2ZDJlMmRkAQIDBA==
$this->updateServerDetails();
$this->currentState = 'select-existing-server';
- return;
+ return null;
}
$this->currentState = 'private-key';
}
+
+ return null;
}
public function selectExistingServer()
{
- $this->createdServer = Server::find($this->selectedExistingServer);
+ $this->createdServer = Server::query()->find($this->selectedExistingServer);
if (! $this->createdServer) {
$this->dispatch('error', 'Server is not found.');
$this->currentState = 'private-key';
@@ -165,7 +174,7 @@ uZx9iFkCELtxrh31QJ68AAAAEXNhaWxANzZmZjY2ZDJlMmRkAQIDBA==
private function updateServerDetails()
{
- if ($this->createdServer) {
+ if ($this->createdServer instanceof Server) {
$this->remoteServerPort = $this->createdServer->port;
$this->remoteServerUser = $this->createdServer->user;
}
@@ -184,7 +193,7 @@ uZx9iFkCELtxrh31QJ68AAAAEXNhaWxANzZmZjY2ZDJlMmRkAQIDBA==
return;
}
- $this->createdPrivateKey = PrivateKey::where('team_id', currentTeam()->id)->where('id', $this->selectedExistingPrivateKey)->first();
+ $this->createdPrivateKey = PrivateKey::query()->where('team_id', currentTeam()->id)->where('id', $this->selectedExistingPrivateKey)->first();
$this->privateKey = $this->createdPrivateKey->private_key;
$this->currentState = 'create-server';
}
@@ -223,7 +232,7 @@ uZx9iFkCELtxrh31QJ68AAAAEXNhaWxANzZmZjY2ZDJlMmRkAQIDBA==
$this->createdPrivateKey = $privateKey;
$this->currentState = 'create-server';
- } catch (\Exception $e) {
+ } catch (Exception $e) {
$this->addError('privateKey', 'Failed to save private key: '.$e->getMessage());
}
}
@@ -242,7 +251,7 @@ uZx9iFkCELtxrh31QJ68AAAAEXNhaWxANzZmZjY2ZDJlMmRkAQIDBA==
if ($foundServer) {
return $this->dispatch('error', 'IP address is already in use by another team.');
}
- $this->createdServer = Server::create([
+ $this->createdServer = Server::query()->create([
'name' => $this->remoteServerName,
'ip' => $this->remoteServerHost,
'port' => $this->remoteServerPort,
@@ -256,6 +265,8 @@ uZx9iFkCELtxrh31QJ68AAAAEXNhaWxANzZmZjY2ZDJlMmRkAQIDBA==
$this->createdServer->settings->save();
$this->selectedExistingServer = $this->createdServer->id;
$this->currentState = 'validate-server';
+
+ return null;
}
public function installServer()
@@ -275,7 +286,7 @@ uZx9iFkCELtxrh31QJ68AAAAEXNhaWxANzZmZjY2ZDJlMmRkAQIDBA==
'is_reachable' => true,
]);
$this->serverReachable = true;
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
$this->serverReachable = false;
$this->createdServer->settings()->update([
'is_reachable' => false,
@@ -289,19 +300,21 @@ uZx9iFkCELtxrh31QJ68AAAAEXNhaWxANzZmZjY2ZDJlMmRkAQIDBA==
$dockerVersion = checkMinimumDockerEngineVersion($dockerVersion);
if (is_null($dockerVersion)) {
$this->currentState = 'validate-server';
- throw new \Exception('Docker not found or old version is installed.');
+ throw new Exception('Docker not found or old version is installed.');
}
$this->createdServer->settings()->update([
'is_usable' => true,
]);
$this->getProxyType();
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
$this->createdServer->settings()->update([
'is_usable' => false,
]);
return handleError(error: $e, livewire: $this);
}
+
+ return null;
}
public function selectProxy(?string $proxyType = null)
@@ -313,11 +326,13 @@ uZx9iFkCELtxrh31QJ68AAAAEXNhaWxANzZmZjY2ZDJlMmRkAQIDBA==
$this->createdServer->proxy->status = 'exited';
$this->createdServer->save();
$this->getProjects();
+
+ return null;
}
public function getProjects()
{
- $this->projects = Project::ownedByCurrentTeam(['name'])->get();
+ $this->projects = Project::ownedByCurrentTeam()->get();
if ($this->projects->count() > 0) {
$this->selectedProject = $this->projects->first()->id;
}
@@ -326,13 +341,13 @@ uZx9iFkCELtxrh31QJ68AAAAEXNhaWxANzZmZjY2ZDJlMmRkAQIDBA==
public function selectExistingProject()
{
- $this->createdProject = Project::find($this->selectedProject);
+ $this->createdProject = Project::query()->find($this->selectedProject);
$this->currentState = 'create-resource';
}
public function createNewProject()
{
- $this->createdProject = Project::create([
+ $this->createdProject = Project::query()->create([
'name' => 'My first project',
'team_id' => currentTeam()->id,
'uuid' => (string) new Cuid2,
diff --git a/app/Livewire/Dashboard.php b/app/Livewire/Dashboard.php
index c3cb797bf..7c876f1f5 100644
--- a/app/Livewire/Dashboard.php
+++ b/app/Livewire/Dashboard.php
@@ -38,7 +38,7 @@ class Dashboard extends Component
public function loadDeployments()
{
- $this->deploymentsPerServer = ApplicationDeploymentQueue::whereIn('status', ['in_progress', 'queued'])->whereIn('server_id', $this->servers->pluck('id'))->get([
+ $this->deploymentsPerServer = ApplicationDeploymentQueue::query()->whereIn('status', ['in_progress', 'queued'])->whereIn('server_id', $this->servers->pluck('id'))->get([
'id',
'application_id',
'application_name',
@@ -52,7 +52,7 @@ class Dashboard extends Component
public function navigateToProject($projectUuid)
{
- $project = Project::where('uuid', $projectUuid)->first();
+ $project = Project::query()->where('uuid', $projectUuid)->first();
if ($project && $project->environments->count() === 1) {
return Redirect::route('project.resource.index', [
diff --git a/app/Livewire/Destination/New/Docker.php b/app/Livewire/Destination/New/Docker.php
index 337f1d067..ecbb063eb 100644
--- a/app/Livewire/Destination/New/Docker.php
+++ b/app/Livewire/Destination/New/Docker.php
@@ -5,9 +5,11 @@ namespace App\Livewire\Destination\New;
use App\Models\Server;
use App\Models\StandaloneDocker;
use App\Models\SwarmDocker;
+use Exception;
use Livewire\Attributes\Locked;
use Livewire\Attributes\Validate;
use Livewire\Component;
+use Throwable;
use Visus\Cuid2\Cuid2;
class Docker extends Component
@@ -63,31 +65,31 @@ class Docker extends Component
if ($this->isSwarm) {
$found = $this->selectedServer->swarmDockers()->where('network', $this->network)->first();
if ($found) {
- throw new \Exception('Network already added to this server.');
- } else {
- $docker = SwarmDocker::create([
- 'name' => $this->name,
- 'network' => $this->network,
- 'server_id' => $this->selectedServer->id,
- ]);
+ throw new Exception('Network already added to this server.');
}
+ $docker = SwarmDocker::query()->create([
+ 'name' => $this->name,
+ 'network' => $this->network,
+ 'server_id' => $this->selectedServer->id,
+ ]);
} else {
$found = $this->selectedServer->standaloneDockers()->where('network', $this->network)->first();
if ($found) {
- throw new \Exception('Network already added to this server.');
- } else {
- $docker = StandaloneDocker::create([
- 'name' => $this->name,
- 'network' => $this->network,
- 'server_id' => $this->selectedServer->id,
- ]);
+ throw new Exception('Network already added to this server.');
}
+ $docker = StandaloneDocker::query()->create([
+ 'name' => $this->name,
+ 'network' => $this->network,
+ 'server_id' => $this->selectedServer->id,
+ ]);
}
$connectProxyToDockerNetworks = connectProxyToNetworks($this->selectedServer);
instant_remote_process($connectProxyToDockerNetworks, $this->selectedServer, false);
$this->dispatch('reloadWindow');
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
return handleError($e, $this);
}
+
+ return null;
}
}
diff --git a/app/Livewire/Destination/Show.php b/app/Livewire/Destination/Show.php
index 5c4d6c170..6cacfd478 100644
--- a/app/Livewire/Destination/Show.php
+++ b/app/Livewire/Destination/Show.php
@@ -8,6 +8,7 @@ use App\Models\SwarmDocker;
use Livewire\Attributes\Locked;
use Livewire\Attributes\Validate;
use Livewire\Component;
+use Throwable;
class Show extends Component
{
@@ -40,9 +41,11 @@ class Show extends Component
}
$this->destination = $destination;
$this->syncData();
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
return handleError($e, $this);
}
+
+ return null;
}
public function syncData(bool $toModel = false)
@@ -65,15 +68,17 @@ class Show extends Component
try {
$this->syncData(true);
$this->dispatch('success', 'Destination saved.');
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
return handleError($e, $this);
}
+
+ return null;
}
public function delete()
{
try {
- if ($this->destination->getMorphClass() === \App\Models\StandaloneDocker::class) {
+ if ($this->destination->getMorphClass() === StandaloneDocker::class) {
if ($this->destination->attachedTo()) {
return $this->dispatch('error', 'You must delete all resources before deleting this destination.');
}
@@ -83,7 +88,7 @@ class Show extends Component
$this->destination->delete();
return redirect()->route('destination.index');
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
return handleError($e, $this);
}
}
diff --git a/app/Livewire/ForcePasswordReset.php b/app/Livewire/ForcePasswordReset.php
index 61a2a20e9..09cdea884 100644
--- a/app/Livewire/ForcePasswordReset.php
+++ b/app/Livewire/ForcePasswordReset.php
@@ -6,6 +6,7 @@ use DanHarrin\LivewireRateLimiting\WithRateLimiting;
use Illuminate\Support\Facades\Hash;
use Illuminate\Validation\Rules\Password;
use Livewire\Component;
+use Throwable;
class ForcePasswordReset extends Component
{
@@ -31,6 +32,8 @@ class ForcePasswordReset extends Component
return redirect()->route('dashboard');
}
$this->email = auth()->user()->email;
+
+ return null;
}
public function render()
@@ -57,7 +60,7 @@ class ForcePasswordReset extends Component
}
return redirect()->route('dashboard');
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
return handleError($e, $this);
}
}
diff --git a/app/Livewire/Help.php b/app/Livewire/Help.php
index f51527fbe..864cece05 100644
--- a/app/Livewire/Help.php
+++ b/app/Livewire/Help.php
@@ -7,6 +7,7 @@ use Illuminate\Notifications\Messages\MailMessage;
use Illuminate\Support\Facades\Http;
use Livewire\Attributes\Validate;
use Livewire\Component;
+use Throwable;
class Help extends Component
{
@@ -25,14 +26,14 @@ class Help extends Component
$this->rateLimit(3, 30);
$settings = instanceSettings();
- $mail = new MailMessage;
- $mail->view(
+ $mailMessage = new MailMessage;
+ $mailMessage->view(
'emails.help',
[
'description' => $this->description,
]
);
- $mail->subject("[HELP]: {$this->subject}");
+ $mailMessage->subject("[HELP]: {$this->subject}");
$type = set_transanctional_email_settings($settings);
// Sending feedback through Cloud API
@@ -42,13 +43,15 @@ class Help extends Component
'content' => 'User: `'.auth()->user()?->email.'` with subject: `'.$this->subject.'` has the following problem: `'.$this->description.'`',
]);
} else {
- send_user_an_email($mail, auth()->user()?->email, 'hi@coollabs.io');
+ send_user_an_email($mailMessage, auth()->user()?->email, 'hi@coollabs.io');
}
$this->dispatch('success', 'Feedback sent.', 'We will get in touch with you as soon as possible.');
$this->reset('description', 'subject');
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
return handleError($e, $this);
}
+
+ return null;
}
public function render()
diff --git a/app/Livewire/NavbarDeleteTeam.php b/app/Livewire/NavbarDeleteTeam.php
index e97cceb0d..639a9543f 100644
--- a/app/Livewire/NavbarDeleteTeam.php
+++ b/app/Livewire/NavbarDeleteTeam.php
@@ -19,12 +19,10 @@ class NavbarDeleteTeam extends Component
public function delete($password)
{
- if (! data_get(InstanceSettings::get(), 'disable_two_step_confirmation')) {
- if (! Hash::check($password, Auth::user()->password)) {
- $this->addError('password', 'The provided password is incorrect.');
+ if (! data_get(InstanceSettings::get(), 'disable_two_step_confirmation') && ! Hash::check($password, Auth::user()->password)) {
+ $this->addError('password', 'The provided password is incorrect.');
- return;
- }
+ return null;
}
$currentTeam = currentTeam();
diff --git a/app/Livewire/NewActivityMonitor.php b/app/Livewire/NewActivityMonitor.php
index a9334e710..bd1474c91 100644
--- a/app/Livewire/NewActivityMonitor.php
+++ b/app/Livewire/NewActivityMonitor.php
@@ -14,7 +14,7 @@ class NewActivityMonitor extends Component
public $eventToDispatch = 'activityFinished';
- public $eventData = null;
+ public $eventData;
public $isPollingActive = false;
@@ -35,7 +35,7 @@ class NewActivityMonitor extends Component
public function hydrateActivity()
{
- $this->activity = Activity::find($this->activityId);
+ $this->activity = Activity::query()->find($this->activityId);
}
public function polling()
@@ -53,7 +53,7 @@ class NewActivityMonitor extends Component
if ($this->eventToDispatch !== null) {
if (str($this->eventToDispatch)->startsWith('App\\Events\\')) {
$causer_id = data_get($this->activity, 'causer_id');
- $user = User::find($causer_id);
+ $user = User::query()->find($causer_id);
if ($user) {
foreach ($user->teams as $team) {
$teamId = $team->id;
diff --git a/app/Livewire/Notifications/Discord.php b/app/Livewire/Notifications/Discord.php
index 57007813e..0544b7566 100644
--- a/app/Livewire/Notifications/Discord.php
+++ b/app/Livewire/Notifications/Discord.php
@@ -7,6 +7,7 @@ use App\Models\Team;
use App\Notifications\Test;
use Livewire\Attributes\Validate;
use Livewire\Component;
+use Throwable;
class Discord extends Component
{
@@ -62,9 +63,11 @@ class Discord extends Component
$this->team = auth()->user()->currentTeam();
$this->settings = $this->team->discordNotificationSettings;
$this->syncData();
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
return handleError($e, $this);
}
+
+ return null;
}
public function syncData(bool $toModel = false)
@@ -117,20 +120,24 @@ class Discord extends Component
'discordWebhookUrl.required' => 'Discord Webhook URL is required.',
]);
$this->saveModel();
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
$this->discordEnabled = false;
return handleError($e, $this);
}
+
+ return null;
}
public function instantSave()
{
try {
$this->syncData(true);
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
return handleError($e, $this);
}
+
+ return null;
}
public function submit()
@@ -139,9 +146,11 @@ class Discord extends Component
$this->resetErrorBag();
$this->syncData(true);
$this->saveModel();
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
return handleError($e, $this);
}
+
+ return null;
}
public function saveModel()
@@ -156,9 +165,11 @@ class Discord extends Component
try {
$this->team->notify(new Test(channel: 'discord'));
$this->dispatch('success', 'Test notification sent.');
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
return handleError($e, $this);
}
+
+ return null;
}
public function render()
diff --git a/app/Livewire/Notifications/Email.php b/app/Livewire/Notifications/Email.php
index 3ed20f907..dc26bf915 100644
--- a/app/Livewire/Notifications/Email.php
+++ b/app/Livewire/Notifications/Email.php
@@ -5,10 +5,12 @@ namespace App\Livewire\Notifications;
use App\Models\EmailNotificationSettings;
use App\Models\Team;
use App\Notifications\Test;
+use Exception;
use Illuminate\Support\Facades\RateLimiter;
use Livewire\Attributes\Locked;
use Livewire\Attributes\Validate;
use Livewire\Component;
+use Throwable;
class Email extends Component
{
@@ -109,9 +111,11 @@ class Email extends Component
$this->settings = $this->team->emailNotificationSettings;
$this->syncData();
$this->testEmailAddress = auth()->user()->email;
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
return handleError($e, $this);
}
+
+ return null;
}
public function syncData(bool $toModel = false)
@@ -185,9 +189,11 @@ class Email extends Component
try {
$this->resetErrorBag();
$this->saveModel();
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
return handleError($e, $this);
}
+
+ return null;
}
public function saveModel()
@@ -210,9 +216,9 @@ class Email extends Component
$this->resendEnabled = false;
$this->saveModel();
- return;
+ return null;
}
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
if ($type === 'SMTP') {
$this->smtpEnabled = false;
} elseif ($type === 'Resend') {
@@ -223,6 +229,8 @@ class Email extends Component
} finally {
$this->dispatch('refresh');
}
+
+ return null;
}
public function submitSmtp()
@@ -266,11 +274,13 @@ class Email extends Component
$this->settings->save();
$this->dispatch('success', 'SMTP settings updated.');
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
$this->smtpEnabled = false;
return handleError($e);
}
+
+ return null;
}
public function submitResend()
@@ -301,9 +311,11 @@ class Email extends Component
$this->settings->save();
$this->dispatch('success', 'Resend settings updated.');
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
return handleError($e, $this);
}
+
+ return null;
}
public function sendTestEmail()
@@ -327,11 +339,13 @@ class Email extends Component
);
if (! $executed) {
- throw new \Exception('Too many messages sent!');
+ throw new Exception('Too many messages sent!');
}
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
return handleError($e, $this);
}
+
+ return null;
}
public function copyFromInstanceSettings()
diff --git a/app/Livewire/Notifications/Pushover.php b/app/Livewire/Notifications/Pushover.php
index f1e4c464d..0c14fa023 100644
--- a/app/Livewire/Notifications/Pushover.php
+++ b/app/Livewire/Notifications/Pushover.php
@@ -8,6 +8,7 @@ use App\Notifications\Test;
use Livewire\Attributes\Locked;
use Livewire\Attributes\Validate;
use Livewire\Component;
+use Throwable;
class Pushover extends Component
{
@@ -70,9 +71,11 @@ class Pushover extends Component
$this->team = auth()->user()->currentTeam();
$this->settings = $this->team->pushoverNotificationSettings;
$this->syncData();
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
return handleError($e, $this);
}
+
+ return null;
}
public function syncData(bool $toModel = false)
@@ -129,24 +132,28 @@ class Pushover extends Component
'pushoverApiToken.required' => 'Pushover API Token is required.',
]);
$this->saveModel();
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
$this->pushoverEnabled = false;
return handleError($e, $this);
} finally {
$this->dispatch('refresh');
}
+
+ return null;
}
public function instantSave()
{
try {
$this->syncData(true);
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
return handleError($e, $this);
} finally {
$this->dispatch('refresh');
}
+
+ return null;
}
public function submit()
@@ -155,9 +162,11 @@ class Pushover extends Component
$this->resetErrorBag();
$this->syncData(true);
$this->saveModel();
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
return handleError($e, $this);
}
+
+ return null;
}
public function saveModel()
@@ -172,9 +181,11 @@ class Pushover extends Component
try {
$this->team->notify(new Test(channel: 'pushover'));
$this->dispatch('success', 'Test notification sent.');
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
return handleError($e, $this);
}
+
+ return null;
}
public function render()
diff --git a/app/Livewire/Notifications/Slack.php b/app/Livewire/Notifications/Slack.php
index f47ad8a97..03fa171c2 100644
--- a/app/Livewire/Notifications/Slack.php
+++ b/app/Livewire/Notifications/Slack.php
@@ -8,6 +8,7 @@ use App\Notifications\Test;
use Livewire\Attributes\Locked;
use Livewire\Attributes\Validate;
use Livewire\Component;
+use Throwable;
class Slack extends Component
{
@@ -67,9 +68,11 @@ class Slack extends Component
$this->team = auth()->user()->currentTeam();
$this->settings = $this->team->slackNotificationSettings;
$this->syncData();
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
return handleError($e, $this);
}
+
+ return null;
}
public function syncData(bool $toModel = false)
@@ -122,24 +125,28 @@ class Slack extends Component
'slackWebhookUrl.required' => 'Slack Webhook URL is required.',
]);
$this->saveModel();
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
$this->slackEnabled = false;
return handleError($e, $this);
} finally {
$this->dispatch('refresh');
}
+
+ return null;
}
public function instantSave()
{
try {
$this->syncData(true);
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
return handleError($e, $this);
} finally {
$this->dispatch('refresh');
}
+
+ return null;
}
public function submit()
@@ -148,9 +155,11 @@ class Slack extends Component
$this->resetErrorBag();
$this->syncData(true);
$this->saveModel();
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
return handleError($e, $this);
}
+
+ return null;
}
public function saveModel()
@@ -165,9 +174,11 @@ class Slack extends Component
try {
$this->team->notify(new Test(channel: 'slack'));
$this->dispatch('success', 'Test notification sent.');
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
return handleError($e, $this);
}
+
+ return null;
}
public function render()
diff --git a/app/Livewire/Notifications/Telegram.php b/app/Livewire/Notifications/Telegram.php
index 01afb4ac6..2f6c6f3be 100644
--- a/app/Livewire/Notifications/Telegram.php
+++ b/app/Livewire/Notifications/Telegram.php
@@ -8,6 +8,7 @@ use App\Notifications\Test;
use Livewire\Attributes\Locked;
use Livewire\Attributes\Validate;
use Livewire\Component;
+use Throwable;
class Telegram extends Component
{
@@ -106,9 +107,11 @@ class Telegram extends Component
$this->team = auth()->user()->currentTeam();
$this->settings = $this->team->telegramNotificationSettings;
$this->syncData();
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
return handleError($e, $this);
}
+
+ return null;
}
public function syncData(bool $toModel = false)
@@ -183,11 +186,13 @@ class Telegram extends Component
{
try {
$this->syncData(true);
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
return handleError($e, $this);
} finally {
$this->dispatch('refresh');
}
+
+ return null;
}
public function submit()
@@ -196,9 +201,11 @@ class Telegram extends Component
$this->resetErrorBag();
$this->syncData(true);
$this->saveModel();
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
return handleError($e, $this);
}
+
+ return null;
}
public function instantSaveTelegramEnabled()
@@ -212,13 +219,15 @@ class Telegram extends Component
'telegramChatId.required' => 'Telegram Chat ID is required.',
]);
$this->saveModel();
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
$this->telegramEnabled = false;
return handleError($e, $this);
} finally {
$this->dispatch('refresh');
}
+
+ return null;
}
public function saveModel()
@@ -233,9 +242,11 @@ class Telegram extends Component
try {
$this->team->notify(new Test(channel: 'telegram'));
$this->dispatch('success', 'Test notification sent.');
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
return handleError($e, $this);
}
+
+ return null;
}
public function render()
diff --git a/app/Livewire/Profile/Index.php b/app/Livewire/Profile/Index.php
index 53314cd5c..70f82da15 100644
--- a/app/Livewire/Profile/Index.php
+++ b/app/Livewire/Profile/Index.php
@@ -7,6 +7,7 @@ use Illuminate\Support\Facades\Hash;
use Illuminate\Validation\Rules\Password;
use Livewire\Attributes\Validate;
use Livewire\Component;
+use Throwable;
class Index extends Component
{
@@ -41,9 +42,11 @@ class Index extends Component
]);
$this->dispatch('success', 'Profile updated.');
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
return handleError($e, $this);
}
+
+ return null;
}
public function resetPassword()
@@ -56,12 +59,12 @@ class Index extends Component
if (! Hash::check($this->current_password, auth()->user()->password)) {
$this->dispatch('error', 'Current password is incorrect.');
- return;
+ return null;
}
if ($this->new_password !== $this->new_password_confirmation) {
$this->dispatch('error', 'The two new passwords does not match.');
- return;
+ return null;
}
auth()->user()->update([
'password' => Hash::make($this->new_password),
@@ -70,9 +73,11 @@ class Index extends Component
$this->current_password = '';
$this->new_password = '';
$this->new_password_confirmation = '';
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
return handleError($e, $this);
}
+
+ return null;
}
public function render()
diff --git a/app/Livewire/Project/AddEmpty.php b/app/Livewire/Project/AddEmpty.php
index 07873c059..f91c977c6 100644
--- a/app/Livewire/Project/AddEmpty.php
+++ b/app/Livewire/Project/AddEmpty.php
@@ -5,6 +5,7 @@ namespace App\Livewire\Project;
use App\Models\Project;
use Livewire\Attributes\Validate;
use Livewire\Component;
+use Throwable;
use Visus\Cuid2\Cuid2;
class AddEmpty extends Component
@@ -19,7 +20,7 @@ class AddEmpty extends Component
{
try {
$this->validate();
- $project = Project::create([
+ $project = Project::query()->create([
'name' => $this->name,
'description' => $this->description,
'team_id' => currentTeam()->id,
@@ -27,7 +28,7 @@ class AddEmpty extends Component
]);
return redirect()->route('project.show', $project->uuid);
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
return handleError($e, $this);
}
}
diff --git a/app/Livewire/Project/Application/Advanced.php b/app/Livewire/Project/Application/Advanced.php
index cb63f0e1a..99b40c62d 100644
--- a/app/Livewire/Project/Application/Advanced.php
+++ b/app/Livewire/Project/Application/Advanced.php
@@ -5,6 +5,7 @@ namespace App\Livewire\Project\Application;
use App\Models\Application;
use Livewire\Attributes\Validate;
use Livewire\Component;
+use Throwable;
class Advanced extends Component
{
@@ -71,9 +72,11 @@ class Advanced extends Component
{
try {
$this->syncData();
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
return handleError($e, $this);
}
+
+ return null;
}
public function syncData(bool $toModel = false)
@@ -127,14 +130,12 @@ class Advanced extends Component
public function instantSave()
{
try {
- if ($this->isLogDrainEnabled) {
- if (! $this->application->destination->server->isLogDrainEnabled()) {
- $this->isLogDrainEnabled = false;
- $this->syncData(true);
- $this->dispatch('error', 'Log drain is not enabled on this server.');
+ if ($this->isLogDrainEnabled && ! $this->application->destination->server->isLogDrainEnabled()) {
+ $this->isLogDrainEnabled = false;
+ $this->syncData(true);
+ $this->dispatch('error', 'Log drain is not enabled on this server.');
- return;
- }
+ return null;
}
if ($this->application->isForceHttpsEnabled() !== $this->isForceHttpsEnabled ||
$this->application->isGzipEnabled() !== $this->isGzipEnabled ||
@@ -151,9 +152,11 @@ class Advanced extends Component
$this->syncData(true);
$this->dispatch('success', 'Settings saved.');
$this->dispatch('configurationChanged');
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
return handleError($e, $this);
}
+
+ return null;
}
public function submit()
@@ -165,13 +168,15 @@ class Advanced extends Component
$this->gpuDeviceIds = null;
$this->syncData(true);
- return;
+ return null;
}
$this->syncData(true);
$this->dispatch('success', 'Settings saved.');
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
return handleError($e, $this);
}
+
+ return null;
}
public function saveCustomName()
diff --git a/app/Livewire/Project/Application/Deployment/Index.php b/app/Livewire/Project/Application/Deployment/Index.php
index b847c40ef..e03a28cb5 100644
--- a/app/Livewire/Project/Application/Deployment/Index.php
+++ b/app/Livewire/Project/Application/Deployment/Index.php
@@ -49,6 +49,8 @@ class Index extends Component
$this->current_url = url()->current();
$this->show_pull_request_only();
$this->show_more();
+
+ return null;
}
private function show_pull_request_only()
@@ -78,9 +80,9 @@ class Index extends Component
public function previous_page(?int $take = null)
{
if ($take) {
- $this->skip = $this->skip - $take;
+ $this->skip -= $take;
}
- $this->skip = $this->skip - $this->default_take;
+ $this->skip -= $this->default_take;
if ($this->skip < 0) {
$this->show_prev = false;
$this->skip = 0;
@@ -91,7 +93,7 @@ class Index extends Component
public function next_page(?int $take = null)
{
if ($take) {
- $this->skip = $this->skip + $take;
+ $this->skip += $take;
}
$this->show_prev = true;
$this->load_deployments();
diff --git a/app/Livewire/Project/Application/Deployment/Show.php b/app/Livewire/Project/Application/Deployment/Show.php
index 4e86b5c7e..3289efe26 100644
--- a/app/Livewire/Project/Application/Deployment/Show.php
+++ b/app/Livewire/Project/Application/Deployment/Show.php
@@ -34,7 +34,7 @@ class Show extends Component
if (! $application) {
return redirect()->route('dashboard');
}
- $application_deployment_queue = ApplicationDeploymentQueue::where('deployment_uuid', $deploymentUuid)->first();
+ $application_deployment_queue = ApplicationDeploymentQueue::query()->where('deployment_uuid', $deploymentUuid)->first();
if (! $application_deployment_queue) {
return redirect()->route('project.application.deployment.index', [
'project_uuid' => $project->uuid,
@@ -45,6 +45,8 @@ class Show extends Component
$this->application = $application;
$this->application_deployment_queue = $application_deployment_queue;
$this->deployment_uuid = $deploymentUuid;
+
+ return null;
}
public function refreshQueue()
diff --git a/app/Livewire/Project/Application/DeploymentNavbar.php b/app/Livewire/Project/Application/DeploymentNavbar.php
index 87b40d4dc..b88bafbd7 100644
--- a/app/Livewire/Project/Application/DeploymentNavbar.php
+++ b/app/Livewire/Project/Application/DeploymentNavbar.php
@@ -8,6 +8,7 @@ use App\Models\ApplicationDeploymentQueue;
use App\Models\Server;
use Illuminate\Support\Carbon;
use Livewire\Component;
+use Throwable;
class DeploymentNavbar extends Component
{
@@ -45,9 +46,11 @@ class DeploymentNavbar extends Component
{
try {
force_start_deployment($this->application_deployment_queue);
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
return handleError($e, $this);
}
+
+ return null;
}
public function cancel()
@@ -57,9 +60,9 @@ class DeploymentNavbar extends Component
$server_id = $this->application_deployment_queue->server_id ?? $this->application->destination->server_id;
try {
if ($this->application->settings->is_build_server_enabled) {
- $server = Server::find($build_server_id);
+ $server = Server::query()->find($build_server_id);
} else {
- $server = Server::find($server_id);
+ $server = Server::query()->find($server_id);
}
if ($this->application_deployment_queue->logs) {
$previous_logs = json_decode($this->application_deployment_queue->logs, associative: true, flags: JSON_THROW_ON_ERROR);
@@ -78,7 +81,7 @@ class DeploymentNavbar extends Component
]);
}
instant_remote_process([$kill_command], $server);
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
return handleError($e, $this);
} finally {
$this->application_deployment_queue->update([
@@ -87,5 +90,7 @@ class DeploymentNavbar extends Component
]);
next_after_cancel($server);
}
+
+ return null;
}
}
diff --git a/app/Livewire/Project/Application/General.php b/app/Livewire/Project/Application/General.php
index d1cc3476c..862205501 100644
--- a/app/Livewire/Project/Application/General.php
+++ b/app/Livewire/Project/Application/General.php
@@ -6,7 +6,9 @@ use App\Actions\Application\GenerateConfig;
use App\Models\Application;
use Illuminate\Support\Collection;
use Livewire\Component;
+use Livewire\Features\SupportEvents\Event;
use Spatie\Url\Url;
+use Throwable;
use Visus\Cuid2\Cuid2;
class General extends Component
@@ -141,7 +143,7 @@ class General extends Component
return;
}
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
$this->dispatch('error', $e->getMessage());
}
if ($this->application->build_pack === 'dockercompose') {
@@ -179,13 +181,11 @@ class General extends Component
if ($this->ports_exposes !== $this->application->ports_exposes || $this->is_container_label_escape_enabled !== $this->application->settings->is_container_label_escape_enabled) {
$this->resetDefaultLabels(false);
}
- if ($this->is_preserve_repository_enabled !== $this->application->settings->is_preserve_repository_enabled) {
- if ($this->application->settings->is_preserve_repository_enabled === false) {
- $this->application->fileStorages->each(function ($storage) {
- $storage->is_based_on_git = $this->application->settings->is_preserve_repository_enabled;
- $storage->save();
- });
- }
+ if ($this->is_preserve_repository_enabled !== $this->application->settings->is_preserve_repository_enabled && $this->application->settings->is_preserve_repository_enabled === false) {
+ $this->application->fileStorages->each(function ($storage) {
+ $storage->is_based_on_git = $this->application->settings->is_preserve_repository_enabled;
+ $storage->save();
+ });
}
}
@@ -193,7 +193,7 @@ class General extends Component
{
try {
if ($isInit && $this->application->docker_compose_raw) {
- return;
+ return null;
}
// Must reload the application to get the latest database changes
@@ -204,14 +204,14 @@ class General extends Component
if (is_null($this->parsedServices)) {
$this->dispatch('error', 'Failed to parse your docker-compose file. Please check the syntax and try again.');
- return;
+ return null;
}
$this->application->parse();
$this->dispatch('success', 'Docker compose file loaded.');
$this->dispatch('compose_loaded');
$this->dispatch('refreshStorages');
$this->dispatch('refreshEnvs');
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
$this->application->docker_compose_location = $this->initialDockerComposeLocation;
$this->application->save();
@@ -219,12 +219,14 @@ class General extends Component
} finally {
$this->initLoadingCompose = false;
}
+
+ return null;
}
public function generateDomain(string $serviceName)
{
- $uuid = new Cuid2;
- $domain = generateFqdn($this->application->destination->server, $uuid);
+ $cuid2 = new Cuid2;
+ $domain = generateFqdn($this->application->destination->server, $cuid2);
$this->parsedServiceDomains[$serviceName]['domain'] = $domain;
$this->application->docker_compose_domains = json_encode($this->parsedServiceDomains);
$this->application->save();
@@ -295,7 +297,7 @@ class General extends Component
{
try {
if ($this->application->settings->is_container_label_readonly_enabled && ! $manualReset) {
- return;
+ return null;
}
$this->customLabels = str(implode('|coolify|', generateLabelsApplication($this->application)))->replace('|coolify|', "\n");
$this->ports_exposes = $this->application->ports_exposes;
@@ -306,9 +308,11 @@ class General extends Component
$this->loadComposeFile();
}
$this->dispatch('configurationChanged');
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
return handleError($e, $this);
}
+
+ return null;
}
public function checkFqdns($showToaster = true)
@@ -334,14 +338,16 @@ class General extends Component
if ($has_www === 0 && $this->application->redirect === 'www') {
$this->dispatch('error', 'You want to redirect to www, but you do not have a www domain set.
Please add www to your domain list and as an A DNS record (if applicable).');
- return;
+ return null;
}
$this->application->save();
$this->resetDefaultLabels();
$this->dispatch('success', 'Redirect updated.');
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
return handleError($e, $this);
}
+
+ return null;
}
public function submit($showToaster = true)
@@ -377,8 +383,8 @@ class General extends Component
if ($this->application->build_pack === 'dockercompose' && $this->initialDockerComposeLocation !== $this->application->docker_compose_location) {
$compose_return = $this->loadComposeFile();
- if ($compose_return instanceof \Livewire\Features\SupportEvents\Event) {
- return;
+ if ($compose_return instanceof Event) {
+ return null;
}
}
$this->validate();
@@ -410,8 +416,8 @@ class General extends Component
if ($this->application->build_pack === 'dockercompose') {
$this->application->docker_compose_domains = json_encode($this->parsedServiceDomains);
- foreach ($this->parsedServiceDomains as $serviceName => $service) {
- $domain = data_get($service, 'domain');
+ foreach ($this->parsedServiceDomains as $parsedServiceDomain) {
+ $domain = data_get($parsedServiceDomain, 'domain');
if ($domain) {
if (! validate_dns_entry($domain, $this->application->destination->server)) {
$showToaster && $this->dispatch('error', 'Validating DNS failed.', "Make sure you have added the DNS records correctly.
$domain->{$this->application->destination->server->ip}
Check this documentation for further help.");
@@ -425,8 +431,10 @@ class General extends Component
}
$this->application->custom_labels = base64_encode($this->customLabels);
$this->application->save();
- $showToaster && ! $warning && $this->dispatch('success', 'Application settings updated!');
- } catch (\Throwable $e) {
+ if ($showToaster && ! $warning) {
+ $this->dispatch('success', 'Application settings updated!');
+ }
+ } catch (Throwable $e) {
$originalFqdn = $this->application->getOriginal('fqdn');
if ($originalFqdn !== $this->application->fqdn) {
$this->application->fqdn = $originalFqdn;
@@ -436,6 +444,8 @@ class General extends Component
} finally {
$this->dispatch('configurationChanged');
}
+
+ return null;
}
public function downloadConfig()
diff --git a/app/Livewire/Project/Application/Heading.php b/app/Livewire/Project/Application/Heading.php
index 0afc9123a..26d9275dc 100644
--- a/app/Livewire/Project/Application/Heading.php
+++ b/app/Livewire/Project/Application/Heading.php
@@ -66,22 +66,22 @@ class Heading extends Component
if ($this->application->build_pack === 'dockercompose' && is_null($this->application->docker_compose_raw)) {
$this->dispatch('error', 'Failed to deploy', 'Please load a Compose file first.');
- return;
+ return null;
}
if ($this->application->destination->server->isSwarm() && str($this->application->docker_registry_image_name)->isEmpty()) {
$this->dispatch('error', 'Failed to deploy.', 'To deploy to a Swarm cluster you must set a Docker image name first.');
- return;
+ return null;
}
if (data_get($this->application, 'settings.is_build_server_enabled') && str($this->application->docker_registry_image_name)->isEmpty()) {
$this->dispatch('error', 'Failed to deploy.', 'To use a build server, you must first set a Docker image.
More information here: documentation');
- return;
+ return null;
}
if ($this->application->additional_servers->count() > 0 && str($this->application->docker_registry_image_name)->isEmpty()) {
$this->dispatch('error', 'Failed to deploy.', 'Before deploying to multiple servers, you must first set a Docker image in the General tab.
More information here: documentation');
- return;
+ return null;
}
$this->setDeploymentUuid();
queue_application_deployment(
@@ -123,7 +123,7 @@ class Heading extends Component
if ($this->application->additional_servers->count() > 0 && str($this->application->docker_registry_image_name)->isEmpty()) {
$this->dispatch('error', 'Failed to deploy', 'Before deploying to multiple servers, you must first set a Docker image in the General tab.
More information here: documentation');
- return;
+ return null;
}
$this->setDeploymentUuid();
queue_application_deployment(
diff --git a/app/Livewire/Project/Application/Preview/Form.php b/app/Livewire/Project/Application/Preview/Form.php
index edcab44c8..208574de9 100644
--- a/app/Livewire/Project/Application/Preview/Form.php
+++ b/app/Livewire/Project/Application/Preview/Form.php
@@ -6,6 +6,7 @@ use App\Models\Application;
use Livewire\Attributes\Validate;
use Livewire\Component;
use Spatie\Url\Url;
+use Throwable;
class Form extends Component
{
@@ -19,9 +20,11 @@ class Form extends Component
try {
$this->previewUrlTemplate = $this->application->preview_url_template;
$this->generateRealUrl();
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
return handleError($e, $this);
}
+
+ return null;
}
public function submit()
@@ -33,9 +36,11 @@ class Form extends Component
$this->application->save();
$this->dispatch('success', 'Preview url template updated.');
$this->generateRealUrl();
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
return handleError($e, $this);
}
+
+ return null;
}
public function resetToDefault()
@@ -46,9 +51,11 @@ class Form extends Component
$this->application->save();
$this->generateRealUrl();
$this->dispatch('success', 'Preview url template updated.');
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
return handleError($e, $this);
}
+
+ return null;
}
public function generateRealUrl()
diff --git a/app/Livewire/Project/Application/Previews.php b/app/Livewire/Project/Application/Previews.php
index bdf62706c..16235e7ce 100644
--- a/app/Livewire/Project/Application/Previews.php
+++ b/app/Livewire/Project/Application/Previews.php
@@ -6,11 +6,13 @@ use App\Actions\Docker\GetContainersStatus;
use App\Models\Application;
use App\Models\ApplicationPreview;
use Carbon\Carbon;
+use Exception;
use Illuminate\Process\InvokedProcess;
use Illuminate\Support\Collection;
use Illuminate\Support\Facades\Process;
use Livewire\Component;
use Spatie\Url\Url;
+use Throwable;
use Visus\Cuid2\Cuid2;
class Previews extends Component
@@ -41,11 +43,13 @@ class Previews extends Component
['rate_limit_remaining' => $rate_limit_remaining, 'data' => $data] = githubApi(source: $this->application->source, endpoint: "/repos/{$this->application->git_repository}/pulls");
$this->rate_limit_remaining = $rate_limit_remaining;
$this->pull_requests = $data->sortBy('number')->values();
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
$this->rate_limit_remaining = 0;
return handleError($e, $this);
}
+
+ return null;
}
public function save_preview($preview_id)
@@ -65,13 +69,19 @@ class Previews extends Component
}
if (! $preview) {
- throw new \Exception('Preview not found');
+ throw new Exception('Preview not found');
}
- $success && $preview->save();
- $success && $this->dispatch('success', 'Preview saved.
Do not forget to redeploy the preview to apply the changes.');
- } catch (\Throwable $e) {
+ if ($success) {
+ $preview->save();
+ }
+ if ($success) {
+ $this->dispatch('success', 'Preview saved.
Do not forget to redeploy the preview to apply the changes.');
+ }
+ } catch (Throwable $e) {
return handleError($e, $this);
}
+
+ return null;
}
public function generate_preview($preview_id)
@@ -95,8 +105,8 @@ class Previews extends Component
$template = $this->application->preview_url_template;
$host = $url->getHost();
$schema = $url->getScheme();
- $random = new Cuid2;
- $preview_fqdn = str_replace('{{random}}', $random, $template);
+ $cuid2 = new Cuid2;
+ $preview_fqdn = str_replace('{{random}}', $cuid2, $template);
$preview_fqdn = str_replace('{{domain}}', $host, $preview_fqdn);
$preview_fqdn = str_replace('{{pr_id}}', $preview->pull_request_id, $preview_fqdn);
$preview_fqdn = "$schema://$preview_fqdn";
@@ -110,9 +120,9 @@ class Previews extends Component
try {
if ($this->application->build_pack === 'dockercompose') {
$this->setDeploymentUuid();
- $found = ApplicationPreview::where('application_id', $this->application->id)->where('pull_request_id', $pull_request_id)->first();
+ $found = ApplicationPreview::query()->where('application_id', $this->application->id)->where('pull_request_id', $pull_request_id)->first();
if (! $found && ! is_null($pull_request_html_url)) {
- $found = ApplicationPreview::create([
+ $found = ApplicationPreview::query()->create([
'application_id' => $this->application->id,
'pull_request_id' => $pull_request_id,
'pull_request_html_url' => $pull_request_html_url,
@@ -123,9 +133,9 @@ class Previews extends Component
$this->application->refresh();
} else {
$this->setDeploymentUuid();
- $found = ApplicationPreview::where('application_id', $this->application->id)->where('pull_request_id', $pull_request_id)->first();
+ $found = ApplicationPreview::query()->where('application_id', $this->application->id)->where('pull_request_id', $pull_request_id)->first();
if (! $found && ! is_null($pull_request_html_url)) {
- $found = ApplicationPreview::create([
+ $found = ApplicationPreview::query()->create([
'application_id' => $this->application->id,
'pull_request_id' => $pull_request_id,
'pull_request_html_url' => $pull_request_html_url,
@@ -136,9 +146,11 @@ class Previews extends Component
$this->dispatch('update_links');
$this->dispatch('success', 'Preview added.');
}
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
return handleError($e, $this);
}
+
+ return null;
}
public function add_and_deploy(int $pull_request_id, ?string $pull_request_html_url = null)
@@ -151,9 +163,9 @@ class Previews extends Component
{
try {
$this->setDeploymentUuid();
- $found = ApplicationPreview::where('application_id', $this->application->id)->where('pull_request_id', $pull_request_id)->first();
+ $found = ApplicationPreview::query()->where('application_id', $this->application->id)->where('pull_request_id', $pull_request_id)->first();
if (! $found && ! is_null($pull_request_html_url)) {
- ApplicationPreview::create([
+ ApplicationPreview::query()->create([
'application_id' => $this->application->id,
'pull_request_id' => $pull_request_id,
'pull_request_html_url' => $pull_request_html_url,
@@ -173,7 +185,7 @@ class Previews extends Component
'deployment_uuid' => $this->deployment_uuid,
'environment_uuid' => $this->parameters['environment_uuid'],
]);
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
return handleError($e, $this);
}
}
@@ -201,9 +213,11 @@ class Previews extends Component
$this->application->refresh();
$this->dispatch('containerStatusUpdated');
$this->dispatch('success', 'Preview Deployment stopped.');
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
return handleError($e, $this);
}
+
+ return null;
}
public function delete(int $pull_request_id)
@@ -219,7 +233,7 @@ class Previews extends Component
$this->stopContainers($containers, $server, $timeout);
}
- ApplicationPreview::where('application_id', $this->application->id)
+ ApplicationPreview::query()->where('application_id', $this->application->id)
->where('pull_request_id', $pull_request_id)
->first()
->delete();
@@ -227,9 +241,11 @@ class Previews extends Component
$this->application->refresh();
$this->dispatch('update_links');
$this->dispatch('success', 'Preview deleted.');
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
return handleError($e, $this);
}
+
+ return null;
}
private function stopContainers(array $containers, $server, int $timeout)
@@ -241,7 +257,7 @@ class Previews extends Component
}
$startTime = Carbon::now()->getTimestamp();
- while (count($processes) > 0) {
+ while ($processes !== []) {
$finishedProcesses = array_filter($processes, function ($process) {
return ! $process->running();
});
diff --git a/app/Livewire/Project/Application/PreviewsCompose.php b/app/Livewire/Project/Application/PreviewsCompose.php
index b3e838bb3..cc9a016c5 100644
--- a/app/Livewire/Project/Application/PreviewsCompose.php
+++ b/app/Livewire/Project/Application/PreviewsCompose.php
@@ -44,8 +44,8 @@ class PreviewsCompose extends Component
$template = $this->preview->application->preview_url_template;
$host = $url->getHost();
$schema = $url->getScheme();
- $random = new Cuid2;
- $preview_fqdn = str_replace('{{random}}', $random, $template);
+ $cuid2 = new Cuid2;
+ $preview_fqdn = str_replace('{{random}}', $cuid2, $template);
$preview_fqdn = str_replace('{{domain}}', $host, $preview_fqdn);
$preview_fqdn = str_replace('{{pr_id}}', $this->preview->pull_request_id, $preview_fqdn);
$preview_fqdn = "$schema://$preview_fqdn";
diff --git a/app/Livewire/Project/Application/Rollback.php b/app/Livewire/Project/Application/Rollback.php
index ff5db1e08..fe06912fc 100644
--- a/app/Livewire/Project/Application/Rollback.php
+++ b/app/Livewire/Project/Application/Rollback.php
@@ -4,6 +4,7 @@ namespace App\Livewire\Project\Application;
use App\Models\Application;
use Livewire\Component;
+use Throwable;
use Visus\Cuid2\Cuid2;
class Rollback extends Component
@@ -23,11 +24,11 @@ class Rollback extends Component
public function rollbackImage($commit)
{
- $deployment_uuid = new Cuid2;
+ $cuid2 = new Cuid2;
queue_application_deployment(
application: $this->application,
- deployment_uuid: $deployment_uuid,
+ deployment_uuid: $cuid2,
commit: $commit,
rollback: true,
force_rebuild: false,
@@ -36,7 +37,7 @@ class Rollback extends Component
return redirect()->route('project.application.deployment.show', [
'project_uuid' => $this->parameters['project_uuid'],
'application_uuid' => $this->parameters['application_uuid'],
- 'deployment_uuid' => $deployment_uuid,
+ 'deployment_uuid' => $cuid2,
'environment_uuid' => $this->parameters['environment_uuid'],
]);
}
@@ -73,7 +74,7 @@ class Rollback extends Component
$showToast && $this->dispatch('success', 'Images loaded.');
return [];
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
return handleError($e, $this);
}
}
diff --git a/app/Livewire/Project/Application/Source.php b/app/Livewire/Project/Application/Source.php
index ade297d50..bd80ba0cf 100644
--- a/app/Livewire/Project/Application/Source.php
+++ b/app/Livewire/Project/Application/Source.php
@@ -7,6 +7,7 @@ use App\Models\PrivateKey;
use Livewire\Attributes\Locked;
use Livewire\Attributes\Validate;
use Livewire\Component;
+use Throwable;
class Source extends Component
{
@@ -35,7 +36,7 @@ class Source extends Component
try {
$this->syncData();
$this->getPrivateKeys();
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
handleError($e, $this);
}
}
@@ -75,9 +76,11 @@ class Source extends Component
$this->application->refresh();
$this->privateKeyName = $this->application->private_key->name;
$this->dispatch('success', 'Private key updated!');
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
return handleError($e, $this);
}
+
+ return null;
}
public function submit()
@@ -88,8 +91,10 @@ class Source extends Component
}
$this->syncData(true);
$this->dispatch('success', 'Application source updated!');
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
return handleError($e, $this);
}
+
+ return null;
}
}
diff --git a/app/Livewire/Project/Application/Swarm.php b/app/Livewire/Project/Application/Swarm.php
index 197dc41ed..ea3c3f7c0 100644
--- a/app/Livewire/Project/Application/Swarm.php
+++ b/app/Livewire/Project/Application/Swarm.php
@@ -5,6 +5,7 @@ namespace App\Livewire\Project\Application;
use App\Models\Application;
use Livewire\Attributes\Validate;
use Livewire\Component;
+use Throwable;
class Swarm extends Component
{
@@ -23,9 +24,11 @@ class Swarm extends Component
{
try {
$this->syncData();
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
return handleError($e, $this);
}
+
+ return null;
}
public function syncData(bool $toModel = false)
@@ -53,9 +56,11 @@ class Swarm extends Component
try {
$this->syncData(true);
$this->dispatch('success', 'Swarm settings updated.');
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
return handleError($e, $this);
}
+
+ return null;
}
public function submit()
@@ -63,9 +68,11 @@ class Swarm extends Component
try {
$this->syncData(true);
$this->dispatch('success', 'Swarm settings updated.');
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
return handleError($e, $this);
}
+
+ return null;
}
public function render()
diff --git a/app/Livewire/Project/CloneMe.php b/app/Livewire/Project/CloneMe.php
index 593355c44..172d1860f 100644
--- a/app/Livewire/Project/CloneMe.php
+++ b/app/Livewire/Project/CloneMe.php
@@ -5,6 +5,7 @@ namespace App\Livewire\Project;
use App\Models\Environment;
use App\Models\Project;
use App\Models\Server;
+use Exception;
use Livewire\Component;
use Visus\Cuid2\Cuid2;
@@ -43,11 +44,11 @@ class CloneMe extends Component
public function mount($project_uuid)
{
$this->project_uuid = $project_uuid;
- $this->project = Project::where('uuid', $project_uuid)->firstOrFail();
+ $this->project = Project::query()->where('uuid', $project_uuid)->firstOrFail();
$this->environment = $this->project->environments->where('uuid', $this->environment_uuid)->first();
$this->project_id = $this->project->id;
$this->servers = currentTeam()->servers;
- $this->newName = str($this->project->name.'-clone-'.(string) new Cuid2)->slug();
+ $this->newName = str($this->project->name.'-clone-'.new Cuid2)->slug();
}
public function render()
@@ -77,11 +78,11 @@ class CloneMe extends Component
'newName' => 'required',
]);
if ($type === 'project') {
- $foundProject = Project::where('name', $this->newName)->first();
+ $foundProject = Project::query()->where('name', $this->newName)->first();
if ($foundProject) {
- throw new \Exception('Project with the same name already exists.');
+ throw new Exception('Project with the same name already exists.');
}
- $project = Project::create([
+ $project = Project::query()->create([
'name' => $this->newName,
'team_id' => currentTeam()->id,
'description' => $this->project->description.' (clone)',
@@ -96,7 +97,7 @@ class CloneMe extends Component
} else {
$foundEnv = $this->project->environments()->where('name', $this->newName)->first();
if ($foundEnv) {
- throw new \Exception('Environment with the same name already exists.');
+ throw new Exception('Environment with the same name already exists.');
}
$project = $this->project;
$environment = $this->project->environments()->create([
@@ -126,9 +127,9 @@ class CloneMe extends Component
$newEnvironmentVariable->save();
}
$persistentVolumes = $application->persistentStorages()->get();
- foreach ($persistentVolumes as $volume) {
- $newPersistentVolume = $volume->replicate()->fill([
- 'name' => $newApplication->uuid.'-'.str($volume->name)->afterLast('-'),
+ foreach ($persistentVolumes as $persistentVolume) {
+ $newPersistentVolume = $persistentVolume->replicate()->fill([
+ 'name' => $newApplication->uuid.'-'.str($persistentVolume->name)->afterLast('-'),
'resource_id' => $newApplication->id,
]);
$newPersistentVolume->save();
@@ -178,7 +179,7 @@ class CloneMe extends Component
'project_uuid' => $project->uuid,
'environment_uuid' => $environment->uuid,
]);
- } catch (\Exception $e) {
+ } catch (Exception $e) {
return handleError($e, $this);
}
}
diff --git a/app/Livewire/Project/Database/Backup/Execution.php b/app/Livewire/Project/Database/Backup/Execution.php
index 4ac3b2e2c..35818d35c 100644
--- a/app/Livewire/Project/Database/Backup/Execution.php
+++ b/app/Livewire/Project/Database/Backup/Execution.php
@@ -39,6 +39,8 @@ class Execution extends Component
$this->backup = $backup;
$this->executions = $executions;
$this->s3s = currentTeam()->s3s;
+
+ return null;
}
public function render()
diff --git a/app/Livewire/Project/Database/Backup/Index.php b/app/Livewire/Project/Database/Backup/Index.php
index 2df32ec7b..072b88a2b 100644
--- a/app/Livewire/Project/Database/Backup/Index.php
+++ b/app/Livewire/Project/Database/Backup/Index.php
@@ -2,6 +2,10 @@
namespace App\Livewire\Project\Database\Backup;
+use App\Models\StandaloneClickhouse;
+use App\Models\StandaloneDragonfly;
+use App\Models\StandaloneKeydb;
+use App\Models\StandaloneRedis;
use Livewire\Component;
class Index extends Component
@@ -24,10 +28,10 @@ class Index extends Component
}
// No backups
if (
- $database->getMorphClass() === \App\Models\StandaloneRedis::class ||
- $database->getMorphClass() === \App\Models\StandaloneKeydb::class ||
- $database->getMorphClass() === \App\Models\StandaloneDragonfly::class ||
- $database->getMorphClass() === \App\Models\StandaloneClickhouse::class
+ $database->getMorphClass() === StandaloneRedis::class ||
+ $database->getMorphClass() === StandaloneKeydb::class ||
+ $database->getMorphClass() === StandaloneDragonfly::class ||
+ $database->getMorphClass() === StandaloneClickhouse::class
) {
return redirect()->route('project.database.configuration', [
'project_uuid' => $project->uuid,
@@ -36,6 +40,8 @@ class Index extends Component
]);
}
$this->database = $database;
+
+ return null;
}
public function render()
diff --git a/app/Livewire/Project/Database/BackupEdit.php b/app/Livewire/Project/Database/BackupEdit.php
index 0dea0496c..d5b05aeda 100644
--- a/app/Livewire/Project/Database/BackupEdit.php
+++ b/app/Livewire/Project/Database/BackupEdit.php
@@ -4,6 +4,7 @@ namespace App\Livewire\Project\Database;
use App\Models\InstanceSettings;
use App\Models\ScheduledDatabaseBackup;
+use App\Models\ServiceDatabase;
use Exception;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Hash;
@@ -11,6 +12,7 @@ use Livewire\Attributes\Locked;
use Livewire\Attributes\Validate;
use Livewire\Component;
use Spatie\Url\Url;
+use Throwable;
class BackupEdit extends Component
{
@@ -66,6 +68,8 @@ class BackupEdit extends Component
} catch (Exception $e) {
return handleError($e, $this);
}
+
+ return null;
}
public function syncData(bool $toModel = false)
@@ -94,12 +98,10 @@ class BackupEdit extends Component
public function delete($password)
{
- if (! data_get(InstanceSettings::get(), 'disable_two_step_confirmation')) {
- if (! Hash::check($password, Auth::user()->password)) {
- $this->addError('password', 'The provided password is incorrect.');
+ if (! data_get(InstanceSettings::get(), 'disable_two_step_confirmation') && ! Hash::check($password, Auth::user()->password)) {
+ $this->addError('password', 'The provided password is incorrect.');
- return;
- }
+ return null;
}
try {
@@ -112,7 +114,7 @@ class BackupEdit extends Component
$this->backup->delete();
- if ($this->backup->database->getMorphClass() === \App\Models\ServiceDatabase::class) {
+ if ($this->backup->database->getMorphClass() === ServiceDatabase::class) {
$previousUrl = url()->previous();
$url = Url::fromString($previousUrl);
$url = $url->withoutQueryParameter('selectedBackupId');
@@ -120,10 +122,10 @@ class BackupEdit extends Component
$url = $url->getPath()."#{$url->getFragment()}";
return redirect($url);
- } else {
- return redirect()->route('project.database.backup.index', $this->parameters);
}
- } catch (\Throwable $e) {
+
+ return redirect()->route('project.database.backup.index', $this->parameters);
+ } catch (Throwable $e) {
return handleError($e, $this);
}
}
@@ -133,7 +135,7 @@ class BackupEdit extends Component
try {
$this->syncData(true);
$this->dispatch('success', 'Backup updated successfully.');
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
$this->dispatch('error', $e->getMessage());
}
}
@@ -145,7 +147,7 @@ class BackupEdit extends Component
}
$isValid = validate_cron_expression($this->backup->frequency);
if (! $isValid) {
- throw new \Exception('Invalid Cron / Human expression');
+ throw new Exception('Invalid Cron / Human expression');
}
$this->validate();
}
@@ -155,7 +157,7 @@ class BackupEdit extends Component
try {
$this->syncData(true);
$this->dispatch('success', 'Backup updated successfully.');
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
$this->dispatch('error', $e->getMessage());
}
}
@@ -166,7 +168,7 @@ class BackupEdit extends Component
$backupFolder = null;
foreach ($executions as $execution) {
- if ($this->backup->database->getMorphClass() === \App\Models\ServiceDatabase::class) {
+ if ($this->backup->database->getMorphClass() === ServiceDatabase::class) {
$server = $this->backup->database->service->destination->server;
} else {
$server = $this->backup->database->destination->server;
diff --git a/app/Livewire/Project/Database/BackupExecutions.php b/app/Livewire/Project/Database/BackupExecutions.php
index f91b8bfaf..090eb2564 100644
--- a/app/Livewire/Project/Database/BackupExecutions.php
+++ b/app/Livewire/Project/Database/BackupExecutions.php
@@ -4,6 +4,10 @@ namespace App\Livewire\Project\Database;
use App\Models\InstanceSettings;
use App\Models\ScheduledDatabaseBackup;
+use App\Models\ServiceDatabase;
+use DateTime;
+use DateTimeZone;
+use Exception;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Hash;
use Livewire\Component;
@@ -33,7 +37,7 @@ class BackupExecutions extends Component
public function cleanupFailed()
{
- if ($this->backup) {
+ if ($this->backup instanceof ScheduledDatabaseBackup) {
$this->backup->executions()->where('status', 'failed')->delete();
$this->refreshBackupExecutions();
$this->dispatch('success', 'Failed backups cleaned up.');
@@ -42,12 +46,10 @@ class BackupExecutions extends Component
public function deleteBackup($executionId, $password)
{
- if (! data_get(InstanceSettings::get(), 'disable_two_step_confirmation')) {
- if (! Hash::check($password, Auth::user()->password)) {
- $this->addError('password', 'The provided password is incorrect.');
+ if (! data_get(InstanceSettings::get(), 'disable_two_step_confirmation') && ! Hash::check($password, Auth::user()->password)) {
+ $this->addError('password', 'The provided password is incorrect.');
- return;
- }
+ return;
}
$execution = $this->backup->executions()->where('id', $executionId)->first();
@@ -57,7 +59,7 @@ class BackupExecutions extends Component
return;
}
- if ($execution->scheduledDatabaseBackup->database->getMorphClass() === \App\Models\ServiceDatabase::class) {
+ if ($execution->scheduledDatabaseBackup->database->getMorphClass() === ServiceDatabase::class) {
delete_backup_locally($execution->filename, $execution->scheduledDatabaseBackup->database->service->destination->server);
} else {
delete_backup_locally($execution->filename, $execution->scheduledDatabaseBackup->database->destination->server);
@@ -83,15 +85,15 @@ class BackupExecutions extends Component
public function refreshBackupExecutions(): void
{
- if ($this->backup) {
+ if ($this->backup instanceof ScheduledDatabaseBackup) {
$this->executions = $this->backup->executions()->get();
}
}
- public function mount(ScheduledDatabaseBackup $backup)
+ public function mount(ScheduledDatabaseBackup $scheduledDatabaseBackup)
{
- $this->backup = $backup;
- $this->database = $backup->database;
+ $this->backup = $scheduledDatabaseBackup;
+ $this->database = $scheduledDatabaseBackup->database;
$this->refreshBackupExecutions();
}
@@ -100,7 +102,7 @@ class BackupExecutions extends Component
if ($this->database) {
$server = null;
- if ($this->database instanceof \App\Models\ServiceDatabase) {
+ if ($this->database instanceof ServiceDatabase) {
$server = $this->database->service->destination->server;
} elseif ($this->database->destination && $this->database->destination->server) {
$server = $this->database->destination->server;
@@ -126,11 +128,11 @@ class BackupExecutions extends Component
public function formatDateInServerTimezone($date)
{
$serverTimezone = $this->getServerTimezone();
- $dateObj = new \DateTime($date);
+ $dateObj = new DateTime($date);
try {
- $dateObj->setTimezone(new \DateTimeZone($serverTimezone));
- } catch (\Exception) {
- $dateObj->setTimezone(new \DateTimeZone('UTC'));
+ $dateObj->setTimezone(new DateTimeZone($serverTimezone));
+ } catch (Exception) {
+ $dateObj->setTimezone(new DateTimeZone('UTC'));
}
return $dateObj->format('Y-m-d H:i:s T');
diff --git a/app/Livewire/Project/Database/Clickhouse/General.php b/app/Livewire/Project/Database/Clickhouse/General.php
index 2d39c5151..1bbce0ac4 100644
--- a/app/Livewire/Project/Database/Clickhouse/General.php
+++ b/app/Livewire/Project/Database/Clickhouse/General.php
@@ -10,6 +10,7 @@ use Exception;
use Illuminate\Support\Facades\Auth;
use Livewire\Attributes\Validate;
use Livewire\Component;
+use Throwable;
class General extends Component
{
@@ -67,9 +68,11 @@ class General extends Component
try {
$this->syncData();
$this->server = data_get($this->database, 'destination.server');
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
return handleError($e, $this);
}
+
+ return null;
}
public function syncData(bool $toModel = false)
@@ -113,7 +116,7 @@ class General extends Component
$this->isLogDrainEnabled = false;
$this->dispatch('error', 'Log drain is not enabled on the server. Please enable it first.');
- return;
+ return null;
}
$this->syncData(true);
@@ -122,6 +125,8 @@ class General extends Component
} catch (Exception $e) {
return handleError($e, $this);
}
+
+ return null;
}
public function instantSave()
@@ -131,14 +136,14 @@ class General extends Component
$this->dispatch('error', 'Public port is required.');
$this->isPublic = false;
- return;
+ return null;
}
if ($this->isPublic) {
if (! str($this->database->status)->startsWith('running')) {
$this->dispatch('error', 'Database must be started to be publicly accessible.');
$this->isPublic = false;
- return;
+ return null;
}
StartDatabaseProxy::run($this->database);
$this->dispatch('success', 'Database is now publicly accessible.');
@@ -148,12 +153,14 @@ class General extends Component
}
$this->dbUrlPublic = $this->database->external_db_url;
$this->syncData(true);
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
$this->isPublic = ! $this->isPublic;
$this->syncData(true);
return handleError($e, $this);
}
+
+ return null;
}
public function databaseProxyStopped()
@@ -178,5 +185,7 @@ class General extends Component
$this->dispatch('configurationChanged');
}
}
+
+ return null;
}
}
diff --git a/app/Livewire/Project/Database/CreateScheduledBackup.php b/app/Livewire/Project/Database/CreateScheduledBackup.php
index 01108c290..fa7d9f4af 100644
--- a/app/Livewire/Project/Database/CreateScheduledBackup.php
+++ b/app/Livewire/Project/Database/CreateScheduledBackup.php
@@ -3,10 +3,12 @@
namespace App\Livewire\Project\Database;
use App\Models\ScheduledDatabaseBackup;
+use App\Models\ServiceDatabase;
use Illuminate\Support\Collection;
use Livewire\Attributes\Locked;
use Livewire\Attributes\Validate;
use Livewire\Component;
+use Throwable;
class CreateScheduledBackup extends Component
{
@@ -33,9 +35,11 @@ class CreateScheduledBackup extends Component
if ($this->definedS3s->count() > 0) {
$this->s3StorageId = $this->definedS3s->first()->id;
}
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
return handleError($e, $this);
}
+
+ return null;
}
public function submit()
@@ -47,7 +51,7 @@ class CreateScheduledBackup extends Component
if (! $isValid) {
$this->dispatch('error', 'Invalid Cron / Human expression.');
- return;
+ return null;
}
$payload = [
@@ -68,17 +72,19 @@ class CreateScheduledBackup extends Component
$payload['databases_to_backup'] = $this->database->mariadb_database;
}
- $databaseBackup = ScheduledDatabaseBackup::create($payload);
- if ($this->database->getMorphClass() === \App\Models\ServiceDatabase::class) {
+ $databaseBackup = ScheduledDatabaseBackup::query()->create($payload);
+ if ($this->database->getMorphClass() === ServiceDatabase::class) {
$this->dispatch('refreshScheduledBackups', $databaseBackup->id);
} else {
$this->dispatch('refreshScheduledBackups');
}
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
return handleError($e, $this);
} finally {
$this->frequency = '';
}
+
+ return null;
}
}
diff --git a/app/Livewire/Project/Database/Dragonfly/General.php b/app/Livewire/Project/Database/Dragonfly/General.php
index ea6cd46b0..b5b85fee2 100644
--- a/app/Livewire/Project/Database/Dragonfly/General.php
+++ b/app/Livewire/Project/Database/Dragonfly/General.php
@@ -10,6 +10,7 @@ use Exception;
use Illuminate\Support\Facades\Auth;
use Livewire\Attributes\Validate;
use Livewire\Component;
+use Throwable;
class General extends Component
{
@@ -64,9 +65,11 @@ class General extends Component
try {
$this->syncData();
$this->server = data_get($this->database, 'destination.server');
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
return handleError($e, $this);
}
+
+ return null;
}
public function syncData(bool $toModel = false)
@@ -108,7 +111,7 @@ class General extends Component
$this->isLogDrainEnabled = false;
$this->dispatch('error', 'Log drain is not enabled on the server. Please enable it first.');
- return;
+ return null;
}
$this->syncData(true);
@@ -117,6 +120,8 @@ class General extends Component
} catch (Exception $e) {
return handleError($e, $this);
}
+
+ return null;
}
public function instantSave()
@@ -126,14 +131,14 @@ class General extends Component
$this->dispatch('error', 'Public port is required.');
$this->isPublic = false;
- return;
+ return null;
}
if ($this->isPublic) {
if (! str($this->database->status)->startsWith('running')) {
$this->dispatch('error', 'Database must be started to be publicly accessible.');
$this->isPublic = false;
- return;
+ return null;
}
StartDatabaseProxy::run($this->database);
$this->dispatch('success', 'Database is now publicly accessible.');
@@ -143,12 +148,14 @@ class General extends Component
}
$this->dbUrlPublic = $this->database->external_db_url;
$this->syncData(true);
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
$this->isPublic = ! $this->isPublic;
$this->syncData(true);
return handleError($e, $this);
}
+
+ return null;
}
public function databaseProxyStopped()
@@ -173,5 +180,7 @@ class General extends Component
$this->dispatch('configurationChanged');
}
}
+
+ return null;
}
}
diff --git a/app/Livewire/Project/Database/Import.php b/app/Livewire/Project/Database/Import.php
index dc330b3af..699f0be6c 100644
--- a/app/Livewire/Project/Database/Import.php
+++ b/app/Livewire/Project/Database/Import.php
@@ -3,9 +3,18 @@
namespace App\Livewire\Project\Database;
use App\Models\Server;
+use App\Models\StandaloneClickhouse;
+use App\Models\StandaloneDragonfly;
+use App\Models\StandaloneKeydb;
+use App\Models\StandaloneMariadb;
+use App\Models\StandaloneMongodb;
+use App\Models\StandaloneMysql;
+use App\Models\StandalonePostgresql;
+use App\Models\StandaloneRedis;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Storage;
use Livewire\Component;
+use Throwable;
class Import extends Component
{
@@ -72,7 +81,7 @@ class Import extends Component
public function updatedDumpAll($value)
{
switch ($this->resource->getMorphClass()) {
- case \App\Models\StandaloneMariadb::class:
+ case StandaloneMariadb::class:
if ($value === true) {
$this->mariadbRestoreCommand = <<<'EOD'
for pid in $(mariadb -u root -p$MARIADB_ROOT_PASSWORD -N -e "SELECT id FROM information_schema.processlist WHERE user != 'root';"); do
@@ -87,7 +96,7 @@ EOD;
$this->mariadbRestoreCommand = 'mariadb -u $MARIADB_USER -p$MARIADB_PASSWORD $MARIADB_DATABASE';
}
break;
- case \App\Models\StandaloneMysql::class:
+ case StandaloneMysql::class:
if ($value === true) {
$this->mysqlRestoreCommand = <<<'EOD'
for pid in $(mysql -u root -p$MYSQL_ROOT_PASSWORD -N -e "SELECT id FROM information_schema.processlist WHERE user != 'root';"); do
@@ -102,7 +111,7 @@ EOD;
$this->mysqlRestoreCommand = 'mysql -u $MYSQL_USER -p$MYSQL_PASSWORD $MYSQL_DATABASE';
}
break;
- case \App\Models\StandalonePostgresql::class:
+ case StandalonePostgresql::class:
if ($value === true) {
$this->postgresqlRestoreCommand = <<<'EOD'
psql -U $POSTGRES_USER -c "SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE datname IS NOT NULL AND pid <> pg_backend_pid()" && \
@@ -136,10 +145,10 @@ EOD;
}
if (
- $this->resource->getMorphClass() === \App\Models\StandaloneRedis::class ||
- $this->resource->getMorphClass() === \App\Models\StandaloneKeydb::class ||
- $this->resource->getMorphClass() === \App\Models\StandaloneDragonfly::class ||
- $this->resource->getMorphClass() === \App\Models\StandaloneClickhouse::class
+ $this->resource->getMorphClass() === StandaloneRedis::class ||
+ $this->resource->getMorphClass() === StandaloneKeydb::class ||
+ $this->resource->getMorphClass() === StandaloneDragonfly::class ||
+ $this->resource->getMorphClass() === StandaloneClickhouse::class
) {
$this->unsupported = true;
}
@@ -153,14 +162,16 @@ EOD;
if (blank($result)) {
$this->dispatch('error', 'The file does not exist or has been deleted.');
- return;
+ return null;
}
$this->filename = $this->customLocation;
$this->dispatch('success', 'The file exists.');
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
return handleError($e, $this);
}
}
+
+ return null;
}
public function runImport()
@@ -168,7 +179,7 @@ EOD;
if ($this->filename === '') {
$this->dispatch('error', 'Please select a file to import.');
- return;
+ return null;
}
try {
$this->importCommands = [];
@@ -182,7 +193,7 @@ EOD;
if (! Storage::exists($backupFileName)) {
$this->dispatch('error', 'The file does not exist or has been deleted.');
- return;
+ return null;
}
$tmpPath = '/tmp/'.basename($backupFileName).'_'.$this->resource->uuid;
instant_scp($path, $tmpPath, $this->server);
@@ -194,7 +205,7 @@ EOD;
$scriptPath = "/tmp/restore_{$this->resource->uuid}.sh";
switch ($this->resource->getMorphClass()) {
- case \App\Models\StandaloneMariadb::class:
+ case StandaloneMariadb::class:
$restoreCommand = $this->mariadbRestoreCommand;
if ($this->dumpAll) {
$restoreCommand .= " && (gunzip -cf {$tmpPath} 2>/dev/null || cat {$tmpPath}) | mariadb -u root -p\$MARIADB_ROOT_PASSWORD";
@@ -202,7 +213,7 @@ EOD;
$restoreCommand .= " < {$tmpPath}";
}
break;
- case \App\Models\StandaloneMysql::class:
+ case StandaloneMysql::class:
$restoreCommand = $this->mysqlRestoreCommand;
if ($this->dumpAll) {
$restoreCommand .= " && (gunzip -cf {$tmpPath} 2>/dev/null || cat {$tmpPath}) | mysql -u root -p\$MYSQL_ROOT_PASSWORD";
@@ -210,7 +221,7 @@ EOD;
$restoreCommand .= " < {$tmpPath}";
}
break;
- case \App\Models\StandalonePostgresql::class:
+ case StandalonePostgresql::class:
$restoreCommand = $this->postgresqlRestoreCommand;
if ($this->dumpAll) {
$restoreCommand .= " && (gunzip -cf {$tmpPath} 2>/dev/null || cat {$tmpPath}) | psql -U \$POSTGRES_USER postgres";
@@ -218,7 +229,7 @@ EOD;
$restoreCommand .= " {$tmpPath}";
}
break;
- case \App\Models\StandaloneMongodb::class:
+ case StandaloneMongodb::class:
$restoreCommand = $this->mongodbRestoreCommand;
if ($this->dumpAll === false) {
$restoreCommand .= " {$tmpPath}";
@@ -234,7 +245,7 @@ EOD;
$this->importCommands[] = "docker exec {$this->container} sh -c '{$scriptPath}'";
$this->importCommands[] = "docker exec {$this->container} sh -c 'echo \"Import finished with exit code $?\"'";
- if (! empty($this->importCommands)) {
+ if ($this->importCommands !== []) {
$activity = remote_process($this->importCommands, $this->server, ignore_errors: true, callEventOnFinish: 'RestoreJobFinished', callEventData: [
'scriptPath' => $scriptPath,
'tmpPath' => $tmpPath,
@@ -243,11 +254,13 @@ EOD;
]);
$this->dispatch('activityMonitor', $activity->id);
}
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
return handleError($e, $this);
} finally {
$this->filename = null;
$this->importCommands = [];
}
+
+ return null;
}
}
diff --git a/app/Livewire/Project/Database/InitScript.php b/app/Livewire/Project/Database/InitScript.php
index e3baa1c8e..06b3138c5 100644
--- a/app/Livewire/Project/Database/InitScript.php
+++ b/app/Livewire/Project/Database/InitScript.php
@@ -30,6 +30,8 @@ class InitScript extends Component
} catch (Exception $e) {
return handleError($e, $this);
}
+
+ return null;
}
public function submit()
@@ -43,6 +45,8 @@ class InitScript extends Component
} catch (Exception $e) {
return handleError($e, $this);
}
+
+ return null;
}
public function delete()
@@ -52,5 +56,7 @@ class InitScript extends Component
} catch (Exception $e) {
return handleError($e, $this);
}
+
+ return null;
}
}
diff --git a/app/Livewire/Project/Database/Keydb/General.php b/app/Livewire/Project/Database/Keydb/General.php
index e768495eb..fbeb66fc4 100644
--- a/app/Livewire/Project/Database/Keydb/General.php
+++ b/app/Livewire/Project/Database/Keydb/General.php
@@ -10,6 +10,7 @@ use Exception;
use Illuminate\Support\Facades\Auth;
use Livewire\Attributes\Validate;
use Livewire\Component;
+use Throwable;
class General extends Component
{
@@ -67,9 +68,11 @@ class General extends Component
try {
$this->syncData();
$this->server = data_get($this->database, 'destination.server');
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
return handleError($e, $this);
}
+
+ return null;
}
public function syncData(bool $toModel = false)
@@ -113,7 +116,7 @@ class General extends Component
$this->isLogDrainEnabled = false;
$this->dispatch('error', 'Log drain is not enabled on the server. Please enable it first.');
- return;
+ return null;
}
$this->syncData(true);
@@ -122,6 +125,8 @@ class General extends Component
} catch (Exception $e) {
return handleError($e, $this);
}
+
+ return null;
}
public function instantSave()
@@ -131,14 +136,14 @@ class General extends Component
$this->dispatch('error', 'Public port is required.');
$this->isPublic = false;
- return;
+ return null;
}
if ($this->isPublic) {
if (! str($this->database->status)->startsWith('running')) {
$this->dispatch('error', 'Database must be started to be publicly accessible.');
$this->isPublic = false;
- return;
+ return null;
}
StartDatabaseProxy::run($this->database);
$this->dispatch('success', 'Database is now publicly accessible.');
@@ -148,12 +153,14 @@ class General extends Component
}
$this->dbUrlPublic = $this->database->external_db_url;
$this->syncData(true);
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
$this->isPublic = ! $this->isPublic;
$this->syncData(true);
return handleError($e, $this);
}
+
+ return null;
}
public function databaseProxyStopped()
@@ -178,5 +185,7 @@ class General extends Component
$this->dispatch('configurationChanged');
}
}
+
+ return null;
}
}
diff --git a/app/Livewire/Project/Database/Mariadb/General.php b/app/Livewire/Project/Database/Mariadb/General.php
index c9d473223..38a81026b 100644
--- a/app/Livewire/Project/Database/Mariadb/General.php
+++ b/app/Livewire/Project/Database/Mariadb/General.php
@@ -8,6 +8,7 @@ use App\Models\Server;
use App\Models\StandaloneMariadb;
use Exception;
use Livewire\Component;
+use Throwable;
class General extends Component
{
@@ -66,7 +67,7 @@ class General extends Component
$this->database->is_log_drain_enabled = false;
$this->dispatch('error', 'Log drain is not enabled on the server. Please enable it first.');
- return;
+ return null;
}
$this->database->save();
$this->dispatch('success', 'Database updated.');
@@ -74,6 +75,8 @@ class General extends Component
} catch (Exception $e) {
return handleError($e, $this);
}
+
+ return null;
}
public function submit()
@@ -94,6 +97,8 @@ class General extends Component
$this->dispatch('configurationChanged');
}
}
+
+ return null;
}
public function instantSave()
@@ -103,14 +108,14 @@ class General extends Component
$this->dispatch('error', 'Public port is required.');
$this->database->is_public = false;
- return;
+ return null;
}
if ($this->database->is_public) {
if (! str($this->database->status)->startsWith('running')) {
$this->dispatch('error', 'Database must be started to be publicly accessible.');
$this->database->is_public = false;
- return;
+ return null;
}
StartDatabaseProxy::run($this->database);
$this->dispatch('success', 'Database is now publicly accessible.');
@@ -120,11 +125,13 @@ class General extends Component
}
$this->db_url_public = $this->database->external_db_url;
$this->database->save();
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
$this->database->is_public = ! $this->database->is_public;
return handleError($e, $this);
}
+
+ return null;
}
public function refresh(): void
diff --git a/app/Livewire/Project/Database/Mongodb/General.php b/app/Livewire/Project/Database/Mongodb/General.php
index e19895dae..1cc777022 100644
--- a/app/Livewire/Project/Database/Mongodb/General.php
+++ b/app/Livewire/Project/Database/Mongodb/General.php
@@ -8,6 +8,7 @@ use App\Models\Server;
use App\Models\StandaloneMongodb;
use Exception;
use Livewire\Component;
+use Throwable;
class General extends Component
{
@@ -64,7 +65,7 @@ class General extends Component
$this->database->is_log_drain_enabled = false;
$this->dispatch('error', 'Log drain is not enabled on the server. Please enable it first.');
- return;
+ return null;
}
$this->database->save();
$this->dispatch('success', 'Database updated.');
@@ -72,6 +73,8 @@ class General extends Component
} catch (Exception $e) {
return handleError($e, $this);
}
+
+ return null;
}
public function submit()
@@ -95,6 +98,8 @@ class General extends Component
$this->dispatch('configurationChanged');
}
}
+
+ return null;
}
public function instantSave()
@@ -104,14 +109,14 @@ class General extends Component
$this->dispatch('error', 'Public port is required.');
$this->database->is_public = false;
- return;
+ return null;
}
if ($this->database->is_public) {
if (! str($this->database->status)->startsWith('running')) {
$this->dispatch('error', 'Database must be started to be publicly accessible.');
$this->database->is_public = false;
- return;
+ return null;
}
StartDatabaseProxy::run($this->database);
$this->dispatch('success', 'Database is now publicly accessible.');
@@ -121,11 +126,13 @@ class General extends Component
}
$this->db_url_public = $this->database->external_db_url;
$this->database->save();
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
$this->database->is_public = ! $this->database->is_public;
return handleError($e, $this);
}
+
+ return null;
}
public function refresh(): void
diff --git a/app/Livewire/Project/Database/Mysql/General.php b/app/Livewire/Project/Database/Mysql/General.php
index 7d5270ddf..afcb8077f 100644
--- a/app/Livewire/Project/Database/Mysql/General.php
+++ b/app/Livewire/Project/Database/Mysql/General.php
@@ -8,6 +8,7 @@ use App\Models\Server;
use App\Models\StandaloneMysql;
use Exception;
use Livewire\Component;
+use Throwable;
class General extends Component
{
@@ -66,7 +67,7 @@ class General extends Component
$this->database->is_log_drain_enabled = false;
$this->dispatch('error', 'Log drain is not enabled on the server. Please enable it first.');
- return;
+ return null;
}
$this->database->save();
$this->dispatch('success', 'Database updated.');
@@ -74,6 +75,8 @@ class General extends Component
} catch (Exception $e) {
return handleError($e, $this);
}
+
+ return null;
}
public function submit()
@@ -94,6 +97,8 @@ class General extends Component
$this->dispatch('configurationChanged');
}
}
+
+ return null;
}
public function instantSave()
@@ -103,14 +108,14 @@ class General extends Component
$this->dispatch('error', 'Public port is required.');
$this->database->is_public = false;
- return;
+ return null;
}
if ($this->database->is_public) {
if (! str($this->database->status)->startsWith('running')) {
$this->dispatch('error', 'Database must be started to be publicly accessible.');
$this->database->is_public = false;
- return;
+ return null;
}
StartDatabaseProxy::run($this->database);
$this->dispatch('success', 'Database is now publicly accessible.');
@@ -120,11 +125,13 @@ class General extends Component
}
$this->db_url_public = $this->database->external_db_url;
$this->database->save();
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
$this->database->is_public = ! $this->database->is_public;
return handleError($e, $this);
}
+
+ return null;
}
public function refresh(): void
diff --git a/app/Livewire/Project/Database/Postgresql/General.php b/app/Livewire/Project/Database/Postgresql/General.php
index 88dd5c1a8..17502f817 100644
--- a/app/Livewire/Project/Database/Postgresql/General.php
+++ b/app/Livewire/Project/Database/Postgresql/General.php
@@ -8,6 +8,7 @@ use App\Models\Server;
use App\Models\StandalonePostgresql;
use Exception;
use Livewire\Component;
+use Throwable;
class General extends Component
{
@@ -81,7 +82,7 @@ class General extends Component
$this->database->is_log_drain_enabled = false;
$this->dispatch('error', 'Log drain is not enabled on the server. Please enable it first.');
- return;
+ return null;
}
$this->database->save();
$this->dispatch('success', 'Database updated.');
@@ -89,6 +90,8 @@ class General extends Component
} catch (Exception $e) {
return handleError($e, $this);
}
+
+ return null;
}
public function instantSave()
@@ -98,14 +101,14 @@ class General extends Component
$this->dispatch('error', 'Public port is required.');
$this->database->is_public = false;
- return;
+ return null;
}
if ($this->database->is_public) {
if (! str($this->database->status)->startsWith('running')) {
$this->dispatch('error', 'Database must be started to be publicly accessible.');
$this->database->is_public = false;
- return;
+ return null;
}
StartDatabaseProxy::run($this->database);
$this->dispatch('success', 'Database is now publicly accessible.');
@@ -115,11 +118,13 @@ class General extends Component
}
$this->db_url_public = $this->database->external_db_url;
$this->database->save();
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
$this->database->is_public = ! $this->database->is_public;
return handleError($e, $this);
}
+
+ return null;
}
public function save_init_script($script)
@@ -143,7 +148,7 @@ class General extends Component
$delete_command = "rm -f $old_file_path";
try {
instant_remote_process([$delete_command], $this->server);
- } catch (\Exception $e) {
+ } catch (Exception $e) {
$this->dispatch('error', 'Failed to remove old init script from server: '.$e->getMessage());
return;
@@ -184,7 +189,7 @@ class General extends Component
$command = "rm -f $file_path";
try {
instant_remote_process([$command], $this->server);
- } catch (\Exception $e) {
+ } catch (Exception $e) {
$this->dispatch('error', 'Failed to remove init script from server: '.$e->getMessage());
return;
@@ -223,7 +228,7 @@ class General extends Component
return;
}
- if (! isset($this->database->init_scripts)) {
+ if (! property_exists($this->database, 'init_scripts') || $this->database->init_scripts === null) {
$this->database->init_scripts = [];
}
$this->database->init_scripts = array_merge($this->database->init_scripts, [
@@ -257,5 +262,7 @@ class General extends Component
$this->dispatch('configurationChanged');
}
}
+
+ return null;
}
}
diff --git a/app/Livewire/Project/Database/Redis/General.php b/app/Livewire/Project/Database/Redis/General.php
index 25a96b292..ff7e55a66 100644
--- a/app/Livewire/Project/Database/Redis/General.php
+++ b/app/Livewire/Project/Database/Redis/General.php
@@ -8,6 +8,7 @@ use App\Models\Server;
use App\Models\StandaloneRedis;
use Exception;
use Livewire\Component;
+use Throwable;
class General extends Component
{
@@ -70,7 +71,7 @@ class General extends Component
$this->database->is_log_drain_enabled = false;
$this->dispatch('error', 'Log drain is not enabled on the server. Please enable it first.');
- return;
+ return null;
}
$this->database->save();
$this->dispatch('success', 'Database updated.');
@@ -78,6 +79,8 @@ class General extends Component
} catch (Exception $e) {
return handleError($e, $this);
}
+
+ return null;
}
public function submit()
@@ -103,6 +106,8 @@ class General extends Component
} finally {
$this->dispatch('refreshEnvs');
}
+
+ return null;
}
public function instantSave()
@@ -112,14 +117,14 @@ class General extends Component
$this->dispatch('error', 'Public port is required.');
$this->database->is_public = false;
- return;
+ return null;
}
if ($this->database->is_public) {
if (! str($this->database->status)->startsWith('running')) {
$this->dispatch('error', 'Database must be started to be publicly accessible.');
$this->database->is_public = false;
- return;
+ return null;
}
StartDatabaseProxy::run($this->database);
$this->dispatch('success', 'Database is now publicly accessible.');
@@ -129,11 +134,13 @@ class General extends Component
}
$this->db_url_public = $this->database->external_db_url;
$this->database->save();
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
$this->database->is_public = ! $this->database->is_public;
return handleError($e, $this);
}
+
+ return null;
}
public function refresh(): void
diff --git a/app/Livewire/Project/Database/ScheduledBackups.php b/app/Livewire/Project/Database/ScheduledBackups.php
index 412240bd4..a6fa103b8 100644
--- a/app/Livewire/Project/Database/ScheduledBackups.php
+++ b/app/Livewire/Project/Database/ScheduledBackups.php
@@ -3,6 +3,7 @@
namespace App\Livewire\Project\Database;
use App\Models\ScheduledDatabaseBackup;
+use App\Models\ServiceDatabase;
use Livewire\Component;
class ScheduledBackups extends Component
@@ -29,11 +30,7 @@ class ScheduledBackups extends Component
$this->setSelectedBackup($this->selectedBackupId, true);
}
$this->parameters = get_route_parameters();
- if ($this->database->getMorphClass() === \App\Models\ServiceDatabase::class) {
- $this->type = 'service-database';
- } else {
- $this->type = 'database';
- }
+ $this->type = $this->database->getMorphClass() === ServiceDatabase::class ? 'service-database' : 'database';
$this->s3s = currentTeam()->s3s;
}
diff --git a/app/Livewire/Project/DeleteEnvironment.php b/app/Livewire/Project/DeleteEnvironment.php
index 1ee5de269..e27b89be8 100644
--- a/app/Livewire/Project/DeleteEnvironment.php
+++ b/app/Livewire/Project/DeleteEnvironment.php
@@ -3,6 +3,7 @@
namespace App\Livewire\Project;
use App\Models\Environment;
+use Exception;
use Livewire\Component;
class DeleteEnvironment extends Component
@@ -18,11 +19,13 @@ class DeleteEnvironment extends Component
public function mount()
{
try {
- $this->environmentName = Environment::findOrFail($this->environment_id)->name;
+ $this->environmentName = Environment::query()->findOrFail($this->environment_id)->name;
$this->parameters = get_route_parameters();
- } catch (\Exception $e) {
+ } catch (Exception $e) {
return handleError($e, $this);
}
+
+ return null;
}
public function delete()
@@ -30,7 +33,7 @@ class DeleteEnvironment extends Component
$this->validate([
'environment_id' => 'required|int',
]);
- $environment = Environment::findOrFail($this->environment_id);
+ $environment = Environment::query()->findOrFail($this->environment_id);
if ($environment->isEmpty()) {
$environment->delete();
diff --git a/app/Livewire/Project/DeleteProject.php b/app/Livewire/Project/DeleteProject.php
index f320a19b0..bade13e6f 100644
--- a/app/Livewire/Project/DeleteProject.php
+++ b/app/Livewire/Project/DeleteProject.php
@@ -18,7 +18,7 @@ class DeleteProject extends Component
public function mount()
{
$this->parameters = get_route_parameters();
- $this->projectName = Project::findOrFail($this->project_id)->name;
+ $this->projectName = Project::query()->findOrFail($this->project_id)->name;
}
public function delete()
@@ -26,7 +26,7 @@ class DeleteProject extends Component
$this->validate([
'project_id' => 'required|int',
]);
- $project = Project::findOrFail($this->project_id);
+ $project = Project::query()->findOrFail($this->project_id);
if ($project->isEmpty()) {
$project->delete();
diff --git a/app/Livewire/Project/Edit.php b/app/Livewire/Project/Edit.php
index 463febb10..c9f83304b 100644
--- a/app/Livewire/Project/Edit.php
+++ b/app/Livewire/Project/Edit.php
@@ -5,6 +5,7 @@ namespace App\Livewire\Project;
use App\Models\Project;
use Livewire\Attributes\Validate;
use Livewire\Component;
+use Throwable;
class Edit extends Component
{
@@ -19,11 +20,13 @@ class Edit extends Component
public function mount(string $project_uuid)
{
try {
- $this->project = Project::where('team_id', currentTeam()->id)->where('uuid', $project_uuid)->firstOrFail();
+ $this->project = Project::query()->where('team_id', currentTeam()->id)->where('uuid', $project_uuid)->firstOrFail();
$this->syncData();
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
return handleError($e, $this);
}
+
+ return null;
}
public function syncData(bool $toModel = false)
@@ -45,8 +48,10 @@ class Edit extends Component
try {
$this->syncData(true);
$this->dispatch('success', 'Project updated.');
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
return handleError($e, $this);
}
+
+ return null;
}
}
diff --git a/app/Livewire/Project/EnvironmentEdit.php b/app/Livewire/Project/EnvironmentEdit.php
index e98b088ec..7e93a5fca 100644
--- a/app/Livewire/Project/EnvironmentEdit.php
+++ b/app/Livewire/Project/EnvironmentEdit.php
@@ -7,6 +7,7 @@ use App\Models\Project;
use Livewire\Attributes\Locked;
use Livewire\Attributes\Validate;
use Livewire\Component;
+use Throwable;
class EnvironmentEdit extends Component
{
@@ -29,9 +30,11 @@ class EnvironmentEdit extends Component
$this->project = Project::ownedByCurrentTeam()->where('uuid', $project_uuid)->firstOrFail();
$this->environment = $this->project->environments()->where('uuid', $environment_uuid)->firstOrFail();
$this->syncData();
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
return handleError($e, $this);
}
+
+ return null;
}
public function syncData(bool $toModel = false)
@@ -56,9 +59,11 @@ class EnvironmentEdit extends Component
'environment_uuid' => $this->environment->uuid,
'project_uuid' => $this->project->uuid,
]);
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
return handleError($e, $this);
}
+
+ return null;
}
public function render()
diff --git a/app/Livewire/Project/Index.php b/app/Livewire/Project/Index.php
index 06bf88219..75597d8f5 100644
--- a/app/Livewire/Project/Index.php
+++ b/app/Livewire/Project/Index.php
@@ -34,7 +34,7 @@ class Index extends Component
public function navigateToProject($projectUuid)
{
- $project = Project::where('uuid', $projectUuid)->first();
+ $project = Project::query()->where('uuid', $projectUuid)->first();
if ($project && $project->environments->count() === 1) {
return Redirect::route('project.resource.index', [
diff --git a/app/Livewire/Project/New/DockerCompose.php b/app/Livewire/Project/New/DockerCompose.php
index 27975eaa2..d8425e34f 100644
--- a/app/Livewire/Project/New/DockerCompose.php
+++ b/app/Livewire/Project/New/DockerCompose.php
@@ -7,9 +7,11 @@ use App\Models\Project;
use App\Models\Service;
use App\Models\StandaloneDocker;
use App\Models\SwarmDocker;
+use Exception;
use Illuminate\Support\Str;
use Livewire\Component;
use Symfony\Component\Yaml\Yaml;
+use Throwable;
class DockerCompose extends Component
{
@@ -58,20 +60,20 @@ class DockerCompose extends Component
return $this->dispatch('error', "Invalid docker-compose file.\n$isValid");
}
- $project = Project::where('uuid', $this->parameters['project_uuid'])->first();
+ $project = Project::query()->where('uuid', $this->parameters['project_uuid'])->first();
$environment = $project->load(['environments'])->environments->where('uuid', $this->parameters['environment_uuid'])->first();
$destination_uuid = $this->query['destination'];
- $destination = StandaloneDocker::where('uuid', $destination_uuid)->first();
+ $destination = StandaloneDocker::query()->where('uuid', $destination_uuid)->first();
if (! $destination) {
- $destination = SwarmDocker::where('uuid', $destination_uuid)->first();
+ $destination = SwarmDocker::query()->where('uuid', $destination_uuid)->first();
}
if (! $destination) {
- throw new \Exception('Destination not found. What?!');
+ throw new Exception('Destination not found. What?!');
}
$destination_class = $destination->getMorphClass();
- $service = Service::create([
+ $service = Service::query()->create([
'name' => 'service'.Str::random(10),
'docker_compose_raw' => $this->dockerComposeRaw,
'environment_id' => $environment->id,
@@ -82,7 +84,7 @@ class DockerCompose extends Component
$variables = parseEnvFormatToArray($this->envFile);
foreach ($variables as $key => $variable) {
- EnvironmentVariable::create([
+ EnvironmentVariable::query()->create([
'key' => $key,
'value' => $variable,
'is_build_time' => false,
@@ -100,7 +102,7 @@ class DockerCompose extends Component
'environment_uuid' => $environment->uuid,
'project_uuid' => $project->uuid,
]);
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
return handleError($e, $this);
}
}
diff --git a/app/Livewire/Project/New/DockerImage.php b/app/Livewire/Project/New/DockerImage.php
index 942924437..cd8f7c4ec 100644
--- a/app/Livewire/Project/New/DockerImage.php
+++ b/app/Livewire/Project/New/DockerImage.php
@@ -6,6 +6,7 @@ use App\Models\Application;
use App\Models\Project;
use App\Models\StandaloneDocker;
use App\Models\SwarmDocker;
+use Exception;
use Livewire\Component;
use Visus\Cuid2\Cuid2;
@@ -28,32 +29,28 @@ class DockerImage extends Component
$this->validate([
'dockerImage' => 'required',
]);
- $image = str($this->dockerImage)->before(':');
- if (str($this->dockerImage)->contains(':')) {
- $tag = str($this->dockerImage)->after(':');
- } else {
- $tag = 'latest';
- }
+ $stringable = str($this->dockerImage)->before(':');
+ $tag = str($this->dockerImage)->contains(':') ? str($this->dockerImage)->after(':') : 'latest';
$destination_uuid = $this->query['destination'];
- $destination = StandaloneDocker::where('uuid', $destination_uuid)->first();
+ $destination = StandaloneDocker::query()->where('uuid', $destination_uuid)->first();
if (! $destination) {
- $destination = SwarmDocker::where('uuid', $destination_uuid)->first();
+ $destination = SwarmDocker::query()->where('uuid', $destination_uuid)->first();
}
if (! $destination) {
- throw new \Exception('Destination not found. What?!');
+ throw new Exception('Destination not found. What?!');
}
$destination_class = $destination->getMorphClass();
- $project = Project::where('uuid', $this->parameters['project_uuid'])->first();
+ $project = Project::query()->where('uuid', $this->parameters['project_uuid'])->first();
$environment = $project->load(['environments'])->environments->where('uuid', $this->parameters['environment_uuid'])->first();
- $application = Application::create([
+ $application = Application::query()->create([
'name' => 'docker-image-'.new Cuid2,
'repository_project_id' => 0,
'git_repository' => 'coollabsio/coolify',
'git_branch' => 'main',
'build_pack' => 'dockerimage',
'ports_exposes' => 80,
- 'docker_registry_image_name' => $image,
+ 'docker_registry_image_name' => $stringable,
'docker_registry_image_tag' => $tag,
'environment_id' => $environment->id,
'destination_id' => $destination->id,
diff --git a/app/Livewire/Project/New/EmptyProject.php b/app/Livewire/Project/New/EmptyProject.php
index 54cfc4b4d..2f1eda3f7 100644
--- a/app/Livewire/Project/New/EmptyProject.php
+++ b/app/Livewire/Project/New/EmptyProject.php
@@ -10,7 +10,7 @@ class EmptyProject extends Component
{
public function createEmptyProject()
{
- $project = Project::create([
+ $project = Project::query()->create([
'name' => generate_random_name(),
'team_id' => currentTeam()->id,
'uuid' => (string) new Cuid2,
diff --git a/app/Livewire/Project/New/GithubPrivateRepository.php b/app/Livewire/Project/New/GithubPrivateRepository.php
index 370d00555..3363e596b 100644
--- a/app/Livewire/Project/New/GithubPrivateRepository.php
+++ b/app/Livewire/Project/New/GithubPrivateRepository.php
@@ -7,9 +7,11 @@ use App\Models\GithubApp;
use App\Models\Project;
use App\Models\StandaloneDocker;
use App\Models\SwarmDocker;
+use Exception;
use Illuminate\Support\Facades\Http;
use Illuminate\Support\Facades\Route;
use Livewire\Component;
+use Throwable;
class GithubPrivateRepository extends Component
{
@@ -104,7 +106,7 @@ class GithubPrivateRepository extends Component
$this->repositories = collect();
$this->page = 1;
$this->selected_github_app_id = $github_app_id;
- $this->github_app = GithubApp::where('id', $github_app_id)->first();
+ $this->github_app = GithubApp::query()->where('id', $github_app_id)->first();
$this->token = generate_github_installation_token($this->github_app);
$this->loadRepositoryByPage();
if ($this->repositories->count() < $this->total_repositories_count) {
@@ -129,10 +131,12 @@ class GithubPrivateRepository extends Component
}
if ($json['total_count'] === 0) {
- return;
+ return null;
}
$this->total_repositories_count = $json['total_count'];
$this->repositories = $this->repositories->concat(collect($json['repositories']));
+
+ return null;
}
public function loadBranches()
@@ -161,25 +165,27 @@ class GithubPrivateRepository extends Component
$this->total_branches_count = count($json);
$this->branches = $this->branches->concat(collect($json));
+
+ return null;
}
public function submit()
{
try {
$destination_uuid = $this->query['destination'];
- $destination = StandaloneDocker::where('uuid', $destination_uuid)->first();
+ $destination = StandaloneDocker::query()->where('uuid', $destination_uuid)->first();
if (! $destination) {
- $destination = SwarmDocker::where('uuid', $destination_uuid)->first();
+ $destination = SwarmDocker::query()->where('uuid', $destination_uuid)->first();
}
if (! $destination) {
- throw new \Exception('Destination not found. What?!');
+ throw new Exception('Destination not found. What?!');
}
$destination_class = $destination->getMorphClass();
- $project = Project::where('uuid', $this->parameters['project_uuid'])->first();
+ $project = Project::query()->where('uuid', $this->parameters['project_uuid'])->first();
$environment = $project->load(['environments'])->environments->where('uuid', $this->parameters['environment_uuid'])->first();
- $application = Application::create([
+ $application = Application::query()->create([
'name' => generate_application_name($this->selected_repository_owner.'/'.$this->selected_repository_repo, $this->selected_branch_name),
'repository_project_id' => $this->selected_repository_id,
'git_repository' => "{$this->selected_repository_owner}/{$this->selected_repository_repo}",
@@ -214,7 +220,7 @@ class GithubPrivateRepository extends Component
'environment_uuid' => $environment->uuid,
'project_uuid' => $project->uuid,
]);
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
return handleError($e, $this);
}
}
diff --git a/app/Livewire/Project/New/GithubPrivateRepositoryDeployKey.php b/app/Livewire/Project/New/GithubPrivateRepositoryDeployKey.php
index 01b0c9ae8..74ef25873 100644
--- a/app/Livewire/Project/New/GithubPrivateRepositoryDeployKey.php
+++ b/app/Livewire/Project/New/GithubPrivateRepositoryDeployKey.php
@@ -9,9 +9,11 @@ use App\Models\PrivateKey;
use App\Models\Project;
use App\Models\StandaloneDocker;
use App\Models\SwarmDocker;
+use Exception;
use Illuminate\Support\Str;
use Livewire\Component;
use Spatie\Url\Url;
+use Throwable;
class GithubPrivateRepositoryDeployKey extends Component
{
@@ -81,9 +83,9 @@ class GithubPrivateRepositoryDeployKey extends Component
$this->parameters = get_route_parameters();
$this->query = request()->query();
if (isDev()) {
- $this->private_keys = PrivateKey::where('team_id', currentTeam()->id)->get();
+ $this->private_keys = PrivateKey::query()->where('team_id', currentTeam()->id)->get();
} else {
- $this->private_keys = PrivateKey::where('team_id', currentTeam()->id)->where('id', '!=', 0)->get();
+ $this->private_keys = PrivateKey::query()->where('team_id', currentTeam()->id)->where('id', '!=', 0)->get();
}
}
@@ -124,18 +126,18 @@ class GithubPrivateRepositoryDeployKey extends Component
$this->validate();
try {
$destination_uuid = $this->query['destination'];
- $destination = StandaloneDocker::where('uuid', $destination_uuid)->first();
+ $destination = StandaloneDocker::query()->where('uuid', $destination_uuid)->first();
if (! $destination) {
- $destination = SwarmDocker::where('uuid', $destination_uuid)->first();
+ $destination = SwarmDocker::query()->where('uuid', $destination_uuid)->first();
}
if (! $destination) {
- throw new \Exception('Destination not found. What?!');
+ throw new Exception('Destination not found. What?!');
}
$destination_class = $destination->getMorphClass();
$this->get_git_source();
- $project = Project::where('uuid', $this->parameters['project_uuid'])->first();
+ $project = Project::query()->where('uuid', $this->parameters['project_uuid'])->first();
$environment = $project->load(['environments'])->environments->where('uuid', $this->parameters['environment_uuid'])->first();
if ($this->git_source === 'other') {
$application_init = [
@@ -173,7 +175,7 @@ class GithubPrivateRepositoryDeployKey extends Component
$application_init['docker_compose_location'] = $this->docker_compose_location;
$application_init['base_directory'] = $this->base_directory;
}
- $application = Application::create($application_init);
+ $application = Application::query()->create($application_init);
$application->settings->is_static = $this->is_static;
$application->settings->save();
@@ -187,7 +189,7 @@ class GithubPrivateRepositoryDeployKey extends Component
'environment_uuid' => $environment->uuid,
'project_uuid' => $project->uuid,
]);
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
return handleError($e, $this);
}
}
@@ -199,7 +201,7 @@ class GithubPrivateRepositoryDeployKey extends Component
$this->git_repository = $this->repository_url_parsed->getSegment(1).'/'.$this->repository_url_parsed->getSegment(2);
if ($this->git_host === 'github.com') {
- $this->git_source = GithubApp::where('name', 'Public GitHub')->first();
+ $this->git_source = GithubApp::query()->where('name', 'Public GitHub')->first();
return;
}
diff --git a/app/Livewire/Project/New/PublicGitRepository.php b/app/Livewire/Project/New/PublicGitRepository.php
index 2f2331fc0..31866c936 100644
--- a/app/Livewire/Project/New/PublicGitRepository.php
+++ b/app/Livewire/Project/New/PublicGitRepository.php
@@ -10,8 +10,10 @@ use App\Models\Service;
use App\Models\StandaloneDocker;
use App\Models\SwarmDocker;
use Carbon\Carbon;
+use Exception;
use Livewire\Component;
use Spatie\Url\Url;
+use Throwable;
class PublicGitRepository extends Component
{
@@ -93,7 +95,7 @@ class PublicGitRepository extends Component
public function updatedBaseDirectory()
{
- if ($this->base_directory) {
+ if ($this->base_directory !== '' && $this->base_directory !== '0') {
$this->base_directory = rtrim($this->base_directory, '/');
if (! str($this->base_directory)->startsWith('/')) {
$this->base_directory = '/'.$this->base_directory;
@@ -153,12 +155,12 @@ class PublicGitRepository extends Component
(! str($this->repository_url)->contains('github.com') ||
! str($this->repository_url)->contains('git.sr.ht'))
) {
- $this->repository_url = $this->repository_url.'.git';
+ $this->repository_url .= '.git';
}
if (str($this->repository_url)->contains('github.com') && str($this->repository_url)->endsWith('.git')) {
$this->repository_url = str($this->repository_url)->beforeLast('.git')->value();
}
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
return handleError($e, $this);
}
try {
@@ -166,24 +168,26 @@ class PublicGitRepository extends Component
$this->getGitSource();
$this->getBranch();
$this->selectedBranch = $this->git_branch;
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
if ($this->rate_limit_remaining == 0) {
$this->selectedBranch = $this->git_branch;
$this->branchFound = true;
- return;
+ return null;
}
if (! $this->branchFound && $this->git_branch === 'main') {
try {
$this->git_branch = 'master';
$this->getBranch();
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
return handleError($e, $this);
}
} else {
return handleError($e, $this);
}
}
+
+ return null;
}
private function getGitSource()
@@ -197,7 +201,7 @@ class PublicGitRepository extends Component
$this->git_branch = 'main';
}
if ($this->git_host === 'github.com') {
- $this->git_source = GithubApp::where('name', 'Public GitHub')->first();
+ $this->git_source = GithubApp::query()->where('name', 'Public GitHub')->first();
return;
}
@@ -212,7 +216,7 @@ class PublicGitRepository extends Component
return;
}
- if ($this->git_source->getMorphClass() === \App\Models\GithubApp::class) {
+ if ($this->git_source->getMorphClass() === GithubApp::class) {
['rate_limit_remaining' => $this->rate_limit_remaining, 'rate_limit_reset' => $this->rate_limit_reset] = githubApi(source: $this->git_source, endpoint: "/repos/{$this->git_repository}/branches/{$this->git_branch}");
$this->rate_limit_reset = Carbon::parse((int) $this->rate_limit_reset)->format('Y-M-d H:i:s');
$this->branchFound = true;
@@ -227,16 +231,16 @@ class PublicGitRepository extends Component
$project_uuid = $this->parameters['project_uuid'];
$environment_uuid = $this->parameters['environment_uuid'];
- $destination = StandaloneDocker::where('uuid', $destination_uuid)->first();
+ $destination = StandaloneDocker::query()->where('uuid', $destination_uuid)->first();
if (! $destination) {
- $destination = SwarmDocker::where('uuid', $destination_uuid)->first();
+ $destination = SwarmDocker::query()->where('uuid', $destination_uuid)->first();
}
if (! $destination) {
- throw new \Exception('Destination not found. What?!');
+ throw new Exception('Destination not found. What?!');
}
$destination_class = $destination->getMorphClass();
- $project = Project::where('uuid', $project_uuid)->first();
+ $project = Project::query()->where('uuid', $project_uuid)->first();
$environment = $project->load(['environments'])->environments->where('uuid', $environment_uuid)->first();
if ($this->build_pack === 'dockercompose' && isDev() && $this->new_compose_services) {
@@ -256,15 +260,13 @@ class PublicGitRepository extends Component
$new_service['source_id'] = $this->git_source->id;
$new_service['source_type'] = $this->git_source->getMorphClass();
}
- $service = Service::create($new_service);
+ $service = Service::query()->create($new_service);
return redirect()->route('project.service.configuration', [
'service_uuid' => $service->uuid,
'environment_uuid' => $environment->uuid,
'project_uuid' => $project->uuid,
]);
-
- return;
}
if ($this->git_source === 'other') {
$application_init = [
@@ -303,7 +305,7 @@ class PublicGitRepository extends Component
$application_init['docker_compose_location'] = $this->docker_compose_location;
$application_init['base_directory'] = $this->base_directory;
}
- $application = Application::create($application_init);
+ $application = Application::query()->create($application_init);
$application->settings->is_static = $this->isStatic;
$application->settings->save();
@@ -322,7 +324,7 @@ class PublicGitRepository extends Component
'environment_uuid' => $environment->uuid,
'project_uuid' => $project->uuid,
]);
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
return handleError($e, $this);
}
}
diff --git a/app/Livewire/Project/New/Select.php b/app/Livewire/Project/New/Select.php
index b645a8915..e05f53230 100644
--- a/app/Livewire/Project/New/Select.php
+++ b/app/Livewire/Project/New/Select.php
@@ -205,12 +205,10 @@ class Select extends Component
{
if ($this->includeSwarm) {
$this->servers = $this->allServers;
+ } elseif ($this->allServers instanceof Collection) {
+ $this->servers = $this->allServers->where('settings.is_swarm_worker', false)->where('settings.is_swarm_manager', false)->where('settings.is_build_server', false);
} else {
- if ($this->allServers instanceof Collection) {
- $this->servers = $this->allServers->where('settings.is_swarm_worker', false)->where('settings.is_swarm_manager', false)->where('settings.is_build_server', false);
- } else {
- $this->servers = $this->allServers;
- }
+ $this->servers = $this->allServers;
}
}
@@ -218,7 +216,7 @@ class Select extends Component
{
$type = str($type)->lower()->slug()->value();
if ($this->loading) {
- return;
+ return null;
}
$this->loading = true;
$this->type = $type;
@@ -252,7 +250,7 @@ class Select extends Component
if ($type === 'existing-postgresql') {
$this->current_step = $type;
- return;
+ return null;
}
if (count($this->servers) === 1) {
$server = $this->servers->first();
@@ -267,6 +265,8 @@ class Select extends Component
}
}
$this->current_step = 'servers';
+
+ return null;
}
public function setServer(Server $server)
@@ -285,6 +285,8 @@ class Select extends Component
}
}
$this->current_step = 'destinations';
+
+ return null;
}
public function setDestination(string $destination_uuid)
@@ -321,6 +323,8 @@ class Select extends Component
'server_id' => $this->server_id,
]);
}
+
+ return null;
}
public function loadServers()
diff --git a/app/Livewire/Project/New/SimpleDockerfile.php b/app/Livewire/Project/New/SimpleDockerfile.php
index c3ed6039a..f40c36bac 100644
--- a/app/Livewire/Project/New/SimpleDockerfile.php
+++ b/app/Livewire/Project/New/SimpleDockerfile.php
@@ -7,6 +7,7 @@ use App\Models\GithubApp;
use App\Models\Project;
use App\Models\StandaloneDocker;
use App\Models\SwarmDocker;
+use Exception;
use Livewire\Component;
use Visus\Cuid2\Cuid2;
@@ -36,23 +37,23 @@ CMD ["nginx", "-g", "daemon off;"]
'dockerfile' => 'required',
]);
$destination_uuid = $this->query['destination'];
- $destination = StandaloneDocker::where('uuid', $destination_uuid)->first();
+ $destination = StandaloneDocker::query()->where('uuid', $destination_uuid)->first();
if (! $destination) {
- $destination = SwarmDocker::where('uuid', $destination_uuid)->first();
+ $destination = SwarmDocker::query()->where('uuid', $destination_uuid)->first();
}
if (! $destination) {
- throw new \Exception('Destination not found. What?!');
+ throw new Exception('Destination not found. What?!');
}
$destination_class = $destination->getMorphClass();
- $project = Project::where('uuid', $this->parameters['project_uuid'])->first();
+ $project = Project::query()->where('uuid', $this->parameters['project_uuid'])->first();
$environment = $project->load(['environments'])->environments->where('uuid', $this->parameters['environment_uuid'])->first();
$port = get_port_from_dockerfile($this->dockerfile);
if (! $port) {
$port = 80;
}
- $application = Application::create([
+ $application = Application::query()->create([
'name' => 'dockerfile-'.new Cuid2,
'repository_project_id' => 0,
'git_repository' => 'coollabsio/coolify',
diff --git a/app/Livewire/Project/Resource/Create.php b/app/Livewire/Project/Resource/Create.php
index 0faf0b8da..ac177b0b3 100644
--- a/app/Livewire/Project/Resource/Create.php
+++ b/app/Livewire/Project/Resource/Create.php
@@ -67,7 +67,7 @@ class Create extends Component
$oneClickDotEnvs = data_get($services, "$oneClickServiceName.envs", null);
if ($oneClickDotEnvs) {
$oneClickDotEnvs = str(base64_decode($oneClickDotEnvs))->split('/\r\n|\r|\n/')->filter(function ($value) {
- return ! empty($value);
+ return $value !== '' && $value !== '0';
});
}
if ($oneClickService) {
@@ -84,7 +84,7 @@ class Create extends Component
if ($oneClickServiceName === 'cloudflared') {
data_set($service_payload, 'connect_to_docker_network', true);
}
- $service = Service::create($service_payload);
+ $service = Service::query()->create($service_payload);
$service->name = "$oneClickServiceName-".$service->uuid;
$service->save();
if ($oneClickDotEnvs?->count() > 0) {
@@ -92,7 +92,7 @@ class Create extends Component
$key = str()->before($value, '=');
$value = str(str()->after($value, '='));
if ($value) {
- EnvironmentVariable::create([
+ EnvironmentVariable::query()->create([
'key' => $key,
'value' => $value,
'resourceable_id' => $service->id,
@@ -114,6 +114,8 @@ class Create extends Component
}
$this->type = $type->value();
}
+
+ return null;
}
public function render()
diff --git a/app/Livewire/Project/Resource/EnvironmentSelect.php b/app/Livewire/Project/Resource/EnvironmentSelect.php
index a38d750da..e7c2c2bd6 100644
--- a/app/Livewire/Project/Resource/EnvironmentSelect.php
+++ b/app/Livewire/Project/Resource/EnvironmentSelect.php
@@ -25,11 +25,11 @@ class EnvironmentSelect extends Component
return redirect()->route('project.show', [
'project_uuid' => $this->project_uuid,
]);
- } else {
- return redirect()->route('project.resource.index', [
- 'project_uuid' => $this->project_uuid,
- 'environment_uuid' => $value,
- ]);
}
+
+ return redirect()->route('project.resource.index', [
+ 'project_uuid' => $this->project_uuid,
+ 'environment_uuid' => $value,
+ ]);
}
}
diff --git a/app/Livewire/Project/Service/Configuration.php b/app/Livewire/Project/Service/Configuration.php
index 4a5e8627f..a1f1d0aa5 100644
--- a/app/Livewire/Project/Service/Configuration.php
+++ b/app/Livewire/Project/Service/Configuration.php
@@ -4,6 +4,7 @@ namespace App\Livewire\Project\Service;
use App\Actions\Docker\GetContainersStatus;
use App\Models\Service;
+use Exception;
use Illuminate\Support\Facades\Auth;
use Livewire\Component;
@@ -71,9 +72,11 @@ class Configuration extends Component
$application->restart();
$this->dispatch('success', 'Service application restarted successfully.');
}
- } catch (\Exception $e) {
+ } catch (Exception $e) {
return handleError($e, $this);
}
+
+ return null;
}
public function restartDatabase($id)
@@ -84,9 +87,11 @@ class Configuration extends Component
$database->restart();
$this->dispatch('success', 'Service database restarted successfully.');
}
- } catch (\Exception $e) {
+ } catch (Exception $e) {
return handleError($e, $this);
}
+
+ return null;
}
public function check_status()
@@ -100,8 +105,10 @@ class Configuration extends Component
$database->refresh();
});
$this->dispatch('$refresh');
- } catch (\Exception $e) {
+ } catch (Exception $e) {
return handleError($e, $this);
}
+
+ return null;
}
}
diff --git a/app/Livewire/Project/Service/Database.php b/app/Livewire/Project/Service/Database.php
index 9f02db05c..88bedd3b4 100644
--- a/app/Livewire/Project/Service/Database.php
+++ b/app/Livewire/Project/Service/Database.php
@@ -6,6 +6,7 @@ use App\Actions\Database\StartDatabaseProxy;
use App\Actions\Database\StopDatabaseProxy;
use App\Models\ServiceDatabase;
use Livewire\Component;
+use Throwable;
class Database extends Component
{
@@ -95,7 +96,7 @@ class Database extends Component
$this->database->save();
updateCompose($this->database);
$this->dispatch('success', 'Database saved.');
- } catch (\Throwable) {
+ } catch (Throwable) {
} finally {
$this->dispatch('generateDockerCompose');
}
diff --git a/app/Livewire/Project/Service/EditCompose.php b/app/Livewire/Project/Service/EditCompose.php
index dc043e65a..3b8b7d155 100644
--- a/app/Livewire/Project/Service/EditCompose.php
+++ b/app/Livewire/Project/Service/EditCompose.php
@@ -31,12 +31,12 @@ class EditCompose extends Component
public function refreshEnvs()
{
- $this->service = Service::find($this->serviceId);
+ $this->service = Service::query()->find($this->serviceId);
}
public function mount()
{
- $this->service = Service::find($this->serviceId);
+ $this->service = Service::query()->find($this->serviceId);
}
public function saveEditedCompose()
diff --git a/app/Livewire/Project/Service/EditDomain.php b/app/Livewire/Project/Service/EditDomain.php
index e89aeda85..dbc5ca2ff 100644
--- a/app/Livewire/Project/Service/EditDomain.php
+++ b/app/Livewire/Project/Service/EditDomain.php
@@ -5,6 +5,7 @@ namespace App\Livewire\Project\Service;
use App\Models\ServiceApplication;
use Livewire\Component;
use Spatie\Url\Url;
+use Throwable;
class EditDomain extends Component
{
@@ -19,7 +20,7 @@ class EditDomain extends Component
public function mount()
{
- $this->application = ServiceApplication::find($this->applicationId);
+ $this->application = ServiceApplication::query()->find($this->applicationId);
}
public function submit()
@@ -43,13 +44,13 @@ class EditDomain extends Component
updateCompose($this->application);
if (str($this->application->fqdn)->contains(',')) {
$this->dispatch('warning', 'Some services do not support multiple domains, which can lead to problems and is NOT RECOMMENDED.
Only use multiple domains if you know what you are doing.');
- } else {
- ! $warning && $this->dispatch('success', 'Service saved.');
+ } elseif (! $warning) {
+ $this->dispatch('success', 'Service saved.');
}
$this->application->service->parse();
$this->dispatch('refresh');
$this->dispatch('configurationChanged');
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
$originalFqdn = $this->application->getOriginal('fqdn');
if ($originalFqdn !== $this->application->fqdn) {
$this->application->fqdn = $originalFqdn;
@@ -57,6 +58,8 @@ class EditDomain extends Component
return handleError($e, $this);
}
+
+ return null;
}
public function render()
diff --git a/app/Livewire/Project/Service/FileStorage.php b/app/Livewire/Project/Service/FileStorage.php
index 4d070bc0c..83b05acb1 100644
--- a/app/Livewire/Project/Service/FileStorage.php
+++ b/app/Livewire/Project/Service/FileStorage.php
@@ -18,6 +18,7 @@ use App\Models\StandaloneRedis;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Hash;
use Livewire\Component;
+use Throwable;
class FileStorage extends Component
{
@@ -61,11 +62,13 @@ class FileStorage extends Component
$this->fileStorage->is_based_on_git = false;
$this->fileStorage->save();
$this->fileStorage->saveStorageOnServer();
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
return handleError($e, $this);
} finally {
$this->dispatch('refreshStorages');
}
+
+ return null;
}
public function convertToFile()
@@ -79,21 +82,21 @@ class FileStorage extends Component
}
$this->fileStorage->save();
$this->fileStorage->saveStorageOnServer();
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
return handleError($e, $this);
} finally {
$this->dispatch('refreshStorages');
}
+
+ return null;
}
public function delete($password)
{
- if (! data_get(InstanceSettings::get(), 'disable_two_step_confirmation')) {
- if (! Hash::check($password, Auth::user()->password)) {
- $this->addError('password', 'The provided password is incorrect.');
+ if (! data_get(InstanceSettings::get(), 'disable_two_step_confirmation') && ! Hash::check($password, Auth::user()->password)) {
+ $this->addError('password', 'The provided password is incorrect.');
- return;
- }
+ return null;
}
try {
@@ -107,11 +110,13 @@ class FileStorage extends Component
}
$this->fileStorage->delete();
$this->dispatch('success', $message);
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
return handleError($e, $this);
} finally {
$this->dispatch('refreshStorages');
}
+
+ return null;
}
public function submit()
@@ -125,12 +130,14 @@ class FileStorage extends Component
$this->fileStorage->save();
$this->fileStorage->saveStorageOnServer();
$this->dispatch('success', 'File updated.');
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
$this->fileStorage->setRawAttributes($original);
$this->fileStorage->save();
return handleError($e, $this);
}
+
+ return null;
}
public function instantSave()
diff --git a/app/Livewire/Project/Service/Index.php b/app/Livewire/Project/Service/Index.php
index ba4ebe2fc..38a2aad2d 100644
--- a/app/Livewire/Project/Service/Index.php
+++ b/app/Livewire/Project/Service/Index.php
@@ -7,6 +7,7 @@ use App\Models\ServiceApplication;
use App\Models\ServiceDatabase;
use Illuminate\Support\Collection;
use Livewire\Component;
+use Throwable;
class Index extends Component
{
@@ -45,9 +46,11 @@ class Index extends Component
$this->serviceDatabase->getFilesFromServer();
}
$this->s3s = currentTeam()->s3s;
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
return handleError($e, $this);
}
+
+ return null;
}
public function generateDockerCompose()
diff --git a/app/Livewire/Project/Service/Navbar.php b/app/Livewire/Project/Service/Navbar.php
index 22fc1c0d6..0fc920779 100644
--- a/app/Livewire/Project/Service/Navbar.php
+++ b/app/Livewire/Project/Service/Navbar.php
@@ -10,6 +10,7 @@ use App\Models\Service;
use Illuminate\Support\Facades\Auth;
use Livewire\Component;
use Spatie\Activitylog\Models\Activity;
+use Throwable;
class Navbar extends Component
{
@@ -70,14 +71,10 @@ class Navbar extends Component
try {
// TODO: This is a temporary solution. We need to refactor this.
// We need to delete null bytes somehow.
- $activity = Activity::where('properties->type_uuid', $this->service->uuid)->latest()->first();
+ $activity = Activity::query()->where('properties->type_uuid', $this->service->uuid)->latest()->first();
$status = data_get($activity, 'properties.status');
- if ($status === 'queued' || $status === 'in_progress') {
- $this->isDeploymentProgress = true;
- } else {
- $this->isDeploymentProgress = false;
- }
- } catch (\Throwable) {
+ $this->isDeploymentProgress = $status === 'queued' || $status === 'in_progress';
+ } catch (Throwable) {
$this->isDeploymentProgress = false;
}
}
diff --git a/app/Livewire/Project/Service/ServiceApplicationView.php b/app/Livewire/Project/Service/ServiceApplicationView.php
index 8324ee645..a3e417567 100644
--- a/app/Livewire/Project/Service/ServiceApplicationView.php
+++ b/app/Livewire/Project/Service/ServiceApplicationView.php
@@ -8,6 +8,7 @@ use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Hash;
use Livewire\Component;
use Spatie\Url\Url;
+use Throwable;
class ServiceApplicationView extends Component
{
@@ -50,12 +51,10 @@ class ServiceApplicationView extends Component
public function delete($password)
{
- if (! data_get(InstanceSettings::get(), 'disable_two_step_confirmation')) {
- if (! Hash::check($password, Auth::user()->password)) {
- $this->addError('password', 'The provided password is incorrect.');
+ if (! data_get(InstanceSettings::get(), 'disable_two_step_confirmation') && ! Hash::check($password, Auth::user()->password)) {
+ $this->addError('password', 'The provided password is incorrect.');
- return;
- }
+ return null;
}
try {
@@ -63,7 +62,7 @@ class ServiceApplicationView extends Component
$this->dispatch('success', 'Application deleted.');
return redirect()->route('project.service.configuration', $this->parameters);
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
return handleError($e, $this);
}
}
@@ -94,11 +93,11 @@ class ServiceApplicationView extends Component
updateCompose($this->application);
if (str($this->application->fqdn)->contains(',')) {
$this->dispatch('warning', 'Some services do not support multiple domains, which can lead to problems and is NOT RECOMMENDED.
Only use multiple domains if you know what you are doing.');
- } else {
- ! $warning && $this->dispatch('success', 'Service saved.');
+ } elseif (! $warning) {
+ $this->dispatch('success', 'Service saved.');
}
$this->dispatch('generateDockerCompose');
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
$originalFqdn = $this->application->getOriginal('fqdn');
if ($originalFqdn !== $this->application->fqdn) {
$this->application->fqdn = $originalFqdn;
@@ -106,6 +105,8 @@ class ServiceApplicationView extends Component
return handleError($e, $this);
}
+
+ return null;
}
public function render()
diff --git a/app/Livewire/Project/Service/StackForm.php b/app/Livewire/Project/Service/StackForm.php
index 2c751aa92..2ee43cb57 100644
--- a/app/Livewire/Project/Service/StackForm.php
+++ b/app/Livewire/Project/Service/StackForm.php
@@ -3,8 +3,10 @@
namespace App\Livewire\Project\Service;
use App\Models\Service;
+use Exception;
use Illuminate\Support\Collection;
use Livewire\Component;
+use Throwable;
class StackForm extends Component
{
@@ -78,7 +80,7 @@ class StackForm extends Component
$this->validate();
$isValid = validateComposeFile($this->service->docker_compose_raw, $this->service->server->id);
if ($isValid !== 'OK') {
- throw new \Exception("Invalid docker-compose file.\n$isValid");
+ throw new Exception("Invalid docker-compose file.\n$isValid");
}
$this->service->save();
$this->service->saveExtraFields($this->fields);
@@ -87,7 +89,7 @@ class StackForm extends Component
$this->service->saveComposeConfigs();
$this->dispatch('refreshEnvs');
$notify && $this->dispatch('success', 'Service saved.');
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
return handleError($e, $this);
} finally {
if (is_null($this->service->config_hash)) {
@@ -96,6 +98,8 @@ class StackForm extends Component
$this->dispatch('configurationChanged');
}
}
+
+ return null;
}
public function render()
diff --git a/app/Livewire/Project/Service/Storage.php b/app/Livewire/Project/Service/Storage.php
index 4b64a8b5e..5fc83058d 100644
--- a/app/Livewire/Project/Service/Storage.php
+++ b/app/Livewire/Project/Service/Storage.php
@@ -4,6 +4,7 @@ namespace App\Livewire\Project\Service;
use App\Models\LocalPersistentVolume;
use Livewire\Component;
+use Throwable;
class Storage extends Component
{
@@ -42,7 +43,7 @@ class Storage extends Component
public function addNewVolume($data)
{
try {
- LocalPersistentVolume::create([
+ LocalPersistentVolume::query()->create([
'name' => $data['name'],
'mount_path' => $data['mount_path'],
'host_path' => $data['host_path'],
@@ -53,9 +54,11 @@ class Storage extends Component
$this->dispatch('success', 'Storage added successfully');
$this->dispatch('clearAddStorage');
$this->dispatch('refreshStorages');
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
return handleError($e, $this);
}
+
+ return null;
}
public function render()
diff --git a/app/Livewire/Project/Shared/Danger.php b/app/Livewire/Project/Shared/Danger.php
index 7da48f9fb..014bd21af 100644
--- a/app/Livewire/Project/Shared/Danger.php
+++ b/app/Livewire/Project/Shared/Danger.php
@@ -10,6 +10,7 @@ use App\Models\ServiceDatabase;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Hash;
use Livewire\Component;
+use Throwable;
use Visus\Cuid2\Cuid2;
class Danger extends Component
@@ -43,10 +44,10 @@ class Danger extends Component
if ($this->resource === null) {
if (isset($parameters['service_uuid'])) {
- $this->resource = Service::where('uuid', $parameters['service_uuid'])->first();
+ $this->resource = Service::query()->where('uuid', $parameters['service_uuid'])->first();
} elseif (isset($parameters['stack_service_uuid'])) {
- $this->resource = ServiceApplication::where('uuid', $parameters['stack_service_uuid'])->first()
- ?? ServiceDatabase::where('uuid', $parameters['stack_service_uuid'])->first();
+ $this->resource = ServiceApplication::query()->where('uuid', $parameters['stack_service_uuid'])->first()
+ ?? ServiceDatabase::query()->where('uuid', $parameters['stack_service_uuid'])->first();
}
}
@@ -81,18 +82,16 @@ class Danger extends Component
public function delete($password)
{
- if (! data_get(InstanceSettings::get(), 'disable_two_step_confirmation')) {
- if (! Hash::check($password, Auth::user()->password)) {
- $this->addError('password', 'The provided password is incorrect.');
+ if (! data_get(InstanceSettings::get(), 'disable_two_step_confirmation') && ! Hash::check($password, Auth::user()->password)) {
+ $this->addError('password', 'The provided password is incorrect.');
- return;
- }
+ return null;
}
if (! $this->resource) {
$this->addError('resource', 'Resource not found.');
- return;
+ return null;
}
try {
@@ -109,7 +108,7 @@ class Danger extends Component
'project_uuid' => $this->projectUuid,
'environment_uuid' => $this->environmentUuid,
]);
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
return handleError($e, $this);
}
}
diff --git a/app/Livewire/Project/Shared/Destination.php b/app/Livewire/Project/Shared/Destination.php
index 1759fe08a..0096bc989 100644
--- a/app/Livewire/Project/Shared/Destination.php
+++ b/app/Livewire/Project/Shared/Destination.php
@@ -8,6 +8,7 @@ use App\Events\ApplicationStatusChanged;
use App\Models\InstanceSettings;
use App\Models\Server;
use App\Models\StandaloneDocker;
+use Exception;
use Illuminate\Support\Collection;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Hash;
@@ -63,9 +64,11 @@ class Destination extends Component
$server = Server::ownedByCurrentTeam()->findOrFail($serverId);
StopApplicationOneServer::run($this->resource, $server);
$this->refreshServers();
- } catch (\Exception $e) {
+ } catch (Exception $e) {
return handleError($e, $this);
}
+
+ return null;
}
public function redeploy(int $network_id, int $server_id)
@@ -74,13 +77,13 @@ class Destination extends Component
if ($this->resource->additional_servers->count() > 0 && str($this->resource->docker_registry_image_name)->isEmpty()) {
$this->dispatch('error', 'Failed to deploy.', 'Before deploying to multiple servers, you must first set a Docker image in the General tab.
More information here: documentation');
- return;
+ return null;
}
- $deployment_uuid = new Cuid2;
+ $cuid2 = new Cuid2;
$server = Server::ownedByCurrentTeam()->findOrFail($server_id);
$destination = $server->standaloneDockers->where('id', $network_id)->firstOrFail();
queue_application_deployment(
- deployment_uuid: $deployment_uuid,
+ deployment_uuid: $cuid2,
application: $this->resource,
server: $server,
destination: $destination,
@@ -91,10 +94,10 @@ class Destination extends Component
return redirect()->route('project.application.deployment.show', [
'project_uuid' => data_get($this->resource, 'environment.project.uuid'),
'application_uuid' => data_get($this->resource, 'uuid'),
- 'deployment_uuid' => $deployment_uuid,
+ 'deployment_uuid' => $cuid2,
'environment_uuid' => data_get($this->resource, 'environment.uuid'),
]);
- } catch (\Exception $e) {
+ } catch (Exception $e) {
return handleError($e, $this);
}
}
@@ -130,26 +133,26 @@ class Destination extends Component
public function removeServer(int $network_id, int $server_id, $password)
{
try {
- if (! data_get(InstanceSettings::get(), 'disable_two_step_confirmation')) {
- if (! Hash::check($password, Auth::user()->password)) {
- $this->addError('password', 'The provided password is incorrect.');
+ if (! data_get(InstanceSettings::get(), 'disable_two_step_confirmation') && ! Hash::check($password, Auth::user()->password)) {
+ $this->addError('password', 'The provided password is incorrect.');
- return;
- }
+ return null;
}
if ($this->resource->destination->server->id == $server_id && $this->resource->destination->id == $network_id) {
$this->dispatch('error', 'You cannot remove this destination server.', 'You are trying to remove the main server.');
- return;
+ return null;
}
$server = Server::ownedByCurrentTeam()->findOrFail($server_id);
StopApplicationOneServer::run($this->resource, $server);
$this->resource->additional_networks()->detach($network_id, ['server_id' => $server_id]);
$this->loadData();
ApplicationStatusChanged::dispatch(data_get($this->resource, 'environment.project.team.id'));
- } catch (\Exception $e) {
+ } catch (Exception $e) {
return handleError($e, $this);
}
+
+ return null;
}
}
diff --git a/app/Livewire/Project/Shared/EnvironmentVariable/All.php b/app/Livewire/Project/Shared/EnvironmentVariable/All.php
index 80156bf65..db9184ba4 100644
--- a/app/Livewire/Project/Shared/EnvironmentVariable/All.php
+++ b/app/Livewire/Project/Shared/EnvironmentVariable/All.php
@@ -2,8 +2,10 @@
namespace App\Livewire\Project\Shared\EnvironmentVariable;
+use App\Models\Application;
use App\Models\EnvironmentVariable;
use Livewire\Component;
+use Throwable;
class All extends Component
{
@@ -31,7 +33,7 @@ class All extends Component
{
$this->is_env_sorting_enabled = data_get($this->resource, 'settings.is_env_sorting_enabled', false);
$this->resourceClass = get_class($this->resource);
- $resourceWithPreviews = [\App\Models\Application::class];
+ $resourceWithPreviews = [Application::class];
$simpleDockerfile = filled(data_get($this->resource, 'dockerfile'));
if (str($this->resourceClass)->contains($resourceWithPreviews) && ! $simpleDockerfile) {
$this->showPreview = true;
@@ -101,11 +103,13 @@ class All extends Component
$this->updateOrder();
$this->sortEnvironmentVariables();
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
return handleError($e, $this);
} finally {
$this->refreshEnvs();
}
+
+ return null;
}
private function updateOrder()
@@ -167,17 +171,17 @@ class All extends Component
private function createEnvironmentVariable($data)
{
- $environment = new EnvironmentVariable;
- $environment->key = $data['key'];
- $environment->value = $data['value'];
- $environment->is_build_time = $data['is_build_time'] ?? false;
- $environment->is_multiline = $data['is_multiline'] ?? false;
- $environment->is_literal = $data['is_literal'] ?? false;
- $environment->is_preview = $data['is_preview'] ?? false;
- $environment->resourceable_id = $this->resource->id;
- $environment->resourceable_type = $this->resource->getMorphClass();
+ $environmentVariable = new EnvironmentVariable;
+ $environmentVariable->key = $data['key'];
+ $environmentVariable->value = $data['value'];
+ $environmentVariable->is_build_time = $data['is_build_time'] ?? false;
+ $environmentVariable->is_multiline = $data['is_multiline'] ?? false;
+ $environmentVariable->is_literal = $data['is_literal'] ?? false;
+ $environmentVariable->is_preview = $data['is_preview'] ?? false;
+ $environmentVariable->resourceable_id = $this->resource->id;
+ $environmentVariable->resourceable_type = $this->resource->getMorphClass();
- return $environment;
+ return $environmentVariable;
}
private function deleteRemovedVariables($isPreview, $variables)
diff --git a/app/Livewire/Project/Shared/EnvironmentVariable/Show.php b/app/Livewire/Project/Shared/EnvironmentVariable/Show.php
index 4b66bfdcb..7d588a55b 100644
--- a/app/Livewire/Project/Shared/EnvironmentVariable/Show.php
+++ b/app/Livewire/Project/Shared/EnvironmentVariable/Show.php
@@ -4,6 +4,7 @@ namespace App\Livewire\Project\Shared\EnvironmentVariable;
use App\Models\EnvironmentVariable as ModelsEnvironmentVariable;
use App\Models\SharedEnvironmentVariable;
+use Exception;
use Livewire\Component;
class Show extends Component
@@ -60,7 +61,7 @@ class Show extends Component
public function mount()
{
$this->syncData();
- if ($this->env->getMorphClass() === \App\Models\SharedEnvironmentVariable::class) {
+ if ($this->env->getMorphClass() === SharedEnvironmentVariable::class) {
$this->isSharedVariable = true;
}
$this->parameters = get_route_parameters();
@@ -116,7 +117,7 @@ class Show extends Component
public function serialize()
{
data_forget($this->env, 'real_value');
- if ($this->env->getMorphClass() === \App\Models\SharedEnvironmentVariable::class) {
+ if ($this->env->getMorphClass() === SharedEnvironmentVariable::class) {
data_forget($this->env, 'is_build_time');
}
}
@@ -156,7 +157,7 @@ class Show extends Component
$this->value = $oldValue;
$this->dispatch('error', 'Required environment variable cannot be empty.');
- return;
+ return null;
}
$this->serialize();
@@ -168,9 +169,11 @@ class Show extends Component
$this->syncData(true);
$this->dispatch('success', 'Environment variable updated.');
$this->dispatch('envsUpdated');
- } catch (\Exception $e) {
+ } catch (Exception $e) {
return handleError($e);
}
+
+ return null;
}
public function delete()
@@ -179,8 +182,10 @@ class Show extends Component
$this->env->delete();
$this->dispatch('environmentVariableDeleted');
$this->dispatch('success', 'Environment variable deleted successfully.');
- } catch (\Exception $e) {
+ } catch (Exception $e) {
return handleError($e);
}
+
+ return null;
}
}
diff --git a/app/Livewire/Project/Shared/ExecuteContainerCommand.php b/app/Livewire/Project/Shared/ExecuteContainerCommand.php
index d12d8e26a..9b6610e99 100644
--- a/app/Livewire/Project/Shared/ExecuteContainerCommand.php
+++ b/app/Livewire/Project/Shared/ExecuteContainerCommand.php
@@ -6,8 +6,11 @@ use App\Models\Application;
use App\Models\Server;
use App\Models\Service;
use Illuminate\Support\Collection;
+use InvalidArgumentException;
use Livewire\Attributes\On;
use Livewire\Component;
+use RuntimeException;
+use Throwable;
class ExecuteContainerCommand extends Component
{
@@ -43,7 +46,7 @@ class ExecuteContainerCommand extends Component
$this->servers = collect();
if (data_get($this->parameters, 'application_uuid')) {
$this->type = 'application';
- $this->resource = Application::where('uuid', $this->parameters['application_uuid'])->firstOrFail();
+ $this->resource = Application::query()->where('uuid', $this->parameters['application_uuid'])->firstOrFail();
if ($this->resource->destination->server->isFunctional()) {
$this->servers = $this->servers->push($this->resource->destination->server);
}
@@ -66,14 +69,14 @@ class ExecuteContainerCommand extends Component
$this->loadContainers();
} elseif (data_get($this->parameters, 'service_uuid')) {
$this->type = 'service';
- $this->resource = Service::where('uuid', $this->parameters['service_uuid'])->firstOrFail();
+ $this->resource = Service::query()->where('uuid', $this->parameters['service_uuid'])->firstOrFail();
if ($this->resource->server->isFunctional()) {
$this->servers = $this->servers->push($this->resource->server);
}
$this->loadContainers();
} elseif (data_get($this->parameters, 'server_uuid')) {
$this->type = 'server';
- $this->resource = Server::where('uuid', $this->parameters['server_uuid'])->firstOrFail();
+ $this->resource = Server::query()->where('uuid', $this->parameters['server_uuid'])->firstOrFail();
$this->server = $this->resource;
}
}
@@ -146,7 +149,7 @@ class ExecuteContainerCommand extends Component
{
try {
if ($this->server->isForceDisabled()) {
- throw new \RuntimeException('Server is disabled.');
+ throw new RuntimeException('Server is disabled.');
}
$this->dispatch(
'send-terminal-command',
@@ -154,9 +157,11 @@ class ExecuteContainerCommand extends Component
data_get($this->server, 'name'),
data_get($this->server, 'uuid')
);
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
return handleError($e, $this);
}
+
+ return null;
}
#[On('connectToContainer')]
@@ -165,28 +170,28 @@ class ExecuteContainerCommand extends Component
if ($this->selected_container === 'default') {
$this->dispatch('error', 'Please select a container.');
- return;
+ return null;
}
try {
// Validate container name format
if (! preg_match('/^[a-zA-Z0-9][a-zA-Z0-9_.-]*$/', $this->selected_container)) {
- throw new \InvalidArgumentException('Invalid container name format');
+ throw new InvalidArgumentException('Invalid container name format');
}
// Verify container exists in our allowed list
$container = collect($this->containers)->firstWhere('container.Names', $this->selected_container);
if (is_null($container)) {
- throw new \RuntimeException('Container not found.');
+ throw new RuntimeException('Container not found.');
}
// Verify server ownership and status
$server = data_get($container, 'server');
if (! $server || ! $server instanceof Server) {
- throw new \RuntimeException('Invalid server configuration.');
+ throw new RuntimeException('Invalid server configuration.');
}
if ($server->isForceDisabled()) {
- throw new \RuntimeException('Server is disabled.');
+ throw new RuntimeException('Server is disabled.');
}
// Additional ownership verification based on resource type
@@ -194,11 +199,11 @@ class ExecuteContainerCommand extends Component
'application' => $this->resource->destination->server,
'database' => $this->resource->destination->server,
'service' => $this->resource->server,
- default => throw new \RuntimeException('Invalid resource type.')
+ default => throw new RuntimeException('Invalid resource type.')
};
if ($server->id !== $resourceServer->id && ! $this->resource->additional_servers->contains('id', $server->id)) {
- throw new \RuntimeException('Server ownership verification failed.');
+ throw new RuntimeException('Server ownership verification failed.');
}
$this->dispatch(
@@ -207,9 +212,11 @@ class ExecuteContainerCommand extends Component
data_get($container, 'container.Names'),
data_get($container, 'server.uuid')
);
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
return handleError($e, $this);
}
+
+ return null;
}
public function render()
diff --git a/app/Livewire/Project/Shared/GetLogs.php b/app/Livewire/Project/Shared/GetLogs.php
index 43fd97c34..992bf6619 100644
--- a/app/Livewire/Project/Shared/GetLogs.php
+++ b/app/Livewire/Project/Shared/GetLogs.php
@@ -44,19 +44,15 @@ class GetLogs extends Component
public function mount()
{
if (! is_null($this->resource)) {
- if ($this->resource->getMorphClass() === \App\Models\Application::class) {
+ if ($this->resource->getMorphClass() === Application::class) {
$this->showTimeStamps = $this->resource->settings->is_include_timestamps;
+ } elseif ($this->servicesubtype) {
+ $this->showTimeStamps = $this->servicesubtype->is_include_timestamps;
} else {
- if ($this->servicesubtype) {
- $this->showTimeStamps = $this->servicesubtype->is_include_timestamps;
- } else {
- $this->showTimeStamps = $this->resource->is_include_timestamps;
- }
+ $this->showTimeStamps = $this->resource->is_include_timestamps;
}
- if ($this->resource?->getMorphClass() === \App\Models\Application::class) {
- if (str($this->container)->contains('-pr-')) {
- $this->pull_request = 'Pull Request: '.str($this->container)->afterLast('-pr-')->beforeLast('_')->value();
- }
+ if ($this->resource?->getMorphClass() === Application::class && str($this->container)->contains('-pr-')) {
+ $this->pull_request = 'Pull Request: '.str($this->container)->afterLast('-pr-')->beforeLast('_')->value();
}
}
}
@@ -69,11 +65,11 @@ class GetLogs extends Component
public function instantSave()
{
if (! is_null($this->resource)) {
- if ($this->resource->getMorphClass() === \App\Models\Application::class) {
+ if ($this->resource->getMorphClass() === Application::class) {
$this->resource->settings->is_include_timestamps = $this->showTimeStamps;
$this->resource->settings->save();
}
- if ($this->resource->getMorphClass() === \App\Models\Service::class) {
+ if ($this->resource->getMorphClass() === Service::class) {
$serviceName = str($this->container)->beforeLast('-')->value();
$subType = $this->resource->applications()->where('name', $serviceName)->first();
if ($subType) {
@@ -95,7 +91,7 @@ class GetLogs extends Component
if (! $this->server->isFunctional()) {
return;
}
- if (! $refresh && ($this->resource?->getMorphClass() === \App\Models\Service::class || str($this->container)->contains('-pr-'))) {
+ if (! $refresh && ($this->resource?->getMorphClass() === Service::class || str($this->container)->contains('-pr-'))) {
return;
}
if ($this->numberOfLines <= 0 || is_null($this->numberOfLines)) {
@@ -118,22 +114,20 @@ class GetLogs extends Component
}
$sshCommand = SshMultiplexingHelper::generateSshCommand($this->server, $command);
}
- } else {
- if ($this->server->isSwarm()) {
- $command = "docker service logs -n {$this->numberOfLines} {$this->container}";
- if ($this->server->isNonRoot()) {
- $command = parseCommandsByLineForSudo(collect($command), $this->server);
- $command = $command[0];
- }
- $sshCommand = SshMultiplexingHelper::generateSshCommand($this->server, $command);
- } else {
- $command = "docker logs -n {$this->numberOfLines} {$this->container}";
- if ($this->server->isNonRoot()) {
- $command = parseCommandsByLineForSudo(collect($command), $this->server);
- $command = $command[0];
- }
- $sshCommand = SshMultiplexingHelper::generateSshCommand($this->server, $command);
+ } elseif ($this->server->isSwarm()) {
+ $command = "docker service logs -n {$this->numberOfLines} {$this->container}";
+ if ($this->server->isNonRoot()) {
+ $command = parseCommandsByLineForSudo(collect($command), $this->server);
+ $command = $command[0];
}
+ $sshCommand = SshMultiplexingHelper::generateSshCommand($this->server, $command);
+ } else {
+ $command = "docker logs -n {$this->numberOfLines} {$this->container}";
+ if ($this->server->isNonRoot()) {
+ $command = parseCommandsByLineForSudo(collect($command), $this->server);
+ $command = $command[0];
+ }
+ $sshCommand = SshMultiplexingHelper::generateSshCommand($this->server, $command);
}
if ($refresh) {
$this->outputs = '';
diff --git a/app/Livewire/Project/Shared/HealthChecks.php b/app/Livewire/Project/Shared/HealthChecks.php
index 83162e36a..027869f70 100644
--- a/app/Livewire/Project/Shared/HealthChecks.php
+++ b/app/Livewire/Project/Shared/HealthChecks.php
@@ -3,6 +3,7 @@
namespace App\Livewire\Project\Shared;
use Livewire\Component;
+use Throwable;
class HealthChecks extends Component
{
@@ -37,9 +38,11 @@ class HealthChecks extends Component
$this->validate();
$this->resource->save();
$this->dispatch('success', 'Health check updated.');
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
return handleError($e, $this);
}
+
+ return null;
}
public function render()
diff --git a/app/Livewire/Project/Shared/Logs.php b/app/Livewire/Project/Shared/Logs.php
index 12022b1ee..acc5480a5 100644
--- a/app/Livewire/Project/Shared/Logs.php
+++ b/app/Livewire/Project/Shared/Logs.php
@@ -12,6 +12,7 @@ use App\Models\StandaloneMongodb;
use App\Models\StandaloneMysql;
use App\Models\StandalonePostgresql;
use App\Models\StandaloneRedis;
+use Exception;
use Illuminate\Support\Collection;
use Livewire\Component;
@@ -42,7 +43,7 @@ class Logs extends Component
try {
$server = $this->servers->firstWhere('id', $server_id);
if (! $server->isFunctional()) {
- return;
+ return null;
}
if ($server->isSwarm()) {
$containers = collect([
@@ -54,9 +55,11 @@ class Logs extends Component
$containers = getCurrentApplicationContainerStatus($server, $this->resource->id, includePullrequests: true);
}
$server->containers = $containers->sort();
- } catch (\Exception $e) {
+ } catch (Exception $e) {
return handleError($e, $this);
}
+
+ return null;
}
public function mount()
@@ -68,7 +71,7 @@ class Logs extends Component
$this->query = request()->query();
if (data_get($this->parameters, 'application_uuid')) {
$this->type = 'application';
- $this->resource = Application::where('uuid', $this->parameters['application_uuid'])->firstOrFail();
+ $this->resource = Application::query()->where('uuid', $this->parameters['application_uuid'])->firstOrFail();
$this->status = $this->resource->status;
if ($this->resource->destination->server->isFunctional()) {
$this->servers = $this->servers->push($this->resource->destination->server);
@@ -93,7 +96,7 @@ class Logs extends Component
$this->containers->push($this->container);
} elseif (data_get($this->parameters, 'service_uuid')) {
$this->type = 'service';
- $this->resource = Service::where('uuid', $this->parameters['service_uuid'])->firstOrFail();
+ $this->resource = Service::query()->where('uuid', $this->parameters['service_uuid'])->firstOrFail();
$this->resource->applications()->get()->each(function ($application) {
$this->containers->push(data_get($application, 'name').'-'.data_get($this->resource, 'uuid'));
});
@@ -110,9 +113,11 @@ class Logs extends Component
return str_contains($container, $this->query['pull_request_id']);
});
}
- } catch (\Exception $e) {
+ } catch (Exception $e) {
return handleError($e, $this);
}
+
+ return null;
}
public function render()
diff --git a/app/Livewire/Project/Shared/Metrics.php b/app/Livewire/Project/Shared/Metrics.php
index fdc35fc0f..052da00f2 100644
--- a/app/Livewire/Project/Shared/Metrics.php
+++ b/app/Livewire/Project/Shared/Metrics.php
@@ -3,6 +3,7 @@
namespace App\Livewire\Project\Shared;
use Livewire\Component;
+use Throwable;
class Metrics extends Component
{
@@ -39,9 +40,11 @@ class Metrics extends Component
$this->dispatch("refreshChartData-{$this->chartId}-memory", [
'seriesData' => $memoryMetrics,
]);
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
return handleError($e, $this);
}
+
+ return null;
}
public function setInterval()
diff --git a/app/Livewire/Project/Shared/ResourceLimits.php b/app/Livewire/Project/Shared/ResourceLimits.php
index 608dfbf02..e7c03f4ee 100644
--- a/app/Livewire/Project/Shared/ResourceLimits.php
+++ b/app/Livewire/Project/Shared/ResourceLimits.php
@@ -3,6 +3,7 @@
namespace App\Livewire\Project\Shared;
use Livewire\Component;
+use Throwable;
class ResourceLimits extends Component
{
@@ -55,8 +56,10 @@ class ResourceLimits extends Component
$this->validate();
$this->resource->save();
$this->dispatch('success', 'Resource limits updated.');
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
return handleError($e, $this);
}
+
+ return null;
}
}
diff --git a/app/Livewire/Project/Shared/ResourceOperations.php b/app/Livewire/Project/Shared/ResourceOperations.php
index c6a32f0c7..421e16deb 100644
--- a/app/Livewire/Project/Shared/ResourceOperations.php
+++ b/app/Livewire/Project/Shared/ResourceOperations.php
@@ -2,11 +2,21 @@
namespace App\Livewire\Project\Shared;
+use App\Models\Application;
use App\Models\Environment;
use App\Models\Project;
+use App\Models\StandaloneClickhouse;
use App\Models\StandaloneDocker;
+use App\Models\StandaloneDragonfly;
+use App\Models\StandaloneKeydb;
+use App\Models\StandaloneMariadb;
+use App\Models\StandaloneMongodb;
+use App\Models\StandaloneMysql;
+use App\Models\StandalonePostgresql;
+use App\Models\StandaloneRedis;
use App\Models\SwarmDocker;
use Livewire\Component;
+use Throwable;
use Visus\Cuid2\Cuid2;
class ResourceOperations extends Component
@@ -32,18 +42,17 @@ class ResourceOperations extends Component
public function cloneTo($destination_id)
{
- $new_destination = StandaloneDocker::find($destination_id);
+ $new_destination = StandaloneDocker::query()->find($destination_id);
if (! $new_destination) {
- $new_destination = SwarmDocker::find($destination_id);
+ $new_destination = SwarmDocker::query()->find($destination_id);
}
if (! $new_destination) {
return $this->addError('destination_id', 'Destination not found.');
}
$uuid = (string) new Cuid2;
$server = $new_destination->server;
- if ($this->resource->getMorphClass() === \App\Models\Application::class) {
+ if ($this->resource->getMorphClass() === Application::class) {
$name = 'clone-of-'.str($this->resource->name)->limit(20).'-'.$uuid;
-
$new_resource = $this->resource->replicate()->fill([
'uuid' => $uuid,
'name' => $name,
@@ -66,12 +75,12 @@ class ResourceOperations extends Component
$newEnvironmentVariable->save();
}
$persistentVolumes = $this->resource->persistentStorages()->get();
- foreach ($persistentVolumes as $volume) {
- $volumeName = str($volume->name)->replace($this->resource->uuid, $new_resource->uuid)->value();
- if ($volumeName === $volume->name) {
- $volumeName = $new_resource->uuid.'-'.str($volume->name)->afterLast('-');
+ foreach ($persistentVolumes as $persistentVolume) {
+ $volumeName = str($persistentVolume->name)->replace($this->resource->uuid, $new_resource->uuid)->value();
+ if ($volumeName === $persistentVolume->name) {
+ $volumeName = $new_resource->uuid.'-'.str($persistentVolume->name)->afterLast('-');
}
- $newPersistentVolume = $volume->replicate()->fill([
+ $newPersistentVolume = $persistentVolume->replicate()->fill([
'name' => $volumeName,
'resource_id' => $new_resource->id,
]);
@@ -84,16 +93,15 @@ class ResourceOperations extends Component
]).'#resource-operations';
return redirect()->to($route);
- } elseif (
- $this->resource->getMorphClass() === \App\Models\StandalonePostgresql::class ||
- $this->resource->getMorphClass() === \App\Models\StandaloneMongodb::class ||
- $this->resource->getMorphClass() === \App\Models\StandaloneMysql::class ||
- $this->resource->getMorphClass() === \App\Models\StandaloneMariadb::class ||
- $this->resource->getMorphClass() === \App\Models\StandaloneRedis::class ||
- $this->resource->getMorphClass() === \App\Models\StandaloneKeydb::class ||
- $this->resource->getMorphClass() === \App\Models\StandaloneDragonfly::class ||
- $this->resource->getMorphClass() === \App\Models\StandaloneClickhouse::class
- ) {
+ }
+ if ($this->resource->getMorphClass() === StandalonePostgresql::class ||
+ $this->resource->getMorphClass() === StandaloneMongodb::class ||
+ $this->resource->getMorphClass() === StandaloneMysql::class ||
+ $this->resource->getMorphClass() === StandaloneMariadb::class ||
+ $this->resource->getMorphClass() === StandaloneRedis::class ||
+ $this->resource->getMorphClass() === StandaloneKeydb::class ||
+ $this->resource->getMorphClass() === StandaloneDragonfly::class ||
+ $this->resource->getMorphClass() === StandaloneClickhouse::class) {
$uuid = (string) new Cuid2;
$new_resource = $this->resource->replicate()->fill([
'uuid' => $uuid,
@@ -127,7 +135,8 @@ class ResourceOperations extends Component
]).'#resource-operations';
return redirect()->to($route);
- } elseif ($this->resource->type() === 'service') {
+ }
+ if ($this->resource->type() === 'service') {
$uuid = (string) new Cuid2;
$new_resource = $this->resource->replicate()->fill([
'uuid' => $uuid,
@@ -154,12 +163,14 @@ class ResourceOperations extends Component
return redirect()->to($route);
}
+
+ return null;
}
public function moveTo($environment_id)
{
try {
- $new_environment = Environment::findOrFail($environment_id);
+ $new_environment = Environment::query()->findOrFail($environment_id);
$this->resource->update([
'environment_id' => $environment_id,
]);
@@ -171,7 +182,8 @@ class ResourceOperations extends Component
]).'#resource-operations';
return redirect()->to($route);
- } elseif (str($this->resource->type())->startsWith('standalone-')) {
+ }
+ if (str($this->resource->type())->startsWith('standalone-')) {
$route = route('project.database.configuration', [
'project_uuid' => $new_environment->project->uuid,
'environment_uuid' => $new_environment->uuid,
@@ -179,7 +191,8 @@ class ResourceOperations extends Component
]).'#resource-operations';
return redirect()->to($route);
- } elseif ($this->resource->type() === 'service') {
+ }
+ if ($this->resource->type() === 'service') {
$route = route('project.service.configuration', [
'project_uuid' => $new_environment->project->uuid,
'environment_uuid' => $new_environment->uuid,
@@ -188,9 +201,11 @@ class ResourceOperations extends Component
return redirect()->to($route);
}
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
return handleError($e, $this);
}
+
+ return null;
}
public function render()
diff --git a/app/Livewire/Project/Shared/ScheduledTask/Add.php b/app/Livewire/Project/Shared/ScheduledTask/Add.php
index adfd59217..0f378e39b 100644
--- a/app/Livewire/Project/Shared/ScheduledTask/Add.php
+++ b/app/Livewire/Project/Shared/ScheduledTask/Add.php
@@ -2,6 +2,7 @@
namespace App\Livewire\Project\Shared\ScheduledTask;
+use Exception;
use Illuminate\Support\Collection;
use Livewire\Component;
@@ -53,12 +54,10 @@ class Add extends Component
if (! $isValid) {
$this->dispatch('error', 'Invalid Cron / Human expression.');
- return;
+ return null;
}
- if (empty($this->container) || $this->container === 'null') {
- if ($this->type === 'service') {
- $this->container = $this->subServiceName;
- }
+ if (($this->container === null || $this->container === '' || $this->container === '0' || $this->container === 'null') && $this->type === 'service') {
+ $this->container = $this->subServiceName;
}
$this->dispatch('saveScheduledTask', [
'name' => $this->name,
@@ -67,9 +66,11 @@ class Add extends Component
'container' => $this->container,
]);
$this->clear();
- } catch (\Exception $e) {
+ } catch (Exception $e) {
return handleError($e, $this);
}
+
+ return null;
}
public function clear()
diff --git a/app/Livewire/Project/Shared/ScheduledTask/All.php b/app/Livewire/Project/Shared/ScheduledTask/All.php
index 6ab8426f3..11e7fcef6 100644
--- a/app/Livewire/Project/Shared/ScheduledTask/All.php
+++ b/app/Livewire/Project/Shared/ScheduledTask/All.php
@@ -5,6 +5,7 @@ namespace App\Livewire\Project\Shared\ScheduledTask;
use App\Models\ScheduledTask;
use Illuminate\Support\Collection;
use Livewire\Component;
+use Throwable;
class All extends Component
{
@@ -43,29 +44,31 @@ class All extends Component
public function submit($data)
{
try {
- $task = new ScheduledTask;
- $task->name = $data['name'];
- $task->command = $data['command'];
- $task->frequency = $data['frequency'];
- $task->container = $data['container'];
- $task->team_id = currentTeam()->id;
+ $scheduledTask = new ScheduledTask;
+ $scheduledTask->name = $data['name'];
+ $scheduledTask->command = $data['command'];
+ $scheduledTask->frequency = $data['frequency'];
+ $scheduledTask->container = $data['container'];
+ $scheduledTask->team_id = currentTeam()->id;
switch ($this->resource->type()) {
case 'application':
- $task->application_id = $this->resource->id;
+ $scheduledTask->application_id = $this->resource->id;
break;
case 'standalone-postgresql':
- $task->standalone_postgresql_id = $this->resource->id;
+ $scheduledTask->standalone_postgresql_id = $this->resource->id;
break;
case 'service':
- $task->service_id = $this->resource->id;
+ $scheduledTask->service_id = $this->resource->id;
break;
}
- $task->save();
+ $scheduledTask->save();
$this->refreshTasks();
$this->dispatch('success', 'Scheduled task added.');
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
return handleError($e, $this);
}
+
+ return null;
}
}
diff --git a/app/Livewire/Project/Shared/ScheduledTask/Executions.php b/app/Livewire/Project/Shared/ScheduledTask/Executions.php
index 74eac7132..f0f6cf775 100644
--- a/app/Livewire/Project/Shared/ScheduledTask/Executions.php
+++ b/app/Livewire/Project/Shared/ScheduledTask/Executions.php
@@ -3,6 +3,9 @@
namespace App\Livewire\Project\Shared\ScheduledTask;
use App\Models\ScheduledTask;
+use DateTime;
+use DateTimeZone;
+use Exception;
use Illuminate\Support\Collection;
use Illuminate\Support\Facades\Auth;
use Livewire\Attributes\Locked;
@@ -28,7 +31,7 @@ class Executions extends Component
public $logsPerPage = 100;
- public $selectedExecution = null;
+ public $selectedExecution;
public $isPollingActive = false;
@@ -45,7 +48,7 @@ class Executions extends Component
{
try {
$this->taskId = $taskId;
- $this->task = ScheduledTask::findOrFail($taskId);
+ $this->task = ScheduledTask::query()->findOrFail($taskId);
$this->executions = $this->task->executions()->take(20)->get();
$this->serverTimezone = data_get($this->task, 'application.destination.server.settings.server_timezone');
if (! $this->serverTimezone) {
@@ -54,9 +57,11 @@ class Executions extends Component
if (! $this->serverTimezone) {
$this->serverTimezone = 'UTC';
}
- } catch (\Exception $e) {
+ } catch (Exception $e) {
return handleError($e);
}
+
+ return null;
}
public function refreshExecutions(): void
@@ -124,7 +129,7 @@ class Executions extends Component
{
$execution = $this->executions->firstWhere('id', $executionId);
if (! $execution) {
- return;
+ return null;
}
return response()->streamDownload(function () use ($execution) {
@@ -145,11 +150,11 @@ class Executions extends Component
public function formatDateInServerTimezone($date)
{
$serverTimezone = $this->serverTimezone;
- $dateObj = new \DateTime($date);
+ $dateObj = new DateTime($date);
try {
- $dateObj->setTimezone(new \DateTimeZone($serverTimezone));
- } catch (\Exception) {
- $dateObj->setTimezone(new \DateTimeZone('UTC'));
+ $dateObj->setTimezone(new DateTimeZone($serverTimezone));
+ } catch (Exception) {
+ $dateObj->setTimezone(new DateTimeZone('UTC'));
}
return $dateObj->format('Y-m-d H:i:s T');
diff --git a/app/Livewire/Project/Shared/ScheduledTask/Show.php b/app/Livewire/Project/Shared/ScheduledTask/Show.php
index 0764ab3b9..5ea0e3cdc 100644
--- a/app/Livewire/Project/Shared/ScheduledTask/Show.php
+++ b/app/Livewire/Project/Shared/ScheduledTask/Show.php
@@ -6,6 +6,7 @@ use App\Jobs\ScheduledTaskJob;
use App\Models\Application;
use App\Models\ScheduledTask;
use App\Models\Service;
+use Exception;
use Livewire\Attributes\Locked;
use Livewire\Attributes\Validate;
use Livewire\Component;
@@ -68,9 +69,11 @@ class Show extends Component
$this->task = $this->resource->scheduled_tasks()->where('uuid', $task_uuid)->firstOrFail();
$this->syncData();
- } catch (\Exception $e) {
+ } catch (Exception $e) {
return handleError($e);
}
+
+ return null;
}
public function syncData(bool $toModel = false)
@@ -98,9 +101,11 @@ class Show extends Component
$this->syncData(true);
$this->dispatch('success', 'Scheduled task updated.');
$this->refreshTasks();
- } catch (\Exception $e) {
+ } catch (Exception $e) {
return handleError($e);
}
+
+ return null;
}
public function submit()
@@ -108,18 +113,22 @@ class Show extends Component
try {
$this->syncData(true);
$this->dispatch('success', 'Scheduled task updated.');
- } catch (\Exception $e) {
+ } catch (Exception $e) {
return handleError($e);
}
+
+ return null;
}
public function refreshTasks()
{
try {
$this->task->refresh();
- } catch (\Exception $e) {
+ } catch (Exception $e) {
return handleError($e);
}
+
+ return null;
}
public function delete()
@@ -129,10 +138,10 @@ class Show extends Component
if ($this->type === 'application') {
return redirect()->route('project.application.configuration', $this->parameters, $this->task->name);
- } else {
- return redirect()->route('project.service.configuration', $this->parameters, $this->task->name);
}
- } catch (\Exception $e) {
+
+ return redirect()->route('project.service.configuration', $this->parameters, $this->task->name);
+ } catch (Exception $e) {
return handleError($e);
}
}
@@ -142,8 +151,10 @@ class Show extends Component
try {
ScheduledTaskJob::dispatch($this->task);
$this->dispatch('success', 'Scheduled task executed.');
- } catch (\Exception $e) {
+ } catch (Exception $e) {
return handleError($e);
}
+
+ return null;
}
}
diff --git a/app/Livewire/Project/Shared/Storages/Add.php b/app/Livewire/Project/Shared/Storages/Add.php
index 6e250bd90..5645b28c3 100644
--- a/app/Livewire/Project/Shared/Storages/Add.php
+++ b/app/Livewire/Project/Shared/Storages/Add.php
@@ -5,6 +5,7 @@ namespace App\Livewire\Project\Shared\Storages;
use App\Models\Application;
use App\Models\LocalFileVolume;
use Livewire\Component;
+use Throwable;
class Add extends Component
{
@@ -63,7 +64,7 @@ class Add extends Component
$this->parameters = get_route_parameters();
if (data_get($this->parameters, 'application_uuid')) {
$applicationUuid = $this->parameters['application_uuid'];
- $application = Application::where('uuid', $applicationUuid)->first();
+ $application = Application::query()->where('uuid', $applicationUuid)->first();
if (! $application) {
abort(404);
}
@@ -83,23 +84,23 @@ class Add extends Component
]);
$this->file_storage_path = trim($this->file_storage_path);
$this->file_storage_path = str($this->file_storage_path)->start('/')->value();
- if ($this->resource->getMorphClass() === \App\Models\Application::class) {
+ if ($this->resource->getMorphClass() === Application::class) {
$fs_path = application_configuration_dir().'/'.$this->resource->uuid.$this->file_storage_path;
}
- LocalFileVolume::create(
- [
- 'fs_path' => $fs_path,
- 'mount_path' => $this->file_storage_path,
- 'content' => $this->file_storage_content,
- 'is_directory' => false,
- 'resource_id' => $this->resource->id,
- 'resource_type' => get_class($this->resource),
- ],
- );
+ LocalFileVolume::query()->create([
+ 'fs_path' => $fs_path,
+ 'mount_path' => $this->file_storage_path,
+ 'content' => $this->file_storage_content,
+ 'is_directory' => false,
+ 'resource_id' => $this->resource->id,
+ 'resource_type' => get_class($this->resource),
+ ]);
$this->dispatch('refreshStorages');
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
return handleError($e, $this);
}
+
+ return null;
}
public function submitFileStorageDirectory()
@@ -113,19 +114,19 @@ class Add extends Component
$this->file_storage_directory_source = str($this->file_storage_directory_source)->start('/')->value();
$this->file_storage_directory_destination = trim($this->file_storage_directory_destination);
$this->file_storage_directory_destination = str($this->file_storage_directory_destination)->start('/')->value();
- LocalFileVolume::create(
- [
- 'fs_path' => $this->file_storage_directory_source,
- 'mount_path' => $this->file_storage_directory_destination,
- 'is_directory' => true,
- 'resource_id' => $this->resource->id,
- 'resource_type' => get_class($this->resource),
- ],
- );
+ LocalFileVolume::query()->create([
+ 'fs_path' => $this->file_storage_directory_source,
+ 'mount_path' => $this->file_storage_directory_destination,
+ 'is_directory' => true,
+ 'resource_id' => $this->resource->id,
+ 'resource_type' => get_class($this->resource),
+ ]);
$this->dispatch('refreshStorages');
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
return handleError($e, $this);
}
+
+ return null;
}
public function submitPersistentVolume()
@@ -142,9 +143,11 @@ class Add extends Component
'mount_path' => $this->mount_path,
'host_path' => $this->host_path,
]);
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
return handleError($e, $this);
}
+
+ return null;
}
public function clear()
diff --git a/app/Livewire/Project/Shared/Storages/Show.php b/app/Livewire/Project/Shared/Storages/Show.php
index 54b1be3af..0451a7f92 100644
--- a/app/Livewire/Project/Shared/Storages/Show.php
+++ b/app/Livewire/Project/Shared/Storages/Show.php
@@ -41,12 +41,10 @@ class Show extends Component
public function delete($password)
{
- if (! data_get(InstanceSettings::get(), 'disable_two_step_confirmation')) {
- if (! Hash::check($password, Auth::user()->password)) {
- $this->addError('password', 'The provided password is incorrect.');
+ if (! data_get(InstanceSettings::get(), 'disable_two_step_confirmation') && ! Hash::check($password, Auth::user()->password)) {
+ $this->addError('password', 'The provided password is incorrect.');
- return;
- }
+ return;
}
$this->storage->delete();
diff --git a/app/Livewire/Project/Shared/Tags.php b/app/Livewire/Project/Shared/Tags.php
index 811859cb8..2b22feb2a 100644
--- a/app/Livewire/Project/Shared/Tags.php
+++ b/app/Livewire/Project/Shared/Tags.php
@@ -3,13 +3,14 @@
namespace App\Livewire\Project\Shared;
use App\Models\Tag;
+use Exception;
use Livewire\Attributes\Validate;
use Livewire\Component;
// Refactored ✅
class Tags extends Component
{
- public $resource = null;
+ public $resource;
#[Validate('required|string|min:2')]
public string $newTags;
@@ -50,7 +51,7 @@ class Tags extends Component
}
$found = Tag::ownedByCurrentTeam()->where(['name' => $tag])->exists();
if (! $found) {
- $found = Tag::create([
+ $found = Tag::query()->create([
'name' => $tag,
'team_id' => currentTeam()->id,
]);
@@ -58,9 +59,11 @@ class Tags extends Component
$this->resource->tags()->attach($found->id);
}
$this->refresh();
- } catch (\Exception $e) {
+ } catch (Exception $e) {
return handleError($e, $this);
}
+
+ return null;
}
public function addTag(string $id, string $name)
@@ -70,14 +73,16 @@ class Tags extends Component
if ($this->resource->tags()->where('id', $id)->exists()) {
$this->dispatch('error', 'Duplicate tags.', "Tag $name already added.");
- return;
+ return null;
}
$this->resource->tags()->attach($id);
$this->refresh();
$this->dispatch('success', 'Tag added.');
- } catch (\Exception $e) {
+ } catch (Exception $e) {
return handleError($e, $this);
}
+
+ return null;
}
public function deleteTag(string $id)
@@ -90,9 +95,11 @@ class Tags extends Component
}
$this->refresh();
$this->dispatch('success', 'Tag deleted.');
- } catch (\Exception $e) {
+ } catch (Exception $e) {
return handleError($e, $this);
}
+
+ return null;
}
public function refresh()
diff --git a/app/Livewire/Project/Shared/Terminal.php b/app/Livewire/Project/Shared/Terminal.php
index d8f101277..375500142 100644
--- a/app/Livewire/Project/Shared/Terminal.php
+++ b/app/Livewire/Project/Shared/Terminal.php
@@ -4,6 +4,7 @@ namespace App\Livewire\Project\Shared;
use App\Helpers\SshMultiplexingHelper;
use App\Models\Server;
+use InvalidArgumentException;
use Livewire\Attributes\On;
use Livewire\Component;
@@ -31,7 +32,7 @@ class Terminal extends Component
if ($isContainer) {
// Validate container identifier format (alphanumeric, dashes, and underscores only)
if (! preg_match('/^[a-zA-Z0-9][a-zA-Z0-9_.-]*$/', $identifier)) {
- throw new \InvalidArgumentException('Invalid container identifier format');
+ throw new InvalidArgumentException('Invalid container identifier format');
}
// Verify container exists and belongs to the user's team
diff --git a/app/Livewire/Project/Shared/UploadConfig.php b/app/Livewire/Project/Shared/UploadConfig.php
index 1b10f588b..9ebe045e4 100644
--- a/app/Livewire/Project/Shared/UploadConfig.php
+++ b/app/Livewire/Project/Shared/UploadConfig.php
@@ -3,6 +3,7 @@
namespace App\Livewire\Project\Shared;
use App\Models\Application;
+use Exception;
use Livewire\Component;
class UploadConfig extends Component
@@ -29,10 +30,10 @@ class UploadConfig extends Component
public function uploadConfig()
{
try {
- $application = Application::findOrFail($this->applicationId);
+ $application = Application::query()->findOrFail($this->applicationId);
$application->setConfig($this->config);
$this->dispatch('success', 'Application settings updated');
- } catch (\Exception $e) {
+ } catch (Exception $e) {
$this->dispatch('error', $e->getMessage());
return;
diff --git a/app/Livewire/Project/Shared/Webhooks.php b/app/Livewire/Project/Shared/Webhooks.php
index aab1fdc47..f88169af2 100644
--- a/app/Livewire/Project/Shared/Webhooks.php
+++ b/app/Livewire/Project/Shared/Webhooks.php
@@ -2,6 +2,7 @@
namespace App\Livewire\Project\Shared;
+use Exception;
use Livewire\Component;
// Refactored ✅
@@ -57,8 +58,10 @@ class Webhooks extends Component
'manual_webhook_secret_gitea' => $this->giteaManualWebhookSecret,
]);
$this->dispatch('success', 'Secret Saved.');
- } catch (\Exception $e) {
+ } catch (Exception $e) {
return handleError($e, $this);
}
+
+ return null;
}
}
diff --git a/app/Livewire/Project/Show.php b/app/Livewire/Project/Show.php
index 886a20218..4c2ed4b89 100644
--- a/app/Livewire/Project/Show.php
+++ b/app/Livewire/Project/Show.php
@@ -6,6 +6,7 @@ use App\Models\Environment;
use App\Models\Project;
use Livewire\Attributes\Validate;
use Livewire\Component;
+use Throwable;
use Visus\Cuid2\Cuid2;
class Show extends Component
@@ -21,17 +22,19 @@ class Show extends Component
public function mount(string $project_uuid)
{
try {
- $this->project = Project::where('team_id', currentTeam()->id)->where('uuid', $project_uuid)->firstOrFail();
- } catch (\Throwable $e) {
+ $this->project = Project::query()->where('team_id', currentTeam()->id)->where('uuid', $project_uuid)->firstOrFail();
+ } catch (Throwable $e) {
return handleError($e, $this);
}
+
+ return null;
}
public function submit()
{
try {
$this->validate();
- $environment = Environment::create([
+ $environment = Environment::query()->create([
'name' => $this->name,
'project_id' => $this->project->id,
'uuid' => (string) new Cuid2,
@@ -41,9 +44,11 @@ class Show extends Component
'project_uuid' => $this->project->uuid,
'environment_uuid' => $environment->uuid,
]);
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
handleError($e, $this);
}
+
+ return null;
}
public function navigateToEnvironment($projectUuid, $environmentUuid)
diff --git a/app/Livewire/Security/ApiTokens.php b/app/Livewire/Security/ApiTokens.php
index 72684bdc6..ad0ad745c 100644
--- a/app/Livewire/Security/ApiTokens.php
+++ b/app/Livewire/Security/ApiTokens.php
@@ -3,6 +3,7 @@
namespace App\Livewire\Security;
use App\Models\InstanceSettings;
+use Exception;
use Livewire\Component;
class ApiTokens extends Component
@@ -39,10 +40,8 @@ class ApiTokens extends Component
$this->permissions[] = 'read';
} elseif ($permissionToUpdate == 'deploy') {
$this->permissions = ['deploy'];
- } else {
- if (count($this->permissions) == 0) {
- $this->permissions = ['read'];
- }
+ } elseif (count($this->permissions) == 0) {
+ $this->permissions = ['read'];
}
sort($this->permissions);
}
@@ -56,9 +55,11 @@ class ApiTokens extends Component
$token = auth()->user()->createToken($this->description, array_values($this->permissions));
$this->getTokens();
session()->flash('token', $token->plainTextToken);
- } catch (\Exception $e) {
+ } catch (Exception $e) {
return handleError($e, $this);
}
+
+ return null;
}
public function revoke(int $id)
@@ -67,8 +68,10 @@ class ApiTokens extends Component
$token = auth()->user()->tokens()->where('id', $id)->firstOrFail();
$token->delete();
$this->getTokens();
- } catch (\Exception $e) {
+ } catch (Exception $e) {
return handleError($e, $this);
}
+
+ return null;
}
}
diff --git a/app/Livewire/Security/PrivateKey/Create.php b/app/Livewire/Security/PrivateKey/Create.php
index 319cec192..1e52906f5 100644
--- a/app/Livewire/Security/PrivateKey/Create.php
+++ b/app/Livewire/Security/PrivateKey/Create.php
@@ -4,6 +4,7 @@ namespace App\Livewire\Security\PrivateKey;
use App\Models\PrivateKey;
use Livewire\Component;
+use Throwable;
class Create extends Component
{
@@ -58,7 +59,7 @@ class Create extends Component
]);
return $this->redirectAfterCreation($privateKey);
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
return handleError($e, $this);
}
}
diff --git a/app/Livewire/Security/PrivateKey/Show.php b/app/Livewire/Security/PrivateKey/Show.php
index b9195b543..f21c4583b 100644
--- a/app/Livewire/Security/PrivateKey/Show.php
+++ b/app/Livewire/Security/PrivateKey/Show.php
@@ -3,7 +3,9 @@
namespace App\Livewire\Security\PrivateKey;
use App\Models\PrivateKey;
+use Exception;
use Livewire\Component;
+use Throwable;
class Show extends Component
{
@@ -28,7 +30,7 @@ class Show extends Component
{
try {
$this->private_key = PrivateKey::ownedByCurrentTeam(['name', 'description', 'private_key', 'is_git_related'])->whereUuid(request()->private_key_uuid)->firstOrFail();
- } catch (\Throwable) {
+ } catch (Throwable) {
abort(404);
}
}
@@ -45,14 +47,16 @@ class Show extends Component
{
try {
$this->private_key->safeDelete();
- currentTeam()->privateKeys = PrivateKey::where('team_id', currentTeam()->id)->get();
+ currentTeam()->privateKeys = PrivateKey::query()->where('team_id', currentTeam()->id)->get();
return redirect()->route('security.private-key.index');
- } catch (\Exception $e) {
+ } catch (Exception $e) {
$this->dispatch('error', $e->getMessage());
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
return handleError($e, $this);
}
+
+ return null;
}
public function changePrivateKey()
@@ -63,8 +67,10 @@ class Show extends Component
]);
refresh_server_connection($this->private_key);
$this->dispatch('success', 'Private key updated.');
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
return handleError($e, $this);
}
+
+ return null;
}
}
diff --git a/app/Livewire/Server/Advanced.php b/app/Livewire/Server/Advanced.php
index 577730f24..f09c21962 100644
--- a/app/Livewire/Server/Advanced.php
+++ b/app/Livewire/Server/Advanced.php
@@ -4,8 +4,10 @@ namespace App\Livewire\Server;
use App\Jobs\DockerCleanupJob;
use App\Models\Server;
+use Exception;
use Livewire\Attributes\Validate;
use Livewire\Component;
+use Throwable;
class Advanced extends Component
{
@@ -46,9 +48,11 @@ class Advanced extends Component
$this->server = Server::ownedByCurrentTeam()->whereUuid($server_uuid)->firstOrFail();
$this->parameters = get_route_parameters();
$this->syncData();
- } catch (\Throwable) {
+ } catch (Throwable) {
return redirect()->route('server.show');
}
+
+ return null;
}
public function syncData(bool $toModel = false)
@@ -83,9 +87,11 @@ class Advanced extends Component
try {
$this->syncData(true);
$this->dispatch('success', 'Server updated.');
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
return handleError($e, $this);
}
+
+ return null;
}
public function manualCleanup()
@@ -93,9 +99,11 @@ class Advanced extends Component
try {
DockerCleanupJob::dispatch($this->server, true);
$this->dispatch('success', 'Manual cleanup job started. Depending on the amount of data, this might take a while.');
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
return handleError($e, $this);
}
+
+ return null;
}
public function submit()
@@ -103,17 +111,19 @@ class Advanced extends Component
try {
if (! validate_cron_expression($this->dockerCleanupFrequency)) {
$this->dockerCleanupFrequency = $this->server->settings->getOriginal('docker_cleanup_frequency');
- throw new \Exception('Invalid Cron / Human expression for Docker Cleanup Frequency.');
+ throw new Exception('Invalid Cron / Human expression for Docker Cleanup Frequency.');
}
if (! validate_cron_expression($this->serverDiskUsageCheckFrequency)) {
$this->serverDiskUsageCheckFrequency = $this->server->settings->getOriginal('server_disk_usage_check_frequency');
- throw new \Exception('Invalid Cron / Human expression for Disk Usage Check Frequency.');
+ throw new Exception('Invalid Cron / Human expression for Disk Usage Check Frequency.');
}
$this->syncData(true);
$this->dispatch('success', 'Server updated.');
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
return handleError($e, $this);
}
+
+ return null;
}
public function render()
diff --git a/app/Livewire/Server/Charts.php b/app/Livewire/Server/Charts.php
index d0db87f57..d32236485 100644
--- a/app/Livewire/Server/Charts.php
+++ b/app/Livewire/Server/Charts.php
@@ -4,6 +4,7 @@ namespace App\Livewire\Server;
use App\Models\Server;
use Livewire\Component;
+use Throwable;
class Charts extends Component
{
@@ -23,9 +24,11 @@ class Charts extends Component
{
try {
$this->server = Server::ownedByCurrentTeam()->whereUuid($server_uuid)->firstOrFail();
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
return handleError($e, $this);
}
+
+ return null;
}
public function pollData()
@@ -49,9 +52,11 @@ class Charts extends Component
$this->dispatch("refreshChartData-{$this->chartId}-memory", [
'seriesData' => $memoryMetrics,
]);
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
return handleError($e, $this);
}
+
+ return null;
}
public function setInterval()
diff --git a/app/Livewire/Server/CloudflareTunnels.php b/app/Livewire/Server/CloudflareTunnels.php
index f69fc8655..247cab6c2 100644
--- a/app/Livewire/Server/CloudflareTunnels.php
+++ b/app/Livewire/Server/CloudflareTunnels.php
@@ -5,6 +5,7 @@ namespace App\Livewire\Server;
use App\Models\Server;
use Livewire\Attributes\Validate;
use Livewire\Component;
+use Throwable;
class CloudflareTunnels extends Component
{
@@ -21,9 +22,11 @@ class CloudflareTunnels extends Component
return redirect()->route('server.show', ['server_uuid' => $server_uuid]);
}
$this->isCloudflareTunnelsEnabled = $this->server->settings->is_cloudflare_tunnel;
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
return handleError($e, $this);
}
+
+ return null;
}
public function instantSave()
@@ -33,9 +36,11 @@ class CloudflareTunnels extends Component
$this->server->settings->is_cloudflare_tunnel = $this->isCloudflareTunnelsEnabled;
$this->server->settings->save();
$this->dispatch('success', 'Server updated.');
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
return handleError($e, $this);
}
+
+ return null;
}
public function manualCloudflareConfig()
diff --git a/app/Livewire/Server/ConfigureCloudflareTunnels.php b/app/Livewire/Server/ConfigureCloudflareTunnels.php
index f58d7b6be..336fe7772 100644
--- a/app/Livewire/Server/ConfigureCloudflareTunnels.php
+++ b/app/Livewire/Server/ConfigureCloudflareTunnels.php
@@ -5,6 +5,7 @@ namespace App\Livewire\Server;
use App\Actions\Server\ConfigureCloudflared;
use App\Models\Server;
use Livewire\Component;
+use Throwable;
class ConfigureCloudflareTunnels extends Component
{
@@ -22,9 +23,11 @@ class ConfigureCloudflareTunnels extends Component
$server->settings->save();
$this->dispatch('success', 'Cloudflare Tunnels configured successfully.');
$this->dispatch('refreshServerShow');
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
return handleError($e, $this);
}
+
+ return null;
}
public function submit()
@@ -42,9 +45,11 @@ class ConfigureCloudflareTunnels extends Component
$server->save();
$server->settings->save();
$this->dispatch('warning', 'Cloudflare Tunnels configuration started.');
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
return handleError($e, $this);
}
+
+ return null;
}
public function render()
diff --git a/app/Livewire/Server/Delete.php b/app/Livewire/Server/Delete.php
index b9e3944b5..bd1ee0901 100644
--- a/app/Livewire/Server/Delete.php
+++ b/app/Livewire/Server/Delete.php
@@ -9,6 +9,7 @@ use Illuminate\Foundation\Auth\Access\AuthorizesRequests;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Hash;
use Livewire\Component;
+use Throwable;
class Delete extends Component
{
@@ -20,32 +21,32 @@ class Delete extends Component
{
try {
$this->server = Server::ownedByCurrentTeam()->whereUuid($server_uuid)->firstOrFail();
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
return handleError($e, $this);
}
+
+ return null;
}
public function delete($password)
{
- if (! data_get(InstanceSettings::get(), 'disable_two_step_confirmation')) {
- if (! Hash::check($password, Auth::user()->password)) {
- $this->addError('password', 'The provided password is incorrect.');
+ if (! data_get(InstanceSettings::get(), 'disable_two_step_confirmation') && ! Hash::check($password, Auth::user()->password)) {
+ $this->addError('password', 'The provided password is incorrect.');
- return;
- }
+ return null;
}
try {
$this->authorize('delete', $this->server);
if ($this->server->hasDefinedResources()) {
$this->dispatch('error', 'Server has defined resources. Please delete them first.');
- return;
+ return null;
}
$this->server->delete();
DeleteServer::dispatch($this->server);
return redirect()->route('server.index');
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
return handleError($e, $this);
}
}
diff --git a/app/Livewire/Server/Destinations.php b/app/Livewire/Server/Destinations.php
index dbab6e03f..26fde971f 100644
--- a/app/Livewire/Server/Destinations.php
+++ b/app/Livewire/Server/Destinations.php
@@ -7,6 +7,7 @@ use App\Models\StandaloneDocker;
use App\Models\SwarmDocker;
use Illuminate\Support\Collection;
use Livewire\Component;
+use Throwable;
class Destinations extends Component
{
@@ -19,9 +20,11 @@ class Destinations extends Component
try {
$this->networks = collect();
$this->server = Server::ownedByCurrentTeam()->whereUuid($server_uuid)->firstOrFail();
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
return handleError($e, $this);
}
+
+ return null;
}
private function createNetworkAndAttachToProxy()
@@ -38,37 +41,31 @@ class Destinations extends Component
$this->dispatch('error', 'Network already added to this server.');
return;
- } else {
- SwarmDocker::create([
- 'name' => $this->server->name.'-'.$name,
- 'network' => $this->name,
- 'server_id' => $this->server->id,
- ]);
}
+ SwarmDocker::query()->create([
+ 'name' => $this->server->name.'-'.$name,
+ 'network' => $this->name,
+ 'server_id' => $this->server->id,
+ ]);
} else {
$found = $this->server->standaloneDockers()->where('network', $name)->first();
if ($found) {
$this->dispatch('error', 'Network already added to this server.');
return;
- } else {
- StandaloneDocker::create([
- 'name' => $this->server->name.'-'.$name,
- 'network' => $name,
- 'server_id' => $this->server->id,
- ]);
}
+ StandaloneDocker::query()->create([
+ 'name' => $this->server->name.'-'.$name,
+ 'network' => $name,
+ 'server_id' => $this->server->id,
+ ]);
$this->createNetworkAndAttachToProxy();
}
}
public function scan()
{
- if ($this->server->isSwarm()) {
- $alreadyAddedNetworks = $this->server->swarmDockers;
- } else {
- $alreadyAddedNetworks = $this->server->standaloneDockers;
- }
+ $alreadyAddedNetworks = $this->server->isSwarm() ? $this->server->swarmDockers : $this->server->standaloneDockers;
$networks = instant_remote_process(['docker network ls --format "{{json .}}"'], $this->server, false);
$this->networks = format_docker_command_output_to_json($networks)->filter(function ($network) {
return $network['Name'] !== 'bridge' && $network['Name'] !== 'host' && $network['Name'] !== 'none';
diff --git a/app/Livewire/Server/LogDrains.php b/app/Livewire/Server/LogDrains.php
index edddfc755..1bad68d71 100644
--- a/app/Livewire/Server/LogDrains.php
+++ b/app/Livewire/Server/LogDrains.php
@@ -7,6 +7,7 @@ use App\Actions\Server\StopLogDrain;
use App\Models\Server;
use Livewire\Attributes\Validate;
use Livewire\Component;
+use Throwable;
class LogDrains extends Component
{
@@ -44,9 +45,11 @@ class LogDrains extends Component
try {
$this->server = Server::ownedByCurrentTeam()->whereUuid($server_uuid)->firstOrFail();
$this->syncData();
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
return handleError($e, $this);
}
+
+ return null;
}
public function syncDataNewRelic(bool $toModel = false)
@@ -104,18 +107,16 @@ class LogDrains extends Component
$this->syncDataCustom($toModel);
}
$this->server->settings->save();
+ } elseif ($type === 'newrelic') {
+ $this->syncDataNewRelic($toModel);
+ } elseif ($type === 'axiom') {
+ $this->syncDataAxiom($toModel);
+ } elseif ($type === 'custom') {
+ $this->syncDataCustom($toModel);
} else {
- if ($type === 'newrelic') {
- $this->syncDataNewRelic($toModel);
- } elseif ($type === 'axiom') {
- $this->syncDataAxiom($toModel);
- } elseif ($type === 'custom') {
- $this->syncDataCustom($toModel);
- } else {
- $this->syncDataNewRelic($toModel);
- $this->syncDataAxiom($toModel);
- $this->syncDataCustom($toModel);
- }
+ $this->syncDataNewRelic($toModel);
+ $this->syncDataAxiom($toModel);
+ $this->syncDataCustom($toModel);
}
}
@@ -127,7 +128,7 @@ class LogDrains extends Component
'logDrainNewRelicLicenseKey' => ['required'],
'logDrainNewRelicBaseUri' => ['required', 'url'],
]);
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
$this->isLogDrainNewRelicEnabled = false;
throw $e;
@@ -138,7 +139,7 @@ class LogDrains extends Component
'logDrainAxiomDatasetName' => ['required'],
'logDrainAxiomApiKey' => ['required'],
]);
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
$this->isLogDrainAxiomEnabled = false;
throw $e;
@@ -149,7 +150,7 @@ class LogDrains extends Component
'logDrainCustomConfig' => ['required'],
'logDrainCustomConfigParser' => ['string', 'nullable'],
]);
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
$this->isLogDrainCustomEnabled = false;
throw $e;
@@ -168,9 +169,11 @@ class LogDrains extends Component
StopLogDrain::run($this->server);
$this->dispatch('success', 'Log drain service stopped.');
}
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
return handleError($e, $this);
}
+
+ return null;
}
public function submit(string $type)
@@ -178,9 +181,11 @@ class LogDrains extends Component
try {
$this->syncData(true, $type);
$this->dispatch('success', 'Settings saved.');
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
return handleError($e, $this);
}
+
+ return null;
}
public function render()
diff --git a/app/Livewire/Server/New/ByIp.php b/app/Livewire/Server/New/ByIp.php
index 5f60c5db5..5d5169ff8 100644
--- a/app/Livewire/Server/New/ByIp.php
+++ b/app/Livewire/Server/New/ByIp.php
@@ -9,6 +9,7 @@ use Illuminate\Support\Collection;
use Livewire\Attributes\Locked;
use Livewire\Attributes\Validate;
use Livewire\Component;
+use Throwable;
class ByIp extends Component
{
@@ -52,7 +53,7 @@ class ByIp extends Component
public bool $is_swarm_worker = false;
#[Validate('nullable|integer', as: 'Swarm Cluster')]
- public $selected_swarm_cluster = null;
+ public $selected_swarm_cluster;
#[Validate('required|boolean', as: 'Build Server')]
public bool $is_build_server = false;
@@ -84,7 +85,7 @@ class ByIp extends Component
{
$this->validate();
try {
- if (Server::where('team_id', currentTeam()->id)
+ if (Server::query()->where('team_id', currentTeam()->id)
->where('ip', $this->ip)
->exists()) {
return $this->dispatch('error', 'This IP/Domain is already in use by another server in your team.');
@@ -111,7 +112,7 @@ class ByIp extends Component
if ($this->is_build_server) {
data_forget($payload, 'proxy');
}
- $server = Server::create($payload);
+ $server = Server::query()->create($payload);
$server->proxy->set('status', 'exited');
$server->proxy->set('type', ProxyTypes::TRAEFIK->value);
$server->save();
@@ -126,7 +127,7 @@ class ByIp extends Component
$server->settings->save();
return redirect()->route('server.show', $server->uuid);
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
return handleError($e, $this);
}
}
diff --git a/app/Livewire/Server/PrivateKey/Show.php b/app/Livewire/Server/PrivateKey/Show.php
index 64aa1884b..614629d8d 100644
--- a/app/Livewire/Server/PrivateKey/Show.php
+++ b/app/Livewire/Server/PrivateKey/Show.php
@@ -4,7 +4,9 @@ namespace App\Livewire\Server\PrivateKey;
use App\Models\PrivateKey;
use App\Models\Server;
+use Exception;
use Livewire\Component;
+use Throwable;
class Show extends Component
{
@@ -19,9 +21,11 @@ class Show extends Component
try {
$this->server = Server::ownedByCurrentTeam()->whereUuid($server_uuid)->firstOrFail();
$this->privateKeys = PrivateKey::ownedByCurrentTeam()->get()->where('is_git_related', false);
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
return handleError($e, $this);
}
+
+ return null;
}
public function setPrivateKey($privateKeyId)
@@ -40,9 +44,9 @@ class Show extends Component
if ($uptime) {
$this->dispatch('success', 'Private key updated successfully.');
} else {
- throw new \Exception($error);
+ throw new Exception($error);
}
- } catch (\Exception $e) {
+ } catch (Exception $e) {
$this->server->update(['private_key_id' => $originalPrivateKeyId]);
$this->server->validateConnection();
$this->dispatch('error', $e->getMessage());
@@ -58,11 +62,13 @@ class Show extends Component
} else {
$this->dispatch('error', 'Server is not reachable.
Check this documentation for further help.
Error: '.$error);
- return;
+ return null;
}
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
return handleError($e, $this);
}
+
+ return null;
}
public function render()
diff --git a/app/Livewire/Server/Proxy.php b/app/Livewire/Server/Proxy.php
index 4e325c1ff..97f0a76aa 100644
--- a/app/Livewire/Server/Proxy.php
+++ b/app/Livewire/Server/Proxy.php
@@ -6,6 +6,7 @@ use App\Actions\Proxy\CheckConfiguration;
use App\Actions\Proxy\SaveConfiguration;
use App\Models\Server;
use Livewire\Component;
+use Throwable;
class Proxy extends Component
{
@@ -13,7 +14,7 @@ class Proxy extends Component
public ?string $selectedProxy = null;
- public $proxy_settings = null;
+ public $proxy_settings;
public bool $redirect_enabled = true;
@@ -50,9 +51,11 @@ class Proxy extends Component
$this->server->changeProxy($proxy_type, async: false);
$this->selectedProxy = $this->server->proxy->type;
$this->dispatch('reloadWindow');
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
return handleError($e, $this);
}
+
+ return null;
}
public function instantSave()
@@ -61,9 +64,11 @@ class Proxy extends Component
$this->validate();
$this->server->settings->save();
$this->dispatch('success', 'Settings saved.');
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
return handleError($e, $this);
}
+
+ return null;
}
public function instantSaveRedirect()
@@ -73,9 +78,11 @@ class Proxy extends Component
$this->server->save();
$this->server->setupDefaultRedirect();
$this->dispatch('success', 'Proxy configuration saved.');
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
return handleError($e, $this);
}
+
+ return null;
}
public function submit()
@@ -86,9 +93,11 @@ class Proxy extends Component
$this->server->save();
$this->server->setupDefaultRedirect();
$this->dispatch('success', 'Proxy configuration saved.');
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
return handleError($e, $this);
}
+
+ return null;
}
public function reset_proxy_configuration()
@@ -98,9 +107,11 @@ class Proxy extends Component
SaveConfiguration::run($this->server, $this->proxy_settings);
$this->server->save();
$this->dispatch('success', 'Proxy configuration saved.');
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
return handleError($e, $this);
}
+
+ return null;
}
public function loadProxyConfiguration()
@@ -112,8 +123,10 @@ class Proxy extends Component
} else {
$this->dispatch('traefikDashboardAvailable', false);
}
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
return handleError($e, $this);
}
+
+ return null;
}
}
diff --git a/app/Livewire/Server/Proxy/Deploy.php b/app/Livewire/Server/Proxy/Deploy.php
index 4f9d41092..6188f06f3 100644
--- a/app/Livewire/Server/Proxy/Deploy.php
+++ b/app/Livewire/Server/Proxy/Deploy.php
@@ -10,6 +10,7 @@ use Carbon\Carbon;
use Illuminate\Process\InvokedProcess;
use Illuminate\Support\Facades\Process;
use Livewire\Component;
+use Throwable;
class Deploy extends Component
{
@@ -38,11 +39,7 @@ class Deploy extends Component
public function mount()
{
- if ($this->server->id === 0) {
- $this->serverIp = base_ip();
- } else {
- $this->serverIp = $this->server->ip;
- }
+ $this->serverIp = $this->server->id === 0 ? base_ip() : $this->server->ip;
$this->currentRoute = request()->route()->getName();
}
@@ -67,9 +64,11 @@ class Deploy extends Component
try {
$this->stop();
$this->dispatch('checkProxy');
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
return handleError($e, $this);
}
+
+ return null;
}
public function checkProxy()
@@ -78,9 +77,11 @@ class Deploy extends Component
CheckProxy::run($this->server, true);
$this->dispatch('startProxyPolling');
$this->dispatch('proxyChecked');
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
return handleError($e, $this);
}
+
+ return null;
}
public function startProxy()
@@ -90,9 +91,11 @@ class Deploy extends Component
$this->server->save();
$activity = StartProxy::run($this->server, force: true);
$this->dispatch('activityMonitor', $activity->id, ProxyStatusChanged::class);
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
return handleError($e, $this);
}
+
+ return null;
}
public function stop(bool $forceStop = true)
@@ -114,7 +117,7 @@ class Deploy extends Component
}
$this->removeContainer($containerName);
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
return handleError($e, $this);
} finally {
$this->server->proxy->force_stop = $forceStop;
@@ -122,6 +125,8 @@ class Deploy extends Component
$this->server->save();
$this->dispatch('proxyStatusUpdated');
}
+
+ return null;
}
private function stopContainer(string $containerName, int $timeout): InvokedProcess
diff --git a/app/Livewire/Server/Proxy/DynamicConfigurations.php b/app/Livewire/Server/Proxy/DynamicConfigurations.php
index 6277a24bd..f01d66673 100644
--- a/app/Livewire/Server/Proxy/DynamicConfigurations.php
+++ b/app/Livewire/Server/Proxy/DynamicConfigurations.php
@@ -5,6 +5,7 @@ namespace App\Livewire\Server\Proxy;
use App\Models\Server;
use Illuminate\Support\Collection;
use Livewire\Component;
+use Throwable;
class DynamicConfigurations extends Component
{
@@ -32,7 +33,7 @@ class DynamicConfigurations extends Component
{
$proxy_path = $this->server->proxyPath();
$files = instant_remote_process(["mkdir -p $proxy_path/dynamic && ls -1 {$proxy_path}/dynamic"], $this->server);
- $files = collect(explode("\n", $files))->filter(fn ($file) => ! empty($file));
+ $files = collect(explode("\n", $files))->reject(fn ($file): bool => $file === '' || $file === '0');
$files = $files->map(fn ($file) => trim($file));
$files = $files->sort();
$contents = collect([]);
@@ -52,9 +53,11 @@ class DynamicConfigurations extends Component
if (is_null($this->server)) {
return redirect()->route('server.index');
}
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
return handleError($e, $this);
}
+
+ return null;
}
public function render()
diff --git a/app/Livewire/Server/Proxy/Logs.php b/app/Livewire/Server/Proxy/Logs.php
index 8e0f40c54..e2578f1ea 100644
--- a/app/Livewire/Server/Proxy/Logs.php
+++ b/app/Livewire/Server/Proxy/Logs.php
@@ -4,6 +4,7 @@ namespace App\Livewire\Server\Proxy;
use App\Models\Server;
use Livewire\Component;
+use Throwable;
class Logs extends Component
{
@@ -19,9 +20,11 @@ class Logs extends Component
if (is_null($this->server)) {
return redirect()->route('server.index');
}
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
return handleError($e, $this);
}
+
+ return null;
}
public function render()
diff --git a/app/Livewire/Server/Proxy/NewDynamicConfiguration.php b/app/Livewire/Server/Proxy/NewDynamicConfiguration.php
index 2155f1e82..096700d8e 100644
--- a/app/Livewire/Server/Proxy/NewDynamicConfiguration.php
+++ b/app/Livewire/Server/Proxy/NewDynamicConfiguration.php
@@ -6,6 +6,7 @@ use App\Enums\ProxyTypes;
use App\Models\Server;
use Livewire\Component;
use Symfony\Component\Yaml\Yaml;
+use Throwable;
class NewDynamicConfiguration extends Component
{
@@ -53,7 +54,7 @@ class NewDynamicConfiguration extends Component
if ($this->fileName === 'coolify.yaml') {
$this->dispatch('error', 'File name is reserved.');
- return;
+ return null;
}
} elseif ($proxy_type === 'CADDY') {
if (! str($this->fileName)->endsWith('.caddy')) {
@@ -67,7 +68,7 @@ class NewDynamicConfiguration extends Component
if ($exists == 1) {
$this->dispatch('error', 'File already exists');
- return;
+ return null;
}
}
if ($proxy_type === ProxyTypes::TRAEFIK->value) {
@@ -85,9 +86,11 @@ class NewDynamicConfiguration extends Component
$this->dispatch('loadDynamicConfigurations');
$this->dispatch('dynamic-configuration-added');
$this->dispatch('success', 'Dynamic configuration saved.');
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
return handleError($e, $this);
}
+
+ return null;
}
public function render()
diff --git a/app/Livewire/Server/Proxy/Show.php b/app/Livewire/Server/Proxy/Show.php
index 5ecb56a69..507cea7b0 100644
--- a/app/Livewire/Server/Proxy/Show.php
+++ b/app/Livewire/Server/Proxy/Show.php
@@ -4,6 +4,7 @@ namespace App\Livewire\Server\Proxy;
use App\Models\Server;
use Livewire\Component;
+use Throwable;
class Show extends Component
{
@@ -23,9 +24,11 @@ class Show extends Component
$this->parameters = get_route_parameters();
try {
$this->server = Server::ownedByCurrentTeam()->whereUuid(request()->server_uuid)->firstOrFail();
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
return handleError($e, $this);
}
+
+ return null;
}
public function render()
diff --git a/app/Livewire/Server/Proxy/Status.php b/app/Livewire/Server/Proxy/Status.php
index f4f18381f..5750a12bd 100644
--- a/app/Livewire/Server/Proxy/Status.php
+++ b/app/Livewire/Server/Proxy/Status.php
@@ -7,6 +7,7 @@ use App\Actions\Proxy\CheckProxy;
use App\Actions\Proxy\StartProxy;
use App\Models\Server;
use Livewire\Component;
+use Throwable;
class Status extends Component
{
@@ -38,9 +39,11 @@ class Status extends Component
if ($this->numberOfPolls >= 10) {
$this->polling = false;
$this->numberOfPolls = 0;
- $notification && $this->dispatch('error', 'Proxy is not running.');
+ if ($notification) {
+ $this->dispatch('error', 'Proxy is not running.');
+ }
- return;
+ return null;
}
$this->numberOfPolls++;
}
@@ -51,17 +54,25 @@ class Status extends Component
$this->dispatch('proxyStatusUpdated');
if ($this->server->proxy->status === 'running') {
$this->polling = false;
- $notification && $this->dispatch('success', 'Proxy is running.');
- } elseif ($this->server->proxy->status === 'exited' and ! $this->server->proxy->force_stop) {
- $notification && $this->dispatch('error', 'Proxy has exited.');
+ if ($notification) {
+ $this->dispatch('success', 'Proxy is running.');
+ }
+ } elseif ($this->server->proxy->status === 'exited' && ! $this->server->proxy->force_stop) {
+ if ($notification) {
+ $this->dispatch('error', 'Proxy has exited.');
+ }
} elseif ($this->server->proxy->force_stop) {
- $notification && $this->dispatch('error', 'Proxy is stopped manually.');
- } else {
- $notification && $this->dispatch('error', 'Proxy is not running.');
+ if ($notification) {
+ $this->dispatch('error', 'Proxy is stopped manually.');
+ }
+ } elseif ($notification) {
+ $this->dispatch('error', 'Proxy is not running.');
}
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
return handleError($e, $this);
}
+
+ return null;
}
public function getProxyStatus()
@@ -70,8 +81,10 @@ class Status extends Component
GetContainersStatus::run($this->server);
// dispatch_sync(new ContainerStatusJob($this->server));
$this->dispatch('proxyStatusUpdated');
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
return handleError($e, $this);
}
+
+ return null;
}
}
diff --git a/app/Livewire/Server/Resources.php b/app/Livewire/Server/Resources.php
index f549b43cb..cf3eb6c2c 100644
--- a/app/Livewire/Server/Resources.php
+++ b/app/Livewire/Server/Resources.php
@@ -6,6 +6,7 @@ use App\Models\Server;
use Illuminate\Foundation\Auth\Access\AuthorizesRequests;
use Illuminate\Support\Collection;
use Livewire\Component;
+use Throwable;
class Resources extends Component
{
@@ -65,9 +66,11 @@ class Resources extends Component
try {
$this->activeTab = 'managed';
$this->containers = $this->server->refresh()->definedResources();
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
return handleError($e, $this);
}
+
+ return null;
}
public function loadUnmanagedContainers()
@@ -75,9 +78,11 @@ class Resources extends Component
$this->activeTab = 'unmanaged';
try {
$this->containers = $this->server->loadUnmanagedContainers();
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
return handleError($e, $this);
}
+
+ return null;
}
public function mount()
@@ -90,9 +95,11 @@ class Resources extends Component
return redirect()->route('server.index');
}
$this->loadManagedContainers();
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
return handleError($e, $this);
}
+
+ return null;
}
public function render()
diff --git a/app/Livewire/Server/Show.php b/app/Livewire/Server/Show.php
index 6d267b9c8..4e36e0e5a 100644
--- a/app/Livewire/Server/Show.php
+++ b/app/Livewire/Server/Show.php
@@ -6,9 +6,11 @@ use App\Actions\Server\StartSentinel;
use App\Actions\Server\StopSentinel;
use App\Events\ServerReachabilityChanged;
use App\Models\Server;
+use Exception;
use Livewire\Attributes\Computed;
use Livewire\Attributes\Validate;
use Livewire\Component;
+use Throwable;
class Show extends Component
{
@@ -95,9 +97,11 @@ class Show extends Component
try {
$this->server = Server::ownedByCurrentTeam()->whereUuid($server_uuid)->firstOrFail();
$this->syncData();
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
return handleError($e, $this);
}
+
+ return null;
}
#[Computed]
@@ -114,12 +118,12 @@ class Show extends Component
if ($toModel) {
$this->validate();
- if (Server::where('team_id', currentTeam()->id)
+ if (Server::query()->where('team_id', currentTeam()->id)
->where('ip', $this->ip)
->where('id', '!=', $this->server->id)
->exists()) {
$this->ip = $this->server->ip;
- throw new \Exception('This IP/Domain is already in use by another server in your team.');
+ throw new Exception('This IP/Domain is already in use by another server in your team.');
}
$this->server->name = $this->name;
@@ -145,10 +149,9 @@ class Show extends Component
if (! validate_timezone($this->serverTimezone)) {
$this->serverTimezone = config('app.timezone');
- throw new \Exception('Invalid timezone.');
- } else {
- $this->server->settings->server_timezone = $this->serverTimezone;
+ throw new Exception('Invalid timezone.');
}
+ $this->server->settings->server_timezone = $this->serverTimezone;
$this->server->settings->save();
} else {
@@ -189,9 +192,11 @@ class Show extends Component
$this->validationLogs = $this->server->validation_logs = null;
$this->server->save();
$this->dispatch('init', $install);
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
return handleError($e, $this);
}
+
+ return null;
}
public function checkLocalhostConnection()
@@ -248,9 +253,11 @@ class Show extends Component
try {
$this->server->settings->generateSentinelToken();
$this->dispatch('success', 'Token regenerated & Sentinel restarted.');
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
return handleError($e, $this);
}
+
+ return null;
}
public function instantSave()
@@ -263,9 +270,11 @@ class Show extends Component
try {
$this->syncData(true);
$this->dispatch('success', 'Server updated.');
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
return handleError($e, $this);
}
+
+ return null;
}
public function render()
diff --git a/app/Livewire/Server/ValidateAndInstall.php b/app/Livewire/Server/ValidateAndInstall.php
index 791ef9350..1c73537a9 100644
--- a/app/Livewire/Server/ValidateAndInstall.php
+++ b/app/Livewire/Server/ValidateAndInstall.php
@@ -5,7 +5,9 @@ namespace App\Livewire\Server;
use App\Actions\Proxy\CheckProxy;
use App\Actions\Proxy\StartProxy;
use App\Models\Server;
+use Exception;
use Livewire\Component;
+use Throwable;
class ValidateAndInstall extends Component
{
@@ -17,19 +19,19 @@ class ValidateAndInstall extends Component
public bool $install = true;
- public $uptime = null;
+ public $uptime;
- public $supported_os_type = null;
+ public $supported_os_type;
- public $docker_installed = null;
+ public $docker_installed;
- public $docker_compose_installed = null;
+ public $docker_compose_installed;
- public $docker_version = null;
+ public $docker_version;
public $proxy_started = false;
- public $error = null;
+ public $error;
public bool $ask = false;
@@ -73,14 +75,16 @@ class ValidateAndInstall extends Component
if ($proxy === 'OK') {
$this->proxy_started = true;
} else {
- throw new \Exception('Proxy could not be started.');
+ throw new Exception('Proxy could not be started.');
}
} else {
$this->proxy_started = true;
}
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
return handleError($e, $this);
}
+
+ return null;
}
public function validateConnection()
@@ -117,30 +121,28 @@ class ValidateAndInstall extends Component
$this->docker_compose_installed = $this->server->validateDockerCompose();
if (! $this->docker_installed || ! $this->docker_compose_installed) {
if ($this->install) {
- if ($this->number_of_tries == $this->max_tries) {
+ if ($this->number_of_tries === $this->max_tries) {
$this->error = 'Docker Engine could not be installed. Please install Docker manually before continuing: documentation.';
$this->server->update([
'validation_logs' => $this->error,
]);
- return;
- } else {
- if ($this->number_of_tries <= $this->max_tries) {
- $activity = $this->server->installDocker();
- $this->number_of_tries++;
- $this->dispatch('newActivityMonitor', $activity->id, 'init', $this->number_of_tries);
- }
-
return;
}
- } else {
- $this->error = 'Docker Engine is not installed. Please install Docker manually before continuing: documentation.';
- $this->server->update([
- 'validation_logs' => $this->error,
- ]);
+ if ($this->number_of_tries <= $this->max_tries) {
+ $activity = $this->server->installDocker();
+ $this->number_of_tries++;
+ $this->dispatch('newActivityMonitor', $activity->id, 'init', $this->number_of_tries);
+ }
return;
}
+ $this->error = 'Docker Engine is not installed. Please install Docker manually before continuing: documentation.';
+ $this->server->update([
+ 'validation_logs' => $this->error,
+ ]);
+
+ return;
}
$this->dispatch('validateDockerVersion');
}
diff --git a/app/Livewire/Settings/Index.php b/app/Livewire/Settings/Index.php
index 3d90024b7..29dc61969 100644
--- a/app/Livewire/Settings/Index.php
+++ b/app/Livewire/Settings/Index.php
@@ -5,6 +5,7 @@ namespace App\Livewire\Settings;
use App\Jobs\CheckForUpdatesJob;
use App\Models\InstanceSettings;
use App\Models\Server;
+use Exception;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Hash;
use Livewire\Attributes\Computed;
@@ -77,26 +78,27 @@ class Index extends Component
{
if (! isInstanceAdmin()) {
return redirect()->route('dashboard');
- } else {
- $this->settings = instanceSettings();
- $this->fqdn = $this->settings->fqdn;
- $this->public_port_min = $this->settings->public_port_min;
- $this->public_port_max = $this->settings->public_port_max;
- $this->custom_dns_servers = $this->settings->custom_dns_servers;
- $this->instance_name = $this->settings->instance_name;
- $this->allowed_ips = $this->settings->allowed_ips;
- $this->public_ipv4 = $this->settings->public_ipv4;
- $this->public_ipv6 = $this->settings->public_ipv6;
- $this->do_not_track = $this->settings->do_not_track;
- $this->is_auto_update_enabled = $this->settings->is_auto_update_enabled;
- $this->is_registration_enabled = $this->settings->is_registration_enabled;
- $this->is_dns_validation_enabled = $this->settings->is_dns_validation_enabled;
- $this->is_api_enabled = $this->settings->is_api_enabled;
- $this->auto_update_frequency = $this->settings->auto_update_frequency;
- $this->update_check_frequency = $this->settings->update_check_frequency;
- $this->instance_timezone = $this->settings->instance_timezone;
- $this->disable_two_step_confirmation = $this->settings->disable_two_step_confirmation;
}
+ $this->settings = instanceSettings();
+ $this->fqdn = $this->settings->fqdn;
+ $this->public_port_min = $this->settings->public_port_min;
+ $this->public_port_max = $this->settings->public_port_max;
+ $this->custom_dns_servers = $this->settings->custom_dns_servers;
+ $this->instance_name = $this->settings->instance_name;
+ $this->allowed_ips = $this->settings->allowed_ips;
+ $this->public_ipv4 = $this->settings->public_ipv4;
+ $this->public_ipv6 = $this->settings->public_ipv6;
+ $this->do_not_track = $this->settings->do_not_track;
+ $this->is_auto_update_enabled = $this->settings->is_auto_update_enabled;
+ $this->is_registration_enabled = $this->settings->is_registration_enabled;
+ $this->is_dns_validation_enabled = $this->settings->is_dns_validation_enabled;
+ $this->is_api_enabled = $this->settings->is_api_enabled;
+ $this->auto_update_frequency = $this->settings->auto_update_frequency;
+ $this->update_check_frequency = $this->settings->update_check_frequency;
+ $this->instance_timezone = $this->settings->instance_timezone;
+ $this->disable_two_step_confirmation = $this->settings->disable_two_step_confirmation;
+
+ return null;
}
#[Computed]
@@ -144,46 +146,43 @@ class Index extends Component
{
try {
$error_show = false;
- $this->server = Server::findOrFail(0);
+ $this->server = Server::query()->findOrFail(0);
$this->resetErrorBag();
if (! validate_timezone($this->instance_timezone)) {
$this->instance_timezone = config('app.timezone');
- throw new \Exception('Invalid timezone.');
- } else {
- $this->settings->instance_timezone = $this->instance_timezone;
+ throw new Exception('Invalid timezone.');
}
+ $this->settings->instance_timezone = $this->instance_timezone;
if ($this->settings->public_port_min > $this->settings->public_port_max) {
$this->addError('settings.public_port_min', 'The minimum port must be lower than the maximum port.');
- return;
+ return null;
}
$this->validate();
if ($this->is_auto_update_enabled && ! validate_cron_expression($this->auto_update_frequency)) {
$this->dispatch('error', 'Invalid Cron / Human expression for Auto Update Frequency.');
- if (empty($this->auto_update_frequency)) {
+ if (! isset($this->auto_update_frequency) || ($this->auto_update_frequency === '' || $this->auto_update_frequency === '0')) {
$this->auto_update_frequency = '0 0 * * *';
}
- return;
+ return null;
}
if (! validate_cron_expression($this->update_check_frequency)) {
$this->dispatch('error', 'Invalid Cron / Human expression for Update Check Frequency.');
- if (empty($this->update_check_frequency)) {
+ if (! isset($this->update_check_frequency) || ($this->update_check_frequency === '' || $this->update_check_frequency === '0')) {
$this->update_check_frequency = '0 * * * *';
}
- return;
+ return null;
}
- if ($this->settings->is_dns_validation_enabled && $this->settings->fqdn) {
- if (! validate_dns_entry($this->settings->fqdn, $this->server)) {
- $this->dispatch('error', "Validating DNS failed.
Make sure you have added the DNS records correctly.
{$this->settings->fqdn}->{$this->server->ip}
Check this documentation for further help.");
- $error_show = true;
- }
+ if ($this->settings->is_dns_validation_enabled && $this->settings->fqdn && ! validate_dns_entry($this->settings->fqdn, $this->server)) {
+ $this->dispatch('error', "Validating DNS failed.
Make sure you have added the DNS records correctly.
{$this->settings->fqdn}->{$this->server->ip}
Check this documentation for further help.");
+ $error_show = true;
}
if ($this->settings->fqdn) {
check_domain_usage(domain: $this->settings->fqdn);
@@ -209,9 +208,11 @@ class Index extends Component
if (! $error_show) {
$this->dispatch('success', 'Instance settings updated successfully!');
}
- } catch (\Exception $e) {
+ } catch (Exception $e) {
return handleError($e, $this);
}
+
+ return null;
}
public function checkManually()
diff --git a/app/Livewire/SettingsBackup.php b/app/Livewire/SettingsBackup.php
index 1b0599ffe..275c0f4b0 100644
--- a/app/Livewire/SettingsBackup.php
+++ b/app/Livewire/SettingsBackup.php
@@ -6,7 +6,9 @@ use App\Models\InstanceSettings;
use App\Models\S3Storage;
use App\Models\ScheduledDatabaseBackup;
use App\Models\Server;
+use App\Models\StandaloneDocker;
use App\Models\StandalonePostgresql;
+use Exception;
use Livewire\Attributes\Locked;
use Livewire\Attributes\Validate;
use Livewire\Component;
@@ -44,39 +46,40 @@ class SettingsBackup extends Component
{
if (! isInstanceAdmin()) {
return redirect()->route('dashboard');
- } else {
- $settings = instanceSettings();
- $this->database = StandalonePostgresql::whereName('coolify-db')->first();
- $s3s = S3Storage::whereTeamId(0)->get() ?? [];
- if ($this->database) {
- $this->uuid = $this->database->uuid;
- $this->name = $this->database->name;
- $this->description = $this->database->description;
- $this->postgres_user = $this->database->postgres_user;
- $this->postgres_password = $this->database->postgres_password;
-
- if ($this->database->status !== 'running') {
- $this->database->status = 'running';
- $this->database->save();
- }
- $this->backup = $this->database->scheduledBackups->first();
- $this->executions = $this->backup->executions;
- }
- $this->settings = $settings;
- $this->s3s = $s3s;
}
+ $settings = instanceSettings();
+ $this->database = StandalonePostgresql::whereName('coolify-db')->first();
+ $s3s = S3Storage::whereTeamId(0)->get() ?? [];
+ if ($this->database instanceof StandalonePostgresql) {
+ $this->uuid = $this->database->uuid;
+ $this->name = $this->database->name;
+ $this->description = $this->database->description;
+ $this->postgres_user = $this->database->postgres_user;
+ $this->postgres_password = $this->database->postgres_password;
+
+ if ($this->database->status !== 'running') {
+ $this->database->status = 'running';
+ $this->database->save();
+ }
+ $this->backup = $this->database->scheduledBackups->first();
+ $this->executions = $this->backup->executions;
+ }
+ $this->settings = $settings;
+ $this->s3s = $s3s;
+
+ return null;
}
public function addCoolifyDatabase()
{
try {
- $server = Server::findOrFail(0);
+ $server = Server::query()->findOrFail(0);
$out = instant_remote_process(['docker inspect coolify-db'], $server);
$envs = format_docker_envs_to_json($out);
$postgres_password = $envs['POSTGRES_PASSWORD'];
$postgres_user = $envs['POSTGRES_USER'];
$postgres_db = $envs['POSTGRES_DB'];
- $this->database = StandalonePostgresql::create([
+ $this->database = StandalonePostgresql::query()->create([
'id' => 0,
'name' => 'coolify-db',
'description' => 'Coolify database',
@@ -84,16 +87,16 @@ class SettingsBackup extends Component
'postgres_password' => $postgres_password,
'postgres_db' => $postgres_db,
'status' => 'running',
- 'destination_type' => \App\Models\StandaloneDocker::class,
+ 'destination_type' => StandaloneDocker::class,
'destination_id' => 0,
]);
- $this->backup = ScheduledDatabaseBackup::create([
+ $this->backup = ScheduledDatabaseBackup::query()->create([
'id' => 0,
'enabled' => true,
'save_s3' => false,
'frequency' => '0 0 * * *',
'database_id' => $this->database->id,
- 'database_type' => \App\Models\StandalonePostgresql::class,
+ 'database_type' => StandalonePostgresql::class,
'team_id' => currentTeam()->id,
]);
$this->database->refresh();
@@ -107,9 +110,11 @@ class SettingsBackup extends Component
$this->postgres_password = $this->database->postgres_password;
$this->executions = $this->backup->executions;
- } catch (\Exception $e) {
+ } catch (Exception $e) {
return handleError($e, $this);
}
+
+ return null;
}
public function submit()
diff --git a/app/Livewire/SettingsEmail.php b/app/Livewire/SettingsEmail.php
index 058f080e4..bbdc23034 100644
--- a/app/Livewire/SettingsEmail.php
+++ b/app/Livewire/SettingsEmail.php
@@ -5,10 +5,12 @@ namespace App\Livewire;
use App\Models\InstanceSettings;
use App\Models\Team;
use App\Notifications\Test;
+use Exception;
use Illuminate\Support\Facades\RateLimiter;
use Livewire\Attributes\Locked;
use Livewire\Attributes\Validate;
use Livewire\Component;
+use Throwable;
class SettingsEmail extends Component
{
@@ -65,6 +67,8 @@ class SettingsEmail extends Component
$this->syncData();
$this->team = auth()->user()->currentTeam();
$this->testEmailAddress = auth()->user()->email;
+
+ return null;
}
public function syncData(bool $toModel = false)
@@ -106,9 +110,11 @@ class SettingsEmail extends Component
$this->resetErrorBag();
$this->syncData(true);
$this->dispatch('success', 'Transactional email settings updated.');
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
return handleError($e, $this);
}
+
+ return null;
}
public function instantSave(string $type)
@@ -122,7 +128,7 @@ class SettingsEmail extends Component
$this->submitResend();
}
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
if ($type === 'SMTP') {
$this->smtpEnabled = false;
} elseif ($type === 'Resend') {
@@ -131,6 +137,8 @@ class SettingsEmail extends Component
return handleError($e, $this);
}
+
+ return null;
}
public function submitSmtp()
@@ -172,11 +180,13 @@ class SettingsEmail extends Component
$this->settings->save();
$this->dispatch('success', 'SMTP settings updated.');
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
$this->smtpEnabled = false;
return handleError($e);
}
+
+ return null;
}
public function submitResend()
@@ -205,11 +215,13 @@ class SettingsEmail extends Component
$this->settings->save();
$this->dispatch('success', 'Resend settings updated.');
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
$this->resendEnabled = false;
return handleError($e);
}
+
+ return null;
}
public function sendTestEmail()
@@ -233,10 +245,12 @@ class SettingsEmail extends Component
);
if (! $executed) {
- throw new \Exception('Too many messages sent!');
+ throw new Exception('Too many messages sent!');
}
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
return handleError($e);
}
+
+ return null;
}
}
diff --git a/app/Livewire/SettingsOauth.php b/app/Livewire/SettingsOauth.php
index e23f94a73..01c76a459 100644
--- a/app/Livewire/SettingsOauth.php
+++ b/app/Livewire/SettingsOauth.php
@@ -3,6 +3,7 @@
namespace App\Livewire;
use App\Models\OauthSetting;
+use Exception;
use Livewire\Component;
class SettingsOauth extends Component
@@ -33,6 +34,8 @@ class SettingsOauth extends Component
return $carry;
}, []);
+
+ return null;
}
private function updateOauthSettings(?string $provider = null)
@@ -41,7 +44,7 @@ class SettingsOauth extends Component
$oauth = $this->oauth_settings_map[$provider];
if (! $oauth->couldBeEnabled()) {
$oauth->update(['enabled' => false]);
- throw new \Exception('OAuth settings are not complete for '.$oauth->provider.'.
Please fill in all required fields.');
+ throw new Exception('OAuth settings are not complete for '.$oauth->provider.'.
Please fill in all required fields.');
}
$oauth->save();
$this->dispatch('success', 'OAuth settings for '.$oauth->provider.' updated successfully!');
@@ -56,9 +59,11 @@ class SettingsOauth extends Component
{
try {
$this->updateOauthSettings($provider);
- } catch (\Exception $e) {
+ } catch (Exception $e) {
return handleError($e, $this);
}
+
+ return null;
}
public function submit()
diff --git a/app/Livewire/SharedVariables/Environment/Show.php b/app/Livewire/SharedVariables/Environment/Show.php
index e88ac5f13..4495375ac 100644
--- a/app/Livewire/SharedVariables/Environment/Show.php
+++ b/app/Livewire/SharedVariables/Environment/Show.php
@@ -4,7 +4,9 @@ namespace App\Livewire\SharedVariables\Environment;
use App\Models\Application;
use App\Models\Project;
+use Exception;
use Livewire\Component;
+use Throwable;
class Show extends Component
{
@@ -23,7 +25,7 @@ class Show extends Component
try {
$found = $this->environment->environment_variables()->where('key', $data['key'])->first();
if ($found) {
- throw new \Exception('Variable already exists.');
+ throw new Exception('Variable already exists.');
}
$this->environment->environment_variables()->create([
'key' => $data['key'],
@@ -34,9 +36,11 @@ class Show extends Component
'team_id' => currentTeam()->id,
]);
$this->environment->refresh();
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
return handleError($e, $this);
}
+
+ return null;
}
public function mount()
diff --git a/app/Livewire/SharedVariables/Project/Show.php b/app/Livewire/SharedVariables/Project/Show.php
index 0171283c4..79d217e65 100644
--- a/app/Livewire/SharedVariables/Project/Show.php
+++ b/app/Livewire/SharedVariables/Project/Show.php
@@ -3,7 +3,9 @@
namespace App\Livewire\SharedVariables\Project;
use App\Models\Project;
+use Exception;
use Livewire\Component;
+use Throwable;
class Show extends Component
{
@@ -16,7 +18,7 @@ class Show extends Component
try {
$found = $this->project->environment_variables()->where('key', $data['key'])->first();
if ($found) {
- throw new \Exception('Variable already exists.');
+ throw new Exception('Variable already exists.');
}
$this->project->environment_variables()->create([
'key' => $data['key'],
@@ -27,20 +29,24 @@ class Show extends Component
'team_id' => currentTeam()->id,
]);
$this->project->refresh();
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
return handleError($e, $this);
}
+
+ return null;
}
public function mount()
{
$projectUuid = request()->route('project_uuid');
$teamId = currentTeam()->id;
- $project = Project::where('team_id', $teamId)->where('uuid', $projectUuid)->first();
+ $project = Project::query()->where('team_id', $teamId)->where('uuid', $projectUuid)->first();
if (! $project) {
return redirect()->route('dashboard');
}
$this->project = $project;
+
+ return null;
}
public function render()
diff --git a/app/Livewire/SharedVariables/Team/Index.php b/app/Livewire/SharedVariables/Team/Index.php
index a76ccf58a..3de2b86fa 100644
--- a/app/Livewire/SharedVariables/Team/Index.php
+++ b/app/Livewire/SharedVariables/Team/Index.php
@@ -3,7 +3,9 @@
namespace App\Livewire\SharedVariables\Team;
use App\Models\Team;
+use Exception;
use Livewire\Component;
+use Throwable;
class Index extends Component
{
@@ -16,7 +18,7 @@ class Index extends Component
try {
$found = $this->team->environment_variables()->where('key', $data['key'])->first();
if ($found) {
- throw new \Exception('Variable already exists.');
+ throw new Exception('Variable already exists.');
}
$this->team->environment_variables()->create([
'key' => $data['key'],
@@ -27,9 +29,11 @@ class Index extends Component
'team_id' => currentTeam()->id,
]);
$this->team->refresh();
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
return handleError($e, $this);
}
+
+ return null;
}
public function mount()
diff --git a/app/Livewire/Source/Github/Change.php b/app/Livewire/Source/Github/Change.php
index 8f4f02f70..851212dc7 100644
--- a/app/Livewire/Source/Github/Change.php
+++ b/app/Livewire/Source/Github/Change.php
@@ -5,11 +5,13 @@ namespace App\Livewire\Source\Github;
use App\Jobs\GithubAppPermissionJob;
use App\Models\GithubApp;
use App\Models\PrivateKey;
+use DateTimeImmutable;
use Illuminate\Support\Facades\Http;
use Lcobucci\JWT\Configuration;
use Lcobucci\JWT\Signer\Key\InMemory;
use Lcobucci\JWT\Signer\Rsa\Sha256;
use Livewire\Component;
+use Throwable;
class Change extends Component
{
@@ -58,7 +60,7 @@ class Change extends Component
public function boot()
{
- if ($this->github_app) {
+ if ($this->github_app instanceof GithubApp) {
$this->github_app->makeVisible(['client_secret', 'webhook_secret']);
}
}
@@ -151,9 +153,11 @@ class Change extends Component
$this->webhook_endpoint = $this->ipv4;
$this->is_system_wide = $this->github_app->is_system_wide;
}
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
return handleError($e, $this);
}
+
+ return null;
}
public function getGithubAppNameUpdatePath()
@@ -179,8 +183,8 @@ class Change extends Component
->issuedBy((string) $app_id)
->permittedFor('https://api.github.com')
->identifiedBy((string) $now)
- ->issuedAt(new \DateTimeImmutable("@{$now}"))
- ->expiresAt(new \DateTimeImmutable('@'.($now + 600)))
+ ->issuedAt(new DateTimeImmutable("@{$now}"))
+ ->expiresAt(new DateTimeImmutable('@'.($now + 600)))
->getToken($configuration->signer(), $configuration->signingKey())
->toString();
}
@@ -193,7 +197,7 @@ class Change extends Component
if (! $privateKey) {
$this->dispatch('error', 'No private key found for this GitHub App.');
- return;
+ return null;
}
$jwt = $this->generateGithubJwt($privateKey->private_key, $this->github_app->app_id);
@@ -222,9 +226,11 @@ class Change extends Component
$error_message = $response->json()['message'] ?? 'Unknown error';
$this->dispatch('error', "Failed to fetch GitHub App information: {$error_message}");
}
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
return handleError($e, $this);
}
+
+ return null;
}
public function submit()
@@ -247,9 +253,11 @@ class Change extends Component
]);
$this->github_app->save();
$this->dispatch('success', 'Github App updated.');
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
return handleError($e, $this);
}
+
+ return null;
}
public function instantSave()
@@ -258,9 +266,11 @@ class Change extends Component
$this->github_app->makeVisible('client_secret')->makeVisible('webhook_secret');
$this->github_app->save();
$this->dispatch('success', 'Github App updated.');
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
return handleError($e, $this);
}
+
+ return null;
}
public function delete()
@@ -270,12 +280,12 @@ class Change extends Component
$this->dispatch('error', 'This source is being used by an application. Please delete all applications first.');
$this->github_app->makeVisible('client_secret')->makeVisible('webhook_secret');
- return;
+ return null;
}
$this->github_app->delete();
return redirect()->route('source.all');
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
return handleError($e, $this);
}
}
diff --git a/app/Livewire/Source/Github/Create.php b/app/Livewire/Source/Github/Create.php
index 136d3525e..0b6ede36f 100644
--- a/app/Livewire/Source/Github/Create.php
+++ b/app/Livewire/Source/Github/Create.php
@@ -4,6 +4,7 @@ namespace App\Livewire\Source\Github;
use App\Models\GithubApp;
use Livewire\Component;
+use Throwable;
class Create extends Component
{
@@ -50,13 +51,13 @@ class Create extends Component
if (isCloud()) {
$payload['is_system_wide'] = $this->is_system_wide;
}
- $github_app = GithubApp::create($payload);
+ $github_app = GithubApp::query()->create($payload);
if (session('from')) {
session(['from' => session('from') + ['source_id' => $github_app->id]]);
}
return redirect()->route('source.github.show', ['github_app_uuid' => $github_app->uuid]);
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
return handleError($e, $this);
}
}
diff --git a/app/Livewire/Storage/Create.php b/app/Livewire/Storage/Create.php
index c5250e1e3..6e45b4211 100644
--- a/app/Livewire/Storage/Create.php
+++ b/app/Livewire/Storage/Create.php
@@ -4,6 +4,7 @@ namespace App\Livewire\Storage;
use App\Models\S3Storage;
use Livewire\Component;
+use Throwable;
class Create extends Component
{
@@ -68,19 +69,17 @@ class Create extends Component
$this->storage->key = $this->key;
$this->storage->secret = $this->secret;
$this->storage->bucket = $this->bucket;
- if (empty($this->endpoint)) {
- $this->storage->endpoint = "https://s3.{$this->region}.amazonaws.com";
- } else {
- $this->storage->endpoint = $this->endpoint;
- }
+ $this->storage->endpoint = ! isset($this->endpoint) || ($this->endpoint === '' || $this->endpoint === '0') ? "https://s3.{$this->region}.amazonaws.com" : $this->endpoint;
$this->storage->team_id = currentTeam()->id;
$this->storage->testConnection();
$this->storage->save();
return redirect()->route('storage.show', $this->storage->uuid);
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
$this->dispatch('error', 'Failed to create storage.', $e->getMessage());
// return handleError($e, $this);
}
+
+ return null;
}
}
diff --git a/app/Livewire/Storage/Form.php b/app/Livewire/Storage/Form.php
index 8ca0020c7..2deecefdd 100644
--- a/app/Livewire/Storage/Form.php
+++ b/app/Livewire/Storage/Form.php
@@ -4,6 +4,7 @@ namespace App\Livewire\Storage;
use App\Models\S3Storage;
use Livewire\Component;
+use Throwable;
class Form extends Component
{
@@ -37,9 +38,11 @@ class Form extends Component
$this->storage->testConnection(shouldSave: true);
return $this->dispatch('success', 'Connection is working.', 'Tested with "ListObjectsV2" action.');
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
$this->dispatch('error', 'Failed to create storage.', $e->getMessage());
}
+
+ return null;
}
public function delete()
@@ -48,7 +51,7 @@ class Form extends Component
$this->storage->delete();
return redirect()->route('storage.index');
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
return handleError($e, $this);
}
}
@@ -58,8 +61,10 @@ class Form extends Component
$this->validate();
try {
$this->test_s3_connection();
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
return handleError($e, $this);
}
+
+ return null;
}
}
diff --git a/app/Livewire/Storage/Show.php b/app/Livewire/Storage/Show.php
index bdea9a3b0..b473435c6 100644
--- a/app/Livewire/Storage/Show.php
+++ b/app/Livewire/Storage/Show.php
@@ -7,7 +7,7 @@ use Livewire\Component;
class Show extends Component
{
- public $storage = null;
+ public $storage;
public function mount()
{
diff --git a/app/Livewire/Subscription/Index.php b/app/Livewire/Subscription/Index.php
index df450cf7e..a6f6b1942 100644
--- a/app/Livewire/Subscription/Index.php
+++ b/app/Livewire/Subscription/Index.php
@@ -25,13 +25,15 @@ class Index extends Component
}
$this->settings = instanceSettings();
$this->alreadySubscribed = currentTeam()->subscription()->exists();
+
+ return null;
}
public function stripeCustomerPortal()
{
$session = getStripeCustomerPortalSession(currentTeam());
if (is_null($session)) {
- return;
+ return null;
}
return redirect($session->url);
diff --git a/app/Livewire/Subscription/PricingPlans.php b/app/Livewire/Subscription/PricingPlans.php
index 6b2d3fb36..c3099d70d 100644
--- a/app/Livewire/Subscription/PricingPlans.php
+++ b/app/Livewire/Subscription/PricingPlans.php
@@ -22,7 +22,7 @@ class PricingPlans extends Component
if (! $priceId) {
$this->dispatch('error', 'Price ID not found! Please contact the administrator.');
- return;
+ return null;
}
$payload = [
'allow_promotion_codes' => true,
diff --git a/app/Livewire/Subscription/Show.php b/app/Livewire/Subscription/Show.php
index 96258c64e..e0c17af8a 100644
--- a/app/Livewire/Subscription/Show.php
+++ b/app/Livewire/Subscription/Show.php
@@ -17,6 +17,8 @@ class Show extends Component
if (! data_get(currentTeam(), 'subscription')) {
return redirect()->route('subscription.index');
}
+
+ return null;
}
public function render()
diff --git a/app/Livewire/SwitchTeam.php b/app/Livewire/SwitchTeam.php
index 7629c9596..7d31dd5ab 100644
--- a/app/Livewire/SwitchTeam.php
+++ b/app/Livewire/SwitchTeam.php
@@ -22,11 +22,11 @@ class SwitchTeam extends Component
public function switch_to($team_id)
{
if (! auth()->user()->teams->contains($team_id)) {
- return;
+ return null;
}
- $team_to_switch_to = Team::find($team_id);
+ $team_to_switch_to = Team::query()->find($team_id);
if (! $team_to_switch_to) {
- return;
+ return null;
}
refreshSession($team_to_switch_to);
diff --git a/app/Livewire/Tags/Deployments.php b/app/Livewire/Tags/Deployments.php
index e4afa5b60..932b0a430 100644
--- a/app/Livewire/Tags/Deployments.php
+++ b/app/Livewire/Tags/Deployments.php
@@ -3,6 +3,7 @@
namespace App\Livewire\Tags;
use App\Models\ApplicationDeploymentQueue;
+use Exception;
use Livewire\Component;
class Deployments extends Component
@@ -19,7 +20,7 @@ class Deployments extends Component
public function getDeployments()
{
try {
- $this->deploymentsPerTagPerServer = ApplicationDeploymentQueue::whereIn('status', ['in_progress', 'queued'])->whereIn('application_id', $this->resourceIds)->get([
+ $this->deploymentsPerTagPerServer = ApplicationDeploymentQueue::query()->whereIn('status', ['in_progress', 'queued'])->whereIn('application_id', $this->resourceIds)->get([
'id',
'application_id',
'application_name',
@@ -30,8 +31,10 @@ class Deployments extends Component
'status',
])->sortBy('id')->groupBy('server_name')->toArray();
$this->dispatch('deployments', $this->deploymentsPerTagPerServer);
- } catch (\Exception $e) {
+ } catch (Exception $e) {
return handleError($e, $this);
}
+
+ return null;
}
}
diff --git a/app/Livewire/Tags/Show.php b/app/Livewire/Tags/Show.php
index fc5b13374..9955187c0 100644
--- a/app/Livewire/Tags/Show.php
+++ b/app/Livewire/Tags/Show.php
@@ -5,6 +5,7 @@ namespace App\Livewire\Tags;
use App\Http\Controllers\Api\DeployController;
use App\Models\ApplicationDeploymentQueue;
use App\Models\Tag;
+use Exception;
use Illuminate\Support\Collection;
use Livewire\Attributes\Locked;
use Livewire\Attributes\Title;
@@ -46,16 +47,18 @@ class Show extends Component
$this->tag = $tag;
$this->getDeployments();
}
- } catch (\Exception $e) {
+ } catch (Exception $e) {
return handleError($e, $this);
}
+
+ return null;
}
public function getDeployments()
{
try {
$resource_ids = $this->applications->pluck('id');
- $this->deploymentsPerTagPerServer = ApplicationDeploymentQueue::whereIn('status', ['in_progress', 'queued'])->whereIn('application_id', $resource_ids)->get([
+ $this->deploymentsPerTagPerServer = ApplicationDeploymentQueue::query()->whereIn('status', ['in_progress', 'queued'])->whereIn('application_id', $resource_ids)->get([
'id',
'application_id',
'application_name',
@@ -65,9 +68,11 @@ class Show extends Component
'server_id',
'status',
])->sortBy('id')->groupBy('server_name')->toArray();
- } catch (\Exception $e) {
+ } catch (Exception $e) {
return handleError($e, $this);
}
+
+ return null;
}
public function redeployAll()
@@ -83,9 +88,11 @@ class Show extends Component
$message->push($deploy->deploy_resource($resource));
});
$this->dispatch('success', 'Mass deployment started.');
- } catch (\Exception $e) {
+ } catch (Exception $e) {
return handleError($e, $this);
}
+
+ return null;
}
public function render()
diff --git a/app/Livewire/Team/AdminView.php b/app/Livewire/Team/AdminView.php
index cfb47d9d8..58c46d51b 100644
--- a/app/Livewire/Team/AdminView.php
+++ b/app/Livewire/Team/AdminView.php
@@ -25,12 +25,14 @@ class AdminView extends Component
return redirect()->route('dashboard');
}
$this->getUsers();
+
+ return null;
}
public function submitSearch()
{
if ($this->search !== '') {
- $this->users = User::where(function ($query) {
+ $this->users = User::query()->where(function ($query) {
$query->where('name', 'like', "%{$this->search}%")
->orWhere('email', 'like', "%{$this->search}%");
})->get()->filter(function ($user) {
@@ -43,7 +45,7 @@ class AdminView extends Component
public function getUsers()
{
- $users = User::where('id', '!=', auth()->id())->get();
+ $users = User::query()->where('id', '!=', auth()->id())->get();
if ($users->count() > $this->number_of_users_to_show) {
$this->lots_of_users = true;
$this->users = $users->take($this->number_of_users_to_show);
@@ -77,24 +79,20 @@ class AdminView extends Component
if (! isInstanceAdmin()) {
return redirect()->route('dashboard');
}
- if (! data_get(InstanceSettings::get(), 'disable_two_step_confirmation')) {
- if (! Hash::check($password, Auth::user()->password)) {
- $this->addError('password', 'The provided password is incorrect.');
+ if (! data_get(InstanceSettings::get(), 'disable_two_step_confirmation') && ! Hash::check($password, Auth::user()->password)) {
+ $this->addError('password', 'The provided password is incorrect.');
- return;
- }
+ return null;
}
if (! auth()->user()->isInstanceAdmin()) {
return $this->dispatch('error', 'You are not authorized to delete users');
}
- $user = User::find($id);
+ $user = User::query()->find($id);
$teams = $user->teams;
foreach ($teams as $team) {
$user_alone_in_team = $team->members->count() === 1;
- if ($team->id === 0) {
- if ($user_alone_in_team) {
- return $this->dispatch('error', 'User is alone in the root team, cannot delete');
- }
+ if ($team->id === 0 && $user_alone_in_team) {
+ return $this->dispatch('error', 'User is alone in the root team, cannot delete');
}
if ($user_alone_in_team) {
$this->finalizeDeletion($user, $team);
@@ -109,27 +107,27 @@ class AdminView extends Component
if ($found_other_owner_or_admin) {
$team->members()->detach($user->id);
- continue;
- } else {
- $found_other_member_who_is_not_owner = $team->members->filter(function ($member) {
- return $member->pivot->role === 'member';
- })->first();
- if ($found_other_member_who_is_not_owner) {
- $found_other_member_who_is_not_owner->pivot->role = 'owner';
- $found_other_member_who_is_not_owner->pivot->save();
- $team->members()->detach($user->id);
- } else {
- $this->finalizeDeletion($user, $team);
- }
-
continue;
}
- } else {
- $team->members()->detach($user->id);
+ $found_other_member_who_is_not_owner = $team->members->filter(function ($member) {
+ return $member->pivot->role === 'member';
+ })->first();
+ if ($found_other_member_who_is_not_owner) {
+ $found_other_member_who_is_not_owner->pivot->role = 'owner';
+ $found_other_member_who_is_not_owner->pivot->save();
+ $team->members()->detach($user->id);
+ } else {
+ $this->finalizeDeletion($user, $team);
+ }
+
+ continue;
}
+ $team->members()->detach($user->id);
}
$user->delete();
$this->getUsers();
+
+ return null;
}
public function render()
diff --git a/app/Livewire/Team/Create.php b/app/Livewire/Team/Create.php
index f805d6122..f5069d92d 100644
--- a/app/Livewire/Team/Create.php
+++ b/app/Livewire/Team/Create.php
@@ -5,6 +5,7 @@ namespace App\Livewire\Team;
use App\Models\Team;
use Livewire\Attributes\Validate;
use Livewire\Component;
+use Throwable;
class Create extends Component
{
@@ -18,7 +19,7 @@ class Create extends Component
{
try {
$this->validate();
- $team = Team::create([
+ $team = Team::query()->create([
'name' => $this->name,
'description' => $this->description,
'personal_team' => false,
@@ -27,7 +28,7 @@ class Create extends Component
refreshSession();
return redirect()->route('team.index');
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
return handleError($e, $this);
}
}
diff --git a/app/Livewire/Team/Index.php b/app/Livewire/Team/Index.php
index 0972e7364..0682d86ae 100644
--- a/app/Livewire/Team/Index.php
+++ b/app/Livewire/Team/Index.php
@@ -7,6 +7,7 @@ use App\Models\TeamInvitation;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\DB;
use Livewire\Component;
+use Throwable;
class Index extends Component
{
@@ -45,9 +46,11 @@ class Index extends Component
$this->team->save();
refreshSession();
$this->dispatch('success', 'Team updated.');
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
return handleError($e, $this);
}
+
+ return null;
}
public function delete()
diff --git a/app/Livewire/Team/Invitations.php b/app/Livewire/Team/Invitations.php
index 93432efc8..9d3ea8736 100644
--- a/app/Livewire/Team/Invitations.php
+++ b/app/Livewire/Team/Invitations.php
@@ -3,6 +3,7 @@
namespace App\Livewire\Team;
use App\Models\TeamInvitation;
+use Exception;
use Livewire\Component;
class Invitations extends Component
@@ -18,9 +19,11 @@ class Invitations extends Component
$initiation_found->delete();
$this->refreshInvitations();
$this->dispatch('success', 'Invitation revoked.');
- } catch (\Exception) {
+ } catch (Exception) {
return $this->dispatch('error', 'Invitation not found.');
}
+
+ return null;
}
public function refreshInvitations()
diff --git a/app/Livewire/Team/InviteLink.php b/app/Livewire/Team/InviteLink.php
index 25f8a1ff5..50a7e302b 100644
--- a/app/Livewire/Team/InviteLink.php
+++ b/app/Livewire/Team/InviteLink.php
@@ -4,11 +4,13 @@ namespace App\Livewire\Team;
use App\Models\TeamInvitation;
use App\Models\User;
+use Exception;
use Illuminate\Notifications\Messages\MailMessage;
use Illuminate\Support\Facades\Crypt;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Str;
use Livewire\Component;
+use Throwable;
use Visus\Cuid2\Cuid2;
class InviteLink extends Component
@@ -42,19 +44,19 @@ class InviteLink extends Component
try {
$this->validate();
if (auth()->user()->role() === 'admin' && $this->role === 'owner') {
- throw new \Exception('Admins cannot invite owners.');
+ throw new Exception('Admins cannot invite owners.');
}
$member_emails = currentTeam()->members()->get()->pluck('email');
if ($member_emails->contains($this->email)) {
return handleError(livewire: $this, customErrorMessage: "$this->email is already a member of ".currentTeam()->name.'.');
}
- $uuid = new Cuid2(32);
- $link = url('/').config('constants.invitation.link.base_url').$uuid;
+ $cuid2 = new Cuid2(32);
+ $link = url('/').config('constants.invitation.link.base_url').$cuid2;
$user = User::whereEmail($this->email)->first();
if (is_null($user)) {
$password = Str::password();
- $user = User::create([
+ $user = User::query()->create([
'name' => str($this->email)->before('@'),
'email' => $this->email,
'password' => Hash::make($password),
@@ -68,36 +70,34 @@ class InviteLink extends Component
$invitationValid = $invitation->isValid();
if ($invitationValid) {
return handleError(livewire: $this, customErrorMessage: "Pending invitation already exists for $this->email.");
- } else {
- $invitation->delete();
}
+ $invitation->delete();
}
- $invitation = TeamInvitation::firstOrCreate([
+ $invitation = TeamInvitation::query()->firstOrCreate([
'team_id' => currentTeam()->id,
- 'uuid' => $uuid,
+ 'uuid' => $cuid2,
'email' => $this->email,
'role' => $this->role,
'link' => $link,
'via' => $sendEmail ? 'email' : 'link',
]);
if ($sendEmail) {
- $mail = new MailMessage;
- $mail->view('emails.invitation-link', [
+ $mailMessage = new MailMessage;
+ $mailMessage->view('emails.invitation-link', [
'team' => currentTeam()->name,
'invitation_link' => $link,
]);
- $mail->subject('You have been invited to '.currentTeam()->name.' on '.config('app.name').'.');
- send_user_an_email($mail, $this->email);
+ $mailMessage->subject('You have been invited to '.currentTeam()->name.' on '.config('app.name').'.');
+ send_user_an_email($mailMessage, $this->email);
$this->dispatch('success', 'Invitation sent via email.');
$this->dispatch('refreshInvitations');
- return;
- } else {
- $this->dispatch('success', 'Invitation link generated.');
- $this->dispatch('refreshInvitations');
+ return null;
}
- } catch (\Throwable $e) {
+ $this->dispatch('success', 'Invitation link generated.');
+ $this->dispatch('refreshInvitations');
+ } catch (Throwable $e) {
$error_message = $e->getMessage();
if ($e->getCode() === '23505') {
$error_message = 'Invitation already sent.';
@@ -105,5 +105,7 @@ class InviteLink extends Component
return handleError(error: $e, livewire: $this, customErrorMessage: $error_message);
}
+
+ return null;
}
}
diff --git a/app/Livewire/Team/Member.php b/app/Livewire/Team/Member.php
index 890d640a0..463d20154 100644
--- a/app/Livewire/Team/Member.php
+++ b/app/Livewire/Team/Member.php
@@ -4,6 +4,7 @@ namespace App\Livewire\Team;
use App\Enums\Role;
use App\Models\User;
+use Exception;
use Illuminate\Support\Facades\Cache;
use Livewire\Component;
@@ -16,11 +17,11 @@ class Member extends Component
try {
if (Role::from(auth()->user()->role())->lt(Role::ADMIN)
|| Role::from($this->getMemberRole())->gt(auth()->user()->role())) {
- throw new \Exception('You are not authorized to perform this action.');
+ throw new Exception('You are not authorized to perform this action.');
}
$this->member->teams()->updateExistingPivot(currentTeam()->id, ['role' => Role::ADMIN->value]);
$this->dispatch('reloadWindow');
- } catch (\Exception $e) {
+ } catch (Exception $e) {
$this->dispatch('error', $e->getMessage());
}
}
@@ -30,11 +31,11 @@ class Member extends Component
try {
if (Role::from(auth()->user()->role())->lt(Role::OWNER)
|| Role::from($this->getMemberRole())->gt(auth()->user()->role())) {
- throw new \Exception('You are not authorized to perform this action.');
+ throw new Exception('You are not authorized to perform this action.');
}
$this->member->teams()->updateExistingPivot(currentTeam()->id, ['role' => Role::OWNER->value]);
$this->dispatch('reloadWindow');
- } catch (\Exception $e) {
+ } catch (Exception $e) {
$this->dispatch('error', $e->getMessage());
}
}
@@ -44,11 +45,11 @@ class Member extends Component
try {
if (Role::from(auth()->user()->role())->lt(Role::ADMIN)
|| Role::from($this->getMemberRole())->gt(auth()->user()->role())) {
- throw new \Exception('You are not authorized to perform this action.');
+ throw new Exception('You are not authorized to perform this action.');
}
$this->member->teams()->updateExistingPivot(currentTeam()->id, ['role' => Role::MEMBER->value]);
$this->dispatch('reloadWindow');
- } catch (\Exception $e) {
+ } catch (Exception $e) {
$this->dispatch('error', $e->getMessage());
}
}
@@ -58,7 +59,7 @@ class Member extends Component
try {
if (Role::from(auth()->user()->role())->lt(Role::ADMIN)
|| Role::from($this->getMemberRole())->gt(auth()->user()->role())) {
- throw new \Exception('You are not authorized to perform this action.');
+ throw new Exception('You are not authorized to perform this action.');
}
$this->member->teams()->detach(currentTeam());
Cache::forget("team:{$this->member->id}");
@@ -66,7 +67,7 @@ class Member extends Component
return $this->member->teams()->first();
});
$this->dispatch('reloadWindow');
- } catch (\Exception $e) {
+ } catch (Exception $e) {
$this->dispatch('error', $e->getMessage());
}
}
diff --git a/app/Livewire/Team/Storage/Show.php b/app/Livewire/Team/Storage/Show.php
index d3051afd4..f45c15c05 100644
--- a/app/Livewire/Team/Storage/Show.php
+++ b/app/Livewire/Team/Storage/Show.php
@@ -7,7 +7,7 @@ use Livewire\Component;
class Show extends Component
{
- public $storage = null;
+ public $storage;
public function mount()
{
diff --git a/app/Livewire/Terminal/Index.php b/app/Livewire/Terminal/Index.php
index a24a237c5..c087a5b03 100644
--- a/app/Livewire/Terminal/Index.php
+++ b/app/Livewire/Terminal/Index.php
@@ -3,6 +3,7 @@
namespace App\Livewire\Terminal;
use App\Models\Server;
+use Exception;
use Livewire\Attributes\On;
use Livewire\Component;
@@ -28,11 +29,13 @@ class Index extends Component
{
try {
$this->containers = $this->getAllActiveContainers();
- } catch (\Exception $e) {
+ } catch (Exception $e) {
return handleError($e, $this);
} finally {
$this->isLoadingContainers = false;
}
+
+ return null;
}
private function getAllActiveContainers()
@@ -43,8 +46,8 @@ class Index extends Component
}
return $server->loadAllContainers()->map(function ($container) use ($server) {
- $state = data_get_str($container, 'State')->lower();
- if ($state->contains('running')) {
+ $stringable = data_get_str($container, 'State')->lower();
+ if ($stringable->contains('running')) {
return [
'name' => data_get($container, 'Names'),
'connection_name' => data_get($container, 'Names'),
diff --git a/app/Livewire/Upgrade.php b/app/Livewire/Upgrade.php
index e50085c64..0bb3a548c 100644
--- a/app/Livewire/Upgrade.php
+++ b/app/Livewire/Upgrade.php
@@ -5,6 +5,7 @@ namespace App\Livewire;
use App\Actions\Server\UpdateCoolify;
use App\Models\InstanceSettings;
use Livewire\Component;
+use Throwable;
class Upgrade extends Component
{
@@ -26,21 +27,25 @@ class Upgrade extends Component
if (isDev()) {
$this->isUpgradeAvailable = true;
}
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
return handleError($e, $this);
}
+
+ return null;
}
public function upgrade()
{
try {
if ($this->updateInProgress) {
- return;
+ return null;
}
$this->updateInProgress = true;
UpdateCoolify::run(manual_update: true);
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
return handleError($e, $this);
}
+
+ return null;
}
}
diff --git a/app/Livewire/VerifyEmail.php b/app/Livewire/VerifyEmail.php
index fab3265b6..39aaa1f9c 100644
--- a/app/Livewire/VerifyEmail.php
+++ b/app/Livewire/VerifyEmail.php
@@ -3,6 +3,7 @@
namespace App\Livewire;
use DanHarrin\LivewireRateLimiting\WithRateLimiting;
+use Exception;
use Livewire\Component;
class VerifyEmail extends Component
@@ -15,9 +16,11 @@ class VerifyEmail extends Component
$this->rateLimit(1, 300);
auth()->user()->sendVerificationEmail();
$this->dispatch('success', 'Email verification link sent!');
- } catch (\Exception $e) {
+ } catch (Exception $e) {
return handleError($e, $this);
}
+
+ return null;
}
public function render()
diff --git a/app/Models/Application.php b/app/Models/Application.php
index 13f15468d..5b99cfbd0 100644
--- a/app/Models/Application.php
+++ b/app/Models/Application.php
@@ -3,6 +3,7 @@
namespace App\Models;
use App\Enums\ApplicationDeploymentStatus;
+use Exception;
use Illuminate\Database\Eloquent\Casts\Attribute;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Relations\HasMany;
@@ -147,17 +148,15 @@ class Application extends BaseModel
if ($application->isDirty('status')) {
$payload['last_online_at'] = now();
}
- if ($application->isDirty('custom_nginx_configuration')) {
- if ($application->custom_nginx_configuration === '') {
- $payload['custom_nginx_configuration'] = null;
- }
+ if ($application->isDirty('custom_nginx_configuration') && $application->custom_nginx_configuration === '') {
+ $payload['custom_nginx_configuration'] = null;
}
- if (count($payload) > 0) {
+ if ($payload !== []) {
$application->forceFill($payload);
}
});
static::created(function ($application) {
- ApplicationSetting::create([
+ ApplicationSetting::query()->create([
'application_id' => $application->id,
]);
$application->compose_parsing_version = self::$parserVersion;
@@ -182,12 +181,12 @@ class Application extends BaseModel
public static function ownedByCurrentTeamAPI(int $teamId)
{
- return Application::whereRelation('environment.project.team', 'id', $teamId)->orderBy('name');
+ return \App\Models\Application::query()->whereRelation('environment.project.team', 'id', $teamId)->orderBy('name');
}
public static function ownedByCurrentTeam()
{
- return Application::whereRelation('environment.project.team', 'id', currentTeam()->id)->orderBy('name');
+ return \App\Models\Application::query()->whereRelation('environment.project.team', 'id', currentTeam()->id)->orderBy('name');
}
public function getContainersToStop(bool $previewDeployments = false): array
@@ -207,11 +206,11 @@ class Application extends BaseModel
}
$startTime = time();
- while (count($processes) > 0) {
+ while ($processes !== []) {
$finishedProcesses = array_filter($processes, function ($process) {
return ! $process->running();
});
- foreach ($finishedProcesses as $containerName => $process) {
+ foreach (array_keys($finishedProcesses) as $containerName) {
unset($processes[$containerName]);
$this->removeContainer($containerName, $server);
}
@@ -252,17 +251,17 @@ class Application extends BaseModel
}
}
- public function delete_volumes(?Collection $persistentStorages)
+ public function delete_volumes(?Collection $collection)
{
if ($this->build_pack === 'dockercompose') {
$server = data_get($this, 'destination.server');
instant_remote_process(["cd {$this->dirOnServer()} && docker compose down -v"], $server, false);
} else {
- if ($persistentStorages->count() === 0) {
+ if ($collection->count() === 0) {
return;
}
$server = data_get($this, 'destination.server');
- foreach ($persistentStorages as $storage) {
+ foreach ($collection as $storage) {
instant_remote_process(["docker volume rm -f $storage->name"], $server, false);
}
}
@@ -289,20 +288,12 @@ class Application extends BaseModel
public function is_public_repository(): bool
{
- if (data_get($this, 'source.is_public')) {
- return true;
- }
-
- return false;
+ return (bool) data_get($this, 'source.is_public');
}
public function is_github_based(): bool
{
- if (data_get($this, 'source')) {
- return true;
- }
-
- return false;
+ return (bool) data_get($this, 'source');
}
public function isForceHttpsEnabled()
@@ -486,13 +477,12 @@ class Application extends BaseModel
set: function ($value) {
if (is_null($value) || $value === '') {
return '/Dockerfile';
- } else {
- if ($value !== '/') {
- return Str::start(Str::replaceEnd('/', '', $value), '/');
- }
-
- return Str::start($value, '/');
}
+ if ($value !== '/') {
+ return Str::start(Str::replaceEnd('/', '', $value), '/');
+ }
+
+ return Str::start($value, '/');
}
);
}
@@ -503,13 +493,12 @@ class Application extends BaseModel
set: function ($value) {
if (is_null($value) || $value === '') {
return '/docker-compose.yaml';
- } else {
- if ($value !== '/') {
- return Str::start(Str::replaceEnd('/', '', $value), '/');
- }
-
- return Str::start($value, '/');
}
+ if ($value !== '/') {
+ return Str::start(Str::replaceEnd('/', '', $value), '/');
+ }
+
+ return Str::start($value, '/');
}
);
}
@@ -580,37 +569,22 @@ class Application extends BaseModel
{
return Attribute::make(
set: function ($value) {
- if ($this->additional_servers->count() === 0) {
- if (str($value)->contains('(')) {
- $status = str($value)->before('(')->trim()->value();
- $health = str($value)->after('(')->before(')')->trim()->value() ?? 'unhealthy';
- } elseif (str($value)->contains(':')) {
- $status = str($value)->before(':')->trim()->value();
- $health = str($value)->after(':')->trim()->value() ?? 'unhealthy';
- } else {
- $status = $value;
- $health = 'unhealthy';
- }
-
- return "$status:$health";
+ if (str($value)->contains('(')) {
+ $status = str($value)->before('(')->trim()->value();
+ $health = str($value)->after('(')->before(')')->trim()->value() ?? 'unhealthy';
+ } elseif (str($value)->contains(':')) {
+ $status = str($value)->before(':')->trim()->value();
+ $health = str($value)->after(':')->trim()->value() ?? 'unhealthy';
} else {
- if (str($value)->contains('(')) {
- $status = str($value)->before('(')->trim()->value();
- $health = str($value)->after('(')->before(')')->trim()->value() ?? 'unhealthy';
- } elseif (str($value)->contains(':')) {
- $status = str($value)->before(':')->trim()->value();
- $health = str($value)->after(':')->trim()->value() ?? 'unhealthy';
- } else {
- $status = $value;
- $health = 'unhealthy';
- }
-
- return "$status:$health";
+ $status = $value;
+ $health = 'unhealthy';
}
+
+ return "$status:$health";
},
get: function ($value) {
if ($this->additional_servers->count() === 0) {
- //running (healthy)
+ // running (healthy)
if (str($value)->contains('(')) {
$status = str($value)->before('(')->trim()->value();
$health = str($value)->after('(')->before(')')->trim()->value() ?? 'unhealthy';
@@ -623,25 +597,24 @@ class Application extends BaseModel
}
return "$status:$health";
- } else {
- $complex_status = null;
- $complex_health = null;
- $complex_status = $main_server_status = str($value)->before(':')->value();
- $complex_health = $main_server_health = str($value)->after(':')->value() ?? 'unhealthy';
- $additional_servers_status = $this->additional_servers->pluck('pivot.status');
- foreach ($additional_servers_status as $status) {
- $server_status = str($status)->before(':')->value();
- $server_health = str($status)->after(':')->value() ?? 'unhealthy';
- if ($main_server_status !== $server_status) {
- $complex_status = 'degraded';
- }
- if ($main_server_health !== $server_health) {
- $complex_health = 'unhealthy';
- }
- }
-
- return "$complex_status:$complex_health";
}
+ $complex_status = null;
+ $complex_health = null;
+ $complex_status = $main_server_status = str($value)->before(':')->value();
+ $complex_health = $main_server_health = str($value)->after(':')->value() ?? 'unhealthy';
+ $additional_servers_status = $this->additional_servers->pluck('pivot.status');
+ foreach ($additional_servers_status as $status) {
+ $server_status = str($status)->before(':')->value();
+ $server_health = str($status)->after(':')->value() ?? 'unhealthy';
+ if ($main_server_status !== $server_status) {
+ $complex_status = 'degraded';
+ }
+ if ($main_server_health !== $server_health) {
+ $complex_health = 'unhealthy';
+ }
+ }
+
+ return "$complex_status:$complex_health";
},
);
}
@@ -790,27 +763,24 @@ class Application extends BaseModel
public function isDeploymentInprogress()
{
- $deployments = ApplicationDeploymentQueue::where('application_id', $this->id)->whereIn('status', [ApplicationDeploymentStatus::IN_PROGRESS, ApplicationDeploymentStatus::QUEUED])->count();
- if ($deployments > 0) {
- return true;
- }
+ $deployments = ApplicationDeploymentQueue::query()->where('application_id', $this->id)->whereIn('status', [ApplicationDeploymentStatus::IN_PROGRESS, ApplicationDeploymentStatus::QUEUED])->count();
- return false;
+ return $deployments > 0;
}
public function get_last_successful_deployment()
{
- return ApplicationDeploymentQueue::where('application_id', $this->id)->where('status', ApplicationDeploymentStatus::FINISHED)->where('pull_request_id', 0)->orderBy('created_at', 'desc')->first();
+ return ApplicationDeploymentQueue::query()->where('application_id', $this->id)->where('status', ApplicationDeploymentStatus::FINISHED)->where('pull_request_id', 0)->orderBy('created_at', 'desc')->first();
}
public function get_last_days_deployments()
{
- return ApplicationDeploymentQueue::where('application_id', $this->id)->where('created_at', '>=', now()->subDays(7))->orderBy('created_at', 'desc')->get();
+ return ApplicationDeploymentQueue::query()->where('application_id', $this->id)->where('created_at', '>=', now()->subDays(7))->orderBy('created_at', 'desc')->get();
}
public function deployments(int $skip = 0, int $take = 10)
{
- $deployments = ApplicationDeploymentQueue::where('application_id', $this->id)->orderBy('created_at', 'desc');
+ $deployments = ApplicationDeploymentQueue::query()->where('application_id', $this->id)->orderBy('created_at', 'desc');
$count = $deployments->count();
$deployments = $deployments->skip($skip)->take($take)->get();
@@ -822,25 +792,17 @@ class Application extends BaseModel
public function get_deployment(string $deployment_uuid)
{
- return Activity::where('subject_id', $this->id)->where('properties->type_uuid', '=', $deployment_uuid)->first();
+ return Activity::query()->where('subject_id', $this->id)->where('properties->type_uuid', '=', $deployment_uuid)->first();
}
public function isDeployable(): bool
{
- if ($this->settings->is_auto_deploy_enabled) {
- return true;
- }
-
- return false;
+ return (bool) $this->settings->is_auto_deploy_enabled;
}
public function isPRDeployable(): bool
{
- if ($this->settings->is_preview_deployments_enabled) {
- return true;
- }
-
- return false;
+ return (bool) $this->settings->is_preview_deployments_enabled;
}
public function deploymentType()
@@ -850,21 +812,17 @@ class Application extends BaseModel
}
if (data_get($this, 'private_key_id')) {
return 'deploy_key';
- } elseif (data_get($this, 'source')) {
- return 'source';
- } else {
- return 'other';
}
- throw new \Exception('No deployment type found');
+ if (data_get($this, 'source')) {
+ return 'source';
+ }
+
+ return 'other';
}
public function could_set_build_commands(): bool
{
- if ($this->build_pack === 'nixpacks') {
- return true;
- }
-
- return false;
+ return $this->build_pack === 'nixpacks';
}
public function git_based(): bool
@@ -872,20 +830,13 @@ class Application extends BaseModel
if ($this->dockerfile) {
return false;
}
- if ($this->build_pack === 'dockerimage') {
- return false;
- }
- return true;
+ return $this->build_pack !== 'dockerimage';
}
public function isHealthcheckDisabled(): bool
{
- if (data_get($this, 'health_check_enabled') === false) {
- return true;
- }
-
- return false;
+ return data_get($this, 'health_check_enabled') === false;
}
public function workdir()
@@ -918,14 +869,13 @@ class Application extends BaseModel
}
if ($oldConfigHash === $newConfigHash) {
return false;
- } else {
- if ($save) {
- $this->config_hash = $newConfigHash;
- $this->save();
- }
-
- return true;
}
+ if ($save) {
+ $this->config_hash = $newConfigHash;
+ $this->save();
+ }
+
+ return true;
}
public function customRepository()
@@ -957,7 +907,7 @@ class Application extends BaseModel
$git_clone_command = "{$git_clone_command} && cd {$baseDir} && GIT_SSH_COMMAND=\"ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null\" git submodule update --init --recursive";
}
if ($this->settings->is_git_lfs_enabled) {
- $git_clone_command = "{$git_clone_command} && cd {$baseDir} && GIT_SSH_COMMAND=\"ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null\" git lfs pull";
+ return "{$git_clone_command} && cd {$baseDir} && GIT_SSH_COMMAND=\"ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null\" git lfs pull";
}
return $git_clone_command;
@@ -973,7 +923,7 @@ class Application extends BaseModel
'is_accessible' => true,
'error' => null,
];
- } catch (\RuntimeException $ex) {
+ } catch (RuntimeException $ex) {
return [
'is_accessible' => false,
'error' => $ex->getMessage(),
@@ -1077,6 +1027,8 @@ class Application extends BaseModel
'fullRepoUrl' => $fullRepoUrl,
];
}
+
+ return null;
}
public function generateGitImportCommands(string $deployment_uuid, int $pull_request_id = 0, ?string $git_type = null, bool $exec_in_docker = true, bool $only_checkout = false, ?string $custom_base_dir = null, ?string $commit = null)
@@ -1098,7 +1050,7 @@ class Application extends BaseModel
$source_html_url_host = $url['host'];
$source_html_url_scheme = $url['scheme'];
- if ($this->source->getMorphClass() === \App\Models\GithubApp::class) {
+ if ($this->source->getMorphClass() === GithubApp::class) {
if ($this->source->is_public) {
$fullRepoUrl = "{$this->source->html_url}/{$customRepository}";
$git_clone_command = "{$git_clone_command} {$this->source->html_url}/{$customRepository} {$baseDir}";
@@ -1255,14 +1207,16 @@ class Application extends BaseModel
'fullRepoUrl' => $fullRepoUrl,
];
}
+
+ return null;
}
public function oldRawParser()
{
try {
$yaml = Yaml::parse($this->docker_compose_raw);
- } catch (\Exception $e) {
- throw new \Exception($e->getMessage());
+ } catch (Exception $e) {
+ throw new Exception($e->getMessage(), $e->getCode(), $e);
}
$services = data_get($yaml, 'services');
@@ -1270,24 +1224,27 @@ class Application extends BaseModel
$services = collect($services)->map(function ($service) use ($commands) {
$serviceVolumes = collect(data_get($service, 'volumes', []));
if ($serviceVolumes->count() > 0) {
- foreach ($serviceVolumes as $volume) {
+ foreach ($serviceVolumes as $serviceVolume) {
$workdir = $this->workdir();
$type = null;
$source = null;
- if (is_string($volume)) {
- $source = str($volume)->before(':');
+ if (is_string($serviceVolume)) {
+ $source = str($serviceVolume)->before(':');
if ($source->startsWith('./') || $source->startsWith('/') || $source->startsWith('~')) {
$type = str('bind');
}
- } elseif (is_array($volume)) {
- $type = data_get_str($volume, 'type');
- $source = data_get_str($volume, 'source');
+ } elseif (is_array($serviceVolume)) {
+ $type = data_get_str($serviceVolume, 'type');
+ $source = data_get_str($serviceVolume, 'source');
}
if ($type?->value() === 'bind') {
if ($source->value() === '/var/run/docker.sock') {
continue;
}
- if ($source->value() === '/tmp' || $source->value() === '/tmp/') {
+ if ($source->value() === '/tmp') {
+ continue;
+ }
+ if ($source->value() === '/tmp/') {
continue;
}
if ($source->startsWith('.')) {
@@ -1322,27 +1279,28 @@ class Application extends BaseModel
{
if ((int) $this->compose_parsing_version >= 3) {
return newParser($this, $pull_request_id, $preview_id);
- } elseif ($this->docker_compose_raw) {
- return parseDockerComposeFile(resource: $this, isNew: false, pull_request_id: $pull_request_id, preview_id: $preview_id);
- } else {
- return collect([]);
}
+ if ($this->docker_compose_raw) {
+ return parseDockerComposeFile(resource: $this, isNew: false, pull_request_id: $pull_request_id, preview_id: $preview_id);
+ }
+
+ return collect([]);
}
public function loadComposeFile($isInit = false)
{
$initialDockerComposeLocation = $this->docker_compose_location;
if ($isInit && $this->docker_compose_raw) {
- return;
+ return null;
}
- $uuid = new Cuid2;
- ['commands' => $cloneCommand] = $this->generateGitImportCommands(deployment_uuid: $uuid, only_checkout: true, exec_in_docker: false, custom_base_dir: '.');
+ $cuid2 = new Cuid2;
+ ['commands' => $cloneCommand] = $this->generateGitImportCommands(deployment_uuid: $cuid2, only_checkout: true, exec_in_docker: false, custom_base_dir: '.');
$workdir = rtrim($this->base_directory, '/');
$composeFile = $this->docker_compose_location;
$fileList = collect([".$workdir$composeFile"]);
- $gitRemoteStatus = $this->getGitRemoteStatus(deployment_uuid: $uuid);
+ $gitRemoteStatus = $this->getGitRemoteStatus(deployment_uuid: $cuid2);
if (! $gitRemoteStatus['is_accessible']) {
- throw new \RuntimeException("Failed to read Git source:\n\n{$gitRemoteStatus['error']}");
+ throw new RuntimeException("Failed to read Git source:\n\n{$gitRemoteStatus['error']}");
}
$getGitVersion = instant_remote_process(['git --version'], $this->destination->server, false);
$gitVersion = str($getGitVersion)->explode(' ')->last();
@@ -1353,7 +1311,7 @@ class Application extends BaseModel
$paths = collect();
$currentPath = '';
foreach ($parts as $part) {
- $currentPath .= ($currentPath ? '/' : '').$part;
+ $currentPath .= ($currentPath !== '' && $currentPath !== '0' ? '/' : '').$part;
if (str($currentPath)->isNotEmpty()) {
$paths->push($currentPath);
}
@@ -1362,9 +1320,9 @@ class Application extends BaseModel
return $paths;
})->flatten()->unique()->values();
$commands = collect([
- "rm -rf /tmp/{$uuid}",
- "mkdir -p /tmp/{$uuid}",
- "cd /tmp/{$uuid}",
+ "rm -rf /tmp/{$cuid2}",
+ "mkdir -p /tmp/{$cuid2}",
+ "cd /tmp/{$cuid2}",
$cloneCommand,
'git sparse-checkout init',
"git sparse-checkout set {$fileList->implode(' ')}",
@@ -1373,9 +1331,9 @@ class Application extends BaseModel
]);
} else {
$commands = collect([
- "rm -rf /tmp/{$uuid}",
- "mkdir -p /tmp/{$uuid}",
- "cd /tmp/{$uuid}",
+ "rm -rf /tmp/{$cuid2}",
+ "mkdir -p /tmp/{$cuid2}",
+ "cd /tmp/{$cuid2}",
$cloneCommand,
'git sparse-checkout init --cone',
"git sparse-checkout set {$fileList->implode(' ')}",
@@ -1385,22 +1343,22 @@ class Application extends BaseModel
}
try {
$composeFileContent = instant_remote_process($commands, $this->destination->server);
- } catch (\Exception $e) {
+ } catch (Exception $e) {
if (str($e->getMessage())->contains('No such file')) {
- throw new \RuntimeException("Docker Compose file not found at: $workdir$composeFile
Check if you used the right extension (.yaml or .yml) in the compose file name.");
+ throw new RuntimeException("Docker Compose file not found at: $workdir$composeFile
Check if you used the right extension (.yaml or .yml) in the compose file name.", $e->getCode(), $e);
}
if (str($e->getMessage())->contains('fatal: repository') && str($e->getMessage())->contains('does not exist')) {
if ($this->deploymentType() === 'deploy_key') {
- throw new \RuntimeException('Your deploy key does not have access to the repository. Please check your deploy key and try again.');
+ throw new RuntimeException('Your deploy key does not have access to the repository. Please check your deploy key and try again.', $e->getCode(), $e);
}
- throw new \RuntimeException('Repository does not exist. Please check your repository URL and try again.');
+ throw new RuntimeException('Repository does not exist. Please check your repository URL and try again.', $e->getCode(), $e);
}
- throw new \RuntimeException($e->getMessage());
+ throw new RuntimeException($e->getMessage(), $e->getCode(), $e);
} finally {
$this->docker_compose_location = $initialDockerComposeLocation;
$this->save();
$commands = collect([
- "rm -rf /tmp/{$uuid}",
+ "rm -rf /tmp/{$cuid2}",
]);
instant_remote_process($commands, $this->destination->server, false);
}
@@ -1416,11 +1374,7 @@ class Application extends BaseModel
$json = $json->filter(function ($value, $key) use ($diff) {
return ! in_array($key, $diff);
});
- if ($json) {
- $this->docker_compose_domains = json_encode($json);
- } else {
- $this->docker_compose_domains = null;
- }
+ $this->docker_compose_domains = $json ? json_encode($json) : null;
$this->save();
}
@@ -1428,16 +1382,15 @@ class Application extends BaseModel
'parsedServices' => $parsedServices,
'initialDockerComposeLocation' => $this->docker_compose_location,
];
- } else {
- throw new \RuntimeException("Docker Compose file not found at: $workdir$composeFile
Check if you used the right extension (.yaml or .yml) in the compose file name.");
}
+ throw new RuntimeException("Docker Compose file not found at: $workdir$composeFile
Check if you used the right extension (.yaml or .yml) in the compose file name.");
}
- public function parseContainerLabels(?ApplicationPreview $preview = null)
+ public function parseContainerLabels(?ApplicationPreview $applicationPreview = null)
{
$customLabels = data_get($this, 'custom_labels');
if (! $customLabels) {
- return;
+ return null;
}
if (base64_encode(base64_decode($customLabels, true)) !== $customLabels) {
$this->custom_labels = str($customLabels)->replace(',', "\n");
@@ -1445,7 +1398,7 @@ class Application extends BaseModel
}
$customLabels = base64_decode($this->custom_labels);
if (mb_detect_encoding($customLabels, 'ASCII', true) === false) {
- $customLabels = str(implode('|coolify|', generateLabelsApplication($this, $preview)))->replace('|coolify|', "\n");
+ $customLabels = str(implode('|coolify|', generateLabelsApplication($this, $applicationPreview)))->replace('|coolify|', "\n");
}
$this->custom_labels = base64_encode($customLabels);
$this->save();
@@ -1519,7 +1472,7 @@ class Application extends BaseModel
if (isset($healthcheckCommand) && str_contains($trimmedLine, '\\')) {
$healthcheckCommand .= ' '.trim($trimmedLine, '\\ ');
}
- if (isset($healthcheckCommand) && ! str_contains($trimmedLine, '\\') && ! empty($healthcheckCommand)) {
+ if (isset($healthcheckCommand) && ! str_contains($trimmedLine, '\\') && ($healthcheckCommand !== '' && $healthcheckCommand !== '0')) {
$healthcheckCommand .= ' '.$trimmedLine;
break;
}
@@ -1569,8 +1522,8 @@ class Application extends BaseModel
$template = $this->preview_url_template;
$host = $url->getHost();
$schema = $url->getScheme();
- $random = new Cuid2;
- $preview_fqdn = str_replace('{{random}}', $random, $template);
+ $cuid2 = new Cuid2;
+ $preview_fqdn = str_replace('{{random}}', $cuid2, $template);
$preview_fqdn = str_replace('{{domain}}', $host, $preview_fqdn);
$preview_fqdn = str_replace('{{pr_id}}', $pull_request_id, $preview_fqdn);
$preview_fqdn = "$schema://$preview_fqdn";
@@ -1583,7 +1536,7 @@ class Application extends BaseModel
public static function getDomainsByUuid(string $uuid): array
{
- $application = self::where('uuid', $uuid)->first();
+ $application = self::query()->where('uuid', $uuid)->first();
if ($application) {
return $application->fqdns;
@@ -1605,7 +1558,7 @@ class Application extends BaseModel
if ($error === 'Unauthorized') {
$error = 'Unauthorized, please check your metrics token or restart Sentinel to set a new token.';
}
- throw new \Exception($error);
+ throw new Exception($error);
}
$metrics = json_decode($metrics, true);
$parsedCollection = collect($metrics)->map(function ($metric) {
@@ -1614,6 +1567,8 @@ class Application extends BaseModel
return $parsedCollection->toArray();
}
+
+ return null;
}
public function getMemoryMetrics(int $mins = 5)
@@ -1629,7 +1584,7 @@ class Application extends BaseModel
if ($error === 'Unauthorized') {
$error = 'Unauthorized, please check your metrics token or restart Sentinel to set a new token.';
}
- throw new \Exception($error);
+ throw new Exception($error);
}
$metrics = json_decode($metrics, true);
$parsedCollection = collect($metrics)->map(function ($metric) {
@@ -1638,12 +1593,14 @@ class Application extends BaseModel
return $parsedCollection->toArray();
}
+
+ return null;
}
public function generateConfig($is_json = false)
{
$config = collect([]);
- if ($this->build_pack = 'nixpacks') {
+ if (($this->build_pack = 'nixpacks') !== '') {
$config = collect([
'build_pack' => 'nixpacks',
'docker_registry_image_name' => $this->docker_registry_image_name,
@@ -1677,7 +1634,7 @@ class Application extends BaseModel
'config' => 'required|json',
]);
if ($validator->fails()) {
- throw new \Exception('Invalid JSON format');
+ throw new Exception('Invalid JSON format');
}
$config = json_decode($config, true);
@@ -1689,7 +1646,7 @@ class Application extends BaseModel
'config.settings.is_static' => 'required|boolean',
]);
if ($deepValidator->fails()) {
- throw new \Exception('Invalid data');
+ throw new Exception('Invalid data');
}
$config = $deepValidator->validated()['config'];
@@ -1698,8 +1655,8 @@ class Application extends BaseModel
data_forget($config, 'settings');
$this->update($config);
$this->settings()->update($settings);
- } catch (\Exception $e) {
- throw new \Exception('Failed to update application settings');
+ } catch (Exception $e) {
+ throw new Exception('Failed to update application settings', $e->getCode(), $e);
}
}
}
diff --git a/app/Models/ApplicationDeploymentQueue.php b/app/Models/ApplicationDeploymentQueue.php
index c261c30c6..6029d0801 100644
--- a/app/Models/ApplicationDeploymentQueue.php
+++ b/app/Models/ApplicationDeploymentQueue.php
@@ -43,14 +43,14 @@ class ApplicationDeploymentQueue extends Model
public function application(): Attribute
{
return Attribute::make(
- get: fn () => Application::find($this->application_id),
+ get: fn () => Application::query()->find($this->application_id),
);
}
public function server(): Attribute
{
return Attribute::make(
- get: fn () => Server::find($this->server_id),
+ get: fn () => Server::query()->find($this->server_id),
);
}
diff --git a/app/Models/ApplicationPreview.php b/app/Models/ApplicationPreview.php
index bf2bf05bf..c06c32937 100644
--- a/app/Models/ApplicationPreview.php
+++ b/app/Models/ApplicationPreview.php
@@ -37,7 +37,7 @@ class ApplicationPreview extends BaseModel
public static function findPreviewByApplicationAndPullId(int $application_id, int $pull_request_id)
{
- return self::where('application_id', $application_id)->where('pull_request_id', $pull_request_id)->firstOrFail();
+ return self::query()->where('application_id', $application_id)->where('pull_request_id', $pull_request_id)->firstOrFail();
}
public function isRunning()
diff --git a/app/Models/DiscordNotificationSettings.php b/app/Models/DiscordNotificationSettings.php
index 619393ddc..edd392190 100644
--- a/app/Models/DiscordNotificationSettings.php
+++ b/app/Models/DiscordNotificationSettings.php
@@ -30,23 +30,6 @@ class DiscordNotificationSettings extends Model
'server_unreachable_discord_notifications',
];
- protected $casts = [
- 'discord_enabled' => 'boolean',
- 'discord_webhook_url' => 'encrypted',
-
- 'deployment_success_discord_notifications' => 'boolean',
- 'deployment_failure_discord_notifications' => 'boolean',
- 'status_change_discord_notifications' => 'boolean',
- 'backup_success_discord_notifications' => 'boolean',
- 'backup_failure_discord_notifications' => 'boolean',
- 'scheduled_task_success_discord_notifications' => 'boolean',
- 'scheduled_task_failure_discord_notifications' => 'boolean',
- 'docker_cleanup_discord_notifications' => 'boolean',
- 'server_disk_usage_discord_notifications' => 'boolean',
- 'server_reachable_discord_notifications' => 'boolean',
- 'server_unreachable_discord_notifications' => 'boolean',
- ];
-
public function team()
{
return $this->belongsTo(Team::class);
@@ -56,4 +39,24 @@ class DiscordNotificationSettings extends Model
{
return $this->discord_enabled;
}
+
+ protected function casts(): array
+ {
+ return [
+ 'discord_enabled' => 'boolean',
+ 'discord_webhook_url' => 'encrypted',
+
+ 'deployment_success_discord_notifications' => 'boolean',
+ 'deployment_failure_discord_notifications' => 'boolean',
+ 'status_change_discord_notifications' => 'boolean',
+ 'backup_success_discord_notifications' => 'boolean',
+ 'backup_failure_discord_notifications' => 'boolean',
+ 'scheduled_task_success_discord_notifications' => 'boolean',
+ 'scheduled_task_failure_discord_notifications' => 'boolean',
+ 'docker_cleanup_discord_notifications' => 'boolean',
+ 'server_disk_usage_discord_notifications' => 'boolean',
+ 'server_reachable_discord_notifications' => 'boolean',
+ 'server_unreachable_discord_notifications' => 'boolean',
+ ];
+ }
}
diff --git a/app/Models/EmailNotificationSettings.php b/app/Models/EmailNotificationSettings.php
index ae118986f..65e459e79 100644
--- a/app/Models/EmailNotificationSettings.php
+++ b/app/Models/EmailNotificationSettings.php
@@ -37,32 +37,6 @@ class EmailNotificationSettings extends Model
'server_disk_usage_email_notifications',
];
- protected $casts = [
- 'smtp_enabled' => 'boolean',
- 'smtp_from_address' => 'encrypted',
- 'smtp_from_name' => 'encrypted',
- 'smtp_recipients' => 'encrypted',
- 'smtp_host' => 'encrypted',
- 'smtp_port' => 'integer',
- 'smtp_username' => 'encrypted',
- 'smtp_password' => 'encrypted',
- 'smtp_timeout' => 'integer',
-
- 'resend_enabled' => 'boolean',
- 'resend_api_key' => 'encrypted',
-
- 'use_instance_email_settings' => 'boolean',
-
- 'deployment_success_email_notifications' => 'boolean',
- 'deployment_failure_email_notifications' => 'boolean',
- 'status_change_email_notifications' => 'boolean',
- 'backup_success_email_notifications' => 'boolean',
- 'backup_failure_email_notifications' => 'boolean',
- 'scheduled_task_success_email_notifications' => 'boolean',
- 'scheduled_task_failure_email_notifications' => 'boolean',
- 'server_disk_usage_email_notifications' => 'boolean',
- ];
-
public function team()
{
return $this->belongsTo(Team::class);
@@ -76,4 +50,33 @@ class EmailNotificationSettings extends Model
return $this->smtp_enabled || $this->resend_enabled || $this->use_instance_email_settings;
}
+
+ protected function casts(): array
+ {
+ return [
+ 'smtp_enabled' => 'boolean',
+ 'smtp_from_address' => 'encrypted',
+ 'smtp_from_name' => 'encrypted',
+ 'smtp_recipients' => 'encrypted',
+ 'smtp_host' => 'encrypted',
+ 'smtp_port' => 'integer',
+ 'smtp_username' => 'encrypted',
+ 'smtp_password' => 'encrypted',
+ 'smtp_timeout' => 'integer',
+
+ 'resend_enabled' => 'boolean',
+ 'resend_api_key' => 'encrypted',
+
+ 'use_instance_email_settings' => 'boolean',
+
+ 'deployment_success_email_notifications' => 'boolean',
+ 'deployment_failure_email_notifications' => 'boolean',
+ 'status_change_email_notifications' => 'boolean',
+ 'backup_success_email_notifications' => 'boolean',
+ 'backup_failure_email_notifications' => 'boolean',
+ 'scheduled_task_success_email_notifications' => 'boolean',
+ 'scheduled_task_failure_email_notifications' => 'boolean',
+ 'server_disk_usage_email_notifications' => 'boolean',
+ ];
+ }
}
diff --git a/app/Models/EnvironmentVariable.php b/app/Models/EnvironmentVariable.php
index 507ff0d7e..2dd401970 100644
--- a/app/Models/EnvironmentVariable.php
+++ b/app/Models/EnvironmentVariable.php
@@ -55,30 +55,30 @@ class EnvironmentVariable extends Model
}
});
- static::created(function (EnvironmentVariable $environment_variable) {
- if ($environment_variable->resourceable_type === Application::class && ! $environment_variable->is_preview) {
- $found = ModelsEnvironmentVariable::where('key', $environment_variable->key)
+ static::created(function (EnvironmentVariable $environmentVariable) {
+ if ($environmentVariable->resourceable_type === Application::class && ! $environmentVariable->is_preview) {
+ $found = ModelsEnvironmentVariable::where('key', $environmentVariable->key)
->where('resourceable_type', Application::class)
- ->where('resourceable_id', $environment_variable->resourceable_id)
+ ->where('resourceable_id', $environmentVariable->resourceable_id)
->where('is_preview', true)
->first();
if (! $found) {
- $application = Application::find($environment_variable->resourceable_id);
+ $application = Application::query()->find($environmentVariable->resourceable_id);
if ($application && $application->build_pack !== 'dockerfile') {
ModelsEnvironmentVariable::create([
- 'key' => $environment_variable->key,
- 'value' => $environment_variable->value,
- 'is_build_time' => $environment_variable->is_build_time,
- 'is_multiline' => $environment_variable->is_multiline ?? false,
+ 'key' => $environmentVariable->key,
+ 'value' => $environmentVariable->value,
+ 'is_build_time' => $environmentVariable->is_build_time,
+ 'is_multiline' => $environmentVariable->is_multiline ?? false,
'resourceable_type' => Application::class,
- 'resourceable_id' => $environment_variable->resourceable_id,
+ 'resourceable_id' => $environmentVariable->resourceable_id,
'is_preview' => true,
]);
}
}
}
- $environment_variable->update([
+ $environmentVariable->update([
'version' => config('constants.coolify.version'),
]);
});
@@ -143,18 +143,15 @@ class EnvironmentVariable extends Model
return Attribute::make(
get: function () {
$type = str($this->value)->after('{{')->before('.')->value;
- if (str($this->value)->startsWith('{{'.$type) && str($this->value)->endsWith('}}')) {
- return true;
- }
- return false;
+ return str($this->value)->startsWith('{{'.$type) && str($this->value)->endsWith('}}');
}
);
}
private function get_real_environment_variables(?string $environment_variable = null, $resource = null)
{
- if ((is_null($environment_variable) && $environment_variable === '') || is_null($resource)) {
+ if (is_null($resource)) {
return null;
}
$environment_variable = trim($environment_variable);
@@ -162,12 +159,12 @@ class EnvironmentVariable extends Model
if ($sharedEnvsFound->isEmpty()) {
return $environment_variable;
}
- foreach ($sharedEnvsFound as $sharedEnv) {
- $type = str($sharedEnv)->match('/(.*?)\./');
+ foreach ($sharedEnvsFound as $sharedEnvFound) {
+ $type = str($sharedEnvFound)->match('/(.*?)\./');
if (! collect(SHARED_VARIABLE_TYPES)->contains($type)) {
continue;
}
- $variable = str($sharedEnv)->match('/\.(.*)/');
+ $variable = str($sharedEnvFound)->match('/\.(.*)/');
if ($type->value() === 'environment') {
$id = $resource->environment->id;
} elseif ($type->value() === 'project') {
@@ -178,9 +175,9 @@ class EnvironmentVariable extends Model
if (is_null($id)) {
continue;
}
- $environment_variable_found = SharedEnvironmentVariable::where('type', $type)->where('key', $variable)->where('team_id', $resource->team()->id)->where("{$type}_id", $id)->first();
+ $environment_variable_found = SharedEnvironmentVariable::query()->where('type', $type)->where('key', $variable)->where('team_id', $resource->team()->id)->where("{$type}_id", $id)->first();
if ($environment_variable_found) {
- $environment_variable = str($environment_variable)->replace("{{{$sharedEnv}}}", $environment_variable_found->value);
+ $environment_variable = str($environment_variable)->replace("{{{$sharedEnvFound}}}", $environment_variable_found->value);
}
}
diff --git a/app/Models/GithubApp.php b/app/Models/GithubApp.php
index 0b0e93b12..f21597dfd 100644
--- a/app/Models/GithubApp.php
+++ b/app/Models/GithubApp.php
@@ -2,6 +2,7 @@
namespace App\Models;
+use Exception;
use Illuminate\Database\Eloquent\Casts\Attribute;
class GithubApp extends BaseModel
@@ -10,11 +11,6 @@ class GithubApp extends BaseModel
protected $appends = ['type'];
- protected $casts = [
- 'is_public' => 'boolean',
- 'type' => 'string',
- ];
-
protected $hidden = [
'client_secret',
'webhook_secret',
@@ -22,12 +18,12 @@ class GithubApp extends BaseModel
protected static function booted(): void
{
- static::deleting(function (GithubApp $github_app) {
- $applications_count = Application::where('source_id', $github_app->id)->count();
+ static::deleting(function (GithubApp $githubApp) {
+ $applications_count = Application::query()->where('source_id', $githubApp->id)->count();
if ($applications_count > 0) {
- throw new \Exception('You cannot delete this GitHub App because it is in use by '.$applications_count.' application(s). Delete them first.');
+ throw new Exception('You cannot delete this GitHub App because it is in use by '.$applications_count.' application(s). Delete them first.');
}
- $github_app->privateKey()->delete();
+ $githubApp->privateKey()->delete();
});
}
@@ -71,4 +67,12 @@ class GithubApp extends BaseModel
},
);
}
+
+ protected function casts(): array
+ {
+ return [
+ 'is_public' => 'boolean',
+ 'type' => 'string',
+ ];
+ }
}
diff --git a/app/Models/InstanceSettings.php b/app/Models/InstanceSettings.php
index 5b89bb401..58b243567 100644
--- a/app/Models/InstanceSettings.php
+++ b/app/Models/InstanceSettings.php
@@ -15,32 +15,11 @@ class InstanceSettings extends Model implements SendsEmail
protected $guarded = [];
- protected $casts = [
- 'smtp_enabled' => 'boolean',
- 'smtp_from_address' => 'encrypted',
- 'smtp_from_name' => 'encrypted',
- 'smtp_recipients' => 'encrypted',
- 'smtp_host' => 'encrypted',
- 'smtp_port' => 'integer',
- 'smtp_username' => 'encrypted',
- 'smtp_password' => 'encrypted',
- 'smtp_timeout' => 'integer',
-
- 'resend_enabled' => 'boolean',
- 'resend_api_key' => 'encrypted',
-
- 'allowed_ip_ranges' => 'array',
- 'is_auto_update_enabled' => 'boolean',
- 'auto_update_frequency' => 'string',
- 'update_check_frequency' => 'string',
- 'sentinel_token' => 'encrypted',
- ];
-
protected static function booted(): void
{
static::updated(function ($settings) {
if ($settings->isDirty('helper_version')) {
- Server::chunkById(100, function ($servers) {
+ Server::query()->chunkById(100, function ($servers) {
foreach ($servers as $server) {
PullHelperImageJob::dispatch($server);
}
@@ -89,7 +68,7 @@ class InstanceSettings extends Model implements SendsEmail
public static function get()
{
- return InstanceSettings::findOrFail(0);
+ return \App\Models\InstanceSettings::query()->findOrFail(0);
}
public function getRecipients($notification)
@@ -124,4 +103,27 @@ class InstanceSettings extends Model implements SendsEmail
// }
// );
// }
+ protected function casts(): array
+ {
+ return [
+ 'smtp_enabled' => 'boolean',
+ 'smtp_from_address' => 'encrypted',
+ 'smtp_from_name' => 'encrypted',
+ 'smtp_recipients' => 'encrypted',
+ 'smtp_host' => 'encrypted',
+ 'smtp_port' => 'integer',
+ 'smtp_username' => 'encrypted',
+ 'smtp_password' => 'encrypted',
+ 'smtp_timeout' => 'integer',
+
+ 'resend_enabled' => 'boolean',
+ 'resend_api_key' => 'encrypted',
+
+ 'allowed_ip_ranges' => 'array',
+ 'is_auto_update_enabled' => 'boolean',
+ 'auto_update_frequency' => 'string',
+ 'update_check_frequency' => 'string',
+ 'sentinel_token' => 'encrypted',
+ ];
+ }
}
diff --git a/app/Models/LocalFileVolume.php b/app/Models/LocalFileVolume.php
index 2c223be77..c5b5a0870 100644
--- a/app/Models/LocalFileVolume.php
+++ b/app/Models/LocalFileVolume.php
@@ -3,6 +3,8 @@
namespace App\Models;
use App\Events\FileStorageChanged;
+use App\Jobs\ServerStorageSaveJob;
+use Exception;
use Illuminate\Database\Eloquent\Factories\HasFactory;
class LocalFileVolume extends BaseModel
@@ -13,9 +15,9 @@ class LocalFileVolume extends BaseModel
protected static function booted()
{
- static::created(function (LocalFileVolume $fileVolume) {
- $fileVolume->load(['service']);
- dispatch(new \App\Jobs\ServerStorageSaveJob($fileVolume));
+ static::created(function (LocalFileVolume $localFileVolume) {
+ $localFileVolume->load(['service']);
+ dispatch(new ServerStorageSaveJob($localFileVolume));
});
}
@@ -35,7 +37,7 @@ class LocalFileVolume extends BaseModel
$workdir = $this->resource->workdir();
$server = $this->resource->destination->server;
}
- $commands = collect([]);
+ collect([]);
$path = data_get_str($this, 'fs_path');
if ($path->startsWith('.')) {
$path = $path->after('.');
@@ -80,6 +82,8 @@ class LocalFileVolume extends BaseModel
if ($commands->count() > 0) {
return instant_remote_process($commands, $server);
}
+
+ return null;
}
public function saveStorageOnServer()
@@ -118,12 +122,13 @@ class LocalFileVolume extends BaseModel
$this->content = $content;
$this->save();
FileStorageChanged::dispatch(data_get($server, 'team_id'));
- throw new \Exception('The following file is a file on the server, but you are trying to mark it as a directory. Please delete the file on the server or mark it as directory.');
- } elseif ($isDir === 'OK' && ! $this->is_directory) {
+ throw new Exception('The following file is a file on the server, but you are trying to mark it as a directory. Please delete the file on the server or mark it as directory.');
+ }
+ if ($isDir === 'OK' && ! $this->is_directory) {
if ($path === '/' || $path === '.' || $path === '..' || $path === '' || str($path)->isEmpty() || is_null($path)) {
$this->is_directory = true;
$this->save();
- throw new \Exception('The following file is a directory on the server, but you are trying to mark it as a file.
Please delete the directory on the server or mark it as directory.');
+ throw new Exception('The following file is a directory on the server, but you are trying to mark it as a file.
Please delete the directory on the server or mark it as directory.');
}
instant_remote_process([
"rm -fr $path",
diff --git a/app/Models/LocalPersistentVolume.php b/app/Models/LocalPersistentVolume.php
index 68e476365..b3ed3c244 100644
--- a/app/Models/LocalPersistentVolume.php
+++ b/app/Models/LocalPersistentVolume.php
@@ -49,9 +49,9 @@ class LocalPersistentVolume extends Model
set: function (?string $value) {
if ($value) {
return str($value)->trim()->start('/')->value;
- } else {
- return $value;
}
+
+ return $value;
}
);
}
diff --git a/app/Models/OauthSetting.php b/app/Models/OauthSetting.php
index 3d82e89f2..eb72d862c 100644
--- a/app/Models/OauthSetting.php
+++ b/app/Models/OauthSetting.php
@@ -16,8 +16,8 @@ class OauthSetting extends Model
protected function clientSecret(): Attribute
{
return Attribute::make(
- get: fn (?string $value) => empty($value) ? null : Crypt::decryptString($value),
- set: fn (?string $value) => empty($value) ? null : Crypt::encryptString($value),
+ get: fn (?string $value) => $value === null || $value === '' || $value === '0' ? null : Crypt::decryptString($value),
+ set: fn (?string $value) => $value === null || $value === '' || $value === '0' ? null : Crypt::encryptString($value),
);
}
diff --git a/app/Models/PrivateKey.php b/app/Models/PrivateKey.php
index 80015d87f..228fb1621 100644
--- a/app/Models/PrivateKey.php
+++ b/app/Models/PrivateKey.php
@@ -3,10 +3,12 @@
namespace App\Models;
use DanHarrin\LivewireRateLimiting\WithRateLimiting;
+use Exception;
use Illuminate\Support\Facades\Storage;
use Illuminate\Validation\ValidationException;
use OpenApi\Attributes as OA;
use phpseclib3\Crypt\PublicKeyLoader;
+use Throwable;
#[OA\Schema(
description: 'Private Key model',
@@ -36,10 +38,6 @@ class PrivateKey extends BaseModel
'fingerprint',
];
- protected $casts = [
- 'private_key' => 'encrypted',
- ];
-
protected static function booted()
{
static::saving(function ($key) {
@@ -82,7 +80,7 @@ class PrivateKey extends BaseModel
PublicKeyLoader::load($privateKey);
return true;
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
return false;
}
}
@@ -111,8 +109,8 @@ class PrivateKey extends BaseModel
'private_key' => $keyPair['private'],
'public_key' => $keyPair['public'],
];
- } catch (\Throwable $e) {
- throw new \Exception("Failed to generate new {$type} key: ".$e->getMessage());
+ } catch (Throwable $e) {
+ throw new Exception("Failed to generate new {$type} key: ".$e->getMessage(), $e->getCode(), $e);
}
}
@@ -122,7 +120,7 @@ class PrivateKey extends BaseModel
$key = PublicKeyLoader::load($privateKey);
return $key->getPublicKey()->toString('OpenSSH', ['comment' => '']);
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
return null;
}
}
@@ -187,10 +185,17 @@ class PrivateKey extends BaseModel
public function isInUse()
{
- return $this->servers()->exists()
- || $this->applications()->exists()
- || $this->githubApps()->exists()
- || $this->gitlabApps()->exists();
+ if ($this->servers()->exists()) {
+ return true;
+ }
+ if ($this->applications()->exists()) {
+ return true;
+ }
+ if ($this->githubApps()->exists()) {
+ return true;
+ }
+
+ return (bool) $this->gitlabApps()->exists();
}
public function safeDelete()
@@ -211,22 +216,22 @@ class PrivateKey extends BaseModel
$publicKey = $key->getPublicKey();
return $publicKey->getFingerprint('sha256');
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
return null;
}
}
private static function fingerprintExists($fingerprint, $excludeId = null)
{
- $query = self::query()
+ $builder = self::query()
->where('fingerprint', $fingerprint)
->where('id', '!=', $excludeId);
if (currentTeam()) {
- $query->where('team_id', currentTeam()->id);
+ $builder->where('team_id', currentTeam()->id);
}
- return $query->exists();
+ return $builder->exists();
}
public static function cleanupUnusedKeys()
@@ -235,4 +240,11 @@ class PrivateKey extends BaseModel
$privateKey->safeDelete();
});
}
+
+ protected function casts(): array
+ {
+ return [
+ 'private_key' => 'encrypted',
+ ];
+ }
}
diff --git a/app/Models/Project.php b/app/Models/Project.php
index 3b50b9b33..d47da2b23 100644
--- a/app/Models/Project.php
+++ b/app/Models/Project.php
@@ -33,10 +33,10 @@ class Project extends BaseModel
protected static function booted()
{
static::created(function ($project) {
- ProjectSetting::create([
+ ProjectSetting::query()->create([
'project_id' => $project->id,
]);
- Environment::create([
+ Environment::query()->create([
'name' => 'production',
'project_id' => $project->id,
'uuid' => (string) new Cuid2,
diff --git a/app/Models/PushoverNotificationSettings.php b/app/Models/PushoverNotificationSettings.php
index e3191dcc3..4179057d6 100644
--- a/app/Models/PushoverNotificationSettings.php
+++ b/app/Models/PushoverNotificationSettings.php
@@ -31,24 +31,6 @@ class PushoverNotificationSettings extends Model
'server_unreachable_pushover_notifications',
];
- protected $casts = [
- 'pushover_enabled' => 'boolean',
- 'pushover_user_key' => 'encrypted',
- 'pushover_api_token' => 'encrypted',
-
- 'deployment_success_pushover_notifications' => 'boolean',
- 'deployment_failure_pushover_notifications' => 'boolean',
- 'status_change_pushover_notifications' => 'boolean',
- 'backup_success_pushover_notifications' => 'boolean',
- 'backup_failure_pushover_notifications' => 'boolean',
- 'scheduled_task_success_pushover_notifications' => 'boolean',
- 'scheduled_task_failure_pushover_notifications' => 'boolean',
- 'docker_cleanup_pushover_notifications' => 'boolean',
- 'server_disk_usage_pushover_notifications' => 'boolean',
- 'server_reachable_pushover_notifications' => 'boolean',
- 'server_unreachable_pushover_notifications' => 'boolean',
- ];
-
public function team()
{
return $this->belongsTo(Team::class);
@@ -58,4 +40,25 @@ class PushoverNotificationSettings extends Model
{
return $this->pushover_enabled;
}
+
+ protected function casts(): array
+ {
+ return [
+ 'pushover_enabled' => 'boolean',
+ 'pushover_user_key' => 'encrypted',
+ 'pushover_api_token' => 'encrypted',
+
+ 'deployment_success_pushover_notifications' => 'boolean',
+ 'deployment_failure_pushover_notifications' => 'boolean',
+ 'status_change_pushover_notifications' => 'boolean',
+ 'backup_success_pushover_notifications' => 'boolean',
+ 'backup_failure_pushover_notifications' => 'boolean',
+ 'scheduled_task_success_pushover_notifications' => 'boolean',
+ 'scheduled_task_failure_pushover_notifications' => 'boolean',
+ 'docker_cleanup_pushover_notifications' => 'boolean',
+ 'server_disk_usage_pushover_notifications' => 'boolean',
+ 'server_reachable_pushover_notifications' => 'boolean',
+ 'server_unreachable_pushover_notifications' => 'boolean',
+ ];
+ }
}
diff --git a/app/Models/S3Storage.php b/app/Models/S3Storage.php
index f1247e6f7..c87b7f200 100644
--- a/app/Models/S3Storage.php
+++ b/app/Models/S3Storage.php
@@ -5,6 +5,7 @@ namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Notifications\Messages\MailMessage;
use Illuminate\Support\Facades\Storage;
+use Throwable;
class S3Storage extends BaseModel
{
@@ -12,12 +13,6 @@ class S3Storage extends BaseModel
protected $guarded = [];
- protected $casts = [
- 'is_usable' => 'boolean',
- 'key' => 'encrypted',
- 'secret' => 'encrypted',
- ];
-
public static function ownedByCurrentTeam(array $select = ['*'])
{
$selectArray = collect($select)->concat(['id']);
@@ -57,12 +52,12 @@ class S3Storage extends BaseModel
Storage::disk('custom-s3')->files();
$this->unusable_email_sent = false;
$this->is_usable = true;
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
$this->is_usable = false;
if ($this->unusable_email_sent === false && is_transactional_emails_enabled()) {
- $mail = new MailMessage;
- $mail->subject('Coolify: S3 Storage Connection Error');
- $mail->view('emails.s3-connection-error', ['name' => $this->name, 'reason' => $e->getMessage(), 'url' => route('storage.show', ['storage_uuid' => $this->uuid])]);
+ $mailMessage = new MailMessage;
+ $mailMessage->subject('Coolify: S3 Storage Connection Error');
+ $mailMessage->view('emails.s3-connection-error', ['name' => $this->name, 'reason' => $e->getMessage(), 'url' => route('storage.show', ['storage_uuid' => $this->uuid])]);
$users = collect([]);
$members = $this->team->members()->get();
foreach ($members as $user) {
@@ -71,7 +66,7 @@ class S3Storage extends BaseModel
}
}
foreach ($users as $user) {
- send_user_an_email($mail, $user->email);
+ send_user_an_email($mailMessage, $user->email);
}
$this->unusable_email_sent = true;
}
@@ -83,4 +78,13 @@ class S3Storage extends BaseModel
}
}
}
+
+ protected function casts(): array
+ {
+ return [
+ 'is_usable' => 'boolean',
+ 'key' => 'encrypted',
+ 'secret' => 'encrypted',
+ ];
+ }
}
diff --git a/app/Models/Server.php b/app/Models/Server.php
index 8d11e23a9..484760096 100644
--- a/app/Models/Server.php
+++ b/app/Models/Server.php
@@ -10,6 +10,7 @@ use App\Events\ServerReachabilityChanged;
use App\Jobs\CheckAndStartSentinelJob;
use App\Notifications\Server\Reachable;
use App\Notifications\Server\Unreachable;
+use Exception;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\Casts\Attribute;
use Illuminate\Database\Eloquent\Factories\HasFactory;
@@ -19,11 +20,13 @@ use Illuminate\Support\Collection;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Storage;
use Illuminate\Support\Stringable;
+use Log;
use OpenApi\Attributes as OA;
use Spatie\SchemalessAttributes\Casts\SchemalessAttributes;
use Spatie\SchemalessAttributes\SchemalessAttributesTrait;
use Spatie\Url\Url;
use Symfony\Component\Yaml\Yaml;
+use Throwable;
#[OA\Schema(
description: 'Server model',
@@ -72,39 +75,37 @@ class Server extends BaseModel
}
});
static::created(function ($server) {
- ServerSetting::create([
+ ServerSetting::query()->create([
'server_id' => $server->id,
]);
if ($server->id === 0) {
if ($server->isSwarm()) {
- SwarmDocker::create([
+ SwarmDocker::query()->create([
'id' => 0,
'name' => 'coolify',
'network' => 'coolify-overlay',
'server_id' => $server->id,
]);
} else {
- StandaloneDocker::create([
+ StandaloneDocker::query()->create([
'id' => 0,
'name' => 'coolify',
'network' => 'coolify',
'server_id' => $server->id,
]);
}
+ } elseif ($server->isSwarm()) {
+ SwarmDocker::query()->create([
+ 'name' => 'coolify-overlay',
+ 'network' => 'coolify-overlay',
+ 'server_id' => $server->id,
+ ]);
} else {
- if ($server->isSwarm()) {
- SwarmDocker::create([
- 'name' => 'coolify-overlay',
- 'network' => 'coolify-overlay',
- 'server_id' => $server->id,
- ]);
- } else {
- StandaloneDocker::create([
- 'name' => 'coolify',
- 'network' => 'coolify',
- 'server_id' => $server->id,
- ]);
- }
+ StandaloneDocker::query()->create([
+ 'name' => 'coolify',
+ 'network' => 'coolify',
+ 'server_id' => $server->id,
+ ]);
}
if (! isset($server->proxy->redirect_enabled)) {
$server->proxy->redirect_enabled = true;
@@ -124,17 +125,6 @@ class Server extends BaseModel
});
}
- protected $casts = [
- 'proxy' => SchemalessAttributes::class,
- 'logdrain_axiom_api_key' => 'encrypted',
- 'logdrain_newrelic_license_key' => 'encrypted',
- 'delete_unused_volumes' => 'boolean',
- 'delete_unused_networks' => 'boolean',
- 'unreachable_notification_sent' => 'boolean',
- 'is_build_server' => 'boolean',
- 'force_disabled' => 'boolean',
- ];
-
protected $schemalessAttributes = [
'proxy',
];
@@ -202,10 +192,8 @@ class Server extends BaseModel
$proxy_type = $this->proxyType();
$redirect_enabled = $this->proxy->redirect_enabled ?? true;
$redirect_url = $this->proxy->redirect_url;
- if (isDev()) {
- if ($proxy_type === ProxyTypes::CADDY->value) {
- $dynamic_conf_path = '/data/coolify/proxy/caddy/dynamic';
- }
+ if (isDev() && $proxy_type === ProxyTypes::CADDY->value) {
+ $dynamic_conf_path = '/data/coolify/proxy/caddy/dynamic';
}
if ($proxy_type === ProxyTypes::TRAEFIK->value) {
$default_redirect_file = "$dynamic_conf_path/default_redirect_503.yaml";
@@ -223,15 +211,11 @@ class Server extends BaseModel
instant_remote_process(["rm -f $default_redirect_file"], $this);
} else {
if ($proxy_type === ProxyTypes::CADDY->value) {
- if (filled($redirect_url)) {
- $conf = ":80, :443 {
+ $conf = filled($redirect_url) ? ":80, :443 {
redir $redirect_url
-}";
- } else {
- $conf = ':80, :443 {
+}" : ':80, :443 {
respond 503
}';
- }
} elseif ($proxy_type === ProxyTypes::TRAEFIK->value) {
$dynamic_conf = [
'http' => [
@@ -474,17 +458,9 @@ $schema://$host {
if ($proxyType === ProxyTypes::TRAEFIK->value) {
// Do nothing
} elseif ($proxyType === ProxyTypes::CADDY->value) {
- if (isDev()) {
- $proxy_path = '/var/lib/docker/volumes/coolify_dev_coolify_data/_data/proxy/caddy';
- } else {
- $proxy_path = $proxy_path.'/caddy';
- }
+ $proxy_path = isDev() ? '/var/lib/docker/volumes/coolify_dev_coolify_data/_data/proxy/caddy' : $proxy_path.'/caddy';
} elseif ($proxyType === ProxyTypes::NGINX->value) {
- if (isDev()) {
- $proxy_path = '/var/lib/docker/volumes/coolify_dev_coolify_data/_data/proxy/nginx';
- } else {
- $proxy_path = $proxy_path.'/nginx';
- }
+ $proxy_path = isDev() ? '/var/lib/docker/volumes/coolify_dev_coolify_data/_data/proxy/nginx' : $proxy_path.'/nginx';
}
return $proxy_path;
@@ -545,7 +521,7 @@ $schema://$host {
{
$wait = $this->settings->sentinel_push_interval_seconds * 3;
if ($wait < 120) {
- $wait = 120;
+ return 120;
}
return $wait;
@@ -587,7 +563,7 @@ $schema://$host {
if ($error === 'Unauthorized') {
$error = 'Unauthorized, please check your metrics token or restart Sentinel to set a new token.';
}
- throw new \Exception($error);
+ throw new Exception($error);
}
$cpu = json_decode($cpu, true);
@@ -595,6 +571,8 @@ $schema://$host {
return [(int) $metric['time'], (float) $metric['percent']];
});
}
+
+ return null;
}
public function getMemoryMetrics(int $mins = 5)
@@ -608,7 +586,7 @@ $schema://$host {
if ($error === 'Unauthorized') {
$error = 'Unauthorized, please check your metrics token or restart Sentinel to set a new token.';
}
- throw new \Exception($error);
+ throw new Exception($error);
}
$memory = json_decode($memory, true);
$parsedCollection = collect($memory)->map(function ($metric) {
@@ -619,6 +597,8 @@ $schema://$host {
return $parsedCollection->toArray();
}
+
+ return null;
}
public function getDiskUsage(): ?string
@@ -661,11 +641,11 @@ $schema://$host {
$containerReplicates = instant_remote_process(["docker service ls --format '{{json .}}'"], $this, false);
if ($containerReplicates) {
$containerReplicates = format_docker_command_output_to_json($containerReplicates);
- foreach ($containerReplicates as $containerReplica) {
- $name = data_get($containerReplica, 'Name');
- $containers = $containers->map(function ($container) use ($name, $containerReplica) {
+ foreach ($containerReplicates as $containerReplicate) {
+ $name = data_get($containerReplicate, 'Name');
+ $containers = $containers->map(function ($container) use ($name, $containerReplicate) {
if (data_get($container, 'Spec.Name') === $name) {
- $replicas = data_get($containerReplica, 'Replicas');
+ $replicas = data_get($containerReplicate, 'Replicas');
$running = str($replicas)->explode('/')[0];
$total = str($replicas)->explode('/')[1];
if ($running === $total) {
@@ -737,9 +717,9 @@ $schema://$host {
$containers = $containers->filter();
return collect($containers);
- } else {
- return collect([]);
}
+
+ return collect([]);
}
public function hasDefinedResources()
@@ -747,11 +727,8 @@ $schema://$host {
$applications = $this->applications()->count() > 0;
$databases = $this->databases()->count() > 0;
$services = $this->services()->count() > 0;
- if ($applications || $databases || $services) {
- return true;
- }
- return false;
+ return $applications || $databases || $services;
}
public function databases()
@@ -781,7 +758,7 @@ $schema://$host {
$additionalApplicationIds = collect($additionalApplicationIds)->map(function ($item) {
return $item->application_id;
});
- Application::whereIn('id', $additionalApplicationIds)->get()->each(function ($application) use ($applications) {
+ Application::query()->whereIn('id', $additionalApplicationIds)->get()->each(function ($application) use ($applications) {
$applications->push($application);
});
@@ -799,7 +776,7 @@ $schema://$host {
{
return $this->previews()->filter(function ($preview) {
$applicationId = data_get($preview, 'application_id');
- $application = Application::find($applicationId);
+ $application = Application::query()->find($applicationId);
if (! $application) {
return false;
}
@@ -901,11 +878,7 @@ $schema://$host {
public function isProxyShouldRun()
{
// TODO: Do we need "|| $this->proxy->force_stop" here?
- if ($this->proxyType() === ProxyTypes::NONE->value || $this->isBuildServer()) {
- return false;
- }
-
- return true;
+ return $this->proxyType() !== ProxyTypes::NONE->value && ! $this->isBuildServer();
}
public function skipServer()
@@ -913,11 +886,8 @@ $schema://$host {
if ($this->ip === '1.2.3.4') {
return true;
}
- if ($this->settings->force_disabled === true) {
- return true;
- }
- return false;
+ return $this->settings->force_disabled === true;
}
public function isFunctional()
@@ -941,8 +911,8 @@ $schema://$host {
$os_release = instant_remote_process(['cat /etc/os-release'], $this);
$releaseLines = collect(explode("\n", $os_release));
$collectedData = collect([]);
- foreach ($releaseLines as $line) {
- $item = str($line)->trim();
+ foreach ($releaseLines as $releaseLine) {
+ $item = str($releaseLine)->trim();
$collectedData->put($item->before('=')->value(), $item->after('=')->lower()->replace('"', '')->value());
}
$ID = data_get($collectedData, 'ID');
@@ -956,10 +926,10 @@ $schema://$host {
if ($supported->count() === 1) {
// ray('supported');
return str($supported->first());
- } else {
- // ray('not supported');
- return false;
}
+
+ // ray('not supported');
+ return false;
}
public function isSwarm()
@@ -982,11 +952,8 @@ $schema://$host {
if ($this->status() === false) {
return false;
}
- if ($this->isFunctional() === false) {
- return false;
- }
- return true;
+ return $this->isFunctional() !== false;
}
public function status(): bool
@@ -1026,19 +993,19 @@ $schema://$host {
$unreachableNotificationSent = (bool) $this->unreachable_notification_sent;
$isReachable = (bool) $this->settings->is_reachable;
- \Log::debug('Server reachability check', [
+ Log::debug('Server reachability check', [
'server_id' => $this->id,
'is_reachable' => $isReachable,
'notification_sent' => $unreachableNotificationSent,
'unreachable_count' => $this->unreachable_count,
]);
- if ($isReachable === true) {
+ if ($isReachable) {
$this->unreachable_count = 0;
$this->save();
- if ($unreachableNotificationSent === true) {
- \Log::debug('Server is now reachable, sending notification', [
+ if ($unreachableNotificationSent) {
+ Log::debug('Server is now reachable, sending notification', [
'server_id' => $this->id,
]);
$this->sendReachableNotification();
@@ -1048,7 +1015,7 @@ $schema://$host {
}
$this->increment('unreachable_count');
- \Log::debug('Incremented unreachable count', [
+ Log::debug('Incremented unreachable count', [
'server_id' => $this->id,
'new_count' => $this->unreachable_count,
]);
@@ -1056,7 +1023,7 @@ $schema://$host {
if ($this->unreachable_count === 1) {
$this->settings->is_reachable = true;
$this->settings->save();
- \Log::debug('First unreachable attempt, marking as reachable', [
+ Log::debug('First unreachable attempt, marking as reachable', [
'server_id' => $this->id,
]);
@@ -1067,7 +1034,7 @@ $schema://$host {
$failedChecks = 0;
for ($i = 0; $i < 3; $i++) {
$status = $this->serverStatus();
- \Log::debug('Additional reachability check', [
+ Log::debug('Additional reachability check', [
'server_id' => $this->id,
'attempt' => $i + 1,
'status' => $status,
@@ -1079,7 +1046,7 @@ $schema://$host {
}
if ($failedChecks === 3 && ! $unreachableNotificationSent) {
- \Log::debug('Server confirmed unreachable after 3 attempts, sending notification', [
+ Log::debug('Server confirmed unreachable after 3 attempts, sending notification', [
'server_id' => $this->id,
]);
$this->sendUnreachableNotification();
@@ -1119,7 +1086,7 @@ $schema://$host {
}
return ['uptime' => true, 'error' => null];
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
if ($justCheckingNewKey) {
return ['uptime' => false, 'error' => 'This key is not valid for this server.'];
}
@@ -1145,18 +1112,18 @@ $schema://$host {
$this->settings->is_usable = false;
$this->settings->save();
if ($throwError) {
- throw new \Exception('Server is not usable. Docker Engine is not installed.');
+ throw new Exception('Server is not usable. Docker Engine is not installed.');
}
return false;
}
try {
instant_remote_process(['docker version'], $this);
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
$this->settings->is_usable = false;
$this->settings->save();
if ($throwError) {
- throw new \Exception('Server is not usable. Docker Engine is not running.');
+ throw new Exception('Server is not usable. Docker Engine is not running.', $e->getCode(), $e);
}
return false;
@@ -1175,7 +1142,7 @@ $schema://$host {
$this->settings->is_usable = false;
$this->settings->save();
if ($throwError) {
- throw new \Exception('Server is not usable. Docker Compose is not installed.');
+ throw new Exception('Server is not usable. Docker Compose is not installed.');
}
return false;
@@ -1191,9 +1158,7 @@ $schema://$host {
$swarmStatus = instant_remote_process(['docker info|grep -i swarm'], $this, false);
$swarmStatus = str($swarmStatus)->trim()->after(':')->trim();
if ($swarmStatus === 'inactive') {
- throw new \Exception('Docker Swarm is not initiated. Please join the server to a swarm before continuing.');
-
- return false;
+ throw new Exception('Docker Swarm is not initiated. Please join the server to a swarm before continuing.');
}
$this->settings->is_usable = true;
$this->settings->save();
@@ -1225,13 +1190,13 @@ $schema://$host {
public function validateCoolifyNetwork($isSwarm = false, $isBuildServer = false)
{
if ($isBuildServer) {
- return;
+ return null;
}
if ($isSwarm) {
return instant_remote_process(['docker network create --attachable --driver overlay coolify-overlay >/dev/null 2>&1 || true'], $this, false);
- } else {
- return instant_remote_process(['docker network create coolify --attachable >/dev/null 2>&1 || true'], $this, false);
}
+
+ return instant_remote_process(['docker network create coolify --attachable >/dev/null 2>&1 || true'], $this, false);
}
public function isNonRoot()
@@ -1260,7 +1225,7 @@ $schema://$host {
public function updateWithPrivateKey(array $data, ?PrivateKey $privateKey = null)
{
$this->update($data);
- if ($privateKey) {
+ if ($privateKey instanceof PrivateKey) {
$this->privateKey()->associate($privateKey);
$this->save();
}
@@ -1290,9 +1255,11 @@ $schema://$host {
} else {
StartSentinel::run($this, true);
}
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
return handleError($e);
}
+
+ return null;
}
public function url()
@@ -1322,7 +1289,21 @@ $schema://$host {
}
}
} else {
- throw new \Exception('Invalid proxy type.');
+ throw new Exception('Invalid proxy type.');
}
}
+
+ protected function casts(): array
+ {
+ return [
+ 'proxy' => SchemalessAttributes::class,
+ 'logdrain_axiom_api_key' => 'encrypted',
+ 'logdrain_newrelic_license_key' => 'encrypted',
+ 'delete_unused_volumes' => 'boolean',
+ 'delete_unused_networks' => 'boolean',
+ 'unreachable_notification_sent' => 'boolean',
+ 'is_build_server' => 'boolean',
+ 'force_disabled' => 'boolean',
+ ];
+ }
}
diff --git a/app/Models/ServerSetting.php b/app/Models/ServerSetting.php
index f4b776cca..1b54e0ea5 100644
--- a/app/Models/ServerSetting.php
+++ b/app/Models/ServerSetting.php
@@ -6,6 +6,7 @@ use Illuminate\Database\Eloquent\Casts\Attribute;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Facades\Log;
use OpenApi\Attributes as OA;
+use Throwable;
#[OA\Schema(
description: 'Server Settings model',
@@ -53,14 +54,6 @@ class ServerSetting extends Model
{
protected $guarded = [];
- protected $casts = [
- 'force_docker_cleanup' => 'boolean',
- 'docker_cleanup_threshold' => 'integer',
- 'sentinel_token' => 'encrypted',
- 'is_reachable' => 'boolean',
- 'is_usable' => 'boolean',
- ];
-
protected static function booted()
{
static::creating(function ($setting) {
@@ -71,7 +64,7 @@ class ServerSetting extends Model
if (str($setting->sentinel_custom_url)->isEmpty()) {
$setting->generateSentinelUrl(save: false, ignoreEvent: true);
}
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
Log::error('Error creating server setting: '.$e->getMessage());
}
});
@@ -148,4 +141,15 @@ class ServerSetting extends Model
}
);
}
+
+ protected function casts(): array
+ {
+ return [
+ 'force_docker_cleanup' => 'boolean',
+ 'docker_cleanup_threshold' => 'integer',
+ 'sentinel_token' => 'encrypted',
+ 'is_reachable' => 'boolean',
+ 'is_usable' => 'boolean',
+ ];
+ }
}
diff --git a/app/Models/Service.php b/app/Models/Service.php
index 1df579802..c01e74bcb 100644
--- a/app/Models/Service.php
+++ b/app/Models/Service.php
@@ -84,14 +84,13 @@ class Service extends BaseModel
}
if ($oldConfigHash === $newConfigHash) {
return false;
- } else {
- if ($save) {
- $this->config_hash = $newConfigHash;
- $this->save();
- }
-
- return true;
}
+ if ($save) {
+ $this->config_hash = $newConfigHash;
+ $this->save();
+ }
+
+ return true;
}
protected function serverStatus(): Attribute
@@ -135,7 +134,7 @@ class Service extends BaseModel
public static function ownedByCurrentTeam()
{
- return Service::whereRelation('environment.project.team', 'id', currentTeam()->id)->orderBy('name');
+ return \App\Models\Service::query()->whereRelation('environment.project.team', 'id', currentTeam()->id)->orderBy('name');
}
public function getContainersToStop(): array
@@ -161,7 +160,7 @@ class Service extends BaseModel
}
$startTime = time();
- while (count($processes) > 0) {
+ while ($processes !== []) {
$finishedProcesses = array_filter($processes, function ($process) {
return ! $process->running();
});
@@ -231,11 +230,7 @@ class Service extends BaseModel
continue;
}
if ($status->startsWith('running')) {
- if ($complexStatus === 'exited') {
- $complexStatus = 'degraded';
- } else {
- $complexStatus = 'running';
- }
+ $complexStatus = $complexStatus === 'exited' ? 'degraded' : 'running';
} elseif ($status->startsWith('restarting')) {
$complexStatus = 'degraded';
} elseif ($status->startsWith('exited')) {
@@ -260,11 +255,7 @@ class Service extends BaseModel
continue;
}
if ($status->startsWith('running')) {
- if ($complexStatus === 'exited') {
- $complexStatus = 'degraded';
- } else {
- $complexStatus = 'running';
- }
+ $complexStatus = $complexStatus === 'exited' ? 'degraded' : 'running';
} elseif ($status->startsWith('restarting')) {
$complexStatus = 'degraded';
} elseif ($status->startsWith('exited')) {
@@ -1287,12 +1278,10 @@ class Service extends BaseModel
$real_value = $env->real_value;
if ($env->version === '4.0.0-beta.239') {
$real_value = $env->real_value;
+ } elseif ($env->is_literal || $env->is_multiline) {
+ $real_value = '\''.$real_value.'\'';
} else {
- if ($env->is_literal || $env->is_multiline) {
- $real_value = '\''.$real_value.'\'';
- } else {
- $real_value = escapeEnvVariables($env->real_value);
- }
+ $real_value = escapeEnvVariables($env->real_value);
}
$commands[] = "echo \"{$env->key}={$real_value}\" >> .env";
}
@@ -1307,11 +1296,12 @@ class Service extends BaseModel
{
if ((int) $this->compose_parsing_version >= 3) {
return newParser($this);
- } elseif ($this->docker_compose_raw) {
- return parseDockerComposeFile($this, $isNew);
- } else {
- return collect([]);
}
+ if ($this->docker_compose_raw) {
+ return parseDockerComposeFile($this, $isNew);
+ }
+
+ return collect([]);
}
public function networks()
diff --git a/app/Models/ServiceApplication.php b/app/Models/ServiceApplication.php
index 5cafc9042..f5c1e5f14 100644
--- a/app/Models/ServiceApplication.php
+++ b/app/Models/ServiceApplication.php
@@ -34,12 +34,12 @@ class ServiceApplication extends BaseModel
public static function ownedByCurrentTeamAPI(int $teamId)
{
- return ServiceApplication::whereRelation('service.environment.project.team', 'id', $teamId)->orderBy('name');
+ return \App\Models\ServiceApplication::query()->whereRelation('service.environment.project.team', 'id', $teamId)->orderBy('name');
}
public static function ownedByCurrentTeam()
{
- return ServiceApplication::whereRelation('service.environment.project.team', 'id', currentTeam()->id)->orderBy('name');
+ return \App\Models\ServiceApplication::query()->whereRelation('service.environment.project.team', 'id', currentTeam()->id)->orderBy('name');
}
public function isRunning()
diff --git a/app/Models/ServiceDatabase.php b/app/Models/ServiceDatabase.php
index 5fdd52637..88b637cd5 100644
--- a/app/Models/ServiceDatabase.php
+++ b/app/Models/ServiceDatabase.php
@@ -26,12 +26,12 @@ class ServiceDatabase extends BaseModel
public static function ownedByCurrentTeamAPI(int $teamId)
{
- return ServiceDatabase::whereRelation('service.environment.project.team', 'id', $teamId)->orderBy('name');
+ return \App\Models\ServiceDatabase::query()->whereRelation('service.environment.project.team', 'id', $teamId)->orderBy('name');
}
public static function ownedByCurrentTeam()
{
- return ServiceDatabase::whereRelation('service.environment.project.team', 'id', currentTeam()->id)->orderBy('name');
+ return \App\Models\ServiceDatabase::query()->whereRelation('service.environment.project.team', 'id', currentTeam()->id)->orderBy('name');
}
public function restart()
@@ -133,10 +133,19 @@ class ServiceDatabase extends BaseModel
public function isBackupSolutionAvailable()
{
- return str($this->databaseType())->contains('mysql') ||
- str($this->databaseType())->contains('postgres') ||
- str($this->databaseType())->contains('postgis') ||
- str($this->databaseType())->contains('mariadb') ||
- str($this->databaseType())->contains('mongodb');
+ if (str($this->databaseType())->contains('mysql')) {
+ return true;
+ }
+ if (str($this->databaseType())->contains('postgres')) {
+ return true;
+ }
+ if (str($this->databaseType())->contains('postgis')) {
+ return true;
+ }
+ if (str($this->databaseType())->contains('mariadb')) {
+ return true;
+ }
+
+ return (bool) str($this->databaseType())->contains('mongodb');
}
}
diff --git a/app/Models/SharedEnvironmentVariable.php b/app/Models/SharedEnvironmentVariable.php
index aab8b8735..453ff0c94 100644
--- a/app/Models/SharedEnvironmentVariable.php
+++ b/app/Models/SharedEnvironmentVariable.php
@@ -8,8 +8,11 @@ class SharedEnvironmentVariable extends Model
{
protected $guarded = [];
- protected $casts = [
- 'key' => 'string',
- 'value' => 'encrypted',
- ];
+ protected function casts(): array
+ {
+ return [
+ 'key' => 'string',
+ 'value' => 'encrypted',
+ ];
+ }
}
diff --git a/app/Models/SlackNotificationSettings.php b/app/Models/SlackNotificationSettings.php
index 48153f2ea..f14c527f4 100644
--- a/app/Models/SlackNotificationSettings.php
+++ b/app/Models/SlackNotificationSettings.php
@@ -30,23 +30,6 @@ class SlackNotificationSettings extends Model
'server_unreachable_slack_notifications',
];
- protected $casts = [
- 'slack_enabled' => 'boolean',
- 'slack_webhook_url' => 'encrypted',
-
- 'deployment_success_slack_notifications' => 'boolean',
- 'deployment_failure_slack_notifications' => 'boolean',
- 'status_change_slack_notifications' => 'boolean',
- 'backup_success_slack_notifications' => 'boolean',
- 'backup_failure_slack_notifications' => 'boolean',
- 'scheduled_task_success_slack_notifications' => 'boolean',
- 'scheduled_task_failure_slack_notifications' => 'boolean',
- 'docker_cleanup_slack_notifications' => 'boolean',
- 'server_disk_usage_slack_notifications' => 'boolean',
- 'server_reachable_slack_notifications' => 'boolean',
- 'server_unreachable_slack_notifications' => 'boolean',
- ];
-
public function team()
{
return $this->belongsTo(Team::class);
@@ -56,4 +39,24 @@ class SlackNotificationSettings extends Model
{
return $this->slack_enabled;
}
+
+ protected function casts(): array
+ {
+ return [
+ 'slack_enabled' => 'boolean',
+ 'slack_webhook_url' => 'encrypted',
+
+ 'deployment_success_slack_notifications' => 'boolean',
+ 'deployment_failure_slack_notifications' => 'boolean',
+ 'status_change_slack_notifications' => 'boolean',
+ 'backup_success_slack_notifications' => 'boolean',
+ 'backup_failure_slack_notifications' => 'boolean',
+ 'scheduled_task_success_slack_notifications' => 'boolean',
+ 'scheduled_task_failure_slack_notifications' => 'boolean',
+ 'docker_cleanup_slack_notifications' => 'boolean',
+ 'server_disk_usage_slack_notifications' => 'boolean',
+ 'server_reachable_slack_notifications' => 'boolean',
+ 'server_unreachable_slack_notifications' => 'boolean',
+ ];
+ }
}
diff --git a/app/Models/StandaloneClickhouse.php b/app/Models/StandaloneClickhouse.php
index 60198115d..5bd23068e 100644
--- a/app/Models/StandaloneClickhouse.php
+++ b/app/Models/StandaloneClickhouse.php
@@ -2,6 +2,7 @@
namespace App\Models;
+use Exception;
use Illuminate\Database\Eloquent\Casts\Attribute;
use Illuminate\Database\Eloquent\Collection;
use Illuminate\Database\Eloquent\Factories\HasFactory;
@@ -15,14 +16,10 @@ class StandaloneClickhouse extends BaseModel
protected $appends = ['internal_db_url', 'external_db_url', 'database_type', 'server_status'];
- protected $casts = [
- 'clickhouse_password' => 'encrypted',
- ];
-
protected static function booted()
{
static::created(function ($database) {
- LocalPersistentVolume::create([
+ LocalPersistentVolume::query()->create([
'name' => 'clickhouse-data-'.$database->uuid,
'mount_path' => '/bitnami/clickhouse',
'host_path' => null,
@@ -69,14 +66,13 @@ class StandaloneClickhouse extends BaseModel
}
if ($oldConfigHash === $newConfigHash) {
return false;
- } else {
- if ($save) {
- $this->config_hash = $newConfigHash;
- $this->save();
- }
-
- return true;
}
+ if ($save) {
+ $this->config_hash = $newConfigHash;
+ $this->save();
+ }
+
+ return true;
}
public function isRunning()
@@ -109,8 +105,8 @@ class StandaloneClickhouse extends BaseModel
return;
}
$server = data_get($this, 'destination.server');
- foreach ($persistentStorages as $storage) {
- instant_remote_process(["docker volume rm -f $storage->name"], $server, false);
+ foreach ($persistentStorages as $persistentStorage) {
+ instant_remote_process(["docker volume rm -f $persistentStorage->name"], $server, false);
}
}
@@ -283,7 +279,7 @@ class StandaloneClickhouse extends BaseModel
if ($error === 'Unauthorized') {
$error = 'Unauthorized, please check your metrics token or restart Sentinel to set a new token.';
}
- throw new \Exception($error);
+ throw new Exception($error);
}
$metrics = json_decode($metrics, true);
$parsedCollection = collect($metrics)->map(function ($metric) {
@@ -305,7 +301,7 @@ class StandaloneClickhouse extends BaseModel
if ($error === 'Unauthorized') {
$error = 'Unauthorized, please check your metrics token or restart Sentinel to set a new token.';
}
- throw new \Exception($error);
+ throw new Exception($error);
}
$metrics = json_decode($metrics, true);
$parsedCollection = collect($metrics)->map(function ($metric) {
@@ -319,4 +315,11 @@ class StandaloneClickhouse extends BaseModel
{
return false;
}
+
+ protected function casts(): array
+ {
+ return [
+ 'clickhouse_password' => 'encrypted',
+ ];
+ }
}
diff --git a/app/Models/StandaloneDocker.php b/app/Models/StandaloneDocker.php
index 1ef6ff587..3beb20d6e 100644
--- a/app/Models/StandaloneDocker.php
+++ b/app/Models/StandaloneDocker.php
@@ -74,6 +74,10 @@ class StandaloneDocker extends BaseModel
public function attachedTo()
{
- return $this->applications?->count() > 0 || $this->databases()->count() > 0;
+ if ($this->applications?->count() > 0) {
+ return true;
+ }
+
+ return $this->databases()->count() > 0;
}
}
diff --git a/app/Models/StandaloneDragonfly.php b/app/Models/StandaloneDragonfly.php
index 3c1127d8d..d659e0a1b 100644
--- a/app/Models/StandaloneDragonfly.php
+++ b/app/Models/StandaloneDragonfly.php
@@ -2,6 +2,7 @@
namespace App\Models;
+use Exception;
use Illuminate\Database\Eloquent\Casts\Attribute;
use Illuminate\Database\Eloquent\Collection;
use Illuminate\Database\Eloquent\Factories\HasFactory;
@@ -15,14 +16,10 @@ class StandaloneDragonfly extends BaseModel
protected $appends = ['internal_db_url', 'external_db_url', 'database_type', 'server_status'];
- protected $casts = [
- 'dragonfly_password' => 'encrypted',
- ];
-
protected static function booted()
{
static::created(function ($database) {
- LocalPersistentVolume::create([
+ LocalPersistentVolume::query()->create([
'name' => 'dragonfly-data-'.$database->uuid,
'mount_path' => '/data',
'host_path' => null,
@@ -69,14 +66,13 @@ class StandaloneDragonfly extends BaseModel
}
if ($oldConfigHash === $newConfigHash) {
return false;
- } else {
- if ($save) {
- $this->config_hash = $newConfigHash;
- $this->save();
- }
-
- return true;
}
+ if ($save) {
+ $this->config_hash = $newConfigHash;
+ $this->save();
+ }
+
+ return true;
}
public function isRunning()
@@ -109,8 +105,8 @@ class StandaloneDragonfly extends BaseModel
return;
}
$server = data_get($this, 'destination.server');
- foreach ($persistentStorages as $storage) {
- instant_remote_process(["docker volume rm -f $storage->name"], $server, false);
+ foreach ($persistentStorages as $persistentStorage) {
+ instant_remote_process(["docker volume rm -f $persistentStorage->name"], $server, false);
}
}
@@ -277,7 +273,7 @@ class StandaloneDragonfly extends BaseModel
if ($error === 'Unauthorized') {
$error = 'Unauthorized, please check your metrics token or restart Sentinel to set a new token.';
}
- throw new \Exception($error);
+ throw new Exception($error);
}
$metrics = json_decode($metrics, true);
$parsedCollection = collect($metrics)->map(function ($metric) {
@@ -299,7 +295,7 @@ class StandaloneDragonfly extends BaseModel
if ($error === 'Unauthorized') {
$error = 'Unauthorized, please check your metrics token or restart Sentinel to set a new token.';
}
- throw new \Exception($error);
+ throw new Exception($error);
}
$metrics = json_decode($metrics, true);
$parsedCollection = collect($metrics)->map(function ($metric) {
@@ -319,4 +315,11 @@ class StandaloneDragonfly extends BaseModel
return $this->morphMany(EnvironmentVariable::class, 'resourceable')
->orderBy('key', 'asc');
}
+
+ protected function casts(): array
+ {
+ return [
+ 'dragonfly_password' => 'encrypted',
+ ];
+ }
}
diff --git a/app/Models/StandaloneKeydb.php b/app/Models/StandaloneKeydb.php
index ebf1c22e9..2754fa40f 100644
--- a/app/Models/StandaloneKeydb.php
+++ b/app/Models/StandaloneKeydb.php
@@ -2,6 +2,7 @@
namespace App\Models;
+use Exception;
use Illuminate\Database\Eloquent\Casts\Attribute;
use Illuminate\Database\Eloquent\Collection;
use Illuminate\Database\Eloquent\Factories\HasFactory;
@@ -15,14 +16,10 @@ class StandaloneKeydb extends BaseModel
protected $appends = ['internal_db_url', 'external_db_url', 'server_status'];
- protected $casts = [
- 'keydb_password' => 'encrypted',
- ];
-
protected static function booted()
{
static::created(function ($database) {
- LocalPersistentVolume::create([
+ LocalPersistentVolume::query()->create([
'name' => 'keydb-data-'.$database->uuid,
'mount_path' => '/data',
'host_path' => null,
@@ -69,14 +66,13 @@ class StandaloneKeydb extends BaseModel
}
if ($oldConfigHash === $newConfigHash) {
return false;
- } else {
- if ($save) {
- $this->config_hash = $newConfigHash;
- $this->save();
- }
-
- return true;
}
+ if ($save) {
+ $this->config_hash = $newConfigHash;
+ $this->save();
+ }
+
+ return true;
}
public function isRunning()
@@ -109,8 +105,8 @@ class StandaloneKeydb extends BaseModel
return;
}
$server = data_get($this, 'destination.server');
- foreach ($persistentStorages as $storage) {
- instant_remote_process(["docker volume rm -f $storage->name"], $server, false);
+ foreach ($persistentStorages as $persistentStorage) {
+ instant_remote_process(["docker volume rm -f $persistentStorage->name"], $server, false);
}
}
@@ -277,7 +273,7 @@ class StandaloneKeydb extends BaseModel
if ($error === 'Unauthorized') {
$error = 'Unauthorized, please check your metrics token or restart Sentinel to set a new token.';
}
- throw new \Exception($error);
+ throw new Exception($error);
}
$metrics = json_decode($metrics, true);
$parsedCollection = collect($metrics)->map(function ($metric) {
@@ -299,7 +295,7 @@ class StandaloneKeydb extends BaseModel
if ($error === 'Unauthorized') {
$error = 'Unauthorized, please check your metrics token or restart Sentinel to set a new token.';
}
- throw new \Exception($error);
+ throw new Exception($error);
}
$metrics = json_decode($metrics, true);
$parsedCollection = collect($metrics)->map(function ($metric) {
@@ -319,4 +315,11 @@ class StandaloneKeydb extends BaseModel
return $this->morphMany(EnvironmentVariable::class, 'resourceable')
->orderBy('key', 'asc');
}
+
+ protected function casts(): array
+ {
+ return [
+ 'keydb_password' => 'encrypted',
+ ];
+ }
}
diff --git a/app/Models/StandaloneMariadb.php b/app/Models/StandaloneMariadb.php
index 004ead4d9..cdb193271 100644
--- a/app/Models/StandaloneMariadb.php
+++ b/app/Models/StandaloneMariadb.php
@@ -2,6 +2,7 @@
namespace App\Models;
+use Exception;
use Illuminate\Database\Eloquent\Casts\Attribute;
use Illuminate\Database\Eloquent\Collection;
use Illuminate\Database\Eloquent\Factories\HasFactory;
@@ -15,14 +16,10 @@ class StandaloneMariadb extends BaseModel
protected $appends = ['internal_db_url', 'external_db_url', 'database_type', 'server_status'];
- protected $casts = [
- 'mariadb_password' => 'encrypted',
- ];
-
protected static function booted()
{
static::created(function ($database) {
- LocalPersistentVolume::create([
+ LocalPersistentVolume::query()->create([
'name' => 'mariadb-data-'.$database->uuid,
'mount_path' => '/var/lib/mysql',
'host_path' => null,
@@ -69,14 +66,13 @@ class StandaloneMariadb extends BaseModel
}
if ($oldConfigHash === $newConfigHash) {
return false;
- } else {
- if ($save) {
- $this->config_hash = $newConfigHash;
- $this->save();
- }
-
- return true;
}
+ if ($save) {
+ $this->config_hash = $newConfigHash;
+ $this->save();
+ }
+
+ return true;
}
public function isRunning()
@@ -109,8 +105,8 @@ class StandaloneMariadb extends BaseModel
return;
}
$server = data_get($this, 'destination.server');
- foreach ($persistentStorages as $storage) {
- instant_remote_process(["docker volume rm -f $storage->name"], $server, false);
+ foreach ($persistentStorages as $persistentStorage) {
+ instant_remote_process(["docker volume rm -f $persistentStorage->name"], $server, false);
}
}
@@ -283,7 +279,7 @@ class StandaloneMariadb extends BaseModel
if ($error === 'Unauthorized') {
$error = 'Unauthorized, please check your metrics token or restart Sentinel to set a new token.';
}
- throw new \Exception($error);
+ throw new Exception($error);
}
$metrics = json_decode($metrics, true);
$parsedCollection = collect($metrics)->map(function ($metric) {
@@ -305,7 +301,7 @@ class StandaloneMariadb extends BaseModel
if ($error === 'Unauthorized') {
$error = 'Unauthorized, please check your metrics token or restart Sentinel to set a new token.';
}
- throw new \Exception($error);
+ throw new Exception($error);
}
$metrics = json_decode($metrics, true);
$parsedCollection = collect($metrics)->map(function ($metric) {
@@ -319,4 +315,11 @@ class StandaloneMariadb extends BaseModel
{
return true;
}
+
+ protected function casts(): array
+ {
+ return [
+ 'mariadb_password' => 'encrypted',
+ ];
+ }
}
diff --git a/app/Models/StandaloneMongodb.php b/app/Models/StandaloneMongodb.php
index aba0f6123..76c618f80 100644
--- a/app/Models/StandaloneMongodb.php
+++ b/app/Models/StandaloneMongodb.php
@@ -2,10 +2,12 @@
namespace App\Models;
+use Exception;
use Illuminate\Database\Eloquent\Casts\Attribute;
use Illuminate\Database\Eloquent\Collection;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\SoftDeletes;
+use Throwable;
class StandaloneMongodb extends BaseModel
{
@@ -18,7 +20,7 @@ class StandaloneMongodb extends BaseModel
protected static function booted()
{
static::created(function ($database) {
- LocalPersistentVolume::create([
+ LocalPersistentVolume::query()->create([
'name' => 'mongodb-configdb-'.$database->uuid,
'mount_path' => '/data/configdb',
'host_path' => null,
@@ -26,7 +28,7 @@ class StandaloneMongodb extends BaseModel
'resource_type' => $database->getMorphClass(),
'is_readonly' => true,
]);
- LocalPersistentVolume::create([
+ LocalPersistentVolume::query()->create([
'name' => 'mongodb-db-'.$database->uuid,
'mount_path' => '/data/db',
'host_path' => null,
@@ -73,14 +75,13 @@ class StandaloneMongodb extends BaseModel
}
if ($oldConfigHash === $newConfigHash) {
return false;
- } else {
- if ($save) {
- $this->config_hash = $newConfigHash;
- $this->save();
- }
-
- return true;
}
+ if ($save) {
+ $this->config_hash = $newConfigHash;
+ $this->save();
+ }
+
+ return true;
}
public function isRunning()
@@ -113,8 +114,8 @@ class StandaloneMongodb extends BaseModel
return;
}
$server = data_get($this, 'destination.server');
- foreach ($persistentStorages as $storage) {
- instant_remote_process(["docker volume rm -f $storage->name"], $server, false);
+ foreach ($persistentStorages as $persistentStorage) {
+ instant_remote_process(["docker volume rm -f $persistentStorage->name"], $server, false);
}
}
@@ -196,7 +197,7 @@ class StandaloneMongodb extends BaseModel
get: function ($value) {
try {
return decrypt($value);
- } catch (\Throwable $th) {
+ } catch (Throwable $th) {
$this->mongo_initdb_root_password = encrypt($value);
$this->save();
@@ -297,7 +298,7 @@ class StandaloneMongodb extends BaseModel
if ($error === 'Unauthorized') {
$error = 'Unauthorized, please check your metrics token or restart Sentinel to set a new token.';
}
- throw new \Exception($error);
+ throw new Exception($error);
}
$metrics = json_decode($metrics, true);
$parsedCollection = collect($metrics)->map(function ($metric) {
@@ -319,7 +320,7 @@ class StandaloneMongodb extends BaseModel
if ($error === 'Unauthorized') {
$error = 'Unauthorized, please check your metrics token or restart Sentinel to set a new token.';
}
- throw new \Exception($error);
+ throw new Exception($error);
}
$metrics = json_decode($metrics, true);
$parsedCollection = collect($metrics)->map(function ($metric) {
diff --git a/app/Models/StandaloneMysql.php b/app/Models/StandaloneMysql.php
index 9ae0fdcae..32cc016cf 100644
--- a/app/Models/StandaloneMysql.php
+++ b/app/Models/StandaloneMysql.php
@@ -2,6 +2,7 @@
namespace App\Models;
+use Exception;
use Illuminate\Database\Eloquent\Casts\Attribute;
use Illuminate\Database\Eloquent\Collection;
use Illuminate\Database\Eloquent\Factories\HasFactory;
@@ -15,15 +16,10 @@ class StandaloneMysql extends BaseModel
protected $appends = ['internal_db_url', 'external_db_url', 'database_type', 'server_status'];
- protected $casts = [
- 'mysql_password' => 'encrypted',
- 'mysql_root_password' => 'encrypted',
- ];
-
protected static function booted()
{
static::created(function ($database) {
- LocalPersistentVolume::create([
+ LocalPersistentVolume::query()->create([
'name' => 'mysql-data-'.$database->uuid,
'mount_path' => '/var/lib/mysql',
'host_path' => null,
@@ -70,14 +66,13 @@ class StandaloneMysql extends BaseModel
}
if ($oldConfigHash === $newConfigHash) {
return false;
- } else {
- if ($save) {
- $this->config_hash = $newConfigHash;
- $this->save();
- }
-
- return true;
}
+ if ($save) {
+ $this->config_hash = $newConfigHash;
+ $this->save();
+ }
+
+ return true;
}
public function isRunning()
@@ -110,8 +105,8 @@ class StandaloneMysql extends BaseModel
return;
}
$server = data_get($this, 'destination.server');
- foreach ($persistentStorages as $storage) {
- instant_remote_process(["docker volume rm -f $storage->name"], $server, false);
+ foreach ($persistentStorages as $persistentStorage) {
+ instant_remote_process(["docker volume rm -f $persistentStorage->name"], $server, false);
}
}
@@ -278,7 +273,7 @@ class StandaloneMysql extends BaseModel
if ($error === 'Unauthorized') {
$error = 'Unauthorized, please check your metrics token or restart Sentinel to set a new token.';
}
- throw new \Exception($error);
+ throw new Exception($error);
}
$metrics = json_decode($metrics, true);
$parsedCollection = collect($metrics)->map(function ($metric) {
@@ -300,7 +295,7 @@ class StandaloneMysql extends BaseModel
if ($error === 'Unauthorized') {
$error = 'Unauthorized, please check your metrics token or restart Sentinel to set a new token.';
}
- throw new \Exception($error);
+ throw new Exception($error);
}
$metrics = json_decode($metrics, true);
$parsedCollection = collect($metrics)->map(function ($metric) {
@@ -320,4 +315,12 @@ class StandaloneMysql extends BaseModel
return $this->morphMany(EnvironmentVariable::class, 'resourceable')
->orderBy('key', 'asc');
}
+
+ protected function casts(): array
+ {
+ return [
+ 'mysql_password' => 'encrypted',
+ 'mysql_root_password' => 'encrypted',
+ ];
+ }
}
diff --git a/app/Models/StandalonePostgresql.php b/app/Models/StandalonePostgresql.php
index dd92ae7c9..111784823 100644
--- a/app/Models/StandalonePostgresql.php
+++ b/app/Models/StandalonePostgresql.php
@@ -2,6 +2,7 @@
namespace App\Models;
+use Exception;
use Illuminate\Database\Eloquent\Casts\Attribute;
use Illuminate\Database\Eloquent\Collection;
use Illuminate\Database\Eloquent\Factories\HasFactory;
@@ -15,15 +16,10 @@ class StandalonePostgresql extends BaseModel
protected $appends = ['internal_db_url', 'external_db_url', 'database_type', 'server_status'];
- protected $casts = [
- 'init_scripts' => 'array',
- 'postgres_password' => 'encrypted',
- ];
-
protected static function booted()
{
static::created(function ($database) {
- LocalPersistentVolume::create([
+ LocalPersistentVolume::query()->create([
'name' => 'postgres-data-'.$database->uuid,
'mount_path' => '/var/lib/postgresql/data',
'host_path' => null,
@@ -74,8 +70,8 @@ class StandalonePostgresql extends BaseModel
return;
}
$server = data_get($this, 'destination.server');
- foreach ($persistentStorages as $storage) {
- instant_remote_process(["docker volume rm -f $storage->name"], $server, false);
+ foreach ($persistentStorages as $persistentStorage) {
+ instant_remote_process(["docker volume rm -f $persistentStorage->name"], $server, false);
}
}
@@ -95,14 +91,13 @@ class StandalonePostgresql extends BaseModel
}
if ($oldConfigHash === $newConfigHash) {
return false;
- } else {
- if ($save) {
- $this->config_hash = $newConfigHash;
- $this->save();
- }
-
- return true;
}
+ if ($save) {
+ $this->config_hash = $newConfigHash;
+ $this->save();
+ }
+
+ return true;
}
public function isRunning()
@@ -283,7 +278,7 @@ class StandalonePostgresql extends BaseModel
if ($error === 'Unauthorized') {
$error = 'Unauthorized, please check your metrics token or restart Sentinel to set a new token.';
}
- throw new \Exception($error);
+ throw new Exception($error);
}
$metrics = json_decode($metrics, true);
$parsedCollection = collect($metrics)->map(function ($metric) {
@@ -305,7 +300,7 @@ class StandalonePostgresql extends BaseModel
if ($error === 'Unauthorized') {
$error = 'Unauthorized, please check your metrics token or restart Sentinel to set a new token.';
}
- throw new \Exception($error);
+ throw new Exception($error);
}
$metrics = json_decode($metrics, true);
$parsedCollection = collect($metrics)->map(function ($metric) {
@@ -320,4 +315,12 @@ class StandalonePostgresql extends BaseModel
return $this->morphMany(EnvironmentVariable::class, 'resourceable')
->orderBy('key', 'asc');
}
+
+ protected function casts(): array
+ {
+ return [
+ 'init_scripts' => 'array',
+ 'postgres_password' => 'encrypted',
+ ];
+ }
}
diff --git a/app/Models/StandaloneRedis.php b/app/Models/StandaloneRedis.php
index ed5cf9870..5ca849c98 100644
--- a/app/Models/StandaloneRedis.php
+++ b/app/Models/StandaloneRedis.php
@@ -2,6 +2,7 @@
namespace App\Models;
+use Exception;
use Illuminate\Database\Eloquent\Casts\Attribute;
use Illuminate\Database\Eloquent\Collection;
use Illuminate\Database\Eloquent\Factories\HasFactory;
@@ -18,7 +19,7 @@ class StandaloneRedis extends BaseModel
protected static function booted()
{
static::created(function ($database) {
- LocalPersistentVolume::create([
+ LocalPersistentVolume::query()->create([
'name' => 'redis-data-'.$database->uuid,
'mount_path' => '/data',
'host_path' => null,
@@ -65,14 +66,13 @@ class StandaloneRedis extends BaseModel
}
if ($oldConfigHash === $newConfigHash) {
return false;
- } else {
- if ($save) {
- $this->config_hash = $newConfigHash;
- $this->save();
- }
-
- return true;
}
+ if ($save) {
+ $this->config_hash = $newConfigHash;
+ $this->save();
+ }
+
+ return true;
}
public function isRunning()
@@ -105,8 +105,8 @@ class StandaloneRedis extends BaseModel
return;
}
$server = data_get($this, 'destination.server');
- foreach ($persistentStorages as $storage) {
- instant_remote_process(["docker volume rm -f $storage->name"], $server, false);
+ foreach ($persistentStorages as $persistentStorage) {
+ instant_remote_process(["docker volume rm -f $persistentStorage->name"], $server, false);
}
}
@@ -288,7 +288,7 @@ class StandaloneRedis extends BaseModel
if ($error === 'Unauthorized') {
$error = 'Unauthorized, please check your metrics token or restart Sentinel to set a new token.';
}
- throw new \Exception($error);
+ throw new Exception($error);
}
$metrics = json_decode($metrics, true);
$parsedCollection = collect($metrics)->map(function ($metric) {
@@ -310,7 +310,7 @@ class StandaloneRedis extends BaseModel
if ($error === 'Unauthorized') {
$error = 'Unauthorized, please check your metrics token or restart Sentinel to set a new token.';
}
- throw new \Exception($error);
+ throw new Exception($error);
}
$metrics = json_decode($metrics, true);
$parsedCollection = collect($metrics)->map(function ($metric) {
diff --git a/app/Models/Subscription.php b/app/Models/Subscription.php
index 1bd84a664..a50e39a27 100644
--- a/app/Models/Subscription.php
+++ b/app/Models/Subscription.php
@@ -19,7 +19,7 @@ class Subscription extends Model
if (! $this->stripe_plan_id) {
return 'zero';
}
- $subscription = Subscription::where('id', $this->id)->first();
+ $subscription = \App\Models\Subscription::query()->where('id', $this->id)->first();
if (! $subscription) {
return null;
}
diff --git a/app/Models/SwarmDocker.php b/app/Models/SwarmDocker.php
index e0fe349c7..99993aba6 100644
--- a/app/Models/SwarmDocker.php
+++ b/app/Models/SwarmDocker.php
@@ -77,6 +77,10 @@ class SwarmDocker extends BaseModel
public function attachedTo()
{
- return $this->applications?->count() > 0 || $this->databases()->count() > 0;
+ if ($this->applications?->count() > 0) {
+ return true;
+ }
+
+ return $this->databases()->count() > 0;
}
}
diff --git a/app/Models/Team.php b/app/Models/Team.php
index 8651df3c8..9915918b2 100644
--- a/app/Models/Team.php
+++ b/app/Models/Team.php
@@ -8,6 +8,7 @@ use App\Notifications\Channels\SendsEmail;
use App\Notifications\Channels\SendsPushover;
use App\Notifications\Channels\SendsSlack;
use App\Traits\HasNotificationSettings;
+use Exception;
use Illuminate\Database\Eloquent\Casts\Attribute;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Notifications\Notifiable;
@@ -40,10 +41,6 @@ class Team extends Model implements SendsDiscord, SendsEmail, SendsPushover, Sen
protected $guarded = [];
- protected $casts = [
- 'personal_team' => 'boolean',
- ];
-
protected static function booted()
{
static::created(function ($team) {
@@ -56,7 +53,7 @@ class Team extends Model implements SendsDiscord, SendsEmail, SendsPushover, Sen
static::saving(function ($team) {
if (auth()->user()?->isMember()) {
- throw new \Exception('You are not allowed to update this team.');
+ throw new Exception('You are not allowed to update this team.');
}
});
@@ -95,11 +92,7 @@ class Team extends Model implements SendsDiscord, SendsEmail, SendsPushover, Sen
public function serverOverflow()
{
- if ($this->serverLimit() < $this->servers->count()) {
- return true;
- }
-
- return false;
+ return $this->serverLimit() < $this->servers->count();
}
public static function serverLimit()
@@ -107,7 +100,7 @@ class Team extends Model implements SendsDiscord, SendsEmail, SendsPushover, Sen
if (currentTeam()->id === 0 && isDev()) {
return 9999999;
}
- $team = Team::find(currentTeam()->id);
+ $team = \App\Models\Team::query()->find(currentTeam()->id);
if (! $team) {
return 0;
}
@@ -169,12 +162,20 @@ class Team extends Model implements SendsDiscord, SendsEmail, SendsPushover, Sen
if (isCloud()) {
return true;
}
+ if ($this->getNotificationSettings('email')?->isEnabled()) {
+ return true;
+ }
+ if ($this->getNotificationSettings('discord')?->isEnabled()) {
+ return true;
+ }
+ if ($this->getNotificationSettings('slack')?->isEnabled()) {
+ return true;
+ }
+ if ($this->getNotificationSettings('telegram')?->isEnabled()) {
+ return true;
+ }
- return $this->getNotificationSettings('email')?->isEnabled() ||
- $this->getNotificationSettings('discord')?->isEnabled() ||
- $this->getNotificationSettings('slack')?->isEnabled() ||
- $this->getNotificationSettings('telegram')?->isEnabled() ||
- $this->getNotificationSettings('pushover')?->isEnabled();
+ return (bool) $this->getNotificationSettings('pushover')?->isEnabled();
}
public function subscriptionEnded()
@@ -222,11 +223,7 @@ class Team extends Model implements SendsDiscord, SendsEmail, SendsPushover, Sen
public function isEmpty()
{
- if ($this->projects()->count() === 0 && $this->servers()->count() === 0 && $this->privateKeys()->count() === 0 && $this->sources()->count() === 0) {
- return true;
- }
-
- return false;
+ return $this->projects()->count() === 0 && $this->servers()->count() === 0 && $this->privateKeys()->count() === 0 && $this->sources()->count() === 0;
}
public function projects()
@@ -282,4 +279,11 @@ class Team extends Model implements SendsDiscord, SendsEmail, SendsPushover, Sen
{
return $this->hasOne(PushoverNotificationSettings::class);
}
+
+ protected function casts(): array
+ {
+ return [
+ 'personal_team' => 'boolean',
+ ];
+ }
}
diff --git a/app/Models/TeamInvitation.php b/app/Models/TeamInvitation.php
index bc1a90d58..b64b356bd 100644
--- a/app/Models/TeamInvitation.php
+++ b/app/Models/TeamInvitation.php
@@ -31,10 +31,9 @@ class TeamInvitation extends Model
$diff = $createdAt->diffInDays(now());
if ($diff <= config('constants.invitation.link.expiration_days')) {
return true;
- } else {
- $this->delete();
-
- return false;
}
+ $this->delete();
+
+ return false;
}
}
diff --git a/app/Models/TelegramNotificationSettings.php b/app/Models/TelegramNotificationSettings.php
index 78bd841bd..ec83327ae 100644
--- a/app/Models/TelegramNotificationSettings.php
+++ b/app/Models/TelegramNotificationSettings.php
@@ -43,36 +43,6 @@ class TelegramNotificationSettings extends Model
'telegram_notifications_server_unreachable_thread_id',
];
- protected $casts = [
- 'telegram_enabled' => 'boolean',
- 'telegram_token' => 'encrypted',
- 'telegram_chat_id' => 'encrypted',
-
- 'deployment_success_telegram_notifications' => 'boolean',
- 'deployment_failure_telegram_notifications' => 'boolean',
- 'status_change_telegram_notifications' => 'boolean',
- 'backup_success_telegram_notifications' => 'boolean',
- 'backup_failure_telegram_notifications' => 'boolean',
- 'scheduled_task_success_telegram_notifications' => 'boolean',
- 'scheduled_task_failure_telegram_notifications' => 'boolean',
- 'docker_cleanup_telegram_notifications' => 'boolean',
- 'server_disk_usage_telegram_notifications' => 'boolean',
- 'server_reachable_telegram_notifications' => 'boolean',
- 'server_unreachable_telegram_notifications' => 'boolean',
-
- 'telegram_notifications_deployment_success_thread_id' => 'encrypted',
- 'telegram_notifications_deployment_failure_thread_id' => 'encrypted',
- 'telegram_notifications_status_change_thread_id' => 'encrypted',
- 'telegram_notifications_backup_success_thread_id' => 'encrypted',
- 'telegram_notifications_backup_failure_thread_id' => 'encrypted',
- 'telegram_notifications_scheduled_task_success_thread_id' => 'encrypted',
- 'telegram_notifications_scheduled_task_failure_thread_id' => 'encrypted',
- 'telegram_notifications_docker_cleanup_thread_id' => 'encrypted',
- 'telegram_notifications_server_disk_usage_thread_id' => 'encrypted',
- 'telegram_notifications_server_reachable_thread_id' => 'encrypted',
- 'telegram_notifications_server_unreachable_thread_id' => 'encrypted',
- ];
-
public function team()
{
return $this->belongsTo(Team::class);
@@ -82,4 +52,37 @@ class TelegramNotificationSettings extends Model
{
return $this->telegram_enabled;
}
+
+ protected function casts(): array
+ {
+ return [
+ 'telegram_enabled' => 'boolean',
+ 'telegram_token' => 'encrypted',
+ 'telegram_chat_id' => 'encrypted',
+
+ 'deployment_success_telegram_notifications' => 'boolean',
+ 'deployment_failure_telegram_notifications' => 'boolean',
+ 'status_change_telegram_notifications' => 'boolean',
+ 'backup_success_telegram_notifications' => 'boolean',
+ 'backup_failure_telegram_notifications' => 'boolean',
+ 'scheduled_task_success_telegram_notifications' => 'boolean',
+ 'scheduled_task_failure_telegram_notifications' => 'boolean',
+ 'docker_cleanup_telegram_notifications' => 'boolean',
+ 'server_disk_usage_telegram_notifications' => 'boolean',
+ 'server_reachable_telegram_notifications' => 'boolean',
+ 'server_unreachable_telegram_notifications' => 'boolean',
+
+ 'telegram_notifications_deployment_success_thread_id' => 'encrypted',
+ 'telegram_notifications_deployment_failure_thread_id' => 'encrypted',
+ 'telegram_notifications_status_change_thread_id' => 'encrypted',
+ 'telegram_notifications_backup_success_thread_id' => 'encrypted',
+ 'telegram_notifications_backup_failure_thread_id' => 'encrypted',
+ 'telegram_notifications_scheduled_task_success_thread_id' => 'encrypted',
+ 'telegram_notifications_scheduled_task_failure_thread_id' => 'encrypted',
+ 'telegram_notifications_docker_cleanup_thread_id' => 'encrypted',
+ 'telegram_notifications_server_disk_usage_thread_id' => 'encrypted',
+ 'telegram_notifications_server_reachable_thread_id' => 'encrypted',
+ 'telegram_notifications_server_unreachable_thread_id' => 'encrypted',
+ ];
+ }
}
diff --git a/app/Models/User.php b/app/Models/User.php
index 7c23631c3..054a647fb 100644
--- a/app/Models/User.php
+++ b/app/Models/User.php
@@ -48,12 +48,6 @@ class User extends Authenticatable implements SendsEmail
'two_factor_secret',
];
- protected $casts = [
- 'email_verified_at' => 'datetime',
- 'force_password_reset' => 'boolean',
- 'show_boarding' => 'boolean',
- ];
-
protected static function boot()
{
parent::boot();
@@ -67,7 +61,7 @@ class User extends Authenticatable implements SendsEmail
$team['id'] = 0;
$team['name'] = 'Root Team';
}
- $new_team = Team::create($team);
+ $new_team = Team::query()->create($team);
$user->teams()->attach($new_team, ['role' => 'owner']);
});
}
@@ -83,7 +77,7 @@ class User extends Authenticatable implements SendsEmail
$team['id'] = 0;
$team['name'] = 'Root Team';
}
- $new_team = Team::create($team);
+ $new_team = Team::query()->create($team);
$this->teams()->attach($new_team, ['role' => 'owner']);
return $new_team;
@@ -98,7 +92,7 @@ class User extends Authenticatable implements SendsEmail
hash('crc32b', $tokenEntropy)
);
- $token = $this->tokens()->create([
+ $personalAccessToken = $this->tokens()->create([
'name' => $name,
'token' => hash('sha256', $plainTextToken),
'abilities' => $abilities,
@@ -106,7 +100,7 @@ class User extends Authenticatable implements SendsEmail
'team_id' => session('currentTeam')->id,
]);
- return new NewAccessToken($token, $token->getKey().'|'.$plainTextToken);
+ return new NewAccessToken($personalAccessToken, $personalAccessToken->getKey().'|'.$plainTextToken);
}
public function teams()
@@ -121,7 +115,7 @@ class User extends Authenticatable implements SendsEmail
public function sendVerificationEmail()
{
- $mail = new MailMessage;
+ $mailMessage = new MailMessage;
$url = Url::temporarySignedRoute(
'verify.verify',
Carbon::now()->addMinutes(Config::get('auth.verification.expire', 60)),
@@ -130,11 +124,11 @@ class User extends Authenticatable implements SendsEmail
'hash' => sha1($this->getEmailForVerification()),
]
);
- $mail->view('emails.email-verification', [
+ $mailMessage->view('emails.email-verification', [
'url' => $url,
]);
- $mail->subject('Coolify: Verify your email.');
- send_user_an_email($mail, $this->email);
+ $mailMessage->subject('Coolify: Verify your email.');
+ send_user_an_email($mailMessage, $this->email);
}
public function sendPasswordResetNotification($token): void
@@ -144,7 +138,11 @@ class User extends Authenticatable implements SendsEmail
public function isAdmin()
{
- return $this->role() === 'admin' || $this->role() === 'owner';
+ if ($this->role() === 'admin') {
+ return true;
+ }
+
+ return $this->role() === 'owner';
}
public function isOwner()
@@ -181,11 +179,7 @@ class User extends Authenticatable implements SendsEmail
{
$found_root_team = Auth::user()->teams->filter(function ($team) {
if ($team->id == 0) {
- if (! Auth::user()->isAdmin()) {
- return false;
- }
-
- return true;
+ return (bool) Auth::user()->isAdmin();
}
return false;
@@ -201,7 +195,7 @@ class User extends Authenticatable implements SendsEmail
return Auth::user()->teams[0];
}
- return Team::find(session('currentTeam')->id);
+ return Team::query()->find(session('currentTeam')->id);
});
}
@@ -221,4 +215,13 @@ class User extends Authenticatable implements SendsEmail
return data_get($user, 'pivot.role');
}
+
+ protected function casts(): array
+ {
+ return [
+ 'email_verified_at' => 'datetime',
+ 'force_password_reset' => 'boolean',
+ 'show_boarding' => 'boolean',
+ ];
+ }
}
diff --git a/app/Models/Webhook.php b/app/Models/Webhook.php
index 8e2b62955..f4d7c3de9 100644
--- a/app/Models/Webhook.php
+++ b/app/Models/Webhook.php
@@ -8,8 +8,11 @@ class Webhook extends Model
{
protected $guarded = [];
- protected $casts = [
- 'type' => 'string',
- 'payload' => 'encrypted',
- ];
+ protected function casts(): array
+ {
+ return [
+ 'type' => 'string',
+ 'payload' => 'encrypted',
+ ];
+ }
}
diff --git a/app/Notifications/Application/DeploymentFailed.php b/app/Notifications/Application/DeploymentFailed.php
index 0c09b1dbd..37760d086 100644
--- a/app/Notifications/Application/DeploymentFailed.php
+++ b/app/Notifications/Application/DeploymentFailed.php
@@ -30,12 +30,12 @@ class DeploymentFailed extends CustomEmailNotification
public ?string $fqdn = null;
- public function __construct(Application $application, string $deployment_uuid, ?ApplicationPreview $preview = null)
+ public function __construct(Application $application, string $deployment_uuid, ?ApplicationPreview $applicationPreview = null)
{
$this->onQueue('high');
$this->application = $application;
$this->deployment_uuid = $deployment_uuid;
- $this->preview = $preview;
+ $this->preview = $applicationPreview;
$this->application_name = data_get($application, 'name');
$this->project_uuid = data_get($application, 'environment.project.uuid');
$this->environment_uuid = data_get($application, 'environment.uuid');
@@ -54,28 +54,28 @@ class DeploymentFailed extends CustomEmailNotification
public function toMail(): MailMessage
{
- $mail = new MailMessage;
+ $mailMessage = new MailMessage;
$pull_request_id = data_get($this->preview, 'pull_request_id', 0);
$fqdn = $this->fqdn;
if ($pull_request_id === 0) {
- $mail->subject('Coolify: Deployment failed of '.$this->application_name.'.');
+ $mailMessage->subject('Coolify: Deployment failed of '.$this->application_name.'.');
} else {
$fqdn = $this->preview->fqdn;
- $mail->subject('Coolify: Deployment failed of pull request #'.$this->preview->pull_request_id.' of '.$this->application_name.'.');
+ $mailMessage->subject('Coolify: Deployment failed of pull request #'.$this->preview->pull_request_id.' of '.$this->application_name.'.');
}
- $mail->view('emails.application-deployment-failed', [
+ $mailMessage->view('emails.application-deployment-failed', [
'name' => $this->application_name,
'fqdn' => $fqdn,
'deployment_url' => $this->deployment_url,
'pull_request_id' => data_get($this->preview, 'pull_request_id', 0),
]);
- return $mail;
+ return $mailMessage;
}
public function toDiscord(): DiscordMessage
{
- if ($this->preview) {
+ if ($this->preview instanceof ApplicationPreview) {
$message = new DiscordMessage(
title: ':cross_mark: Deployment failed',
description: 'Pull request: '.$this->preview->pull_request_id,
@@ -92,22 +92,16 @@ class DeploymentFailed extends CustomEmailNotification
$message->addField('Domain', $this->fqdn, true);
}
} else {
- if ($this->fqdn) {
- $description = '[Open application]('.$this->fqdn.')';
- } else {
- $description = '';
- }
+ $description = $this->fqdn ? '[Open application]('.$this->fqdn.')' : '';
$message = new DiscordMessage(
title: ':cross_mark: Deployment failed',
description: $description,
color: DiscordMessage::errorColor(),
isCritical: true,
);
-
$message->addField('Project', data_get($this->application, 'environment.project.name'), true);
$message->addField('Environment', $this->environment_name, true);
$message->addField('Name', $this->application_name, true);
-
$message->addField('Deployment Logs', '[Link]('.$this->deployment_url.')');
}
@@ -116,7 +110,7 @@ class DeploymentFailed extends CustomEmailNotification
public function toTelegram(): array
{
- if ($this->preview) {
+ if ($this->preview instanceof ApplicationPreview) {
$message = 'Coolify: Pull request #'.$this->preview->pull_request_id.' of '.$this->application_name.' ('.$this->preview->fqdn.') deployment failed: ';
} else {
$message = 'Coolify: Deployment failed of '.$this->application_name.' ('.$this->fqdn.'): ';
@@ -136,7 +130,7 @@ class DeploymentFailed extends CustomEmailNotification
public function toPushover(): PushoverMessage
{
- if ($this->preview) {
+ if ($this->preview instanceof ApplicationPreview) {
$title = "Pull request #{$this->preview->pull_request_id} deployment failed";
$message = "Pull request deployment failed for {$this->application_name}";
} else {
@@ -161,7 +155,7 @@ class DeploymentFailed extends CustomEmailNotification
public function toSlack(): SlackMessage
{
- if ($this->preview) {
+ if ($this->preview instanceof ApplicationPreview) {
$title = "Pull request #{$this->preview->pull_request_id} deployment failed";
$description = "Pull request deployment failed for {$this->application_name}";
if ($this->preview->fqdn) {
diff --git a/app/Notifications/Application/DeploymentSuccess.php b/app/Notifications/Application/DeploymentSuccess.php
index e1067e9bc..163298845 100644
--- a/app/Notifications/Application/DeploymentSuccess.php
+++ b/app/Notifications/Application/DeploymentSuccess.php
@@ -30,12 +30,12 @@ class DeploymentSuccess extends CustomEmailNotification
public ?string $fqdn;
- public function __construct(Application $application, string $deployment_uuid, ?ApplicationPreview $preview = null)
+ public function __construct(Application $application, string $deployment_uuid, ?ApplicationPreview $applicationPreview = null)
{
$this->onQueue('high');
$this->application = $application;
$this->deployment_uuid = $deployment_uuid;
- $this->preview = $preview;
+ $this->preview = $applicationPreview;
$this->application_name = data_get($application, 'name');
$this->project_uuid = data_get($application, 'environment.project.uuid');
$this->environment_uuid = data_get($application, 'environment.uuid');
@@ -54,28 +54,28 @@ class DeploymentSuccess extends CustomEmailNotification
public function toMail(): MailMessage
{
- $mail = new MailMessage;
+ $mailMessage = new MailMessage;
$pull_request_id = data_get($this->preview, 'pull_request_id', 0);
$fqdn = $this->fqdn;
if ($pull_request_id === 0) {
- $mail->subject("Coolify: New version is deployed of {$this->application_name}");
+ $mailMessage->subject("Coolify: New version is deployed of {$this->application_name}");
} else {
$fqdn = $this->preview->fqdn;
- $mail->subject("Coolify: Pull request #{$pull_request_id} of {$this->application_name} deployed successfully");
+ $mailMessage->subject("Coolify: Pull request #{$pull_request_id} of {$this->application_name} deployed successfully");
}
- $mail->view('emails.application-deployment-success', [
+ $mailMessage->view('emails.application-deployment-success', [
'name' => $this->application_name,
'fqdn' => $fqdn,
'deployment_url' => $this->deployment_url,
'pull_request_id' => $pull_request_id,
]);
- return $mail;
+ return $mailMessage;
}
public function toDiscord(): DiscordMessage
{
- if ($this->preview) {
+ if ($this->preview instanceof ApplicationPreview) {
$message = new DiscordMessage(
title: ':white_check_mark: Preview deployment successful',
description: 'Pull request: '.$this->preview->pull_request_id,
@@ -91,11 +91,7 @@ class DeploymentSuccess extends CustomEmailNotification
$message->addField('Name', $this->application_name, true);
$message->addField('Deployment logs', '[Link]('.$this->deployment_url.')');
} else {
- if ($this->fqdn) {
- $description = '[Open application]('.$this->fqdn.')';
- } else {
- $description = '';
- }
+ $description = $this->fqdn ? '[Open application]('.$this->fqdn.')' : '';
$message = new DiscordMessage(
title: ':white_check_mark: New version successfully deployed',
description: $description,
@@ -104,7 +100,6 @@ class DeploymentSuccess extends CustomEmailNotification
$message->addField('Project', data_get($this->application, 'environment.project.name'), true);
$message->addField('Environment', $this->environment_name, true);
$message->addField('Name', $this->application_name, true);
-
$message->addField('Deployment logs', '[Link]('.$this->deployment_url.')');
}
@@ -113,7 +108,7 @@ class DeploymentSuccess extends CustomEmailNotification
public function toTelegram(): array
{
- if ($this->preview) {
+ if ($this->preview instanceof ApplicationPreview) {
$message = 'Coolify: New PR'.$this->preview->pull_request_id.' version successfully deployed of '.$this->application_name.'';
if ($this->preview->fqdn) {
$buttons[] = [
@@ -145,7 +140,7 @@ class DeploymentSuccess extends CustomEmailNotification
public function toPushover(): PushoverMessage
{
- if ($this->preview) {
+ if ($this->preview instanceof ApplicationPreview) {
$title = "Pull request #{$this->preview->pull_request_id} successfully deployed";
$message = 'New PR'.$this->preview->pull_request_id.' version successfully deployed of '.$this->application_name.'';
if ($this->preview->fqdn) {
@@ -181,7 +176,7 @@ class DeploymentSuccess extends CustomEmailNotification
public function toSlack(): SlackMessage
{
- if ($this->preview) {
+ if ($this->preview instanceof ApplicationPreview) {
$title = "Pull request #{$this->preview->pull_request_id} successfully deployed";
$description = "New version successfully deployed for {$this->application_name}";
if ($this->preview->fqdn) {
diff --git a/app/Notifications/Application/StatusChanged.php b/app/Notifications/Application/StatusChanged.php
index 669f6e584..d9fa18e40 100644
--- a/app/Notifications/Application/StatusChanged.php
+++ b/app/Notifications/Application/StatusChanged.php
@@ -23,18 +23,18 @@ class StatusChanged extends CustomEmailNotification
public ?string $fqdn;
- public function __construct(public Application $resource)
+ public function __construct(public Application $application)
{
$this->onQueue('high');
- $this->resource_name = data_get($resource, 'name');
- $this->project_uuid = data_get($resource, 'environment.project.uuid');
- $this->environment_uuid = data_get($resource, 'environment.uuid');
- $this->environment_name = data_get($resource, 'environment.name');
- $this->fqdn = data_get($resource, 'fqdn', null);
+ $this->resource_name = data_get($application, 'name');
+ $this->project_uuid = data_get($application, 'environment.project.uuid');
+ $this->environment_uuid = data_get($application, 'environment.uuid');
+ $this->environment_name = data_get($application, 'environment.name');
+ $this->fqdn = data_get($application, 'fqdn', null);
if (str($this->fqdn)->explode(',')->count() > 1) {
$this->fqdn = str($this->fqdn)->explode(',')->first();
}
- $this->resource_url = base_url()."/project/{$this->project_uuid}/environments/{$this->environment_uuid}/application/{$this->resource->uuid}";
+ $this->resource_url = base_url()."/project/{$this->project_uuid}/environments/{$this->environment_uuid}/application/{$this->application->uuid}";
}
public function via(object $notifiable): array
@@ -44,16 +44,16 @@ class StatusChanged extends CustomEmailNotification
public function toMail(): MailMessage
{
- $mail = new MailMessage;
+ $mailMessage = new MailMessage;
$fqdn = $this->fqdn;
- $mail->subject("Coolify: {$this->resource_name} has been stopped");
- $mail->view('emails.application-status-changes', [
+ $mailMessage->subject("Coolify: {$this->resource_name} has been stopped");
+ $mailMessage->view('emails.application-status-changes', [
'name' => $this->resource_name,
'fqdn' => $fqdn,
'resource_url' => $this->resource_url,
]);
- return $mail;
+ return $mailMessage;
}
public function toDiscord(): DiscordMessage
@@ -103,7 +103,7 @@ class StatusChanged extends CustomEmailNotification
$title = 'Application stopped';
$description = "{$this->resource_name} has been stopped";
- $description .= "\n\n**Project:** ".data_get($this->resource, 'environment.project.name');
+ $description .= "\n\n**Project:** ".data_get($this->application, 'environment.project.name');
$description .= "\n**Environment:** {$this->environment_name}";
$description .= "\n**Application URL:** {$this->resource_url}";
diff --git a/app/Notifications/Channels/DiscordChannel.php b/app/Notifications/Channels/DiscordChannel.php
index 362006d8e..cf3613df0 100644
--- a/app/Notifications/Channels/DiscordChannel.php
+++ b/app/Notifications/Channels/DiscordChannel.php
@@ -10,11 +10,11 @@ class DiscordChannel
/**
* Send the given notification.
*/
- public function send(SendsDiscord $notifiable, Notification $notification): void
+ public function send(SendsDiscord $sendsDiscord, Notification $notification): void
{
$message = $notification->toDiscord();
- $discordSettings = $notifiable->discordNotificationSettings;
+ $discordSettings = $sendsDiscord->discordNotificationSettings;
if (! $discordSettings || ! $discordSettings->isEnabled() || ! $discordSettings->discord_webhook_url) {
return;
diff --git a/app/Notifications/Channels/EmailChannel.php b/app/Notifications/Channels/EmailChannel.php
index 6ffe5c4d7..1289e2b57 100644
--- a/app/Notifications/Channels/EmailChannel.php
+++ b/app/Notifications/Channels/EmailChannel.php
@@ -9,16 +9,16 @@ use Illuminate\Support\Facades\Mail;
class EmailChannel
{
- public function send(SendsEmail $notifiable, Notification $notification): void
+ public function send(SendsEmail $sendsEmail, Notification $notification): void
{
try {
- $this->bootConfigs($notifiable);
- $recipients = $notifiable->getRecipients($notification);
+ $this->bootConfigs($sendsEmail);
+ $recipients = $sendsEmail->getRecipients($notification);
if (count($recipients) === 0) {
throw new Exception('No email recipients found');
}
- $mailMessage = $notification->toMail($notifiable);
+ $mailMessage = $notification->toMail($sendsEmail);
Mail::send(
[],
[],
diff --git a/app/Notifications/Channels/PushoverChannel.php b/app/Notifications/Channels/PushoverChannel.php
index 3d3728d01..663db4aa7 100644
--- a/app/Notifications/Channels/PushoverChannel.php
+++ b/app/Notifications/Channels/PushoverChannel.php
@@ -7,10 +7,10 @@ use Illuminate\Notifications\Notification;
class PushoverChannel
{
- public function send(SendsPushover $notifiable, Notification $notification): void
+ public function send(SendsPushover $sendsPushover, Notification $notification): void
{
$message = $notification->toPushover();
- $pushoverSettings = $notifiable->pushoverNotificationSettings;
+ $pushoverSettings = $sendsPushover->pushoverNotificationSettings;
if (! $pushoverSettings || ! $pushoverSettings->isEnabled() || ! $pushoverSettings->pushover_user_key || ! $pushoverSettings->pushover_api_token) {
return;
diff --git a/app/Notifications/Channels/SlackChannel.php b/app/Notifications/Channels/SlackChannel.php
index cddb7a561..f85de5c82 100644
--- a/app/Notifications/Channels/SlackChannel.php
+++ b/app/Notifications/Channels/SlackChannel.php
@@ -10,10 +10,10 @@ class SlackChannel
/**
* Send the given notification.
*/
- public function send(SendsSlack $notifiable, Notification $notification): void
+ public function send(SendsSlack $sendsSlack, Notification $notification): void
{
$message = $notification->toSlack();
- $slackSettings = $notifiable->slackNotificationSettings;
+ $slackSettings = $sendsSlack->slackNotificationSettings;
if (! $slackSettings || ! $slackSettings->isEnabled() || ! $slackSettings->slack_webhook_url) {
return;
diff --git a/app/Notifications/Channels/TelegramChannel.php b/app/Notifications/Channels/TelegramChannel.php
index ea4ab7171..43f8fc423 100644
--- a/app/Notifications/Channels/TelegramChannel.php
+++ b/app/Notifications/Channels/TelegramChannel.php
@@ -3,6 +3,20 @@
namespace App\Notifications\Channels;
use App\Jobs\SendMessageToTelegramJob;
+use App\Notifications\Application\DeploymentFailed;
+use App\Notifications\Application\DeploymentSuccess;
+use App\Notifications\Application\StatusChanged;
+use App\Notifications\Container\ContainerRestarted;
+use App\Notifications\Container\ContainerStopped;
+use App\Notifications\Database\BackupFailed;
+use App\Notifications\Database\BackupSuccess;
+use App\Notifications\ScheduledTask\TaskFailed;
+use App\Notifications\ScheduledTask\TaskSuccess;
+use App\Notifications\Server\DockerCleanupFailed;
+use App\Notifications\Server\DockerCleanupSuccess;
+use App\Notifications\Server\HighDiskUsage;
+use App\Notifications\Server\Reachable;
+use App\Notifications\Server\Unreachable;
class TelegramChannel
{
@@ -17,23 +31,23 @@ class TelegramChannel
$chatId = $settings->telegram_chat_id;
$threadId = match (get_class($notification)) {
- \App\Notifications\Application\DeploymentSuccess::class => $settings->telegram_notifications_deployment_success_thread_id,
- \App\Notifications\Application\DeploymentFailed::class => $settings->telegram_notifications_deployment_failure_thread_id,
- \App\Notifications\Application\StatusChanged::class,
- \App\Notifications\Container\ContainerRestarted::class,
- \App\Notifications\Container\ContainerStopped::class => $settings->telegram_notifications_status_change_thread_id,
+ DeploymentSuccess::class => $settings->telegram_notifications_deployment_success_thread_id,
+ DeploymentFailed::class => $settings->telegram_notifications_deployment_failure_thread_id,
+ StatusChanged::class,
+ ContainerRestarted::class,
+ ContainerStopped::class => $settings->telegram_notifications_status_change_thread_id,
- \App\Notifications\Database\BackupSuccess::class => $settings->telegram_notifications_backup_success_thread_id,
- \App\Notifications\Database\BackupFailed::class => $settings->telegram_notifications_backup_failure_thread_id,
+ BackupSuccess::class => $settings->telegram_notifications_backup_success_thread_id,
+ BackupFailed::class => $settings->telegram_notifications_backup_failure_thread_id,
- \App\Notifications\ScheduledTask\TaskSuccess::class => $settings->telegram_notifications_scheduled_task_success_thread_id,
- \App\Notifications\ScheduledTask\TaskFailed::class => $settings->telegram_notifications_scheduled_task_failure_thread_id,
+ TaskSuccess::class => $settings->telegram_notifications_scheduled_task_success_thread_id,
+ TaskFailed::class => $settings->telegram_notifications_scheduled_task_failure_thread_id,
- \App\Notifications\Server\DockerCleanupSuccess::class => $settings->telegram_notifications_docker_cleanup_success_thread_id,
- \App\Notifications\Server\DockerCleanupFailed::class => $settings->telegram_notifications_docker_cleanup_failure_thread_id,
- \App\Notifications\Server\HighDiskUsage::class => $settings->telegram_notifications_server_disk_usage_thread_id,
- \App\Notifications\Server\Unreachable::class => $settings->telegram_notifications_server_unreachable_thread_id,
- \App\Notifications\Server\Reachable::class => $settings->telegram_notifications_server_reachable_thread_id,
+ DockerCleanupSuccess::class => $settings->telegram_notifications_docker_cleanup_success_thread_id,
+ DockerCleanupFailed::class => $settings->telegram_notifications_docker_cleanup_failure_thread_id,
+ HighDiskUsage::class => $settings->telegram_notifications_server_disk_usage_thread_id,
+ Unreachable::class => $settings->telegram_notifications_server_unreachable_thread_id,
+ Reachable::class => $settings->telegram_notifications_server_reachable_thread_id,
default => null,
};
diff --git a/app/Notifications/Channels/TransactionalEmailChannel.php b/app/Notifications/Channels/TransactionalEmailChannel.php
index 761780231..91bfaa8b6 100644
--- a/app/Notifications/Channels/TransactionalEmailChannel.php
+++ b/app/Notifications/Channels/TransactionalEmailChannel.php
@@ -10,18 +10,18 @@ use Illuminate\Support\Facades\Mail;
class TransactionalEmailChannel
{
- public function send(User $notifiable, Notification $notification): void
+ public function send(User $user, Notification $notification): void
{
$settings = instanceSettings();
if (! data_get($settings, 'smtp_enabled') && ! data_get($settings, 'resend_enabled')) {
return;
}
- $email = $notifiable->email;
+ $email = $user->email;
if (! $email) {
return;
}
$this->bootConfigs();
- $mailMessage = $notification->toMail($notifiable);
+ $mailMessage = $notification->toMail($user);
Mail::send(
[],
[],
diff --git a/app/Notifications/Container/ContainerRestarted.php b/app/Notifications/Container/ContainerRestarted.php
index 68fc6b019..91fdc9e2b 100644
--- a/app/Notifications/Container/ContainerRestarted.php
+++ b/app/Notifications/Container/ContainerRestarted.php
@@ -23,30 +23,30 @@ class ContainerRestarted extends CustomEmailNotification
public function toMail(): MailMessage
{
- $mail = new MailMessage;
- $mail->subject("Coolify: A resource ({$this->name}) has been restarted automatically on {$this->server->name}");
- $mail->view('emails.container-restarted', [
+ $mailMessage = new MailMessage;
+ $mailMessage->subject("Coolify: A resource ({$this->name}) has been restarted automatically on {$this->server->name}");
+ $mailMessage->view('emails.container-restarted', [
'containerName' => $this->name,
'serverName' => $this->server->name,
'url' => $this->url,
]);
- return $mail;
+ return $mailMessage;
}
public function toDiscord(): DiscordMessage
{
- $message = new DiscordMessage(
+ $discordMessage = new DiscordMessage(
title: ':warning: Resource restarted',
description: "{$this->name} has been restarted automatically on {$this->server->name}.",
color: DiscordMessage::infoColor(),
);
if ($this->url) {
- $message->addField('Resource', '[Link]('.$this->url.')');
+ $discordMessage->addField('Resource', '[Link]('.$this->url.')');
}
- return $message;
+ return $discordMessage;
}
public function toTelegram(): array
diff --git a/app/Notifications/Container/ContainerStopped.php b/app/Notifications/Container/ContainerStopped.php
index 49aea196d..01955651f 100644
--- a/app/Notifications/Container/ContainerStopped.php
+++ b/app/Notifications/Container/ContainerStopped.php
@@ -23,30 +23,30 @@ class ContainerStopped extends CustomEmailNotification
public function toMail(): MailMessage
{
- $mail = new MailMessage;
- $mail->subject("Coolify: A resource has been stopped unexpectedly on {$this->server->name}");
- $mail->view('emails.container-stopped', [
+ $mailMessage = new MailMessage;
+ $mailMessage->subject("Coolify: A resource has been stopped unexpectedly on {$this->server->name}");
+ $mailMessage->view('emails.container-stopped', [
'containerName' => $this->name,
'serverName' => $this->server->name,
'url' => $this->url,
]);
- return $mail;
+ return $mailMessage;
}
public function toDiscord(): DiscordMessage
{
- $message = new DiscordMessage(
+ $discordMessage = new DiscordMessage(
title: ':cross_mark: Resource stopped',
description: "{$this->name} has been stopped unexpectedly on {$this->server->name}.",
color: DiscordMessage::errorColor(),
);
if ($this->url) {
- $message->addField('Resource', '[Link]('.$this->url.')');
+ $discordMessage->addField('Resource', '[Link]('.$this->url.')');
}
- return $message;
+ return $discordMessage;
}
public function toTelegram(): array
@@ -87,7 +87,6 @@ class ContainerStopped extends CustomEmailNotification
);
}
-
public function toSlack(): SlackMessage
{
$title = 'Resource stopped';
diff --git a/app/Notifications/Database/BackupFailed.php b/app/Notifications/Database/BackupFailed.php
index 6dcb70583..4229c9558 100644
--- a/app/Notifications/Database/BackupFailed.php
+++ b/app/Notifications/Database/BackupFailed.php
@@ -15,11 +15,11 @@ class BackupFailed extends CustomEmailNotification
public string $frequency;
- public function __construct(ScheduledDatabaseBackup $backup, public $database, public $output, public $database_name)
+ public function __construct(ScheduledDatabaseBackup $scheduledDatabaseBackup, public $database, public $output, public $database_name)
{
$this->onQueue('high');
$this->name = $database->name;
- $this->frequency = $backup->frequency;
+ $this->frequency = $scheduledDatabaseBackup->frequency;
}
public function via(object $notifiable): array
@@ -29,31 +29,31 @@ class BackupFailed extends CustomEmailNotification
public function toMail(): MailMessage
{
- $mail = new MailMessage;
- $mail->subject("Coolify: [ACTION REQUIRED] Database Backup FAILED for {$this->database->name}");
- $mail->view('emails.backup-failed', [
+ $mailMessage = new MailMessage;
+ $mailMessage->subject("Coolify: [ACTION REQUIRED] Database Backup FAILED for {$this->database->name}");
+ $mailMessage->view('emails.backup-failed', [
'name' => $this->name,
'database_name' => $this->database_name,
'frequency' => $this->frequency,
'output' => $this->output,
]);
- return $mail;
+ return $mailMessage;
}
public function toDiscord(): DiscordMessage
{
- $message = new DiscordMessage(
+ $discordMessage = new DiscordMessage(
title: ':cross_mark: Database backup failed',
description: "Database backup for {$this->name} (db:{$this->database_name}) has FAILED.",
color: DiscordMessage::errorColor(),
isCritical: true,
);
- $message->addField('Frequency', $this->frequency, true);
- $message->addField('Output', $this->output);
+ $discordMessage->addField('Frequency', $this->frequency, true);
+ $discordMessage->addField('Output', $this->output);
- return $message;
+ return $discordMessage;
}
public function toTelegram(): array
diff --git a/app/Notifications/Database/BackupSuccess.php b/app/Notifications/Database/BackupSuccess.php
index 4c3e8e060..8696d52fc 100644
--- a/app/Notifications/Database/BackupSuccess.php
+++ b/app/Notifications/Database/BackupSuccess.php
@@ -15,12 +15,12 @@ class BackupSuccess extends CustomEmailNotification
public string $frequency;
- public function __construct(ScheduledDatabaseBackup $backup, public $database, public $database_name)
+ public function __construct(ScheduledDatabaseBackup $scheduledDatabaseBackup, public $database, public $database_name)
{
$this->onQueue('high');
$this->name = $database->name;
- $this->frequency = $backup->frequency;
+ $this->frequency = $scheduledDatabaseBackup->frequency;
}
public function via(object $notifiable): array
@@ -30,28 +30,28 @@ class BackupSuccess extends CustomEmailNotification
public function toMail(): MailMessage
{
- $mail = new MailMessage;
- $mail->subject("Coolify: Backup successfully done for {$this->database->name}");
- $mail->view('emails.backup-success', [
+ $mailMessage = new MailMessage;
+ $mailMessage->subject("Coolify: Backup successfully done for {$this->database->name}");
+ $mailMessage->view('emails.backup-success', [
'name' => $this->name,
'database_name' => $this->database_name,
'frequency' => $this->frequency,
]);
- return $mail;
+ return $mailMessage;
}
public function toDiscord(): DiscordMessage
{
- $message = new DiscordMessage(
+ $discordMessage = new DiscordMessage(
title: ':white_check_mark: Database backup successful',
description: "Database backup for {$this->name} (db:{$this->database_name}) was successful.",
color: DiscordMessage::successColor(),
);
- $message->addField('Frequency', $this->frequency, true);
+ $discordMessage->addField('Frequency', $this->frequency, true);
- return $message;
+ return $discordMessage;
}
public function toTelegram(): array
@@ -63,7 +63,6 @@ class BackupSuccess extends CustomEmailNotification
];
}
-
public function toPushover(): PushoverMessage
{
return new PushoverMessage(
@@ -73,7 +72,6 @@ class BackupSuccess extends CustomEmailNotification
);
}
-
public function toSlack(): SlackMessage
{
$title = 'Database backup successful';
diff --git a/app/Notifications/ScheduledTask/TaskFailed.php b/app/Notifications/ScheduledTask/TaskFailed.php
index c4d92f213..9d43808c6 100644
--- a/app/Notifications/ScheduledTask/TaskFailed.php
+++ b/app/Notifications/ScheduledTask/TaskFailed.php
@@ -13,13 +13,13 @@ class TaskFailed extends CustomEmailNotification
{
public ?string $url = null;
- public function __construct(public ScheduledTask $task, public string $output)
+ public function __construct(public ScheduledTask $scheduledTask, public string $output)
{
$this->onQueue('high');
- if ($task->application) {
- $this->url = $task->application->taskLink($task->uuid);
- } elseif ($task->service) {
- $this->url = $task->service->taskLink($task->uuid);
+ if ($scheduledTask->application) {
+ $this->url = $scheduledTask->application->taskLink($scheduledTask->uuid);
+ } elseif ($scheduledTask->service) {
+ $this->url = $scheduledTask->service->taskLink($scheduledTask->uuid);
}
}
@@ -30,39 +30,39 @@ class TaskFailed extends CustomEmailNotification
public function toMail(): MailMessage
{
- $mail = new MailMessage;
- $mail->subject("Coolify: [ACTION REQUIRED] Scheduled task ({$this->task->name}) failed.");
- $mail->view('emails.scheduled-task-failed', [
- 'task' => $this->task,
+ $mailMessage = new MailMessage;
+ $mailMessage->subject("Coolify: [ACTION REQUIRED] Scheduled task ({$this->scheduledTask->name}) failed.");
+ $mailMessage->view('emails.scheduled-task-failed', [
+ 'task' => $this->scheduledTask,
'url' => $this->url,
'output' => $this->output,
]);
- return $mail;
+ return $mailMessage;
}
public function toDiscord(): DiscordMessage
{
- $message = new DiscordMessage(
+ $discordMessage = new DiscordMessage(
title: ':cross_mark: Scheduled task failed',
- description: "Scheduled task ({$this->task->name}) failed.",
+ description: "Scheduled task ({$this->scheduledTask->name}) failed.",
color: DiscordMessage::errorColor(),
);
if ($this->url) {
- $message->addField('Scheduled task', '[Link]('.$this->url.')');
+ $discordMessage->addField('Scheduled task', '[Link]('.$this->url.')');
}
- return $message;
+ return $discordMessage;
}
public function toTelegram(): array
{
- $message = "Coolify: Scheduled task ({$this->task->name}) failed with output: {$this->output}";
+ $message = "Coolify: Scheduled task ({$this->scheduledTask->name}) failed with output: {$this->output}";
if ($this->url) {
$buttons[] = [
'text' => 'Open task in Coolify',
- 'url' => (string) $this->url,
+ 'url' => $this->url,
];
}
@@ -73,9 +73,9 @@ class TaskFailed extends CustomEmailNotification
public function toPushover(): PushoverMessage
{
- $message = "Scheduled task ({$this->task->name}) failed
";
+ $message = "Scheduled task ({$this->scheduledTask->name}) failed
";
- if ($this->output) {
+ if ($this->output !== '' && $this->output !== '0') {
$message .= "
Error Output:{$this->output}";
}
@@ -83,7 +83,7 @@ class TaskFailed extends CustomEmailNotification
if ($this->url) {
$buttons[] = [
'text' => 'Open task in Coolify',
- 'url' => (string) $this->url,
+ 'url' => $this->url,
];
}
@@ -98,9 +98,9 @@ class TaskFailed extends CustomEmailNotification
public function toSlack(): SlackMessage
{
$title = 'Scheduled task failed';
- $description = "Scheduled task ({$this->task->name}) failed.";
+ $description = "Scheduled task ({$this->scheduledTask->name}) failed.";
- if ($this->output) {
+ if ($this->output !== '' && $this->output !== '0') {
$description .= "\n\n**Error Output:**\n{$this->output}";
}
diff --git a/app/Notifications/ScheduledTask/TaskSuccess.php b/app/Notifications/ScheduledTask/TaskSuccess.php
index 5d4154e7a..4b55a389f 100644
--- a/app/Notifications/ScheduledTask/TaskSuccess.php
+++ b/app/Notifications/ScheduledTask/TaskSuccess.php
@@ -13,13 +13,13 @@ class TaskSuccess extends CustomEmailNotification
{
public ?string $url = null;
- public function __construct(public ScheduledTask $task, public string $output)
+ public function __construct(public ScheduledTask $scheduledTask, public string $output)
{
$this->onQueue('high');
- if ($task->application) {
- $this->url = $task->application->taskLink($task->uuid);
- } elseif ($task->service) {
- $this->url = $task->service->taskLink($task->uuid);
+ if ($scheduledTask->application) {
+ $this->url = $scheduledTask->application->taskLink($scheduledTask->uuid);
+ } elseif ($scheduledTask->service) {
+ $this->url = $scheduledTask->service->taskLink($scheduledTask->uuid);
}
}
@@ -30,39 +30,39 @@ class TaskSuccess extends CustomEmailNotification
public function toMail(): MailMessage
{
- $mail = new MailMessage;
- $mail->subject("Coolify: Scheduled task ({$this->task->name}) succeeded.");
- $mail->view('emails.scheduled-task-success', [
- 'task' => $this->task,
+ $mailMessage = new MailMessage;
+ $mailMessage->subject("Coolify: Scheduled task ({$this->scheduledTask->name}) succeeded.");
+ $mailMessage->view('emails.scheduled-task-success', [
+ 'task' => $this->scheduledTask,
'url' => $this->url,
'output' => $this->output,
]);
- return $mail;
+ return $mailMessage;
}
public function toDiscord(): DiscordMessage
{
- $message = new DiscordMessage(
+ $discordMessage = new DiscordMessage(
title: ':white_check_mark: Scheduled task succeeded',
- description: "Scheduled task ({$this->task->name}) succeeded.",
+ description: "Scheduled task ({$this->scheduledTask->name}) succeeded.",
color: DiscordMessage::successColor(),
);
if ($this->url) {
- $message->addField('Scheduled task', '[Link]('.$this->url.')');
+ $discordMessage->addField('Scheduled task', '[Link]('.$this->url.')');
}
- return $message;
+ return $discordMessage;
}
public function toTelegram(): array
{
- $message = "Coolify: Scheduled task ({$this->task->name}) succeeded.";
+ $message = "Coolify: Scheduled task ({$this->scheduledTask->name}) succeeded.";
if ($this->url) {
$buttons[] = [
'text' => 'Open task in Coolify',
- 'url' => (string) $this->url,
+ 'url' => $this->url,
];
}
@@ -73,12 +73,12 @@ class TaskSuccess extends CustomEmailNotification
public function toPushover(): PushoverMessage
{
- $message = "Coolify: Scheduled task ({$this->task->name}) succeeded.";
+ $message = "Coolify: Scheduled task ({$this->scheduledTask->name}) succeeded.";
$buttons = [];
if ($this->url) {
$buttons[] = [
'text' => 'Open task in Coolify',
- 'url' => (string) $this->url,
+ 'url' => $this->url,
];
}
@@ -93,7 +93,7 @@ class TaskSuccess extends CustomEmailNotification
public function toSlack(): SlackMessage
{
$title = 'Scheduled task succeeded';
- $description = "Scheduled task ({$this->task->name}) succeeded.";
+ $description = "Scheduled task ({$this->scheduledTask->name}) succeeded.";
if ($this->url) {
$description .= "\n\n**Task URL:** {$this->url}";
diff --git a/app/Notifications/Server/DockerCleanupFailed.php b/app/Notifications/Server/DockerCleanupFailed.php
index 0291eed19..ab6485dfc 100644
--- a/app/Notifications/Server/DockerCleanupFailed.php
+++ b/app/Notifications/Server/DockerCleanupFailed.php
@@ -23,14 +23,14 @@ class DockerCleanupFailed extends CustomEmailNotification
public function toMail(): MailMessage
{
- $mail = new MailMessage;
- $mail->subject("Coolify: [ACTION REQUIRED] Docker cleanup job failed on {$this->server->name}");
- $mail->view('emails.docker-cleanup-failed', [
+ $mailMessage = new MailMessage;
+ $mailMessage->subject("Coolify: [ACTION REQUIRED] Docker cleanup job failed on {$this->server->name}");
+ $mailMessage->view('emails.docker-cleanup-failed', [
'name' => $this->server->name,
'text' => $this->message,
]);
- return $mail;
+ return $mailMessage;
}
public function toDiscord(): DiscordMessage
diff --git a/app/Notifications/Server/DockerCleanupSuccess.php b/app/Notifications/Server/DockerCleanupSuccess.php
index 1a652d189..be0fb6dc6 100644
--- a/app/Notifications/Server/DockerCleanupSuccess.php
+++ b/app/Notifications/Server/DockerCleanupSuccess.php
@@ -23,14 +23,14 @@ class DockerCleanupSuccess extends CustomEmailNotification
public function toMail(): MailMessage
{
- $mail = new MailMessage;
- $mail->subject("Coolify: Docker cleanup job succeeded on {$this->server->name}");
- $mail->view('emails.docker-cleanup-success', [
+ $mailMessage = new MailMessage;
+ $mailMessage->subject("Coolify: Docker cleanup job succeeded on {$this->server->name}");
+ $mailMessage->view('emails.docker-cleanup-success', [
'name' => $this->server->name,
'text' => $this->message,
]);
- return $mail;
+ return $mailMessage;
}
public function toDiscord(): DiscordMessage
diff --git a/app/Notifications/Server/ForceDisabled.php b/app/Notifications/Server/ForceDisabled.php
index 7a1f7bcbf..3b1a1187b 100644
--- a/app/Notifications/Server/ForceDisabled.php
+++ b/app/Notifications/Server/ForceDisabled.php
@@ -23,26 +23,26 @@ class ForceDisabled extends CustomEmailNotification
public function toMail(): MailMessage
{
- $mail = new MailMessage;
- $mail->subject("Coolify: Server ({$this->server->name}) disabled because it is not paid!");
- $mail->view('emails.server-force-disabled', [
+ $mailMessage = new MailMessage;
+ $mailMessage->subject("Coolify: Server ({$this->server->name}) disabled because it is not paid!");
+ $mailMessage->view('emails.server-force-disabled', [
'name' => $this->server->name,
]);
- return $mail;
+ return $mailMessage;
}
public function toDiscord(): DiscordMessage
{
- $message = new DiscordMessage(
+ $discordMessage = new DiscordMessage(
title: ':cross_mark: Server disabled',
description: "Server ({$this->server->name}) disabled because it is not paid!",
color: DiscordMessage::errorColor(),
);
- $message->addField('Please update your subscription to enable the server again!', '[Link](https://app.coolify.io/subscriptions)');
+ $discordMessage->addField('Please update your subscription to enable the server again!', '[Link](https://app.coolify.io/subscriptions)');
- return $message;
+ return $discordMessage;
}
public function toTelegram(): array
diff --git a/app/Notifications/Server/ForceEnabled.php b/app/Notifications/Server/ForceEnabled.php
index 36dad3c60..dea66d3db 100644
--- a/app/Notifications/Server/ForceEnabled.php
+++ b/app/Notifications/Server/ForceEnabled.php
@@ -23,13 +23,13 @@ class ForceEnabled extends CustomEmailNotification
public function toMail(): MailMessage
{
- $mail = new MailMessage;
- $mail->subject("Coolify: Server ({$this->server->name}) enabled again!");
- $mail->view('emails.server-force-enabled', [
+ $mailMessage = new MailMessage;
+ $mailMessage->subject("Coolify: Server ({$this->server->name}) enabled again!");
+ $mailMessage->view('emails.server-force-enabled', [
'name' => $this->server->name,
]);
- return $mail;
+ return $mailMessage;
}
public function toDiscord(): DiscordMessage
diff --git a/app/Notifications/Server/HighDiskUsage.php b/app/Notifications/Server/HighDiskUsage.php
index aea9abd03..805c730eb 100644
--- a/app/Notifications/Server/HighDiskUsage.php
+++ b/app/Notifications/Server/HighDiskUsage.php
@@ -23,32 +23,32 @@ class HighDiskUsage extends CustomEmailNotification
public function toMail(): MailMessage
{
- $mail = new MailMessage;
- $mail->subject("Coolify: Server ({$this->server->name}) high disk usage detected!");
- $mail->view('emails.high-disk-usage', [
+ $mailMessage = new MailMessage;
+ $mailMessage->subject("Coolify: Server ({$this->server->name}) high disk usage detected!");
+ $mailMessage->view('emails.high-disk-usage', [
'name' => $this->server->name,
'disk_usage' => $this->disk_usage,
'threshold' => $this->server_disk_usage_notification_threshold,
]);
- return $mail;
+ return $mailMessage;
}
public function toDiscord(): DiscordMessage
{
- $message = new DiscordMessage(
+ $discordMessage = new DiscordMessage(
title: ':cross_mark: High disk usage detected',
description: "Server '{$this->server->name}' high disk usage detected!",
color: DiscordMessage::errorColor(),
isCritical: true,
);
- $message->addField('Disk usage', "{$this->disk_usage}%", true);
- $message->addField('Threshold', "{$this->server_disk_usage_notification_threshold}%", true);
- $message->addField('What to do?', '[Link](https://coolify.io/docs/knowledge-base/server/automated-cleanup)', true);
- $message->addField('Change Settings', '[Threshold]('.base_url().'/server/'.$this->server->uuid.'#advanced) | [Notification]('.base_url().'/notifications/discord)');
+ $discordMessage->addField('Disk usage', "{$this->disk_usage}%", true);
+ $discordMessage->addField('Threshold', "{$this->server_disk_usage_notification_threshold}%", true);
+ $discordMessage->addField('What to do?', '[Link](https://coolify.io/docs/knowledge-base/server/automated-cleanup)', true);
+ $discordMessage->addField('Change Settings', '[Threshold]('.base_url().'/server/'.$this->server->uuid.'#advanced) | [Notification]('.base_url().'/notifications/discord)');
- return $message;
+ return $discordMessage;
}
public function toTelegram(): array
@@ -65,8 +65,8 @@ class HighDiskUsage extends CustomEmailNotification
level: 'warning',
message: "Server '{$this->server->name}' high disk usage detected!
Disk usage: {$this->disk_usage}%.
Threshold: {$this->server_disk_usage_notification_threshold}%.
Please cleanup your disk to prevent data-loss.",
buttons: [
- 'Change settings' => base_url().'/server/'.$this->server->uuid."#advanced",
- 'Tips for cleanup' => "https://coolify.io/docs/knowledge-base/server/automated-cleanup",
+ 'Change settings' => base_url().'/server/'.$this->server->uuid.'#advanced',
+ 'Tips for cleanup' => 'https://coolify.io/docs/knowledge-base/server/automated-cleanup',
],
);
}
diff --git a/app/Notifications/Server/Reachable.php b/app/Notifications/Server/Reachable.php
index e03aef6b7..357d40823 100644
--- a/app/Notifications/Server/Reachable.php
+++ b/app/Notifications/Server/Reachable.php
@@ -32,13 +32,13 @@ class Reachable extends CustomEmailNotification
public function toMail(): MailMessage
{
- $mail = new MailMessage;
- $mail->subject("Coolify: Server ({$this->server->name}) revived.");
- $mail->view('emails.server-revived', [
+ $mailMessage = new MailMessage;
+ $mailMessage->subject("Coolify: Server ({$this->server->name}) revived.");
+ $mailMessage->view('emails.server-revived', [
'name' => $this->server->name,
]);
- return $mail;
+ return $mailMessage;
}
public function toDiscord(): DiscordMessage
diff --git a/app/Notifications/Server/Unreachable.php b/app/Notifications/Server/Unreachable.php
index fe90cc610..2a2351c0b 100644
--- a/app/Notifications/Server/Unreachable.php
+++ b/app/Notifications/Server/Unreachable.php
@@ -32,26 +32,26 @@ class Unreachable extends CustomEmailNotification
public function toMail(): ?MailMessage
{
- $mail = new MailMessage;
- $mail->subject("Coolify: Your server ({$this->server->name}) is unreachable.");
- $mail->view('emails.server-lost-connection', [
+ $mailMessage = new MailMessage;
+ $mailMessage->subject("Coolify: Your server ({$this->server->name}) is unreachable.");
+ $mailMessage->view('emails.server-lost-connection', [
'name' => $this->server->name,
]);
- return $mail;
+ return $mailMessage;
}
public function toDiscord(): ?DiscordMessage
{
- $message = new DiscordMessage(
+ $discordMessage = new DiscordMessage(
title: ':cross_mark: Server unreachable',
description: "Your server '{$this->server->name}' is unreachable.",
color: DiscordMessage::errorColor(),
);
- $message->addField('IMPORTANT', 'We automatically try to revive your server and turn on all automations & integrations.');
+ $discordMessage->addField('IMPORTANT', 'We automatically try to revive your server and turn on all automations & integrations.');
- return $message;
+ return $discordMessage;
}
public function toTelegram(): ?array
diff --git a/app/Notifications/Test.php b/app/Notifications/Test.php
index 65971a0ee..91625ee6e 100644
--- a/app/Notifications/Test.php
+++ b/app/Notifications/Test.php
@@ -4,9 +4,9 @@ namespace App\Notifications;
use App\Notifications\Channels\DiscordChannel;
use App\Notifications\Channels\EmailChannel;
+use App\Notifications\Channels\PushoverChannel;
use App\Notifications\Channels\SlackChannel;
use App\Notifications\Channels\TelegramChannel;
-use App\Notifications\Channels\PushoverChannel;
use App\Notifications\Dto\DiscordMessage;
use App\Notifications\Dto\PushoverMessage;
use App\Notifications\Dto\SlackMessage;
@@ -30,7 +30,7 @@ class Test extends Notification implements ShouldQueue
public function via(object $notifiable): array
{
if ($this->channel) {
- $channels = match ($this->channel) {
+ return match ($this->channel) {
'email' => [EmailChannel::class],
'discord' => [DiscordChannel::class],
'telegram' => [TelegramChannel::class],
@@ -38,11 +38,9 @@ class Test extends Notification implements ShouldQueue
'pushover' => [PushoverChannel::class],
default => [],
};
- } else {
- $channels = $notifiable->getEnabledChannels('test');
}
- return $channels;
+ return $notifiable->getEnabledChannels('test');
}
public function middleware(object $notifiable, string $channel)
@@ -55,24 +53,24 @@ class Test extends Notification implements ShouldQueue
public function toMail(): MailMessage
{
- $mail = new MailMessage;
- $mail->subject('Coolify: Test Email');
- $mail->view('emails.test');
+ $mailMessage = new MailMessage;
+ $mailMessage->subject('Coolify: Test Email');
+ $mailMessage->view('emails.test');
- return $mail;
+ return $mailMessage;
}
public function toDiscord(): DiscordMessage
{
- $message = new DiscordMessage(
+ $discordMessage = new DiscordMessage(
title: ':white_check_mark: Test Success',
description: 'This is a test Discord notification from Coolify. :cross_mark: :warning: :information_source:',
color: DiscordMessage::successColor(),
);
- $message->addField(name: 'Dashboard', value: '[Link]('.base_url().')', inline: true);
+ $discordMessage->addField(name: 'Dashboard', value: '[Link]('.base_url().')', inline: true);
- return $message;
+ return $discordMessage;
}
public function toTelegram(): array
diff --git a/app/Notifications/TransactionalEmails/InvitationLink.php b/app/Notifications/TransactionalEmails/InvitationLink.php
index 30ace99dc..5bf143434 100644
--- a/app/Notifications/TransactionalEmails/InvitationLink.php
+++ b/app/Notifications/TransactionalEmails/InvitationLink.php
@@ -24,16 +24,16 @@ class InvitationLink extends CustomEmailNotification
public function toMail(): MailMessage
{
$invitation = TeamInvitation::whereEmail($this->user->email)->first();
- $invitation_team = Team::find($invitation->team->id);
+ $invitation_team = Team::query()->find($invitation->team->id);
- $mail = new MailMessage;
- $mail->subject('Coolify: Invitation for '.$invitation_team->name);
- $mail->view('emails.invitation-link', [
+ $mailMessage = new MailMessage;
+ $mailMessage->subject('Coolify: Invitation for '.$invitation_team->name);
+ $mailMessage->view('emails.invitation-link', [
'team' => $invitation_team->name,
'email' => $this->user->email,
'invitation_link' => $invitation->link,
]);
- return $mail;
+ return $mailMessage;
}
}
diff --git a/app/Notifications/TransactionalEmails/ResetPassword.php b/app/Notifications/TransactionalEmails/ResetPassword.php
index 3938a8da7..ffb66940f 100644
--- a/app/Notifications/TransactionalEmails/ResetPassword.php
+++ b/app/Notifications/TransactionalEmails/ResetPassword.php
@@ -3,6 +3,7 @@
namespace App\Notifications\TransactionalEmails;
use App\Models\InstanceSettings;
+use Exception;
use Illuminate\Notifications\Messages\MailMessage;
use Illuminate\Notifications\Notification;
@@ -36,7 +37,7 @@ class ResetPassword extends Notification
{
$type = set_transanctional_email_settings();
if (! $type) {
- throw new \Exception('No email settings found.');
+ throw new Exception('No email settings found.');
}
return ['mail'];
@@ -53,11 +54,11 @@ class ResetPassword extends Notification
protected function buildMailMessage($url)
{
- $mail = new MailMessage;
- $mail->subject('Coolify: Reset Password');
- $mail->view('emails.reset-password', ['url' => $url, 'count' => config('auth.passwords.'.config('auth.defaults.passwords').'.expire')]);
+ $mailMessage = new MailMessage;
+ $mailMessage->subject('Coolify: Reset Password');
+ $mailMessage->view('emails.reset-password', ['url' => $url, 'count' => config('auth.passwords.'.config('auth.defaults.passwords').'.expire')]);
- return $mail;
+ return $mailMessage;
}
protected function resetUrl($notifiable)
diff --git a/app/Notifications/TransactionalEmails/Test.php b/app/Notifications/TransactionalEmails/Test.php
index eeb32a254..96b1c8be4 100644
--- a/app/Notifications/TransactionalEmails/Test.php
+++ b/app/Notifications/TransactionalEmails/Test.php
@@ -20,10 +20,10 @@ class Test extends CustomEmailNotification
public function toMail(): MailMessage
{
- $mail = new MailMessage;
- $mail->subject('Coolify: Test Email');
- $mail->view('emails.test');
+ $mailMessage = new MailMessage;
+ $mailMessage->subject('Coolify: Test Email');
+ $mailMessage->view('emails.test');
- return $mail;
+ return $mailMessage;
}
}
diff --git a/app/Policies/ApplicationPolicy.php b/app/Policies/ApplicationPolicy.php
index 05fc289b8..e7fed03b1 100644
--- a/app/Policies/ApplicationPolicy.php
+++ b/app/Policies/ApplicationPolicy.php
@@ -44,11 +44,7 @@ class ApplicationPolicy
*/
public function delete(User $user, Application $application): bool
{
- if ($user->isAdmin()) {
- return true;
- }
-
- return false;
+ return (bool) $user->isAdmin();
}
/**
diff --git a/app/Policies/ServicePolicy.php b/app/Policies/ServicePolicy.php
index 51a6d8116..5a764a25c 100644
--- a/app/Policies/ServicePolicy.php
+++ b/app/Policies/ServicePolicy.php
@@ -44,11 +44,7 @@ class ServicePolicy
*/
public function delete(User $user, Service $service): bool
{
- if ($user->isAdmin()) {
- return true;
- }
-
- return false;
+ return (bool) $user->isAdmin();
}
/**
@@ -64,19 +60,11 @@ class ServicePolicy
*/
public function forceDelete(User $user, Service $service): bool
{
- if ($user->isAdmin()) {
- return true;
- }
-
- return false;
+ return (bool) $user->isAdmin();
}
public function stop(User $user, Service $service): bool
{
- if ($user->isAdmin()) {
- return true;
- }
-
- return false;
+ return (bool) $user->isAdmin();
}
}
diff --git a/app/Providers/AppServiceProvider.php b/app/Providers/AppServiceProvider.php
index 2ce94201c..d1b5b99b0 100644
--- a/app/Providers/AppServiceProvider.php
+++ b/app/Providers/AppServiceProvider.php
@@ -8,29 +8,32 @@ use Illuminate\Support\Facades\Http;
use Illuminate\Support\ServiceProvider;
use Illuminate\Validation\Rules\Password;
use Laravel\Sanctum\Sanctum;
+use Laravel\Telescope\TelescopeServiceProvider;
+use SocialiteProviders\Authentik\Provider;
+use SocialiteProviders\Manager\SocialiteWasCalled;
class AppServiceProvider extends ServiceProvider
{
public function register(): void
{
if ($this->app->environment('local')) {
- $this->app->register(\Laravel\Telescope\TelescopeServiceProvider::class);
+ $this->app->register(TelescopeServiceProvider::class);
}
}
public function boot(): void
{
- Event::listen(function (\SocialiteProviders\Manager\SocialiteWasCalled $event) {
- $event->extendSocialite('authentik', \SocialiteProviders\Authentik\Provider::class);
+ Event::listen(function (SocialiteWasCalled $socialiteWasCalled) {
+ $socialiteWasCalled->extendSocialite('authentik', Provider::class);
});
Sanctum::usePersonalAccessTokenModel(PersonalAccessToken::class);
Password::defaults(function () {
- $rule = Password::min(8);
+ $password = Password::min(8);
return $this->app->isProduction()
- ? $rule->mixedCase()->letters()->numbers()->symbols()
- : $rule;
+ ? $password->mixedCase()->letters()->numbers()->symbols()
+ : $password;
});
Http::macro('github', function (string $api_url, ?string $github_access_token = null) {
@@ -40,11 +43,11 @@ class AppServiceProvider extends ServiceProvider
'Accept' => 'application/vnd.github.v3+json',
'Authorization' => "Bearer $github_access_token",
])->baseUrl($api_url);
- } else {
- return Http::withHeaders([
- 'Accept' => 'application/vnd.github.v3+json',
- ])->baseUrl($api_url);
}
+
+ return Http::withHeaders([
+ 'Accept' => 'application/vnd.github.v3+json',
+ ])->baseUrl($api_url);
});
}
}
diff --git a/app/Providers/DuskServiceProvider.php b/app/Providers/DuskServiceProvider.php
index 07e0e8709..02c06d4dc 100644
--- a/app/Providers/DuskServiceProvider.php
+++ b/app/Providers/DuskServiceProvider.php
@@ -3,6 +3,7 @@
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
+use Laravel\Dusk\Browser;
class DuskServiceProvider extends ServiceProvider
{
@@ -11,7 +12,7 @@ class DuskServiceProvider extends ServiceProvider
*/
public function boot(): void
{
- \Laravel\Dusk\Browser::macro('loginWithRootUser', function () {
+ Browser::macro('loginWithRootUser', function () {
return $this->visit('/login')
->type('email', 'test@example.com')
->type('password', 'password')
diff --git a/app/Providers/FortifyServiceProvider.php b/app/Providers/FortifyServiceProvider.php
index ed27a158a..960d0794e 100644
--- a/app/Providers/FortifyServiceProvider.php
+++ b/app/Providers/FortifyServiceProvider.php
@@ -8,6 +8,7 @@ use App\Actions\Fortify\UpdateUserPassword;
use App\Actions\Fortify\UpdateUserProfileInformation;
use App\Models\OauthSetting;
use App\Models\User;
+use Illuminate\Auth\Events\Login;
use Illuminate\Cache\RateLimiting\Limit;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Hash;
@@ -44,7 +45,7 @@ class FortifyServiceProvider extends ServiceProvider
{
Fortify::createUsersUsing(CreateNewUser::class);
Fortify::registerView(function () {
- $isFirstUser = User::count() === 0;
+ $isFirstUser = User::query()->count() === 0;
$settings = instanceSettings();
if (! $settings->is_registration_enabled) {
@@ -58,14 +59,14 @@ class FortifyServiceProvider extends ServiceProvider
Fortify::loginView(function () {
$settings = instanceSettings();
- $enabled_oauth_providers = OauthSetting::where('enabled', true)->get();
- $users = User::count();
+ $enabled_oauth_providers = OauthSetting::query()->where('enabled', true)->get();
+ $users = User::query()->count();
if ($users == 0) {
// If there are no users, redirect to registration
return redirect()->route('register');
}
- return view('auth.login', [
+ return view(Login::class, [
'is_registration_enabled' => $settings->is_registration_enabled,
'enabled_oauth_providers' => $enabled_oauth_providers,
]);
@@ -73,7 +74,7 @@ class FortifyServiceProvider extends ServiceProvider
Fortify::authenticateUsing(function (Request $request) {
$email = strtolower($request->email);
- $user = User::where('email', $email)->with('teams')->first();
+ $user = User::query()->where('email', $email)->with('teams')->first();
if (
$user &&
Hash::check($request->password, $user->password)
diff --git a/app/Providers/HorizonServiceProvider.php b/app/Providers/HorizonServiceProvider.php
index 2e2b79a59..55f949ae3 100644
--- a/app/Providers/HorizonServiceProvider.php
+++ b/app/Providers/HorizonServiceProvider.php
@@ -31,11 +31,9 @@ class HorizonServiceProvider extends HorizonApplicationServiceProvider
protected function gate(): void
{
Gate::define('viewHorizon', function ($user) {
- $root_user = User::find(0);
+ $root_user = User::query()->find(0);
- return in_array($user->email, [
- $root_user->email,
- ]);
+ return $user->email == $root_user->email;
});
}
}
diff --git a/app/Providers/TelescopeServiceProvider.php b/app/Providers/TelescopeServiceProvider.php
index b7a336631..1e185251e 100644
--- a/app/Providers/TelescopeServiceProvider.php
+++ b/app/Providers/TelescopeServiceProvider.php
@@ -21,13 +21,24 @@ class TelescopeServiceProvider extends TelescopeApplicationServiceProvider
$isLocal = $this->app->environment('local');
- Telescope::filter(function (IncomingEntry $entry) use ($isLocal) {
- return $isLocal ||
- $entry->isReportableException() ||
- $entry->isFailedRequest() ||
- $entry->isFailedJob() ||
- $entry->isScheduledTask() ||
- $entry->hasMonitoredTag();
+ Telescope::filter(function (IncomingEntry $incomingEntry) use ($isLocal) {
+ if ($isLocal) {
+ return true;
+ }
+ if ($incomingEntry->isReportableException()) {
+ return true;
+ }
+ if ($incomingEntry->isFailedRequest()) {
+ return true;
+ }
+ if ($incomingEntry->isFailedJob()) {
+ return true;
+ }
+ if ($incomingEntry->isScheduledTask()) {
+ return true;
+ }
+
+ return $incomingEntry->hasMonitoredTag();
});
}
@@ -57,11 +68,9 @@ class TelescopeServiceProvider extends TelescopeApplicationServiceProvider
protected function gate(): void
{
Gate::define('viewTelescope', function ($user) {
- $root_user = User::find(0);
+ $root_user = User::query()->find(0);
- return in_array($user->email, [
- $root_user->email,
- ]);
+ return $user->email == $root_user->email;
});
}
}
diff --git a/app/Traits/ExecuteRemoteCommand.php b/app/Traits/ExecuteRemoteCommand.php
index f8ccee9db..5b5f6c37a 100644
--- a/app/Traits/ExecuteRemoteCommand.php
+++ b/app/Traits/ExecuteRemoteCommand.php
@@ -8,6 +8,7 @@ use App\Models\Server;
use Carbon\Carbon;
use Illuminate\Support\Collection;
use Illuminate\Support\Facades\Process;
+use RuntimeException;
trait ExecuteRemoteCommand
{
@@ -18,18 +19,14 @@ trait ExecuteRemoteCommand
public function execute_remote_command(...$commands)
{
static::$batch_counter++;
- if ($commands instanceof Collection) {
- $commandsText = $commands;
- } else {
- $commandsText = collect($commands);
- }
+ $commandsText = $commands instanceof Collection ? $commands : collect($commands);
if ($this->server instanceof Server === false) {
- throw new \RuntimeException('Server is not set or is not an instance of Server model');
+ throw new RuntimeException('Server is not set or is not an instance of Server model');
}
$commandsText->each(function ($single_command) {
- $command = data_get($single_command, 'command') ?? $single_command[0] ?? null;
+ $command = data_get($single_command, 'command', $single_command[0] ?? null);
if ($command === null) {
- throw new \RuntimeException('Command is not set');
+ throw new RuntimeException('Command is not set');
}
$hidden = data_get($single_command, 'hidden', false);
$customType = data_get($single_command, 'type');
@@ -44,7 +41,7 @@ trait ExecuteRemoteCommand
}
}
$remote_command = SshMultiplexingHelper::generateSshCommand($this->server, $command);
- $process = Process::timeout(3600)->idleTimeout(3600)->start($remote_command, function (string $type, string $output) use ($command, $hidden, $customType, $append) {
+ $invokedProcess = Process::timeout(3600)->idleTimeout(3600)->start($remote_command, function (string $type, string $output) use ($command, $hidden, $customType, $append) {
$output = str($output)->trim();
if ($output->startsWith('╔')) {
$output = "\n".$output;
@@ -80,16 +77,14 @@ trait ExecuteRemoteCommand
}
});
$this->application_deployment_queue->update([
- 'current_process_id' => $process->id(),
+ 'current_process_id' => $invokedProcess->id(),
]);
- $process_result = $process->wait();
- if ($process_result->exitCode() !== 0) {
- if (! $ignore_errors) {
- $this->application_deployment_queue->status = ApplicationDeploymentStatus::FAILED->value;
- $this->application_deployment_queue->save();
- throw new \RuntimeException($process_result->errorOutput());
- }
+ $processResult = $invokedProcess->wait();
+ if ($processResult->exitCode() !== 0 && ! $ignore_errors) {
+ $this->application_deployment_queue->status = ApplicationDeploymentStatus::FAILED->value;
+ $this->application_deployment_queue->save();
+ throw new RuntimeException($processResult->errorOutput());
}
});
}
diff --git a/app/Traits/SaveFromRedirect.php b/app/Traits/SaveFromRedirect.php
index 166c16a4b..189e08d25 100644
--- a/app/Traits/SaveFromRedirect.php
+++ b/app/Traits/SaveFromRedirect.php
@@ -6,19 +6,19 @@ use Illuminate\Support\Collection;
trait SaveFromRedirect
{
- public function saveFromRedirect(string $route, ?Collection $parameters = null)
+ public function saveFromRedirect(string $route, ?Collection $collection = null)
{
session()->forget('from');
- if (! $parameters || $parameters->count() === 0) {
- $parameters = $this->parameters;
+ if (! $collection || $collection->count() === 0) {
+ $collection = $this->parameters;
}
- $parameters = collect($parameters) ?? collect([]);
+ $collection = collect($collection) ?? collect([]);
$queries = collect($this->query) ?? collect([]);
- $parameters = $parameters->merge($queries);
+ $collection = $collection->merge($queries);
session(['from' => [
'back' => $this->currentRoute,
'route' => $route,
- 'parameters' => $parameters,
+ 'parameters' => $collection,
]]);
return redirect()->route($route);
diff --git a/app/View/Components/Forms/Input.php b/app/View/Components/Forms/Input.php
index 7283ef20f..e08459e89 100644
--- a/app/View/Components/Forms/Input.php
+++ b/app/View/Components/Forms/Input.php
@@ -36,7 +36,7 @@ class Input extends Component
$this->name = $this->id;
}
if ($this->type === 'password') {
- $this->defaultClass = $this->defaultClass.' pr-[2.8rem]';
+ $this->defaultClass .= ' pr-[2.8rem]';
}
// $this->label = Str::title($this->label);
diff --git a/app/View/Components/Services/Links.php b/app/View/Components/Services/Links.php
index 0497aebae..c14832b45 100644
--- a/app/View/Components/Services/Links.php
+++ b/app/View/Components/Services/Links.php
@@ -33,11 +33,7 @@ class Links extends Component
if ($application->ports) {
$portsCollection = collect(str($application->ports)->explode(','));
$portsCollection->map(function ($port) {
- if (str($port)->contains(':')) {
- $hostPort = str($port)->before(':');
- } else {
- $hostPort = $port;
- }
+ $hostPort = str($port)->contains(':') ? str($port)->before(':') : $port;
$this->links->push(base_url(withPort: false).":{$hostPort}");
});
}
diff --git a/config/app.php b/config/app.php
index 371ac44ec..a8b28a6c8 100644
--- a/config/app.php
+++ b/config/app.php
@@ -1,6 +1,34 @@
[
'users' => [
'driver' => 'eloquent',
- 'model' => App\Models\User::class,
+ 'model' => User::class,
],
// 'users' => [
diff --git a/config/sanctum.php b/config/sanctum.php
index f1e5fc0e5..5dfd3f266 100644
--- a/config/sanctum.php
+++ b/config/sanctum.php
@@ -1,5 +1,8 @@
[
- 'authenticate_session' => Laravel\Sanctum\Http\Middleware\AuthenticateSession::class,
- 'encrypt_cookies' => Illuminate\Cookie\Middleware\EncryptCookies::class,
- 'validate_csrf_token' => Illuminate\Foundation\Http\Middleware\ValidateCsrfToken::class,
+ 'authenticate_session' => AuthenticateSession::class,
+ 'encrypt_cookies' => EncryptCookies::class,
+ 'validate_csrf_token' => ValidateCsrfToken::class,
],
];
diff --git a/config/telescope.php b/config/telescope.php
index c940bec8a..85589ee75 100644
--- a/config/telescope.php
+++ b/config/telescope.php
@@ -1,7 +1,24 @@
[
- Watchers\BatchWatcher::class => env('TELESCOPE_BATCH_WATCHER', true),
+ BatchWatcher::class => env('TELESCOPE_BATCH_WATCHER', true),
- Watchers\CacheWatcher::class => [
+ CacheWatcher::class => [
'enabled' => env('TELESCOPE_CACHE_WATCHER', true),
'hidden' => [],
],
- Watchers\ClientRequestWatcher::class => env('TELESCOPE_CLIENT_REQUEST_WATCHER', true),
+ ClientRequestWatcher::class => env('TELESCOPE_CLIENT_REQUEST_WATCHER', true),
- Watchers\CommandWatcher::class => [
+ CommandWatcher::class => [
'enabled' => env('TELESCOPE_COMMAND_WATCHER', true),
'ignore' => [],
],
- Watchers\DumpWatcher::class => [
+ DumpWatcher::class => [
'enabled' => env('TELESCOPE_DUMP_WATCHER', true),
'always' => env('TELESCOPE_DUMP_WATCHER_ALWAYS', false),
],
- Watchers\EventWatcher::class => [
+ EventWatcher::class => [
'enabled' => env('TELESCOPE_EVENT_WATCHER', true),
'ignore' => [],
],
- Watchers\ExceptionWatcher::class => env('TELESCOPE_EXCEPTION_WATCHER', true),
+ ExceptionWatcher::class => env('TELESCOPE_EXCEPTION_WATCHER', true),
- Watchers\GateWatcher::class => [
+ GateWatcher::class => [
'enabled' => env('TELESCOPE_GATE_WATCHER', true),
'ignore_abilities' => [],
'ignore_packages' => true,
'ignore_paths' => [],
],
- Watchers\JobWatcher::class => env('TELESCOPE_JOB_WATCHER', true),
+ JobWatcher::class => env('TELESCOPE_JOB_WATCHER', true),
- Watchers\LogWatcher::class => [
+ LogWatcher::class => [
'enabled' => env('TELESCOPE_LOG_WATCHER', true),
'level' => 'error',
],
- Watchers\MailWatcher::class => env('TELESCOPE_MAIL_WATCHER', true),
+ MailWatcher::class => env('TELESCOPE_MAIL_WATCHER', true),
- Watchers\ModelWatcher::class => [
+ ModelWatcher::class => [
'enabled' => env('TELESCOPE_MODEL_WATCHER', true),
'events' => ['eloquent.*'],
'hydrations' => true,
],
- Watchers\NotificationWatcher::class => env('TELESCOPE_NOTIFICATION_WATCHER', true),
+ NotificationWatcher::class => env('TELESCOPE_NOTIFICATION_WATCHER', true),
- Watchers\QueryWatcher::class => [
+ QueryWatcher::class => [
'enabled' => env('TELESCOPE_QUERY_WATCHER', true),
'ignore_packages' => true,
'ignore_paths' => [],
'slow' => 100,
],
- Watchers\RedisWatcher::class => env('TELESCOPE_REDIS_WATCHER', true),
+ RedisWatcher::class => env('TELESCOPE_REDIS_WATCHER', true),
- Watchers\RequestWatcher::class => [
+ RequestWatcher::class => [
'enabled' => env('TELESCOPE_REQUEST_WATCHER', true),
'size_limit' => env('TELESCOPE_RESPONSE_SIZE_LIMIT', 64),
'ignore_http_methods' => [],
'ignore_status_codes' => [],
],
- Watchers\ScheduleWatcher::class => env('TELESCOPE_SCHEDULE_WATCHER', true),
- Watchers\ViewWatcher::class => env('TELESCOPE_VIEW_WATCHER', true),
+ ScheduleWatcher::class => env('TELESCOPE_SCHEDULE_WATCHER', true),
+ ViewWatcher::class => env('TELESCOPE_VIEW_WATCHER', true),
],
];
diff --git a/rector.php b/rector.php
index cffbb9f53..94e1a99f3 100644
--- a/rector.php
+++ b/rector.php
@@ -11,7 +11,6 @@ return RectorConfig::configure()
__DIR__.'/app',
__DIR__.'/routes',
__DIR__.'/config',
-
])
->withSets([
LaravelLevelSetList::UP_TO_LARAVEL_110,
@@ -24,11 +23,13 @@ return RectorConfig::configure()
->withRules([
TypedPropertyFromStrictConstructorRector::class,
])
+ ->withImportNames(
+ removeUnusedImports: true,
+ )
->withPreparedSets(
deadCode: true,
codeQuality: true,
naming: true,
privatization: true,
earlyReturn: true,
-
);
diff --git a/routes/api.php b/routes/api.php
index c3f7a8f26..84722c61b 100644
--- a/routes/api.php
+++ b/routes/api.php
@@ -141,7 +141,7 @@ Route::group([
$decrypted = decrypt($naked_token);
$decrypted_token = json_decode($decrypted, true);
$server_uuid = data_get($decrypted_token, 'server_uuid');
- $server = Server::where('uuid', $server_uuid)->first();
+ $server = Server::query()->where('uuid', $server_uuid)->first();
if (! $server) {
return response()->json(['message' => 'Server not found'], 404);
}
diff --git a/routes/channels.php b/routes/channels.php
index f75c30d0f..72a8c2c9a 100644
--- a/routes/channels.php
+++ b/routes/channels.php
@@ -16,17 +16,9 @@ use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Broadcast;
Broadcast::channel('team.{teamId}', function (User $user, int $teamId) {
- if ($user->teams->pluck('id')->contains($teamId)) {
- return true;
- }
-
- return false;
+ return (bool) $user->teams->pluck('id')->contains($teamId);
});
Broadcast::channel('user.{userId}', function (User $user) {
- if ($user->id === Auth::id()) {
- return true;
- }
-
- return false;
+ return $user->id === Auth::id();
});
diff --git a/routes/web.php b/routes/web.php
index ec4923941..0050796b6 100644
--- a/routes/web.php
+++ b/routes/web.php
@@ -72,6 +72,7 @@ use App\Livewire\Team\Member\Index as TeamMemberIndex;
use App\Livewire\Terminal\Index as TerminalIndex;
use App\Models\GitlabApp;
use App\Models\ScheduledDatabaseBackupExecution;
+use App\Models\ServiceDatabase;
use App\Providers\RouteServiceProvider;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Route;
@@ -295,7 +296,7 @@ Route::middleware(['auth'])->group(function () {
return response()->json(['message' => 'Team not found.'], 404);
}
$exeuctionId = request()->route('executionId');
- $execution = ScheduledDatabaseBackupExecution::where('id', $exeuctionId)->firstOrFail();
+ $execution = ScheduledDatabaseBackupExecution::query()->where('id', $exeuctionId)->firstOrFail();
$execution_team_id = $execution->scheduledDatabaseBackup->database->team()?->id;
if ($team->id !== 0) {
if (is_null($execution_team_id)) {
@@ -309,7 +310,7 @@ Route::middleware(['auth'])->group(function () {
}
}
$filename = data_get($execution, 'filename');
- if ($execution->scheduledDatabaseBackup->database->getMorphClass() === \App\Models\ServiceDatabase::class) {
+ if ($execution->scheduledDatabaseBackup->database->getMorphClass() === ServiceDatabase::class) {
$server = $execution->scheduledDatabaseBackup->database->service->destination->server;
} else {
$server = $execution->scheduledDatabaseBackup->database->destination->server;
@@ -329,7 +330,7 @@ Route::middleware(['auth'])->group(function () {
}
return new StreamedResponse(function () use ($disk, $filename) {
- if (ob_get_level()) {
+ if (ob_get_level() !== 0) {
ob_end_clean();
}
$stream = $disk->readStream($filename);
@@ -346,7 +347,7 @@ Route::middleware(['auth'])->group(function () {
'Content-Type' => 'application/octet-stream',
'Content-Disposition' => 'attachment; filename="'.basename($filename).'"',
]);
- } catch (\Throwable $e) {
+ } catch (Throwable $e) {
return response()->json(['message' => $e->getMessage()], 500);
}
})->name('download.backup');