From ad2fe476884a8e7d3129e306e9658bb387ceef7f Mon Sep 17 00:00:00 2001 From: Sebastien Bourdeauducq Date: Thu, 2 May 2019 13:53:34 +0800 Subject: [PATCH] homu: do not put configuration file in nix * issue with multiline string values * slight security problem --- nixbld-etc-nixos/homu/nixos-module.nix | 46 +++++--------------------- 1 file changed, 9 insertions(+), 37 deletions(-) diff --git a/nixbld-etc-nixos/homu/nixos-module.nix b/nixbld-etc-nixos/homu/nixos-module.nix index 5842caf..3f5574d 100644 --- a/nixbld-etc-nixos/homu/nixos-module.nix +++ b/nixbld-etc-nixos/homu/nixos-module.nix @@ -2,40 +2,7 @@ with lib; let homu = pkgs.callPackage ./pkg.nix {}; - - toToml = key: value: - let valueString = - if builtins.isString value - then "\"" + (builtins.replaceStrings ["\"" "\\"] ["\\\"" "\\\\"] value) + "\"" - else toString value; - in "${key} = ${valueString}\n"; - - defaultConfig = { - db = { - file = "/var/db/homu/main.db"; - }; - }; cfg = config.services.homu; - homuConfig = defaultConfig // cfg.config; - configFilter = f: - filterAttrs (key: value: f value) homuConfig; - topLevelConfig = - configFilter (value: ! builtins.isAttrs value); - configSections = - configFilter (value: builtins.isAttrs value); - - configFile = builtins.toFile "config.toml" ( - builtins.concatStringsSep "" ( - (attrsets.mapAttrsToList toToml topLevelConfig) ++ - (builtins.concatLists (attrsets.mapAttrsToList - (sectionName: sectionConfig: - [ "[${sectionName}]\n" ] ++ - (attrsets.mapAttrsToList toToml sectionConfig) - ) configSections) - )) - ); - - dbDir = dirOf homuConfig.db.file; in { @@ -45,16 +12,21 @@ in default = false; description = "Enable the bot"; }; + dbDir = mkOption { + type = types.str; + default = "/var/db/homu"; + description = "Path to the database file (use the same path in config.toml)"; + }; config = mkOption { - description = "Structured data for config.toml"; - type = with types; attrsOf unspecified; + description = "Location of config.toml"; + type = types.str; }; }; config = mkIf cfg.enable { users.users.homu = { group = "homu"; - home = dbDir; + home = cfg.dbDir; createHome = true; }; users.groups.homu = {}; @@ -65,7 +37,7 @@ in after = [ "network.target" ]; serviceConfig = { Type = "simple"; - ExecStart = "${homu}/bin/homu -c ${configFile}"; + ExecStart = "${homu}/bin/homu -c ${cfg.config}"; Restart = "always"; RestartSec = "5sec";