vuls: init at 0.27.0
[NixPkgs.git] / nixos / modules / services / networking / dante.nix
blobaef518ddbfd97715045c2dc98f69da1146216656
1 { config, lib, pkgs, ... }:
2 let
3   cfg = config.services.dante;
4   confFile = pkgs.writeText "dante-sockd.conf" ''
5     user.privileged: root
6     user.unprivileged: dante
7     logoutput: syslog
9     ${cfg.config}
10   '';
14   meta = {
15     maintainers = with lib.maintainers; [ arobyn ];
16   };
18   options = {
19     services.dante = {
20       enable = lib.mkEnableOption "Dante SOCKS proxy";
22       config = lib.mkOption {
23         type        = lib.types.lines;
24         description = ''
25           Contents of Dante's configuration file.
26           NOTE: user.privileged, user.unprivileged and logoutput are set by the service.
27         '';
28       };
29     };
30   };
32   config = lib.mkIf cfg.enable {
33     assertions = [
34       { assertion   = cfg.config != "";
35         message     = "please provide Dante configuration file contents";
36       }
37     ];
39     users.users.dante = {
40       description   = "Dante SOCKS proxy daemon user";
41       isSystemUser  = true;
42       group         = "dante";
43     };
44     users.groups.dante = {};
46     systemd.services.dante = {
47       description   = "Dante SOCKS v4 and v5 compatible proxy server";
48       wants         = [ "network-online.target" ];
49       after         = [ "network-online.target" ];
50       wantedBy      = [ "multi-user.target" ];
52       serviceConfig = {
53         Type        = "simple";
54         ExecStart   = "${pkgs.dante}/bin/sockd -f ${confFile}";
55         ExecReload  = "${pkgs.coreutils}/bin/kill -HUP $MAINPID";
56         # Can crash sometimes; see https://github.com/NixOS/nixpkgs/pull/39005#issuecomment-381828708
57         Restart     = "on-failure";
58       };
59     };
60   };