mirror of
https://github.com/vitodeploy/vito.git
synced 2025-07-01 05:56:16 +00:00
Migrate to HTMX (#114)
Dropped Livewire Added HTMX Added Blade code lint Drop Mysql and Redis Migrate to SQLite
This commit is contained in:
@ -5,12 +5,17 @@
|
||||
use App\Enums\CronjobStatus;
|
||||
use App\Models\CronJob;
|
||||
use App\Models\Server;
|
||||
use App\SSHCommands\CronJob\UpdateCronJobsCommand;
|
||||
use App\ValidationRules\CronRule;
|
||||
use Illuminate\Support\Facades\Validator;
|
||||
use Illuminate\Validation\ValidationException;
|
||||
use Throwable;
|
||||
|
||||
class CreateCronJob
|
||||
{
|
||||
/**
|
||||
* @throws Throwable
|
||||
*/
|
||||
public function create(Server $server, array $input): void
|
||||
{
|
||||
$this->validate($input);
|
||||
@ -19,11 +24,17 @@ public function create(Server $server, array $input): void
|
||||
'server_id' => $server->id,
|
||||
'user' => $input['user'],
|
||||
'command' => $input['command'],
|
||||
'frequency' => $input['frequency'],
|
||||
'frequency' => $input['frequency'] == 'custom' ? $input['custom'] : $input['frequency'],
|
||||
'status' => CronjobStatus::CREATING,
|
||||
]);
|
||||
$cronJob->save();
|
||||
$cronJob->addToServer();
|
||||
|
||||
$server->ssh()->exec(
|
||||
new UpdateCronJobsCommand($cronJob->user, CronJob::crontab($server, $cronJob->user)),
|
||||
'update-crontab'
|
||||
);
|
||||
$cronJob->status = CronjobStatus::READY;
|
||||
$cronJob->save();
|
||||
}
|
||||
|
||||
/**
|
||||
@ -41,8 +52,17 @@ private function validate(array $input): void
|
||||
],
|
||||
'frequency' => [
|
||||
'required',
|
||||
new CronRule(),
|
||||
new CronRule(acceptCustom: true),
|
||||
],
|
||||
])->validateWithBag('createCronJob');
|
||||
])->validate();
|
||||
|
||||
if ($input['frequency'] == 'custom') {
|
||||
Validator::make($input, [
|
||||
'custom' => [
|
||||
'required',
|
||||
new CronRule(),
|
||||
],
|
||||
])->validate();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
24
app/Actions/CronJob/DeleteCronJob.php
Executable file
24
app/Actions/CronJob/DeleteCronJob.php
Executable file
@ -0,0 +1,24 @@
|
||||
<?php
|
||||
|
||||
namespace App\Actions\CronJob;
|
||||
|
||||
use App\Models\CronJob;
|
||||
use App\Models\Server;
|
||||
use App\SSHCommands\CronJob\UpdateCronJobsCommand;
|
||||
use Throwable;
|
||||
|
||||
class DeleteCronJob
|
||||
{
|
||||
/**
|
||||
* @throws Throwable
|
||||
*/
|
||||
public function delete(Server $server, CronJob $cronJob): void
|
||||
{
|
||||
$user = $cronJob->user;
|
||||
$cronJob->delete();
|
||||
$server->ssh()->exec(
|
||||
new UpdateCronJobsCommand($user, CronJob::crontab($server, $user)),
|
||||
'update-crontab'
|
||||
);
|
||||
}
|
||||
}
|
@ -24,10 +24,10 @@ public function create($type, Server $server, array $input): Backup
|
||||
$backup = new Backup([
|
||||
'type' => $type,
|
||||
'server_id' => $server->id,
|
||||
'database_id' => $input['database'] ?? null,
|
||||
'storage_id' => $input['storage'],
|
||||
'interval' => $input['interval'] == 'custom' ? $input['custom'] : $input['interval'],
|
||||
'keep_backups' => $input['keep'],
|
||||
'database_id' => $input['backup_database'] ?? null,
|
||||
'storage_id' => $input['backup_storage'],
|
||||
'interval' => $input['backup_interval'] == 'custom' ? $input['backup_custom'] : $input['backup_interval'],
|
||||
'keep_backups' => $input['backup_keep'],
|
||||
'status' => BackupStatus::RUNNING,
|
||||
]);
|
||||
$backup->save();
|
||||
@ -43,16 +43,16 @@ public function create($type, Server $server, array $input): Backup
|
||||
private function validate($type, Server $server, array $input): void
|
||||
{
|
||||
$rules = [
|
||||
'storage' => [
|
||||
'backup_storage' => [
|
||||
'required',
|
||||
Rule::exists('storage_providers', 'id'),
|
||||
],
|
||||
'keep' => [
|
||||
'backup_keep' => [
|
||||
'required',
|
||||
'numeric',
|
||||
'min:1',
|
||||
],
|
||||
'interval' => [
|
||||
'backup_interval' => [
|
||||
'required',
|
||||
Rule::in([
|
||||
'0 * * * *',
|
||||
@ -63,13 +63,13 @@ private function validate($type, Server $server, array $input): void
|
||||
]),
|
||||
],
|
||||
];
|
||||
if ($input['interval'] == 'custom') {
|
||||
$rules['custom'] = [
|
||||
if ($input['backup_interval'] == 'custom') {
|
||||
$rules['backup_custom'] = [
|
||||
'required',
|
||||
];
|
||||
}
|
||||
if ($type === 'database') {
|
||||
$rules['database'] = [
|
||||
$rules['backup_database'] = [
|
||||
'required',
|
||||
Rule::exists('databases', 'id')
|
||||
->where('server_id', $server->id)
|
||||
|
@ -2,6 +2,7 @@
|
||||
|
||||
namespace App\Actions\Database;
|
||||
|
||||
use App\Enums\DatabaseStatus;
|
||||
use App\Models\Database;
|
||||
use App\Models\Server;
|
||||
use Illuminate\Support\Facades\Validator;
|
||||
@ -22,7 +23,10 @@ public function create(Server $server, array $input): Database
|
||||
'name' => $input['name'],
|
||||
]);
|
||||
$database->save();
|
||||
$database->createOnServer();
|
||||
|
||||
$server->database()->handler()->create($database->name);
|
||||
$database->status = DatabaseStatus::READY;
|
||||
$database->save();
|
||||
|
||||
return $database;
|
||||
}
|
||||
|
@ -2,6 +2,7 @@
|
||||
|
||||
namespace App\Actions\Database;
|
||||
|
||||
use App\Enums\DatabaseUserStatus;
|
||||
use App\Models\DatabaseUser;
|
||||
use App\Models\Server;
|
||||
use Illuminate\Support\Facades\Validator;
|
||||
@ -25,7 +26,18 @@ public function create(Server $server, array $input, array $links = []): Databas
|
||||
'databases' => $links,
|
||||
]);
|
||||
$databaseUser->save();
|
||||
$databaseUser->createOnServer();
|
||||
|
||||
$server->database()->handler()->createUser(
|
||||
$databaseUser->username,
|
||||
$databaseUser->password,
|
||||
$databaseUser->host
|
||||
);
|
||||
$databaseUser->status = DatabaseUserStatus::READY;
|
||||
$databaseUser->save();
|
||||
|
||||
if (count($databaseUser->databases) > 0) {
|
||||
app(LinkUser::class)->link($databaseUser, $databaseUser->databases);
|
||||
}
|
||||
|
||||
return $databaseUser;
|
||||
}
|
||||
|
15
app/Actions/Database/DeleteDatabase.php
Executable file
15
app/Actions/Database/DeleteDatabase.php
Executable file
@ -0,0 +1,15 @@
|
||||
<?php
|
||||
|
||||
namespace App\Actions\Database;
|
||||
|
||||
use App\Models\Database;
|
||||
use App\Models\Server;
|
||||
|
||||
class DeleteDatabase
|
||||
{
|
||||
public function delete(Server $server, Database $database): void
|
||||
{
|
||||
$server->database()->handler()->delete($database->name);
|
||||
$database->delete();
|
||||
}
|
||||
}
|
15
app/Actions/Database/DeleteDatabaseUser.php
Executable file
15
app/Actions/Database/DeleteDatabaseUser.php
Executable file
@ -0,0 +1,15 @@
|
||||
<?php
|
||||
|
||||
namespace App\Actions\Database;
|
||||
|
||||
use App\Models\DatabaseUser;
|
||||
use App\Models\Server;
|
||||
|
||||
class DeleteDatabaseUser
|
||||
{
|
||||
public function delete(Server $server, DatabaseUser $databaseUser): void
|
||||
{
|
||||
$server->database()->handler()->deleteUser($databaseUser->username, $databaseUser->host);
|
||||
$databaseUser->delete();
|
||||
}
|
||||
}
|
@ -4,6 +4,9 @@
|
||||
|
||||
use App\Models\Database;
|
||||
use App\Models\DatabaseUser;
|
||||
use App\Models\Server;
|
||||
use Illuminate\Support\Facades\Validator;
|
||||
use Illuminate\Validation\Rule;
|
||||
use Illuminate\Validation\ValidationException;
|
||||
|
||||
class LinkUser
|
||||
@ -11,20 +14,50 @@ class LinkUser
|
||||
/**
|
||||
* @throws ValidationException
|
||||
*/
|
||||
public function link(DatabaseUser $databaseUser, array $databases): void
|
||||
public function link(DatabaseUser $databaseUser, array $input): void
|
||||
{
|
||||
if (! isset($input['databases']) || ! is_array($input['databases'])) {
|
||||
$input['databases'] = [];
|
||||
}
|
||||
|
||||
$this->validate($databaseUser->server, $input);
|
||||
|
||||
$dbs = Database::query()
|
||||
->where('server_id', $databaseUser->server_id)
|
||||
->whereIn('name', $databases)
|
||||
->whereIn('name', $input['databases'])
|
||||
->count();
|
||||
if (count($databases) !== $dbs) {
|
||||
if (count($input['databases']) !== $dbs) {
|
||||
throw ValidationException::withMessages(['databases' => __('Databases not found!')])
|
||||
->errorBag('linkUser');
|
||||
}
|
||||
|
||||
$databaseUser->databases = $databases;
|
||||
$databaseUser->unlinkUser();
|
||||
$databaseUser->linkUser();
|
||||
$databaseUser->databases = $input['databases'];
|
||||
|
||||
// Unlink the user from all databases
|
||||
$databaseUser->server->database()->handler()->unlink(
|
||||
$databaseUser->username,
|
||||
$databaseUser->host
|
||||
);
|
||||
|
||||
// Link the user to the selected databases
|
||||
$databaseUser->server->database()->handler()->link(
|
||||
$databaseUser->username,
|
||||
$databaseUser->host,
|
||||
$databaseUser->databases
|
||||
);
|
||||
|
||||
$databaseUser->save();
|
||||
}
|
||||
|
||||
private function validate(Server $server, array $input): void
|
||||
{
|
||||
$rules = [
|
||||
'databases.*' => [
|
||||
'required',
|
||||
Rule::exists('databases', 'name')->where('server_id', $server->id),
|
||||
],
|
||||
];
|
||||
|
||||
Validator::make($input, $rules)->validate();
|
||||
}
|
||||
}
|
||||
|
@ -24,7 +24,19 @@ public function create(Server $server, array $input): FirewallRule
|
||||
'status' => FirewallRuleStatus::CREATING,
|
||||
]);
|
||||
$rule->save();
|
||||
$rule->addToServer();
|
||||
|
||||
$server->firewall()
|
||||
->handler()
|
||||
->addRule(
|
||||
$rule->type,
|
||||
$rule->real_protocol,
|
||||
$rule->port,
|
||||
$rule->source,
|
||||
$rule->mask
|
||||
);
|
||||
|
||||
$rule->status = FirewallRuleStatus::READY;
|
||||
$rule->save();
|
||||
|
||||
return $rule;
|
||||
}
|
||||
@ -56,6 +68,6 @@ private function validate(Server $server, array $input): void
|
||||
'mask' => [
|
||||
'numeric',
|
||||
],
|
||||
])->validateWithBag('createRule');
|
||||
])->validate();
|
||||
}
|
||||
}
|
||||
|
28
app/Actions/FirewallRule/DeleteRule.php
Executable file
28
app/Actions/FirewallRule/DeleteRule.php
Executable file
@ -0,0 +1,28 @@
|
||||
<?php
|
||||
|
||||
namespace App\Actions\FirewallRule;
|
||||
|
||||
use App\Enums\FirewallRuleStatus;
|
||||
use App\Models\FirewallRule;
|
||||
use App\Models\Server;
|
||||
|
||||
class DeleteRule
|
||||
{
|
||||
public function delete(Server $server, FirewallRule $rule): void
|
||||
{
|
||||
$rule->status = FirewallRuleStatus::DELETING;
|
||||
$rule->save();
|
||||
|
||||
$server->firewall()
|
||||
->handler()
|
||||
->removeRule(
|
||||
$rule->type,
|
||||
$rule->real_protocol,
|
||||
$rule->port,
|
||||
$rule->source,
|
||||
$rule->mask
|
||||
);
|
||||
|
||||
$rule->delete();
|
||||
}
|
||||
}
|
29
app/Actions/PHP/ChangeDefaultCli.php
Normal file
29
app/Actions/PHP/ChangeDefaultCli.php
Normal file
@ -0,0 +1,29 @@
|
||||
<?php
|
||||
|
||||
namespace App\Actions\PHP;
|
||||
|
||||
use App\Enums\ServiceStatus;
|
||||
use App\Models\Server;
|
||||
use Illuminate\Validation\ValidationException;
|
||||
|
||||
class ChangeDefaultCli
|
||||
{
|
||||
public function change(Server $server, array $input): void
|
||||
{
|
||||
$this->validate($server, $input);
|
||||
$service = $server->php($input['version']);
|
||||
$service->handler()->setDefaultCli();
|
||||
$server->defaultService('php')->update(['is_default' => 0]);
|
||||
$service->update(['is_default' => 1]);
|
||||
$service->update(['status' => ServiceStatus::READY]);
|
||||
}
|
||||
|
||||
public function validate(Server $server, array $input): void
|
||||
{
|
||||
if (! isset($input['version']) || ! in_array($input['version'], $server->installedPHPVersions())) {
|
||||
throw ValidationException::withMessages(
|
||||
['version' => __('This version is not installed')]
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
32
app/Actions/PHP/GetPHPIni.php
Normal file
32
app/Actions/PHP/GetPHPIni.php
Normal file
@ -0,0 +1,32 @@
|
||||
<?php
|
||||
|
||||
namespace App\Actions\PHP;
|
||||
|
||||
use App\Models\Server;
|
||||
use App\SSHCommands\PHP\GetPHPIniCommand;
|
||||
use Illuminate\Validation\ValidationException;
|
||||
|
||||
class GetPHPIni
|
||||
{
|
||||
public function getIni(Server $server, array $input): string
|
||||
{
|
||||
$this->validate($server, $input);
|
||||
|
||||
try {
|
||||
return $server->ssh()->exec(new GetPHPIniCommand($input['version']));
|
||||
} catch (\Throwable $e) {
|
||||
throw ValidationException::withMessages(
|
||||
['ini' => $e->getMessage()]
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
public function validate(Server $server, array $input): void
|
||||
{
|
||||
if (! isset($input['version']) || ! in_array($input['version'], $server->installedPHPVersions())) {
|
||||
throw ValidationException::withMessages(
|
||||
['version' => __('This version is not installed')]
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
@ -41,12 +41,12 @@ private function validate(Server $server, array $input): void
|
||||
'required',
|
||||
Rule::in(config('core.php_versions')),
|
||||
],
|
||||
])->validateWithBag('installPHP');
|
||||
])->validate();
|
||||
|
||||
if (in_array($input['version'], $server->installedPHPVersions())) {
|
||||
throw ValidationException::withMessages(
|
||||
['version' => __('This version is already installed')]
|
||||
)->errorBag('installPHP');
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -2,8 +2,10 @@
|
||||
|
||||
namespace App\Actions\PHP;
|
||||
|
||||
use App\Models\Server;
|
||||
use App\Models\Service;
|
||||
use Illuminate\Support\Facades\Validator;
|
||||
use Illuminate\Validation\Rule;
|
||||
use Illuminate\Validation\ValidationException;
|
||||
|
||||
class InstallPHPExtension
|
||||
@ -11,16 +13,18 @@ class InstallPHPExtension
|
||||
/**
|
||||
* @throws ValidationException
|
||||
*/
|
||||
public function handle(Service $service, array $input): Service
|
||||
public function install(Server $server, array $input): Service
|
||||
{
|
||||
$this->validate($server, $input);
|
||||
|
||||
/** @var Service $service */
|
||||
$service = $server->php($input['version']);
|
||||
$typeData = $service->type_data;
|
||||
$typeData['extensions'] = $typeData['extensions'] ?? [];
|
||||
$service->type_data = $typeData;
|
||||
$service->save();
|
||||
|
||||
$this->validate($service, $input);
|
||||
|
||||
$service->handler()->installExtension($input['name']);
|
||||
$service->handler()->installExtension($input['extension']);
|
||||
|
||||
return $service;
|
||||
}
|
||||
@ -28,18 +32,25 @@ public function handle(Service $service, array $input): Service
|
||||
/**
|
||||
* @throws ValidationException
|
||||
*/
|
||||
private function validate(Service $service, array $input): void
|
||||
private function validate(Server $server, array $input): void
|
||||
{
|
||||
Validator::make($input, [
|
||||
'name' => [
|
||||
'extension' => [
|
||||
'required',
|
||||
'in:'.implode(',', config('core.php_extensions')),
|
||||
],
|
||||
])->validateWithBag('installPHPExtension');
|
||||
'version' => [
|
||||
'required',
|
||||
Rule::in($server->installedPHPVersions()),
|
||||
],
|
||||
])->validate();
|
||||
|
||||
if (in_array($input['name'], $service->type_data['extensions'])) {
|
||||
/** @var Service $service */
|
||||
$service = $server->php($input['version']);
|
||||
|
||||
if (in_array($input['extension'], $service->type_data['extensions'])) {
|
||||
throw ValidationException::withMessages(
|
||||
['name' => __('This extension already installed')]
|
||||
['extension' => __('This extension already installed')]
|
||||
)->errorBag('installPHPExtension');
|
||||
}
|
||||
}
|
||||
|
@ -4,16 +4,17 @@
|
||||
|
||||
use App\Models\Server;
|
||||
use App\Models\Service;
|
||||
use Illuminate\Support\Facades\Validator;
|
||||
use Illuminate\Validation\ValidationException;
|
||||
|
||||
class UninstallPHP
|
||||
{
|
||||
public function uninstall(Server $server, string $version): void
|
||||
public function uninstall(Server $server, array $input): void
|
||||
{
|
||||
$this->validate($server, $version);
|
||||
$this->validate($server, $input);
|
||||
|
||||
/** @var Service $php */
|
||||
$php = $server->services()->where('type', 'php')->where('version', $version)->first();
|
||||
$php = $server->php($input['version']);
|
||||
|
||||
$php->uninstall();
|
||||
}
|
||||
@ -21,17 +22,19 @@ public function uninstall(Server $server, string $version): void
|
||||
/**
|
||||
* @throws ValidationException
|
||||
*/
|
||||
private function validate(Server $server, string $version): void
|
||||
private function validate(Server $server, array $input): void
|
||||
{
|
||||
$php = $server->services()->where('type', 'php')->where('version', $version)->first();
|
||||
Validator::make($input, [
|
||||
'version' => 'required|string',
|
||||
])->validate();
|
||||
|
||||
if (! $php) {
|
||||
if (! in_array($input['version'], $server->installedPHPVersions())) {
|
||||
throw ValidationException::withMessages(
|
||||
['version' => __('This version has not been installed yet!')]
|
||||
['version' => __('This version is not installed')]
|
||||
);
|
||||
}
|
||||
|
||||
$hasSite = $server->sites()->where('php_version', $version)->first();
|
||||
$hasSite = $server->sites()->where('php_version', $input['version'])->first();
|
||||
if ($hasSite) {
|
||||
throw ValidationException::withMessages(
|
||||
['version' => __('Cannot uninstall this version because some sites are using it!')]
|
||||
|
@ -2,8 +2,9 @@
|
||||
|
||||
namespace App\Actions\PHP;
|
||||
|
||||
use App\Models\Service;
|
||||
use App\Models\Server;
|
||||
use Illuminate\Support\Facades\Storage;
|
||||
use Illuminate\Support\Facades\Validator;
|
||||
use Illuminate\Support\Str;
|
||||
use Illuminate\Validation\ValidationException;
|
||||
use Throwable;
|
||||
@ -13,14 +14,18 @@ class UpdatePHPIni
|
||||
/**
|
||||
* @throws ValidationException
|
||||
*/
|
||||
public function update(Service $service, string $ini): void
|
||||
public function update(Server $server, array $input): void
|
||||
{
|
||||
$this->validate($server, $input);
|
||||
|
||||
$service = $server->php($input['version']);
|
||||
|
||||
$tmpName = Str::random(10).strtotime('now');
|
||||
try {
|
||||
/** @var \Illuminate\Filesystem\FilesystemAdapter $storageDisk */
|
||||
$storageDisk = Storage::disk('local');
|
||||
|
||||
$storageDisk->put($tmpName, $ini);
|
||||
$storageDisk->put($tmpName, $input['ini']);
|
||||
$service->server->ssh('root')->upload(
|
||||
$storageDisk->path($tmpName),
|
||||
"/etc/php/$service->version/cli/php.ini"
|
||||
@ -42,4 +47,21 @@ private function deleteTempFile(string $name): void
|
||||
Storage::disk('local')->delete($name);
|
||||
}
|
||||
}
|
||||
|
||||
public function validate(Server $server, array $input): void
|
||||
{
|
||||
Validator::make($input, [
|
||||
'ini' => [
|
||||
'required',
|
||||
'string',
|
||||
],
|
||||
'version' => 'required|string',
|
||||
])->validate();
|
||||
|
||||
if (! in_array($input['version'], $server->installedPHPVersions())) {
|
||||
throw ValidationException::withMessages(
|
||||
['version' => __('This version is not installed')]
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -8,11 +8,8 @@
|
||||
|
||||
class DeleteProject
|
||||
{
|
||||
public function delete(User $user, int $projectId): void
|
||||
public function delete(User $user, Project $project): void
|
||||
{
|
||||
/** @var Project $project */
|
||||
$project = $user->projects()->findOrFail($projectId);
|
||||
|
||||
if ($user->projects()->count() === 1) {
|
||||
throw ValidationException::withMessages([
|
||||
'project' => __('Cannot delete the last project.'),
|
||||
|
@ -26,7 +26,7 @@ private function validate(Project $project, array $input): void
|
||||
'required',
|
||||
'string',
|
||||
'max:255',
|
||||
Rule::unique('projects')->ignore($project->id),
|
||||
Rule::unique('projects')->where('user_id', $project->user_id)->ignore($project->id),
|
||||
],
|
||||
])->validate();
|
||||
}
|
||||
|
@ -60,6 +60,6 @@ protected function validate(array $input): void
|
||||
],
|
||||
];
|
||||
|
||||
Validator::make($input, $rules)->validateWithBag('createQueue');
|
||||
Validator::make($input, $rules)->validate();
|
||||
}
|
||||
}
|
||||
|
@ -42,6 +42,6 @@ protected function validate(array $input): void
|
||||
$rules['private'] = 'required';
|
||||
}
|
||||
|
||||
Validator::make($input, $rules)->validateWithBag('createSSL');
|
||||
Validator::make($input, $rules)->validate();
|
||||
}
|
||||
}
|
||||
|
30
app/Actions/Server/CheckConnection.php
Normal file
30
app/Actions/Server/CheckConnection.php
Normal file
@ -0,0 +1,30 @@
|
||||
<?php
|
||||
|
||||
namespace App\Actions\Server;
|
||||
|
||||
use App\Facades\Notifier;
|
||||
use App\Models\Server;
|
||||
use App\Notifications\ServerDisconnected;
|
||||
use Throwable;
|
||||
|
||||
class CheckConnection
|
||||
{
|
||||
public function check(Server $server): Server
|
||||
{
|
||||
$status = $server->status;
|
||||
try {
|
||||
$server->ssh()->connect();
|
||||
$server->refresh();
|
||||
if ($status == 'disconnected') {
|
||||
$server->status = 'ready';
|
||||
$server->save();
|
||||
}
|
||||
} catch (Throwable) {
|
||||
$server->status = 'disconnected';
|
||||
$server->save();
|
||||
Notifier::send($server, new ServerDisconnected($server));
|
||||
}
|
||||
|
||||
return $server;
|
||||
}
|
||||
}
|
@ -30,7 +30,7 @@ public function create(User $creator, array $input): Server
|
||||
'user_id' => $creator->id,
|
||||
'name' => $input['name'],
|
||||
'ssh_user' => config('core.server_providers_default_user')[$input['provider']][$input['os']],
|
||||
'ip' => $input['ip'],
|
||||
'ip' => $input['ip'] ?? '',
|
||||
'port' => $input['port'] ?? 22,
|
||||
'os' => $input['os'],
|
||||
'type' => $input['type'],
|
||||
|
@ -35,7 +35,7 @@ public function edit(Server $server, array $input): Server
|
||||
$server->save();
|
||||
|
||||
if ($checkConnection) {
|
||||
$server->checkConnection();
|
||||
return $server->checkConnection();
|
||||
}
|
||||
|
||||
return $server;
|
||||
|
24
app/Actions/Server/RebootServer.php
Normal file
24
app/Actions/Server/RebootServer.php
Normal file
@ -0,0 +1,24 @@
|
||||
<?php
|
||||
|
||||
namespace App\Actions\Server;
|
||||
|
||||
use App\Enums\ServerStatus;
|
||||
use App\Models\Server;
|
||||
use App\SSHCommands\System\RebootCommand;
|
||||
use Throwable;
|
||||
|
||||
class RebootServer
|
||||
{
|
||||
public function reboot(Server $server): Server
|
||||
{
|
||||
try {
|
||||
$server->ssh()->exec(new RebootCommand(), 'reboot');
|
||||
$server->status = ServerStatus::DISCONNECTED;
|
||||
$server->save();
|
||||
} catch (Throwable) {
|
||||
$server = $server->checkConnection();
|
||||
}
|
||||
|
||||
return $server;
|
||||
}
|
||||
}
|
@ -1,30 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace App\Actions\Site;
|
||||
|
||||
use App\Models\Site;
|
||||
use Illuminate\Support\Facades\Validator;
|
||||
use Illuminate\Validation\ValidationException;
|
||||
|
||||
class ChangePHPVersion
|
||||
{
|
||||
/**
|
||||
* @throws ValidationException
|
||||
*/
|
||||
public function handle(Site $site, array $input): void
|
||||
{
|
||||
$this->validate($site, $input);
|
||||
|
||||
$site->changePHPVersion($input['php_version']);
|
||||
}
|
||||
|
||||
/**
|
||||
* @throws ValidationException
|
||||
*/
|
||||
protected function validate(Site $site, array $input): void
|
||||
{
|
||||
Validator::make($input, [
|
||||
'php_version' => 'required|in:'.implode(',', $site->server->installedPHPVersions()),
|
||||
])->validateWithBag('changePHPVersion');
|
||||
}
|
||||
}
|
@ -3,6 +3,7 @@
|
||||
namespace App\Actions\Site;
|
||||
|
||||
use App\Models\Site;
|
||||
use App\SSHCommands\System\EditFileCommand;
|
||||
|
||||
class UpdateEnv
|
||||
{
|
||||
@ -13,6 +14,11 @@ public function update(Site $site, array $input): void
|
||||
$site->type_data = $typeData;
|
||||
$site->save();
|
||||
|
||||
$site->deployEnv();
|
||||
$site->server->ssh()->exec(
|
||||
new EditFileCommand(
|
||||
$site->path.'/.env',
|
||||
$site->env
|
||||
)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
@ -1,35 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace App\Actions\Site;
|
||||
|
||||
use App\Models\Site;
|
||||
use Illuminate\Support\Facades\Validator;
|
||||
use Illuminate\Validation\Rule;
|
||||
use Illuminate\Validation\ValidationException;
|
||||
|
||||
class UpdateSourceControl
|
||||
{
|
||||
/**
|
||||
* @throws ValidationException
|
||||
*/
|
||||
public function update(Site $site, array $input): void
|
||||
{
|
||||
$this->validate($input);
|
||||
|
||||
$site->source_control_id = $input['source_control'];
|
||||
$site->save();
|
||||
}
|
||||
|
||||
/**
|
||||
* @throws ValidationException
|
||||
*/
|
||||
protected function validate(array $input): void
|
||||
{
|
||||
Validator::make($input, [
|
||||
'source_control' => [
|
||||
'required',
|
||||
Rule::exists('source_controls', 'id'),
|
||||
],
|
||||
])->validate();
|
||||
}
|
||||
}
|
@ -27,11 +27,18 @@ public function create(User $user, array $input): void
|
||||
|
||||
$storageProvider->credentials = $storageProvider->provider()->credentialData($input);
|
||||
|
||||
if (! $storageProvider->provider()->connect()) {
|
||||
try {
|
||||
if (! $storageProvider->provider()->connect()) {
|
||||
throw ValidationException::withMessages([
|
||||
'provider' => __("Couldn't connect to the provider"),
|
||||
]);
|
||||
}
|
||||
} catch (\Throwable $e) {
|
||||
throw ValidationException::withMessages([
|
||||
'provider' => __("Couldn't connect to the provider"),
|
||||
'provider' => $e->getMessage(),
|
||||
]);
|
||||
}
|
||||
|
||||
$storageProvider->save();
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user