Files
keystone/app/Models/FirewallRule.php

66 lines
1.4 KiB
PHP

<?php
namespace App\Models;
use App\Enums\FirewallRuleStatus;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
class FirewallRule extends Model
{
protected $guarded = [];
public static function boot(): void
{
parent::boot();
static::created(function (self $firewallRule) {
$firewallRule->execute();
});
}
protected function casts(): array
{
return [
'status' => FirewallRuleStatus::class,
];
}
public function server(): BelongsTo
{
return $this->belongsTo(Server::class);
}
public function execute(): void
{
$ssh = $this->server->sshClient();
$command = "ufw";
if ($this->type === 'allow') {
$command .= " allow";
} elseif ($this->type === 'deny') {
$command .= " deny";
}
if ($this->from) {
$command .= " from {$this->from}";
$command .= " to any port";
}
$command .= " {$this->ports}";
$result = $ssh->execute($command);
if (! $result->isSuccessful()) {
$this->update([
'status' => FirewallRuleStatus::FAILED,
]);
return;
}
$this->update([
'status' => FirewallRuleStatus::APPLIED,
]);
}
}