vuls: init at 0.27.0
[NixPkgs.git] / nixos / modules / services / networking / websockify.nix
blob41336000b0addcc5d4e0e7e8c13d02aa9abad95e
1 { config, lib, pkgs, ... }:
3 with lib;
5 let cfg = config.services.networking.websockify; in {
6   options = {
7     services.networking.websockify = {
8       enable = mkOption {
9         description = "Whether to enable websockify to forward websocket connections to TCP connections.";
11         default = false;
13         type = types.bool;
14       };
16       sslCert = mkOption {
17         description = "Path to the SSL certificate.";
18         type = types.path;
19       };
21       sslKey = mkOption {
22         description = "Path to the SSL key.";
23         default = cfg.sslCert;
24         defaultText = literalExpression "config.services.networking.websockify.sslCert";
25         type = types.path;
26       };
28       portMap = mkOption {
29         description = "Ports to map by default.";
30         default = {};
31         type = types.attrsOf types.int;
32       };
33     };
34   };
36   config = mkIf cfg.enable {
37     systemd.services."websockify@" = {
38       description = "Service to forward websocket connections to TCP connections (from port:to port %I)";
39       script = ''
40         IFS=':' read -a array <<< "$1"
41         ${pkgs.python3Packages.websockify}/bin/websockify --ssl-only \
42           --cert=${cfg.sslCert} --key=${cfg.sslKey} 0.0.0.0:''${array[0]} 0.0.0.0:''${array[1]}
43       '';
44       scriptArgs = "%i";
45     };
47     systemd.targets.default-websockify = {
48       description = "Target to start all default websockify@ services";
49       unitConfig.X-StopOnReconfiguration = true;
50       wants = mapAttrsToList (name: value: "websockify@${name}:${toString value}.service") cfg.portMap;
51       wantedBy = [ "multi-user.target" ];
52     };
53   };