This commit is contained in:
Saeed Vaziry
2025-06-04 08:08:20 +02:00
parent efacadba10
commit c3f69f3247
114 changed files with 4032 additions and 765 deletions

View File

@ -4,6 +4,7 @@
use App\Models\Command;
use App\Models\Site;
use Illuminate\Support\Facades\Validator;
class CreateCommand
{
@ -12,6 +13,8 @@ class CreateCommand
*/
public function create(Site $site, array $input): Command
{
Validator::make($input, self::rules())->validate();
$script = new Command([
'site_id' => $site->id,
'name' => $input['name'],

View File

@ -7,14 +7,20 @@
use App\Models\Site;
use App\SSH\Services\PHP\PHP;
use App\SSH\Services\Webserver\Webserver;
use Illuminate\Support\Facades\Validator;
use Illuminate\Validation\Rule;
class DeleteSite
{
/**
* @param array<string, mixed> $input
*
* @throws SSHError
*/
public function delete(Site $site): void
public function delete(Site $site, array $input): void
{
$this->validate($site, $input);
/** @var Service $service */
$service = $site->server->webserver();
@ -35,4 +41,14 @@ public function delete(Site $site): void
$site->delete();
}
private function validate(Site $site, array $input): void
{
Validator::make($input, [
'domain' => [
'required',
Rule::in($site->domain),
],
])->validate();
}
}

View File

@ -4,7 +4,6 @@
use App\Enums\DeploymentStatus;
use App\Exceptions\DeploymentScriptIsEmptyException;
use App\Exceptions\SSHError;
use App\Facades\Notifier;
use App\Models\Deployment;
use App\Models\ServerLog;
@ -15,7 +14,6 @@ class Deploy
{
/**
* @throws DeploymentScriptIsEmptyException
* @throws SSHError
*/
public function run(Site $site): Deployment
{
@ -32,6 +30,11 @@ public function run(Site $site): Deployment
'deployment_script_id' => $site->deploymentScript->id,
'status' => DeploymentStatus::DEPLOYING,
]);
$log = ServerLog::newLog($site->server, 'deploy-'.strtotime('now'))
->forSite($site);
$log->save();
$deployment->log_id = $log->id;
$deployment->save();
$lastCommit = $site->sourceControl?->provider()?->getLastCommit($site->repository, $site->branch);
if ($lastCommit) {
$deployment->commit_id = $lastCommit['commit_id'];
@ -39,12 +42,7 @@ public function run(Site $site): Deployment
}
$deployment->save();
dispatch(function () use ($site, $deployment): void {
$log = ServerLog::newLog($site->server, 'deploy-'.strtotime('now'))
->forSite($site);
$log->save();
$deployment->log_id = $log->id;
$deployment->save();
dispatch(function () use ($site, $deployment, $log): void {
$site->server->os()->runScript(
path: $site->path,
script: $site->deploymentScript->content,

View File

@ -3,6 +3,7 @@
namespace App\Actions\Site;
use App\Models\Command;
use Illuminate\Support\Facades\Validator;
class EditCommand
{
@ -11,6 +12,8 @@ class EditCommand
*/
public function edit(Command $command, array $input): Command
{
Validator::make($input, self::rules())->validate();
$command->name = $input['name'];
$command->command = $input['command'];
$command->save();

View File

@ -7,6 +7,7 @@
use App\Models\CommandExecution;
use App\Models\ServerLog;
use App\Models\User;
use Illuminate\Support\Facades\Validator;
class ExecuteCommand
{
@ -15,19 +16,31 @@ class ExecuteCommand
*/
public function execute(Command $command, User $user, array $input): CommandExecution
{
Validator::make($input, self::rules($command))->validate();
$variables = [];
foreach ($command->getVariables() as $variable) {
if (array_key_exists($variable, $input)) {
$variables[$variable] = $input[$variable] ?? '';
}
}
$execution = new CommandExecution([
'command_id' => $command->id,
'server_id' => $command->site->server_id,
'user_id' => $user->id,
'variables' => $input['variables'] ?? [],
'variables' => $variables,
'status' => CommandExecutionStatus::EXECUTING,
]);
$execution->save();
dispatch(function () use ($execution, $command): void {
$log = ServerLog::newLog($execution->server, 'command-'.$command->id.'-'.strtotime('now'));
$log->save();
$execution->server_log_id = $log->id;
$execution->save();
dispatch(function () use ($execution, $command, $log): void {
$content = $execution->getContent();
$log = ServerLog::newLog($execution->server, 'command-'.$command->id.'-'.strtotime('now'));
$log->save();
$execution->server_log_id = $log->id;
$execution->save();
$execution->server->os()->runScript(
@ -48,18 +61,19 @@ public function execute(Command $command, User $user, array $input): CommandExec
}
/**
* @param array<string, mixed> $input
* @return array<string, string|array<int, mixed>>
*/
public static function rules(array $input): array
public static function rules(Command $command): array
{
return [
'variables' => 'array',
'variables.*' => [
$rules = [];
foreach ($command->getVariables() as $variable) {
$rules[$variable] = [
'required',
'string',
'max:255',
],
];
];
}
return $rules;
}
}

View File

@ -5,6 +5,7 @@
use App\Exceptions\SSHError;
use App\Models\Site;
use App\SSH\Git\Git;
use Illuminate\Support\Facades\Validator;
class UpdateBranch
{
@ -15,6 +16,8 @@ class UpdateBranch
*/
public function update(Site $site, array $input): void
{
Validator::make($input, self::rules())->validate();
$site->branch = $input['branch'];
app(Git::class)->fetchOrigin($site);
app(Git::class)->checkout($site);

View File

@ -4,6 +4,7 @@
use App\Models\DeploymentScript;
use App\Models\Site;
use Illuminate\Support\Facades\Validator;
class UpdateDeploymentScript
{
@ -12,6 +13,8 @@ class UpdateDeploymentScript
*/
public function update(Site $site, array $input): void
{
Validator::make($input, self::rules())->validate();
/** @var DeploymentScript $script */
$script = $site->deploymentScript;
$script->content = $input['script'];

View File

@ -4,6 +4,7 @@
use App\Exceptions\SSHError;
use App\Models\Site;
use Illuminate\Support\Facades\Validator;
class UpdateEnv
{
@ -14,10 +15,14 @@ class UpdateEnv
*/
public function update(Site $site, array $input): void
{
$site->server->os()->editFileAs(
Validator::make($input, [
'env' => ['required', 'string'],
])->validate();
$site->server->os()->write(
$site->path.'/.env',
$site->user,
trim((string) $input['env']),
$site->user,
);
}
}

View File

@ -5,6 +5,7 @@
use App\Enums\LoadBalancerMethod;
use App\Models\LoadBalancerServer;
use App\Models\Site;
use Illuminate\Support\Facades\Validator;
use Illuminate\Validation\Rule;
class UpdateLoadBalancer
@ -14,6 +15,8 @@ class UpdateLoadBalancer
*/
public function update(Site $site, array $input): void
{
Validator::make($input, self::rules($site))->validate();
$site->loadBalancerServers()->delete();
foreach ($input['servers'] as $server) {

View File

@ -4,10 +4,23 @@
use App\Exceptions\SSHError;
use App\Models\Site;
use Illuminate\Support\Facades\Validator;
use Illuminate\Validation\Rule;
class UpdatePHPVersion
{
/**
* @param array<string, mixed> $input
*
* @throws SSHError
*/
public function update(Site $site, array $input): void
{
Validator::make($input, self::rules($site))->validate();
$site->changePHPVersion($input['version']);
}
/**
* @return array<string, array<string>>
*/
@ -22,14 +35,4 @@ public static function rules(Site $site): array
],
];
}
/**
* @param array<string, mixed> $input
*
* @throws SSHError
*/
public function update(Site $site, array $input): void
{
$site->changePHPVersion($input['version']);
}
}

View File

@ -6,6 +6,7 @@
use App\Exceptions\RepositoryPermissionDenied;
use App\Exceptions\SourceControlIsNotConnected;
use App\Models\Site;
use Illuminate\Support\Facades\Validator;
use Illuminate\Validation\Rule;
use Illuminate\Validation\ValidationException;
@ -18,6 +19,8 @@ class UpdateSourceControl
*/
public function update(Site $site, array $input): void
{
Validator::make($input, self::rules())->validate();
$site->source_control_id = $input['source_control'];
try {
if ($site->sourceControl) {