{ config, pkgs, ... }:

let
  hw = builtins.fromJSON (builtins.readFile ./hw.json);
  fw = import ./fw-7535.nix;
  vuko-pubkey = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFhaCaC/CVYv6hphqmEdKaPrIn+Q946+myvL9SSnzFZk vuko@eagle";
  q3k-pubkey = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIG599UildOrAq+LIOQjKqtGMwjgjIxozI1jtQQRKHtCP q3k@mimeomia";
  networks = {
    uplink = {
      description = "Hackerspace Internet Uplink";
      hw_addr = builtins.elemAt fw.hw_addresses 0;
      ipv4 = "185.236.240.5";
      ipv6 = "2a0d:eb00:2137:1::3";
    };
    lan = {
      description = "Hackerspace LAN";
      hw_addr = builtins.elemAt fw.hw_addresses 1;
      ipv4 = "10.8.1.2";
      ipv6 = "2a0d:eb00:4242::1";
    };
    managment = {
      description = "Management network (temporary routing)";
      hw_addr = builtins.elemAt fw.hw_addresses 2;
    };
    lte = {
      description = "temp LTE uplink";
      hw_addr = builtins.elemAt fw.hw_addresses 3;
    };
    vpn = {
      description = "Hackerspace members vpn";
      ipv4 = "10.9.1.1";
    };
  };
  hostname = "customs";
  openvpn-auth = import ./openvpn-auth { inherit pkgs; };
  secrets-path = "/etc/nixos/secrets/";
  update_authorized_keys = pkgs.writeShellScriptBin "update_authorized_keys" ''
    ${pkgs.python3.withPackages (pp: [ pp.ldap3 ])}/bin/python ${./update_authorized_keys.py} ${hostname} ${secrets-path}/ldap-password.txt
  '';

