nixos/discourse: Use replace-secret to avoid leaking secrets

Using `replace-literal` to insert secrets leaks the secrets through
the `replace-literal` process' `/proc/<pid>/cmdline`
file. `replace-secret` solves this by reading the secret straight from
the file instead, which also simplifies the code a bit.

talyz 38398fad 27f8f695

Changed files
+4 -6
nixos
modules
services
web-apps
+4 -6
nixos/modules/services/web-apps/discourse.nix
···
];
path = cfg.package.runtimeDeps ++ [
postgresqlPackage
-
pkgs.replace
+
pkgs.replace-secret
cfg.package.rake
];
environment = cfg.package.runtimeEnv // {
···
mkSecretReplacement = file:
lib.optionalString (file != null) ''
-
(
-
password=$(<'${file}')
-
replace-literal -fe '${file}' "$password" /run/discourse/config/discourse.conf
-
)
+
replace-secret '${file}' '${file}' /run/discourse/config/discourse.conf
'';
in ''
set -o errexit -o pipefail -o nounset -o errtrace
···
cfg.siteSettings
"/run/discourse/config/nixos_site_settings.json"
}
-
install -T -m 0400 -o discourse ${discourseConf} /run/discourse/config/discourse.conf
+
install -T -m 0600 -o discourse ${discourseConf} /run/discourse/config/discourse.conf
${mkSecretReplacement cfg.database.passwordFile}
${mkSecretReplacement cfg.mail.outgoing.passwordFile}
${mkSecretReplacement cfg.redis.passwordFile}
${mkSecretReplacement cfg.secretKeyBaseFile}
+
chmod 0400 /run/discourse/config/discourse.conf
)
discourse-rake db:migrate >>/var/log/discourse/db_migration.log