Files
keystone/app/Models/FirewallRule.php
2025-04-07 12:15:54 +01:00

61 lines
1.3 KiB
PHP

<?php
namespace App\Models;
use App\Actions\FirewallRules\InstallFirewallRule;
use App\Enums\FirewallRuleStatus;
use App\Enums\FirewallRuleType;
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) {
app(InstallFirewallRule::class)->execute($firewallRule);
});
}
protected function casts(): array
{
return [
'status' => FirewallRuleStatus::class,
'type' => FirewallRuleType::class,
];
}
public function server(): BelongsTo
{
return $this->belongsTo(Server::class);
}
public function command(bool $delete = false): string
{
$command = "ufw";
if ($delete) {
$command .= " delete";
}
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}";
return $command;
}
}