in {
  imports =
    [
      ./ulogd2/service.nix
      #./hardware-configuration.nix
      <nixpkgs/nixos/modules/profiles/minimal.nix>
      <nixpkgs/nixos/modules/profiles/all-hardware.nix>
      ../../../bgpwtf/machines/modules/routing.nix
      ./checkinator-tracker.nix
      ./checkinator-web.nix
      ./mikrotik-exporter.nix
      ./netboot.nix
      ./laserproxy/service.nix
    ];


  boot.loader.grub.enable = true;
  boot.loader.grub.version = 2;
  boot.loader.grub.device = "nodev";
  boot.loader.grub.extraConfig = ''
    serial --unit=0 --speed=115200
    terminal_input serial
    terminal_output serial
  '';
  boot.kernelParams = ["console=tty0" "console=ttyS0,115200"];

  time.timeZone = "Europe/Warsaw";

  fileSystems."/" = {
    device = "/dev/disk/by-partuuid/${hw.rootUUID}";
    fsType = "ext4";
  };

  services.postfix = let acme_dir = "/var/lib/acme"; in {
    enable = true;
    domain = "customs.hackerspace.pl";
    hostname = "customs.hackerspace.pl";
    destination = [ "localhost" ];
    sslCert = "${acme_dir}/customs.hackerspace.pl/full.pem";
    sslKey = "${acme_dir}/customs.hackerspace.pl/key.pem";
    enableSmtp = true;
    enableSubmission = false;
    #relayHost = "hackerspace.pl";
    extraConfig = ''
      inet_interfaces = loopback-only
    '';
  };

  fileSystems."/mnt/secrets" = {
    fsType = "tmpfs";
    options = [ "rw" "mode=755" "size=200M" "nosuid" "nodev" "relatime" "noexec" ];
  };

  networking.hostName = hostname;
  networking.domain = "hackerspace.pl";

  networking.useDHCP = false;
  networking.vlans = {
    laser = {
      id = 4001;
      interface = "lan";
    };
    bms = {
      id = 4002;
      interface = "lan";
    };
  };

  systemd.services.secrets = {
    enable = true;
    description = "Copy secrets and fix permissions";
    script = ''
      ${pkgs.coreutils}/bin/install --owner=root --mode=700 --directory /mnt/secrets/nginx/
      ${pkgs.coreutils}/bin/install --owner=root --mode=400 -t /mnt/secrets/nginx/ \
        ${secrets-path}/nginx/at.hackerspace.pl.key \
        ${secrets-path}/nginx/at.hackerspace.pl.crt
      ${pkgs.acl}/bin/setfacl -m "u:nginx:rx" /mnt/secrets/nginx
      ${pkgs.acl}/bin/setfacl -m "u:nginx:r" /mnt/secrets/nginx/*
    '';
    wantedBy = [ "nginx.service" ];
    partOf = [ "nginx.service" ];
    serviceConfig.Type = "oneshot";
    serviceConfig.RemainAfterExit = "true";
    serviceConfig.User = "root";
  };

  services.prometheus.exporters.node = {
    enable = true;
    listenAddress = "[::1]";
    port = 9100;
    enabledCollectors = [ "systemd" ];
  };

  systemd.network.links = builtins.listToAttrs (map (
    name: { name = "10-link-${name}"; value = {
      enable = true;
      matchConfig = {
        MACAddress = networks."${name}".hw_addr;
      };
      linkConfig = {
        Name = "${name}";
      };
    }; }
  ) (builtins.filter (name: builtins.hasAttr "hw_addr" networks."${name}") (builtins.attrNames networks)));

  #networking.interfaces.vpn = {
  #  virtual = true;
  #  name = "vpn";
  #  #ipv4.addresses = [ { address = 10.9.1.1; prefixlen = 16; } ];
  #};

  boot.kernel.sysctl = {
    "net.ipv4.ip_forward" = true;
    "net.ipv6.conf.all.forwarding" = true;
  };

  # using nftables so firewall has to be disabled
  networking.firewall.enable = false;
  networking.nftables.enable = true;
  networking.nftables.ruleset = ''
    table inet filter {
      chain input {
        type filter hook input priority 0;
    
        # accept any localhost traffic
        iifname lo accept
    
        # accept traffic originated from us
        ct state {established, related} accept
    
        # ICMP
        ip6 nexthdr icmpv6 icmpv6 type { destination-unreachable, packet-too-big, time-exceeded, parameter-problem, nd-router-advert, nd-neighbor-solicit, nd-neighbor-advert, mld-listener-query, nd-router-solicit } accept
        ip protocol icmp icmp type { destination-unreachable, router-advertisement, time-exceeded, parameter-problem } accept
    
        # allow "ping"
        ip6 nexthdr icmpv6 icmpv6 type echo-request accept
        ip protocol icmp icmp type echo-request accept

        # allow OSPFv3
        ip6 nexthdr 89 accept

        tcp dport 22 accept
        tcp dport 53 accept
        udp dport 53 accept
        tcp dport 80 accept
        tcp dport 443 accept
        udp dport tftp accept

        iifname managment udp dport tftp accept
        iifname lan tcp dport 8080 accept

        # openvpn-members
        udp dport 20001 accept
        tcp dport 20001 accept

        # laserproxy
        udp dport 40200 accept
        udp dport 50200 accept
    
        counter drop
      }
    
      # Allow all outgoing connections.
      chain output {
        type filter hook output priority 0; policy accept;
      }
    
      chain forward {
        type filter hook forward priority 0; policy drop;
        ct state {established, related} jump accepted
        oifname "loop" jump accepted
        ip saddr 10.8.0.0/16 iifname "lan" jump accepted
        ip saddr 10.9.0.0/16 iifname "vpn" jump accepted
        ip6 saddr 2a0d:eb00:4242::0/64 iifname "lan" jump accepted
        ip6 saddr 2a0d:eb00:4242:1::0/64 iifname "vpn" jump accepted
        ip6 saddr 2a0d:eb00:4242:1::1/128 iifname "loop" jump accepted
      }

      chain accepted {
        # IMPORTANT
        # Log all connections to the outside world from LAN interface, as we are
        # required to do so
        oifname != "uplink" accept
        iifname "uplink" accept
        ip daddr { 10.0.0.0/8, 225.225.225.225/32 } accept
        ip6 daddr { 2a0d:eb00::/29, fe80::/8 } accept
        log group 2 accept
      }
    }

    table inet net {
      chain postrouting {
        type nat hook postrouting priority 100;
        ip saddr 10.8.0.0/16 oifname uplink snat ${networks.uplink.ipv4}
        ip saddr 10.9.0.0/16 oifname uplink snat ${networks.uplink.ipv4}
      }
      
      chain prerouting {
        type nat hook prerouting priority -100;

        # Access to staszkecoin from Internet
        ip version 4 iifname "uplink" tcp dport 8333 dnat 10.8.1.49
      }
    }
  '';

  systemd.services."loop-netdev" = let n = "loop"; in {
    description = "Dummy interface: loop";
    wantedBy = [ "network-setup.service" "sys-subsystem-net-devices-${n}.device" ];
    partOf = [ "network-setup.service" ];
    after = [ "network-pre.target" ];
    before = [ "network-setup.service" ];
    serviceConfig.Type = "oneshot";
    serviceConfig.RemainAfterExit = true;
    path = [ pkgs.iproute ];
    script = ''
      # Remove Dead Interfaces
      ip link show "${n}" >/dev/null 2>&1 && ip link delete "${n}"
      ip link add "${n}" type dummy
      ip link set "${n}" up
    '';
    postStop = ''
      ip link delete "${n}"
    '';
  };


  networking.interfaces = {
    uplink = {
      ipv4.addresses = [ { address = networks.uplink.ipv4; prefixLength = 31; } ];
      ipv6.addresses = [
        { address = networks.uplink.ipv6; prefixLength = 112; }
      ];
    };
    lan = {
      ipv4.addresses = [ { address = networks.lan.ipv4; prefixLength = 16; } ];
      ipv6.addresses = [ { address = networks.lan.ipv6; prefixLength = 64; } ];
    };
    loop = {
      ipv6.addresses = [ { address = "2a0d:eb00:4242:1::1"; prefixLength = 128; } ];
    };
    laser = {
      ipv4.addresses = [ { address = "10.11.0.1"; prefixLength = 24; } ];
    };
    bms = {
      ipv4.addresses = [ { address = "10.11.1.1"; prefixLength = 24; } ];
    };
    managment = {
      ipv4.addresses = [ { address = "10.10.1.1"; prefixLength = 24; } ];
    };
    lte = {
      ipv4.addresses = [ { address = "192.168.1.2"; prefixLength = 24; } ];
    };
  };

  networking.defaultGateway = {
    address = "185.236.240.4";
    interface = "uplink";
  };
  networking.defaultGateway6 = {
    address = "2a0d:eb00:2137:1::1";
    interface = "uplink";
  };


  networking.nameservers = [ "1.0.0.1" "8.8.8.8" ];

  services.openssh = {
    enable = true;
    passwordAuthentication = false;
    logLevel = "INFO";
  };

  users.users.root.openssh.authorizedKeys.keys = [ vuko-pubkey q3k-pubkey ];

  services.dhcpd4 = {
    enable = true;
    configFile = ./dhcpd.conf;
    interfaces = ["lan"];
  };

  hscloud.routing = {
    enable = true;
    # TODO(q3k): make this optional in upstream
    extra = "";
    routerID = "185.236.240.5";
    tables.master.program = true;
    pipe.v6.aggregate_to_kernel = {
      table = "master";
      peerTable = "aggregate";
      filterIn = ''
        if source = RTS_OSPF then accept;
        if source = RTS_OSPF_EXT2 then accept;
        reject;
      '';
    };
    ospf.v6.upstream = {
      table = "aggregate";
      area."0.0.0.0" = {
        interfaces.uplink = { type = "bcast"; };
        interfaces.lan = { type = "bcast"; stub = true; };
        interfaces.loop = { type = "ptp"; stub = true; };
      };
    };
  };

  services.radvd = {
    enable = true;
    config = ''
      interface lan {
        AdvSendAdvert on;
        prefix 2a0d:eb00:4242::/64 {
        };
        route 0::/0 { };
      };
      interface vpn {
        AdvSendAdvert on;
        prefix 2a0d:eb00:4242:1::/64 {
          AdvRouterAddr on;
        };
        route 0::/0 { };
      };
    '';
  };

  services.logrotate = {
    enable = true;
    paths = {
      ulogd = {
        enable = true;
        frequency = "weekly";
        path = "/var/log/ulogd.pcap";
        extraConfig = ''
          postrotate
            ${pkgs.killall}/bin/killall -HUP ulogd
          endscript
        '';
        keep = 55;
      };
    };
  };

  services.cron = let
    log-neigh = pkgs.writeShellScript "log-neigh"  ''
      mkdir -p /var/log/arptables
      chmod 700 /var/log/arptables

      # Larger than 10MB? rotate.
      if [[ $(find /var/log/arptables/arptables.log -type f -size +10485760c 2>/dev/null) ]]; then
          f=/var/log/arptables/$(date "+%s").log
          cp /var/log/arptables/arptables.log $f
          gzip -9 $f
          rm /var/log/arptables/arptables.log
      fi

      ip neigh >> /var/log/arptables/arptables.log
      date --iso-8601=seconds >> /var/log/arptables/arptables.log
    '';
  in {
    mailto = "vuko@hackerspace.pl";
    enable = true;
    systemCronJobs = [
      "*/5 * * * *      root    ${log-neigh}"
      "0   3 * * *      root    ${update_authorized_keys}/bin/update_authorized_keys"
    ];
  };

  services.knot = {
    enable = true;
    extraConfig = ''
      server:
          listen: ${networks.uplink.ipv4}@53
          listen: ${networks.uplink.ipv6}@53
      
      zone:
        - domain: waw.hackerspace.pl
          storage: ${./zones}
          file: waw.hackerspace.pl
        - domain: i
          storage: ${./zones}
          file: i
        - domain: api.ustream.tv
          storage: ${./zones}
          file: api.ustream.tv
        - domain: api.eye.fi
          storage: ${./zones}
          file: api.eye.fi
      log:
        - target: syslog
          any: info
    '';
  };

  services.nginx.enable = true;
  services.nginx.mapHashBucketSize = 64;
  services.nginx.appendHttpConfig = ''
    server_names_hash_bucket_size 64;
  '';

  security.acme = {
    email = "bofh@hackerspace.pl";
    acceptTerms = true;
  };

  services.nginx.virtualHosts."customs.hackerspace.pl" = {
    default = true;
    enableACME = true;

    locations."/" = {
      extraConfig = ''
        return 302 https://isztar.mf.gov.pl;
      '';
    };
    locations."/metrics/luftdaten" = {
      proxyPass = "http://10.8.0.146";
    };
    locations."/metrics/spejsiot" = {
      proxyPass = "http://spejsiot.waw.hackerspace.pl/metrics";
    };
    locations."/metrics/apm" = {
      proxyPass = "http://10.8.1.40:5000/metrics";
    };
    locations."/metrics/vending" = {
      proxyPass = "http://10.8.1.32:8000/";
    };
    locations."/metrics/sztancarka" = {
      proxyPass = "http://10.8.0.96:8888/";
    };
    locations."/metrics/mikrotik" = {
      proxyPass = "http://127.0.0.1:9436/metrics";
      extraConfig = ''
        allow 209.250.231.127;
        deny all;
      '';
    };
    locations."/metrics/node" = {
      proxyPass = "http://[::1]:9100/metrics";
      extraConfig = ''
        allow 209.250.231.127;
        deny all;
      '';
    };
    locations."/stats/sztancarka-ppm" = {
      proxyPass = "http://10.8.0.96:9090/api/v1/query?query=rate%28cut_count_total%5B15m%5D%29+*+60";
    };
    locations."/stats/sztancarka-last-24h" = {
      proxyPass = "http://10.8.0.96:9090/api/v1/query?query=round(increase(cut_count_total[24h]))";
    };
  };

  services.unbound = {
    enable = true;

    settings = {
      server = {
        interface = [
          networks.lan.ipv4
          "127.0.0.1"
          "::1"
          # networks.lan.ipv6 TODO
        ];
        access-control = [
          "127.0.0.1/8 allow"
          "10.0.0.0/8 allow"
        ];
      };

      stub-zone = map (name: {
        name = name;
        stub-addr = networks.uplink.ipv4;
      }) [ "waw.hackerspace.pl" "api.eye.fi" "api.ustream.tv" "i" ];
      forward-zone = {
        name = ".";
        forward-addr = "185.236.240.1";
      };
    };
  };

  # Public VPN access for Hackerspace members
  services.openvpn.servers.members.config = ''
    script-security 3
    auth-user-pass-verify ${openvpn-auth}/bin/openvpn-auth-member via-env
    verify-client-cert none
    username-as-common-name

    #user _openvpn
    #group _openvpn
    multihome

    port 20001
    proto udp
    proto udp6
    dev vpn
    dev-type tun
    ca ${secrets-path}/openvpn-public/ca.crt
    cert ${secrets-path}/openvpn-public/server.crt
    key ${secrets-path}/openvpn-public/server.key
    dh ${secrets-path}/openvpn-public/dh.pem
    server 10.9.1.0 255.255.255.0

    push "route 10.8.0.0 255.255.0.0"
    push "route 10.9.0.0 255.255.0.0"
    push "route 10.10.0.0 255.255.0.0"
    push "route 10.11.0.0 255.255.0.0"
    push "dhcp-option DNS ${networks.lan.ipv4}"
    push "dhcp-option DOMAIN waw.hackerspace.pl"

    ifconfig-pool-persist /var/lib/openvpn-public/ipp.txt
    #client-config-dir /var/lib/openvpn-public/ccd
    client-to-client
    keepalive 10 120
    comp-lzo
    persist-key
    persist-tun
  '';

  environment.systemPackages = with pkgs; [
    vim tcpdump htop nmon tmux git file procps parted dmidecode ack utillinux nmap mosh ncdu tree lz4 bind
    rxvt_unicode.terminfo update_authorized_keys
  ];
  programs.mtr.enable = true;

  environment.variables = {
    EDITOR = "vim";
  };

  system.stateVersion = "20.03";

  boot.vesa = false;
  boot.loader.grub.splashImage = null;
}

