[ 'mode' => 'dhcp', 'modev6' => 'auto', 'network_primary_ip' => '', 'network_primary_subnet' => '', 'network_primary_gateway' => '', 'network_primary_vlan' => '', 'network_primary_dns1' => '', 'network_primary_dns2' => '', 'network_primary_ipv6' => '', 'network_primary_ipv6_prefix' => '', 'network_primary_ipv6_gateway' => '', 'network_primary_ipv6_vlan' => '', 'network_primary_ipv6_dns1' => '', 'network_primary_ipv6_dns2' => '', ], 'secondary' => [ 'mode' => 'disabled', 'modev6' => 'disabled', 'network_secondary_ip' => '', 'network_secondary_subnet' => '', 'network_secondary_gateway' => '', 'network_secondary_vlan' => '', 'network_secondary_dns1' => '', 'network_secondary_dns2' => '', 'network_secondary_ipv6' => '', 'network_secondary_ipv6_prefix' => '', 'network_secondary_ipv6_gateway' => '', 'network_secondary_ipv6_vlan' => '', 'network_secondary_ipv6_dns1' => '', 'network_secondary_ipv6_dns2' => '', ], 'firewall' => 'disable', 'ips' => ['', '', '', '', ''] ]; if (file_exists($jsonFile)) { $raw = file_get_contents($jsonFile); $data = json_decode($raw, true); if (!is_array($data)) $data = $defaults; } else { $data = $defaults; } $errors = []; $success = ''; if ($_SERVER['REQUEST_METHOD'] === 'POST') { $get = function ($k) { return isset($_POST[$k]) ? trim((string)$_POST[$k]) : ''; }; $primary_mode = in_array($get('primary_mode'), ['dhcp', 'static', 'disabled']) ? $get('primary_mode') : 'dhcp'; $primary_modev6 = in_array($get('primary_mode'), ['auto', 'dhcpv6', 'static', 'disabled']) ? $get('primary_mode') : 'auto'; $secondary_mode = in_array($get('secondary_mode'), ['dhcp', 'static', 'disabled']) ? $get('secondary_mode') : 'dhcp'; $secondary_modev6 = in_array($get('secondary_mode'), ['auto', 'dhcpv6', 'static', 'disabled']) ? $get('secondary_mode') : 'auto'; $network_primary_ip = $get('network_primary_ip'); $network_primary_gateway = $get('network_primary_gateway'); $network_primary_gateway = $get('network_primary_gateway'); $network_primary_vlan = $get('network_primary_vlan'); $network_primary_dns1 = $get('network_primary_dns1'); $network_primary_dns2 = $get('network_primary_dns2'); $network_primary_ipv6 = $get('network_primary_ipv6'); $network_primary_ipv6_prefix = $get('network_primary_ipv6_prefix'); $network_primary_ipv6_gateway = $get('network_primary_ipv6_gateway'); $network_primary_ipv6_vlan = $get('network_primary_ipv6_vlan'); $network_primary_ipv6_dns1 = $get('network_primary_ipv6_dns1'); $network_primary_ipv6_dns2 = $get('network_primary_ipv6_dns2'); $network_secondary_ip = $get('network_secondary_ip'); $network_secondary_subnet = $get('network_secondary_subnet'); $network_secondary_gateway = $get('network_secondary_gateway'); $network_secondary_vlan = $get('network_secondary_vlan'); $network_secondary_dns1 = $get('network_secondary_dns1'); $network_secondary_dns2 = $get('network_secondary_dns2'); $network_secondary_ipv6 = $get('network_secondary_ipv6'); $network_secondary_ipv6_prefix = $get('network_secondary_ipv6_prefix'); $network_secondary_ipv6_gateway = $get('network_secondary_ipv6_gateway'); $network_secondary_ipv6_vlan = $get('network_secondary_ipv6_vlan'); $network_secondary_ipv6_dns1 = $get('network_secondary_ipv6_dns1'); $network_secondary_ipv6_dns2 = $get('network_secondary_ipv6_dns2'); $validate_ip_or_cidr = function ($v) { if ($v === '') return true; if (strpos($v, '/') !== false) { [$ip, $cidr] = explode('/', $v, 2); return filter_var($ip, FILTER_VALIDATE_IP) !== false && ctype_digit($cidr) && (int)$cidr >= 0 && (int)$cidr <= 32; } return filter_var($v, FILTER_VALIDATE_IP) !== false; }; foreach ( [ ['field' => 'Primary IP', 'value' => $primary_ip], ['field' => 'Primary Subnet', 'value' => $primary_subnet], ['field' => 'Primary Gateway', 'value' => $primary_gateway], ['field' => 'Secondary IP', 'value' => $secondary_ip], ['field' => 'Secondary Subnet', 'value' => $secondary_subnet], ['field' => 'Secondary Gateway', 'value' => $secondary_gateway], ] as $f ) { if ($f['value'] !== '') { $ok = $f['field'] === 'Primary Subnet' || $f['field'] === 'Secondary Subnet' ? $validate_ip_or_cidr($f['value']) : filter_var($f['value'], FILTER_VALIDATE_IP) !== false; if (!$ok) $errors[] = $f['field'] . ' is invalid: ' . htmlspecialchars($f['value']); } } foreach ([['Primary VLAN', $primary_vlan], ['Secondary VLAN', $secondary_vlan]] as $v) { if ($v[1] !== '' && (!ctype_digit($v[1]) || (int)$v[1] < 0 || (int)$v[1] > 4094)) { $errors[] = $v[0] . ' must be a number 0-4094'; } } if (empty($errors)) { $new = [ 'primary' => [ 'mode' => 'dhcp', 'modev6' => 'auto', 'network_primary_ip' => $primary_ip, 'network_primary_subnet' => $primary_subnet, 'network_primary_gateway' => $primary_gateway, 'network_primary_vlan' => $primary_vlan, 'network_primary_dns1' => $primary_vlan, 'network_primary_dns2' => $primary_vlan, 'network_primary_ipv6' => $primary_vlan, 'network_primary_ipv6_prefix' => $primary_vlan, 'network_primary_ipv6_gateway' => $primary_vlan, 'network_primary_ipv6_vlan' => $primary_vlan, 'network_primary_ipv6_dns1' => $primary_vlan, 'network_primary_ipv6_dns2' => $primary_vlan ], 'secondary' => [ 'mode' => 'disabled', 'modev6' => 'disabled', 'network_secondary_ip' => $secondary_ip, 'network_secondary_subnet' => $secondary_subnet, 'network_secondary_gateway' => $secondary_gateway, 'network_secondary_vlan' => $secondary_vlan, 'network_secondary_dns1' => $secondary_vlan, 'network_secondary_dns2' => $secondary_vlan, 'network_secondary_ipv6' => $secondary_vlan, 'network_secondary_ipv6_prefix' => $secondary_vlan, 'network_secondary_ipv6_gateway' => $secondary_vlan, 'network_secondary_ipv6_vlan' => $secondary_vlan, 'network_secondary_ipv6_dns1' => $secondary_vlan, 'network_secondary_ipv6_dns2' => $secondary_vlan ], 'firewall' => 'disable', 'ips' => ['', '', '', '', ''] ]; $json = json_encode($new, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES); if (file_put_contents($jsonFile, $json, LOCK_EX) === false) { $errors[] = "Failed to write {$jsonFile}. Check permissions."; } else { $data = $new; $success = 'Saved.'; } } } ?>
'; foreach ($errors as $e) echo '