diff --git a/encoder/network.php b/encoder/network.php index 24b94ba..22d8bdf 100755 --- a/encoder/network.php +++ b/encoder/network.php @@ -184,7 +184,10 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST') { } } - file_put_contents('/var/www/50-cloud-init.yaml', netplan_yaml(generate_netplan($data, $iface))); + if (validate_config($data)) { + file_put_contents('/var/www/50-cloud-init.yaml', netplan_yaml(generate_netplan($data, $iface))); + } + } } diff --git a/encoder/static.php b/encoder/static.php index 44c7e51..747d29f 100755 --- a/encoder/static.php +++ b/encoder/static.php @@ -148,7 +148,6 @@ function build_interface(array $cfg, string $type): array function generate_netplan(array $data, string $iface): array { - validate_config($data); $netplan = [ 'network' => [ @@ -201,7 +200,7 @@ function generate_netplan(array $data, string $iface): array return $netplan; } -function validate_config(array $data): void +function validate_config(array $data): bool { $p_enabled = ( $data['primary']['mode'] !== 'disabled' || @@ -216,14 +215,22 @@ function validate_config(array $data): void $p_vlan = trim($data['primary']['network_primary_vlan'] ?? ''); $s_vlan = trim($data['secondary']['network_secondary_vlan'] ?? ''); - /* If both enabled, at least one VLAN is mandatory */ + /* If both enabled → at least one VLAN required */ if ($p_enabled && $s_enabled && $p_vlan === '' && $s_vlan === '') { - throw new RuntimeException( - 'Invalid configuration: Primary and Secondary are enabled but no VLAN is defined.' - ); + echo ""; + return false; } + + /* Block duplicate VLAN IDs */ + if ($p_vlan !== '' && $s_vlan !== '' && $p_vlan === $s_vlan) { + echo ""; + return false; + } + + return true; } + function netplan_yaml(array $data, int $indent = 0): string { $out = '';