refactor: simplify Proxmox firewall request handling by hardcoding credentials and removing unnecessary logging, enhancing code clarity and maintainability

This commit is contained in:
2025-12-04 19:16:38 -05:00
parent 678a79171a
commit e5a98b9945

View File

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