diff --git a/extensions/Servers/Proxmox/Livewire/Firewall.php b/extensions/Servers/Proxmox/Livewire/Firewall.php index 23a54669a..460c2723e 100644 --- a/extensions/Servers/Proxmox/Livewire/Firewall.php +++ b/extensions/Servers/Proxmox/Livewire/Firewall.php @@ -358,6 +358,55 @@ class Firewall extends Component } } + public function toggleRule(int $pos): void + { + $this->loading = true; + try { + // Find the rule to get its current enable state + $rule = collect($this->rules)->firstWhere('pos', $pos); + if (!$rule) { + $this->error = 'Rule not found'; + $this->showErrorModal = true; + $this->loading = false; + return; + } + + // Toggle the enable state (0 = disabled, 1 = enabled) + $currentEnable = isset($rule['enable']) ? (int)$rule['enable'] : 1; + $newEnable = $currentEnable == 0 ? 1 : 0; + + // Update only the enable field + $response = $this->firewallRequest( + '/nodes/' . $this->server->node->name . '/qemu/' . $this->server->vm_id . '/firewall/rules/' . $pos, + 'put', + ['enable' => $newEnable] + ); + + if ($response->successful()) { + $this->notify('Rule ' . ($newEnable == 1 ? 'enabled' : 'disabled') . ' successfully', 'success'); + $this->loadFirewallRules(); + } else { + $message = $response->json()['errors'][0]['message'] ?? 'Unknown error'; + $this->error = 'Failed to toggle rule: ' . $message; + $this->showErrorModal = true; + } + } catch (\Exception $e) { + $errorMessage = $e->getMessage(); + if (method_exists($e, 'response') && $e->response()) { + $errorData = $e->response()->json(); + if (isset($errorData['errors']) && is_array($errorData['errors']) && !empty($errorData['errors'])) { + $errorMessage = $errorData['errors'][0]['message'] ?? $errorMessage; + } elseif (isset($errorData['message'])) { + $errorMessage = $errorData['message']; + } + } + $this->error = 'Failed to toggle rule: ' . $errorMessage; + $this->showErrorModal = true; + } finally { + $this->loading = false; + } + } + public function deleteRule(int $pos): void { $this->loading = true; diff --git a/extensions/Servers/Proxmox/views/firewall.blade.php b/extensions/Servers/Proxmox/views/firewall.blade.php index 93ed4082f..1cf6b907f 100644 --- a/extensions/Servers/Proxmox/views/firewall.blade.php +++ b/extensions/Servers/Proxmox/views/firewall.blade.php @@ -374,15 +374,29 @@