mirror of
https://github.com/JulienMalka/snowfield.git
synced 2025-03-23 20:30:52 +01:00
50 lines
1.2 KiB
Nix
50 lines
1.2 KiB
Nix
{ lib, dnsLib, ... }:
|
|
|
|
with lib;
|
|
|
|
rec {
|
|
|
|
allowedDomains = [
|
|
"luj.fr"
|
|
"julienmalka.me"
|
|
"malka.family"
|
|
"luj"
|
|
"malka.sh"
|
|
"hownix.works"
|
|
];
|
|
|
|
isVPNDomain = hasSuffix "luj";
|
|
|
|
hasSuffix' = flip strings.hasSuffix;
|
|
|
|
domainToZone = allowedDomains: domain: (findFirst (hasSuffix' domain) null allowedDomains);
|
|
|
|
filterElligibleDomains = allowedDomains: domain: domainToZone allowedDomains domain != null;
|
|
|
|
domainsFromConfiguration =
|
|
allowedDomains: config:
|
|
filter (filterElligibleDomains allowedDomains) (attrNames config.services.nginx.virtualHosts);
|
|
|
|
ipsToRecord =
|
|
ipType: ipValue:
|
|
with dnsLib.combinators;
|
|
if ipType == "ipv4" then { A = [ ipValue ]; } else { AAAA = [ ipValue ]; };
|
|
|
|
domainToRecords =
|
|
domain: machineMeta: isVPNDomain:
|
|
with dnsLib.combinators;
|
|
(optionalAttrs isVPNDomain (
|
|
mapAttrsWithMerge (n: v: nameValuePair domain (ipsToRecord n v)) machineMeta.ips.vpn
|
|
))
|
|
// (optionalAttrs (!isVPNDomain) (
|
|
mapAttrsWithMerge (n: v: nameValuePair domain (ipsToRecord n v)) machineMeta.ips.public
|
|
));
|
|
|
|
getDomainPrefix =
|
|
allowedDomains: domain:
|
|
let
|
|
zone = domainToZone allowedDomains domain;
|
|
in
|
|
strings.removeSuffix ".${zone}" domain;
|
|
|
|
}
|