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:
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user