Merge pull request #24755 from LumiGuide/bepasty-secretKeyFile

bepasty: add secretKeyFile option

Changed files
+32 -4
nixos
modules
services
+32 -4
nixos/modules/services/misc/bepasty.nix
···
configure a number of bepasty servers which will be started with
gunicorn.
'';
-
type = with types ; attrsOf (submodule ({
+
type = with types ; attrsOf (submodule ({ config, ... } : {
options = {
···
example = "0.0.0.0:8000";
default = "127.0.0.1:8000";
};
-
dataDir = mkOption {
type = types.str;
···
type = types.str;
description = ''
server secret for safe session cookies, must be set.
+
+
Warning: this secret is stored in the WORLD-READABLE Nix store!
+
+
It's recommended to use <option>secretKeyFile</option>
+
which takes precedence over <option>secretKey</option>.
'';
default = "";
};
+
secretKeyFile = mkOption {
+
type = types.nullOr types.str;
+
default = null;
+
description = ''
+
A file that contains the server secret for safe session cookies, must be set.
+
+
<option>secretKeyFile</option> takes precedence over <option>secretKey</option>.
+
+
Warning: when <option>secretKey</option> is non-empty <option>secretKeyFile</option>
+
defaults to a file in the WORLD-READABLE Nix store containing that secret.
+
'';
+
};
+
workDir = mkOption {
type = types.str;
description = ''
···
};
};
+
config = {
+
secretKeyFile = mkDefault (
+
if config.secretKey != ""
+
then toString (pkgs.writeTextFile {
+
name = "bepasty-secret-key";
+
text = config.secretKey;
+
})
+
else null
+
);
+
};
}));
};
};
config = mkIf cfg.enable {
+
environment.systemPackages = [ bepasty ];
# creates gunicorn systemd service for each configured server
···
serviceConfig = {
Type = "simple";
PrivateTmp = true;
-
ExecStartPre = assert server.secretKey != ""; pkgs.writeScript "bepasty-server.${name}-init" ''
+
ExecStartPre = assert !isNull server.secretKeyFile; pkgs.writeScript "bepasty-server.${name}-init" ''
#!/bin/sh
mkdir -p "${server.workDir}"
mkdir -p "${server.dataDir}"
···
cat > ${server.workDir}/bepasty-${name}.conf <<EOF
SITENAME="${name}"
STORAGE_FILESYSTEM_DIRECTORY="${server.dataDir}"
-
SECRET_KEY="${server.secretKey}"
+
SECRET_KEY="$(cat "${server.secretKeyFile}")"
DEFAULT_PERMISSIONS="${server.defaultPermissions}"
${server.extraConfig}
EOF