# Run service that spits out an unbound-compatible blocklist of websites,
# as mandated by polish telecommunications law.
#
# https://sip.lex.pl/akty-prawne/dzu-dziennik-ustaw/gry-hazardowe-17581037/art-15-f
# Dz.U.2019.847 t.j.
# Art. 15f. [Rejestr domen służących do oferowania gier hazardowych niezgodnie z ustawą]
# 5.  Przedsiębiorca telekomunikacyjny świadczący usługi dostępu do sieci
#     Internet jest obowiązany do:
#  1) nieodpłatnego uniemożliwienia dostępu do stron internetowych
#     wykorzystujących nazwy domen internetowych wpisanych do Rejestru
#     poprzez ich usunięcie z systemów teleinformatycznych przedsiębiorców
#     telekomunikacyjnych, służących do zamiany nazw domen internetowych na
#     adresy IP, nie później niż w ciągu 48 godzin od dokonania wpisu do
#     Rejestru;
#  2) nieodpłatnego przekierowania połączeń odwołujących się do nazw domen
#     internetowych wpisanych do Rejestru do strony internetowej prowadzonej
#     przez ministra właściwego do spraw finansów publicznych, zawierającej
#     komunikat, skierowany do odbiorców usługi dostępu do Internetu
#     obejmujący w szczególności informacje o lokalizacji Rejestru, wpisaniu
#     szukanej nazwy domeny internetowej do tego Rejestru, listę podmiotów
#     legalnie oferujących gry hazardowe na terytorium Rzeczypospolitej
#     Polskiej, a także powiadomienie o grożącej odpowiedzialności
#     karno-skarbowej uczestnika gier urządzanych wbrew przepisom ustawy;
#  3) nieodpłatnego umożliwienia dostępu do stron internetowych
#     wykorzystujących nazwy domen wykreślonych z Rejestru, nie później niż w
#     ciągu 48 godzin od wykreślenia nazwy domeny internetowej z Rejestru.

{ config, pkgs, lib, ...  }:

with lib;

let
  rshUnbound = pkgs.buildGoModule {
    pname = "rsh-unbound";
    version = "20200926";
    src = pkgs.fetchFromGitHub {
      owner = "q3k";
      repo = "rsh-unbound";
      rev = "3d98c754adadddfae59387d033aef531f47dee5d";
      sha256 = "1ia33893m1dknw36vss97limlb1d28z5nkrkw6b4mp1igdgqsfcz";
    };

    vendorSha256 = "1w94g2dwhf47jmds95frb26ypjmis5zhyy85rmd124v0nz3axzhf";
  };

  cfg = config.hscloud.rsh;

in {
  options.hscloud.rsh = with types; {
    enable = mkOption {
      type = bool;
      default = false;
      description = "Enable the RSH-Unboudn service.";
    };
    out = mkOption {
      type = str;
      description = "Output file for generated unbound config.";
    };
  };

  config.systemd.services.rsh = mkIf cfg.enable {
    wantedBy = [ "multi-user.target" ];
    serviceConfig = {
      Type = "simple";
      ExecStart = "${rshUnbound}/bin/rsh-unbound -output ${cfg.out} -register_endpoint https://hazard.mf.gov.pl/api/Register";
      Restart = "always";
      RestartSec = "60";
    };
  };
}
