From 6e818965903dcc28f25bcd1bc9479705f2666534 Mon Sep 17 00:00:00 2001 From: "Joseph.Rawlings" Date: Mon, 1 Dec 2025 13:00:24 -0500 Subject: [PATCH] feat: implement dedicated firewall API request method in Proxmox Firewall component for improved code clarity and maintainability --- .../Servers/Proxmox/Livewire/Firewall.php | 57 +++++++++++-------- 1 file changed, 34 insertions(+), 23 deletions(-) diff --git a/extensions/Servers/Proxmox/Livewire/Firewall.php b/extensions/Servers/Proxmox/Livewire/Firewall.php index 9e1d7c421..ffd631f4c 100644 --- a/extensions/Servers/Proxmox/Livewire/Firewall.php +++ b/extensions/Servers/Proxmox/Livewire/Firewall.php @@ -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' );