Self-host your own digital island

generate coturn secret on start

Changed files
+24 -6
modules
+3 -1
modules/matrix.nix
···
description = "Generate matrix synapse turn shared secret config file";
script = ''
mkdir -p "$(dirname '${turnSharedSecretFile}')"
-
echo "turn_shared_secret: $(cat '${cfg.turn.secretFile}')" > '${turnSharedSecretFile}'
+
echo "turn_shared_secret: $(cat '${config.services.coturn.static-auth-secret-file}')" > '${turnSharedSecretFile}'
chmod 770 '${turnSharedSecretFile}'
chown ${config.systemd.services.matrix-synapse.serviceConfig.User}:${config.systemd.services.matrix-synapse.serviceConfig.Group} '${turnSharedSecretFile}'
'';
serviceConfig.Type = "oneshot";
serviceConfig.RemainAfterExit = true;
+
after = [ "coturn-static-auth-secret-generator.service" ];
+
requires = [ "coturn-static-auth-secret-generator.service" ];
};
"matrix-synapse" = {
after = [ "matrix-synapse-turn-shared-secret-generator.service" ];
+21 -5
modules/turn.nix
···
let
cfg = config.eilean;
domain = config.networking.domain;
+
staticAuthSecretFile = "/run/coturn/static-auth-secret";
in
{
options.eilean.turn = {
enable = mkEnableOption "TURN server";
-
secretFile = mkOption {
-
type = types.nullOr types.str;
-
default = null;
-
};
};
config = mkIf cfg.turn.enable {
···
no-tcp-relay = true;
secure-stun = true;
use-auth-secret = true;
-
static-auth-secret-file = "${cfg.turn.secretFile}";
+
static-auth-secret-file = staticAuthSecretFile;
realm = "turn.${domain}";
relay-ips = with config.eilean; [
serverIpv4
···
];
cert = "${config.security.acme.certs.${realm}.directory}/full.pem";
pkey = "${config.security.acme.certs.${realm}.directory}/key.pem";
+
};
+
+
systemd.services = {
+
coturn-static-auth-secret-generator = {
+
description = "Generate coturn static auth secret file";
+
script = ''
+
if [ ! -f '${staticAuthSecretFile}' ]; then
+
umask 077
+
tr -dc A-Za-z0-9 </dev/urandom | head -c 32 > '${staticAuthSecretFile}'
+
chown ${config.systemd.services.coturn.serviceConfig.User}:${config.systemd.services.coturn.serviceConfig.Group} '${staticAuthSecretFile}'
+
fi
+
'';
+
serviceConfig.Type = "oneshot";
+
serviceConfig.RemainAfterExit = true;
+
};
+
"coturn" = {
+
after = [ "coturn-static-auth-secret-generator.service" ];
+
requires = [ "coturn-static-auth-secret-generator.service" ];
+
};
};
networking.firewall =