diff --git a/nixos/modules/services/web-apps/healthchecks.nix b/nixos/modules/services/web-apps/healthchecks.nix index 3b541e12481b..b92525075541 100644 --- a/nixos/modules/services/web-apps/healthchecks.nix +++ b/nixos/modules/services/web-apps/healthchecks.nix @@ -104,11 +104,16 @@ in See for a full documentation of settings. - We add two variables to this list inside the packages `local_settings.py.` - - STATIC_ROOT to set a state directory for dynamically generated static files. - - SECRET_KEY_FILE to read SECRET_KEY from a file at runtime and keep it out of /nix/store. - - EMAIL_HOST_PASSWORD_FILE to read EMAIL_HOST_PASSWORD from a file at runtime and keep it - out of /nix/store. + We add additional variables to this list inside the packages `local_settings.py.` + - `STATIC_ROOT` to set a state directory for dynamically generated static files. + - `SECRET_KEY_FILE` to read `SECRET_KEY` from a file at runtime and keep it out of + /nix/store. + - `_FILE` variants for several values that hold sensitive information in + [Healthchecks configuration](https://healthchecks.io/docs/self_hosted_configuration/) so + that they also can be read from a file and kept out of /nix/store. To see which values + have support for a `_FILE` variant, run: + - `nix-instantiate --eval --expr '(import {}).healthchecks.secrets'` + - or `nix eval 'nixpkgs#healthchecks.secrets'` if the flake support has been enabled. ''; type = types.submodule (settings: { freeformType = types.attrsOf types.str; @@ -165,12 +170,6 @@ in ''; description = lib.mdDoc "Database name."; }; - - EMAIL_HOST_PASSWORD_FILE = mkOption { - type = types.str; - default = ""; - description = lib.mdDoc "Path to a file containing the email password."; - }; }; }); }; diff --git a/pkgs/servers/web-apps/healthchecks/default.nix b/pkgs/servers/web-apps/healthchecks/default.nix index 59ddf659832b..193452c4354c 100644 --- a/pkgs/servers/web-apps/healthchecks/default.nix +++ b/pkgs/servers/web-apps/healthchecks/default.nix @@ -39,20 +39,36 @@ py.pkgs.buildPythonApplication rec { whitenoise ]; + secrets = [ + "DB_PASSWORD" + "DISCORD_CLIENT_SECRET" + "EMAIL_HOST_PASSWORD" + "LINENOTIFY_CLIENT_SECRET" + "MATRIX_ACCESS_TOKEN" + "PD_APP_ID" + "PUSHBULLET_CLIENT_SECRET" + "PUSHOVER_API_TOKEN" + "S3_SECRET_KEY" + "SECRET_KEY" + "SLACK_CLIENT_SECRET" + "TELEGRAM_TOKEN" + "TRELLO_APP_KEY" + "TWILIO_AUTH" + ]; + localSettings = writeText "local_settings.py" '' import os STATIC_ROOT = os.getenv("STATIC_ROOT") - SECRET_KEY_FILE = os.getenv("SECRET_KEY_FILE") - if SECRET_KEY_FILE: - with open(SECRET_KEY_FILE, "r") as file: - SECRET_KEY = file.readline() - - EMAIL_HOST_PASSWORD_FILE = os.getenv("EMAIL_HOST_PASSWORD_FILE") - if EMAIL_HOST_PASSWORD_FILE: - with open(EMAIL_HOST_PASSWORD_FILE, "r") as file: - EMAIL_HOST_PASSWORD = file.readline() + ${lib.concatLines (map + (secret: '' + ${secret}_FILE = os.getenv("${secret}_FILE") + if ${secret}_FILE: + with open(${secret}_FILE, "r") as file: + ${secret} = file.readline() + '') + secrets)} ''; installPhase = ''