vito/app/Models/FirewallRule.php
2023-08-04 18:28:04 +02:00

69 lines
1.4 KiB
PHP
Executable File

<?php
namespace App\Models;
use App\Enums\FirewallRuleStatus;
use App\Jobs\Firewall\AddToServer;
use App\Jobs\Firewall\RemoveFromServer;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
/**
* @property int $server_id
* @property string $type
* @property string $protocol
* @property string $real_protocol
* @property int $port
* @property string $source
* @property ?string $mask
* @property string $note
* @property string $status
* @property Server $server
*/
class FirewallRule extends AbstractModel
{
use HasFactory;
protected $fillable = [
'server_id',
'type',
'protocol',
'port',
'source',
'mask',
'note',
'status',
];
protected $casts = [
'server_id' => 'integer',
'port' => 'integer',
];
protected $appends = [
'real_protocol',
];
public function server(): BelongsTo
{
return $this->belongsTo(Server::class);
}
public function addToServer(): void
{
dispatch(new AddToServer($this))->onConnection('ssh');
}
public function removeFromServer(): void
{
$this->status = FirewallRuleStatus::DELETING;
$this->save();
dispatch(new RemoveFromServer($this))->onConnection('ssh');
}
public function getRealProtocolAttribute(): string
{
return $this->protocol === 'udp' ? 'udp' : 'tcp';
}
}