diff --git a/extensions/Servers/Proxmox/Livewire/Firewall.php b/extensions/Servers/Proxmox/Livewire/Firewall.php index 710b976d0..d25fad7e5 100644 --- a/extensions/Servers/Proxmox/Livewire/Firewall.php +++ b/extensions/Servers/Proxmox/Livewire/Firewall.php @@ -213,22 +213,28 @@ class Firewall extends Component protected function firewallRequest(string $url, string $method = 'get', array $data = []): \Illuminate\Http\Client\Response { - $baseUrl = 'https://pve.virtnet.bond'; - $user = 'root@pam'; - $tokenId = 'firewall'; - $secret = '0a439967-0a44-4b94-8906-c36b3a40cf68'; - + // Get the Proxmox extension configuration + $proxmox = new \Paymenter\Extensions\Servers\Proxmox\Proxmox(); + $baseUrl = $proxmox->config('host'); + $user = $proxmox->config('user'); + $token = $proxmox->config('token'); + $verifySsl = $proxmox->config('verify_ssl', true); + $fullUrl = rtrim($baseUrl, '/') . '/api2/json' . $url; - $authHeader = 'PVEAPIToken=' . $user . '!' . $tokenId . '=' . $secret; - + $authHeader = 'PVEAPIToken=' . $user . '=' . $token; + $acceptHeader = str_contains($url, '/firewall/log') ? 'application/json, text/plain, */*' : 'application/json'; - + $request = Http::withHeaders([ 'Authorization' => $authHeader, 'Accept' => $acceptHeader, - ])->withoutVerifying(); + ]); + + if (!$verifySsl) { + $request = $request->withoutVerifying(); + } $response = match($method) { 'post' => $request->post($fullUrl, $data), @@ -289,25 +295,40 @@ class Firewall extends Component public function toggleAdapterFirewall(string $adapter): void { $this->loading = true; - + try { $currentState = $this->adapterFirewallStates[$adapter] ?? false; $newState = !$currentState; - + $response = $this->firewallRequest( '/nodes/' . $this->server->node->name . '/qemu/' . $this->server->vm_id . '/config', 'put', [$adapter . '.firewall' => $newState ? 1 : 0] ); - + + Log::info('Adapter firewall toggle API call', [ + 'vm_id' => $this->server->vm_id, + 'node' => $this->server->node->name, + 'adapter' => $adapter, + 'new_state' => $newState, + 'status' => $response->status(), + 'body' => $response->body(), + 'headers' => $response->headers(), + ]); + if ($response->successful()) { $this->adapterFirewallStates[$adapter] = $newState; $this->notify('Adapter firewall ' . ($newState ? 'enabled' : 'disabled'), 'success'); } else { - $this->error = 'Failed to toggle adapter firewall'; + $this->error = 'Failed to toggle adapter firewall - Status: ' . $response->status() . ' - ' . $response->body(); $this->showErrorModal = true; } } catch (\Exception $e) { + Log::error('Adapter firewall toggle exception: ' . $e->getMessage(), [ + 'vm_id' => $this->server->vm_id, + 'node' => $this->server->node->name, + 'adapter' => $adapter, + ]); $this->error = 'Failed to toggle adapter firewall: ' . $e->getMessage(); $this->showErrorModal = true; } finally { @@ -340,10 +361,10 @@ class Firewall extends Component public function toggleFirewall(): void { $this->loading = true; - + try { $newState = !$this->firewallEnabled; - + // Always force DHCP and NDP (router advertisements) to 0 for security $response = $this->firewallRequest( '/nodes/' . $this->server->node->name . '/qemu/' . $this->server->vm_id . '/firewall/options', @@ -354,15 +375,28 @@ class Firewall extends Component 'ndp' => 0, // Always disabled (prevents router advertisements) ] ); - + + Log::info('Firewall toggle API call', [ + 'vm_id' => $this->server->vm_id, + 'node' => $this->server->node->name, + 'new_state' => $newState, + 'status' => $response->status(), + 'body' => $response->body(), + 'headers' => $response->headers(), + ]); + if ($response->successful()) { $this->firewallEnabled = $newState; $this->notify('Firewall ' . ($newState ? 'enabled' : 'disabled'), 'success'); } else { - $this->error = 'Failed to toggle firewall'; + $this->error = 'Failed to toggle firewall - Status: ' . $response->status() . ' - ' . $response->body(); $this->showErrorModal = true; } } catch (\Exception $e) { + Log::error('Firewall toggle exception: ' . $e->getMessage(), [ + 'vm_id' => $this->server->vm_id, + 'node' => $this->server->node->name, + ]); $this->error = 'Failed to toggle firewall: ' . $e->getMessage(); $this->showErrorModal = true; } finally {