feat: implement rule toggling functionality in Proxmox Firewall component, allowing users to enable or disable firewall rules directly from the interface for improved management

This commit is contained in:
2025-12-01 14:14:19 -05:00
parent 51b9997c28
commit 51ff95ccea
2 changed files with 65 additions and 2 deletions

View File

@@ -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;