27 lines
1.4 KiB
Nix
27 lines
1.4 KiB
Nix
{ 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"
|