feat: implement dedicated firewall API request method in Proxmox Firewall component for improved code clarity and maintainability
This commit is contained in:
@@ -3,6 +3,7 @@
|
||||
namespace Paymenter\Extensions\Servers\Proxmox\Livewire;
|
||||
|
||||
use Illuminate\Http\Client\RequestException;
|
||||
use Illuminate\Support\Facades\Http;
|
||||
use Paymenter\Extensions\Servers\Proxmox\Models\Server;
|
||||
use Paymenter\Extensions\Servers\Proxmox\Proxmox;
|
||||
|
||||
@@ -47,11 +48,31 @@ class Firewall extends Component
|
||||
$this->loadIpsets();
|
||||
}
|
||||
|
||||
/**
|
||||
* Make a firewall API request using the dedicated firewall credentials
|
||||
*/
|
||||
protected function firewallRequest(string $url, string $method = 'get', array $data = []): \Illuminate\Http\Client\Response
|
||||
{
|
||||
$baseUrl = 'https://pve.virtnet.bond';
|
||||
$user = 'root@pam';
|
||||
$token = 'firewall';
|
||||
$secret = '0a439967-0a44-4b94-8906-c36b3a40cf68';
|
||||
|
||||
$fullUrl = rtrim($baseUrl, '/') . '/api2/json' . $url;
|
||||
|
||||
return Http::withHeaders([
|
||||
'Authorization' => 'PVEAPIToken=' . $user . '=' . $token . '=' . $secret,
|
||||
'Accept' => 'application/json',
|
||||
'Content-Type' => 'application/json',
|
||||
])->withOptions([
|
||||
'verify' => true,
|
||||
])->$method($fullUrl, $data)->throw();
|
||||
}
|
||||
|
||||
public function loadFirewallOptions(): void
|
||||
{
|
||||
try {
|
||||
$proxmox = new Proxmox;
|
||||
$response = $proxmox->request(
|
||||
$response = $this->firewallRequest(
|
||||
'/nodes/' . $this->server->node->name . '/qemu/' . $this->server->vm_id . '/firewall/options'
|
||||
);
|
||||
$data = $response->json()['data'] ?? [];
|
||||
@@ -67,8 +88,7 @@ class Firewall extends Component
|
||||
{
|
||||
$this->loading = true;
|
||||
try {
|
||||
$proxmox = new Proxmox;
|
||||
$response = $proxmox->request(
|
||||
$response = $this->firewallRequest(
|
||||
'/nodes/' . $this->server->node->name . '/qemu/' . $this->server->vm_id . '/firewall/options',
|
||||
'put',
|
||||
['enable' => $this->firewallEnabled ? 0 : 1]
|
||||
@@ -92,8 +112,7 @@ class Firewall extends Component
|
||||
public function loadFirewallRules(): void
|
||||
{
|
||||
try {
|
||||
$proxmox = new Proxmox;
|
||||
$response = $proxmox->request(
|
||||
$response = $this->firewallRequest(
|
||||
'/nodes/' . $this->server->node->name . '/qemu/' . $this->server->vm_id . '/firewall/rules'
|
||||
);
|
||||
$data = $response->json()['data'] ?? [];
|
||||
@@ -149,7 +168,6 @@ class Firewall extends Component
|
||||
{
|
||||
$this->loading = true;
|
||||
try {
|
||||
$proxmox = new Proxmox;
|
||||
$payload = array_filter([
|
||||
'action' => $this->ruleAction,
|
||||
'source' => $this->ruleSource ?: null,
|
||||
@@ -166,14 +184,14 @@ class Firewall extends Component
|
||||
|
||||
if ($this->editingRulePos !== null) {
|
||||
// Update existing rule
|
||||
$response = $proxmox->request(
|
||||
$response = $this->firewallRequest(
|
||||
'/nodes/' . $this->server->node->name . '/qemu/' . $this->server->vm_id . '/firewall/rules/' . $this->editingRulePos,
|
||||
'put',
|
||||
$payload
|
||||
);
|
||||
} else {
|
||||
// Create new rule
|
||||
$response = $proxmox->request(
|
||||
$response = $this->firewallRequest(
|
||||
'/nodes/' . $this->server->node->name . '/qemu/' . $this->server->vm_id . '/firewall/rules',
|
||||
'post',
|
||||
$payload
|
||||
@@ -200,8 +218,7 @@ class Firewall extends Component
|
||||
{
|
||||
$this->loading = true;
|
||||
try {
|
||||
$proxmox = new Proxmox;
|
||||
$response = $proxmox->request(
|
||||
$response = $this->firewallRequest(
|
||||
'/nodes/' . $this->server->node->name . '/qemu/' . $this->server->vm_id . '/firewall/rules/' . $pos,
|
||||
'delete'
|
||||
);
|
||||
@@ -223,8 +240,7 @@ class Firewall extends Component
|
||||
public function loadAliases(): void
|
||||
{
|
||||
try {
|
||||
$proxmox = new Proxmox;
|
||||
$response = $proxmox->request(
|
||||
$response = $this->firewallRequest(
|
||||
'/nodes/' . $this->server->node->name . '/qemu/' . $this->server->vm_id . '/firewall/aliases'
|
||||
);
|
||||
$data = $response->json()['data'] ?? [];
|
||||
@@ -243,7 +259,6 @@ class Firewall extends Component
|
||||
|
||||
$this->loading = true;
|
||||
try {
|
||||
$proxmox = new Proxmox;
|
||||
$payload = [
|
||||
'name' => $this->aliasName,
|
||||
'cidr' => $this->aliasCidr,
|
||||
@@ -252,7 +267,7 @@ class Firewall extends Component
|
||||
$payload['comment'] = $this->aliasComment;
|
||||
}
|
||||
|
||||
$response = $proxmox->request(
|
||||
$response = $this->firewallRequest(
|
||||
'/nodes/' . $this->server->node->name . '/qemu/' . $this->server->vm_id . '/firewall/aliases',
|
||||
'post',
|
||||
$payload
|
||||
@@ -279,8 +294,7 @@ class Firewall extends Component
|
||||
{
|
||||
$this->loading = true;
|
||||
try {
|
||||
$proxmox = new Proxmox;
|
||||
$response = $proxmox->request(
|
||||
$response = $this->firewallRequest(
|
||||
'/nodes/' . $this->server->node->name . '/qemu/' . $this->server->vm_id . '/firewall/aliases/' . $name,
|
||||
'delete'
|
||||
);
|
||||
@@ -302,8 +316,7 @@ class Firewall extends Component
|
||||
public function loadIpsets(): void
|
||||
{
|
||||
try {
|
||||
$proxmox = new Proxmox;
|
||||
$response = $proxmox->request(
|
||||
$response = $this->firewallRequest(
|
||||
'/nodes/' . $this->server->node->name . '/qemu/' . $this->server->vm_id . '/firewall/ipset'
|
||||
);
|
||||
$data = $response->json()['data'] ?? [];
|
||||
@@ -322,7 +335,6 @@ class Firewall extends Component
|
||||
|
||||
$this->loading = true;
|
||||
try {
|
||||
$proxmox = new Proxmox;
|
||||
$payload = [
|
||||
'name' => $this->ipsetName,
|
||||
];
|
||||
@@ -330,7 +342,7 @@ class Firewall extends Component
|
||||
$payload['comment'] = $this->ipsetComment;
|
||||
}
|
||||
|
||||
$response = $proxmox->request(
|
||||
$response = $this->firewallRequest(
|
||||
'/nodes/' . $this->server->node->name . '/qemu/' . $this->server->vm_id . '/firewall/ipset',
|
||||
'post',
|
||||
$payload
|
||||
@@ -356,8 +368,7 @@ class Firewall extends Component
|
||||
{
|
||||
$this->loading = true;
|
||||
try {
|
||||
$proxmox = new Proxmox;
|
||||
$response = $proxmox->request(
|
||||
$response = $this->firewallRequest(
|
||||
'/nodes/' . $this->server->node->name . '/qemu/' . $this->server->vm_id . '/firewall/ipset/' . $name,
|
||||
'delete'
|
||||
);
|
||||
|
||||
Reference in New Issue
Block a user