nixos/scripts/router-forwards-check.nix

28 lines
1.4 KiB
Nix
Raw Permalink Normal View History

{ lib }:
let
validate = import ../services/validate-forwards.nix { inherit lib; };
valid = builtins.fromTOML (builtins.readFile ../ports.toml);
accepts = data: (builtins.tryEval (builtins.deepSeq (validate data) true)).success;
extra = entry: valid // { forward = valid.forward ++ [ entry ]; };
forward = { name = "test"; port = 9999; protocol = "tcp"; };
invalid = [
(valid // { dest_default = "10.0.0.2"; })
(valid // { forward = builtins.filter (f: f.name != "SSH") valid.forward; })
(valid // { forward = map (f: if f.name == "HTTPS" then f // { dest = "10.0.0.2"; } else f) valid.forward; })
(extra (forward // { name = "bad\" label"; }))
(extra (forward // { name = "SSH"; }))
(extra (forward // { protocol = "sctp"; }))
(extra (forward // { dest = "10.0.0.5; accept"; }))
(extra (forward // { dest = "10.0.0.255"; }))
(extra (forward // { port = 0; }))
(extra (forward // { port = 65536; }))
(extra (forward // { ports = "10000-10001"; }))
(extra { name = "overlap"; ports = "25600-25601"; protocol = "udp"; })
(extra { name = "backwards"; ports = "9001-9000"; protocol = "udp"; })
];
in
assert accepts valid;
assert lib.all (data: !accepts data) invalid;
assert accepts (extra (forward // { port = 443; protocol = "udp"; dest = "10.0.0.2"; }));
"Forward validation: valid inventory and separate protocols accepted; all ${toString (builtins.length invalid)} invalid cases rejected"