blob: d011ee65c40c48ad0342fccead8d38fb0489b0ff [file] [log] [blame]
Serge Bazanski6abe4fa2020-10-03 00:18:34 +02001# Run service that spits out an unbound-compatible blocklist of websites,
2# as mandated by polish telecommunications law.
3#
4# https://sip.lex.pl/akty-prawne/dzu-dziennik-ustaw/gry-hazardowe-17581037/art-15-f
5# Dz.U.2019.847 t.j.
6# Art. 15f. [Rejestr domen służących do oferowania gier hazardowych niezgodnie z ustawą]
7# 5. Przedsiębiorca telekomunikacyjny świadczący usługi dostępu do sieci
8# Internet jest obowiązany do:
9# 1) nieodpłatnego uniemożliwienia dostępu do stron internetowych
10# wykorzystujących nazwy domen internetowych wpisanych do Rejestru
11# poprzez ich usunięcie z systemów teleinformatycznych przedsiębiorców
12# telekomunikacyjnych, służących do zamiany nazw domen internetowych na
13# adresy IP, nie później niż w ciągu 48 godzin od dokonania wpisu do
14# Rejestru;
15# 2) nieodpłatnego przekierowania połączeń odwołujących się do nazw domen
16# internetowych wpisanych do Rejestru do strony internetowej prowadzonej
17# przez ministra właściwego do spraw finansów publicznych, zawierającej
18# komunikat, skierowany do odbiorców usługi dostępu do Internetu
19# obejmujący w szczególności informacje o lokalizacji Rejestru, wpisaniu
20# szukanej nazwy domeny internetowej do tego Rejestru, listę podmiotów
21# legalnie oferujących gry hazardowe na terytorium Rzeczypospolitej
22# Polskiej, a także powiadomienie o grożącej odpowiedzialności
23# karno-skarbowej uczestnika gier urządzanych wbrew przepisom ustawy;
24# 3) nieodpłatnego umożliwienia dostępu do stron internetowych
25# wykorzystujących nazwy domen wykreślonych z Rejestru, nie później niż w
26# ciągu 48 godzin od wykreślenia nazwy domeny internetowej z Rejestru.
27
28{ config, pkgs, lib, ... }:
29
30with lib;
31
32let
33 rshUnbound = pkgs.buildGoModule {
34 pname = "rsh-unbound";
35 version = "20200926";
36 src = pkgs.fetchFromGitHub {
37 owner = "q3k";
38 repo = "rsh-unbound";
Serge Bazanski767f0312021-12-08 14:07:39 +000039 rev = "31f8975d30a301fdf6f1d445826ebcd671ae07a3";
40 sha256 = "sha256-twI9VzPLBgztdccDgB29lJG7ekwpjr1eh27nR5F/TMA=";
Serge Bazanski6abe4fa2020-10-03 00:18:34 +020041 };
42
Serge Bazanski767f0312021-12-08 14:07:39 +000043 vendorSha256 = "sha256-A8yHaqSWHhvNmGrk6C6XOVYfVaFbiPmKqglg6gImwWM=";
Serge Bazanski6abe4fa2020-10-03 00:18:34 +020044 };
45
46 cfg = config.hscloud.rsh;
47
48in {
49 options.hscloud.rsh = with types; {
50 enable = mkOption {
51 type = bool;
52 default = false;
53 description = "Enable the RSH-Unboudn service.";
54 };
55 out = mkOption {
56 type = str;
Serge Bazanskie1aa63c2022-06-12 12:27:56 +020057 default = "/var/lib/rsh.conf";
Serge Bazanski6abe4fa2020-10-03 00:18:34 +020058 description = "Output file for generated unbound config.";
59 };
Serge Bazanskie1aa63c2022-06-12 12:27:56 +020060 register = mkOption {
61 type = str;
62 description = "URL of blocklist register.";
63 default = "https://hazard.mf.gov.pl/api/Register";
64 };
Serge Bazanski6abe4fa2020-10-03 00:18:34 +020065 };
66
Serge Bazanskie1aa63c2022-06-12 12:27:56 +020067 config = mkIf cfg.enable {
68 services.unbound.settings.server.include = [ cfg.out ];
69 systemd.services.rsh = {
70 wantedBy = [ "multi-user.target" "unbound.service" ];
71 serviceConfig = {
72 Type = "simple";
73 ExecStartPre = "${pkgs.coreutils}/bin/touch ${cfg.out}";
74 ExecStart = "${rshUnbound}/bin/rsh-unbound -output ${cfg.out} -register_endpoint ${cfg.register}";
75 Restart = "always";
76 RestartSec = "10";
77 };
Serge Bazanski6abe4fa2020-10-03 00:18:34 +020078 };
79 };
80}