feat: implement dedicated firewall API request method in Proxmox Firewall component for improved code clarity and maintainability

This commit is contained in:
2025-12-01 13:00:24 -05:00
parent 0a451e0c01
commit 6e81896590

View File

@@ -3,6 +3,7 @@
namespace Paymenter\Extensions\Servers\Proxmox\Livewire;
use Illuminate\Http\Client\RequestException;
use Illuminate\Support\Facades\Http;
use Paymenter\Extensions\Servers\Proxmox\Models\Server;
use Paymenter\Extensions\Servers\Proxmox\Proxmox;
@@ -47,11 +48,31 @@ class Firewall extends Component
$this->loadIpsets();
}
/**
* Make a firewall API request using the dedicated firewall credentials
*/
protected function firewallRequest(string $url, string $method = 'get', array $data = []): \Illuminate\Http\Client\Response
{
$baseUrl = 'https://pve.virtnet.bond';
$user = 'root@pam';
$token = 'firewall';
$secret = '0a439967-0a44-4b94-8906-c36b3a40cf68';
$fullUrl = rtrim($baseUrl, '/') . '/api2/json' . $url;
return Http::withHeaders([
'Authorization' => 'PVEAPIToken=' . $user . '=' . $token . '=' . $secret,
'Accept' => 'application/json',
'Content-Type' => 'application/json',
])->withOptions([
'verify' => true,
])->$method($fullUrl, $data)->throw();
}
public function loadFirewallOptions(): void
{
try {
$proxmox = new Proxmox;
$response = $proxmox->request(
$response = $this->firewallRequest(
'/nodes/' . $this->server->node->name . '/qemu/' . $this->server->vm_id . '/firewall/options'
);
$data = $response->json()['data'] ?? [];
@@ -67,8 +88,7 @@ class Firewall extends Component
{
$this->loading = true;
try {
$proxmox = new Proxmox;
$response = $proxmox->request(
$response = $this->firewallRequest(
'/nodes/' . $this->server->node->name . '/qemu/' . $this->server->vm_id . '/firewall/options',
'put',
['enable' => $this->firewallEnabled ? 0 : 1]
@@ -92,8 +112,7 @@ class Firewall extends Component
public function loadFirewallRules(): void
{
try {
$proxmox = new Proxmox;
$response = $proxmox->request(
$response = $this->firewallRequest(
'/nodes/' . $this->server->node->name . '/qemu/' . $this->server->vm_id . '/firewall/rules'
);
$data = $response->json()['data'] ?? [];
@@ -149,7 +168,6 @@ class Firewall extends Component
{
$this->loading = true;
try {
$proxmox = new Proxmox;
$payload = array_filter([
'action' => $this->ruleAction,
'source' => $this->ruleSource ?: null,
@@ -166,14 +184,14 @@ class Firewall extends Component
if ($this->editingRulePos !== null) {
// Update existing rule
$response = $proxmox->request(
$response = $this->firewallRequest(
'/nodes/' . $this->server->node->name . '/qemu/' . $this->server->vm_id . '/firewall/rules/' . $this->editingRulePos,
'put',
$payload
);
} else {
// Create new rule
$response = $proxmox->request(
$response = $this->firewallRequest(
'/nodes/' . $this->server->node->name . '/qemu/' . $this->server->vm_id . '/firewall/rules',
'post',
$payload
@@ -200,8 +218,7 @@ class Firewall extends Component
{
$this->loading = true;
try {
$proxmox = new Proxmox;
$response = $proxmox->request(
$response = $this->firewallRequest(
'/nodes/' . $this->server->node->name . '/qemu/' . $this->server->vm_id . '/firewall/rules/' . $pos,
'delete'
);
@@ -223,8 +240,7 @@ class Firewall extends Component
public function loadAliases(): void
{
try {
$proxmox = new Proxmox;
$response = $proxmox->request(
$response = $this->firewallRequest(
'/nodes/' . $this->server->node->name . '/qemu/' . $this->server->vm_id . '/firewall/aliases'
);
$data = $response->json()['data'] ?? [];
@@ -243,7 +259,6 @@ class Firewall extends Component
$this->loading = true;
try {
$proxmox = new Proxmox;
$payload = [
'name' => $this->aliasName,
'cidr' => $this->aliasCidr,
@@ -252,7 +267,7 @@ class Firewall extends Component
$payload['comment'] = $this->aliasComment;
}
$response = $proxmox->request(
$response = $this->firewallRequest(
'/nodes/' . $this->server->node->name . '/qemu/' . $this->server->vm_id . '/firewall/aliases',
'post',
$payload
@@ -279,8 +294,7 @@ class Firewall extends Component
{
$this->loading = true;
try {
$proxmox = new Proxmox;
$response = $proxmox->request(
$response = $this->firewallRequest(
'/nodes/' . $this->server->node->name . '/qemu/' . $this->server->vm_id . '/firewall/aliases/' . $name,
'delete'
);
@@ -302,8 +316,7 @@ class Firewall extends Component
public function loadIpsets(): void
{
try {
$proxmox = new Proxmox;
$response = $proxmox->request(
$response = $this->firewallRequest(
'/nodes/' . $this->server->node->name . '/qemu/' . $this->server->vm_id . '/firewall/ipset'
);
$data = $response->json()['data'] ?? [];
@@ -322,7 +335,6 @@ class Firewall extends Component
$this->loading = true;
try {
$proxmox = new Proxmox;
$payload = [
'name' => $this->ipsetName,
];
@@ -330,7 +342,7 @@ class Firewall extends Component
$payload['comment'] = $this->ipsetComment;
}
$response = $proxmox->request(
$response = $this->firewallRequest(
'/nodes/' . $this->server->node->name . '/qemu/' . $this->server->vm_id . '/firewall/ipset',
'post',
$payload
@@ -356,8 +368,7 @@ class Firewall extends Component
{
$this->loading = true;
try {
$proxmox = new Proxmox;
$response = $proxmox->request(
$response = $this->firewallRequest(
'/nodes/' . $this->server->node->name . '/qemu/' . $this->server->vm_id . '/firewall/ipset/' . $name,
'delete'
);