nixos/postfixadmin: refactor

Changed files
+38 -36
nixos
modules
services
+38 -36
nixos/modules/services/mail/postfixadmin.nix
···
cfg = config.services.postfixadmin;
fpm = config.services.phpfpm.pools.postfixadmin;
localDB = cfg.database.host == "localhost";
+
pgsql = config.services.postgresql;
user = if localDB then cfg.database.username else "nginx";
in
{
···
If `database.host` is set to `localhost`, a unix user and group of the same name will be created as well.
'';
};
+
host = lib.mkOption {
type = lib.types.str;
default = "localhost";
···
permissions.
'';
};
+
passwordFile = lib.mkOption {
type = lib.types.path;
description = "Password file for the postgresql connection. Must be readable by user `nginx`.";
};
+
dbname = lib.mkOption {
type = lib.types.str;
default = "postfixadmin";
···
}
];
};
+
# The postgresql module doesn't currently support concepts like
# objects owners and extensions; for now we tack on what's needed
# here.
-
systemd.services.postfixadmin-postgres =
-
let
-
pgsql = config.services.postgresql;
-
in
-
lib.mkIf localDB {
-
after = [ "postgresql.service" ];
-
bindsTo = [ "postgresql.service" ];
-
wantedBy = [ "multi-user.target" ];
-
path = [
-
pgsql.package
-
pkgs.util-linux
-
];
-
script = ''
-
set -eu
+
systemd.services.postfixadmin-postgres = lib.mkIf localDB {
+
after = [ "postgresql.service" ];
+
bindsTo = [ "postgresql.service" ];
+
wantedBy = [ "multi-user.target" ];
+
path = [
+
pgsql.package
+
pkgs.util-linux
+
];
+
script = ''
+
set -eu
-
PSQL() {
-
psql --port=${toString pgsql.port} "$@"
-
}
+
PSQL() {
+
psql --port=${toString pgsql.port} "$@"
+
}
-
PSQL -tAc "SELECT 1 FROM pg_database WHERE datname = '${cfg.database.dbname}'" | grep -q 1 || PSQL -tAc 'CREATE DATABASE "${cfg.database.dbname}" OWNER "${cfg.database.username}"'
-
current_owner=$(PSQL -tAc "SELECT pg_catalog.pg_get_userbyid(datdba) FROM pg_catalog.pg_database WHERE datname = '${cfg.database.dbname}'")
-
if [[ "$current_owner" != "${cfg.database.username}" ]]; then
-
PSQL -tAc 'ALTER DATABASE "${cfg.database.dbname}" OWNER TO "${cfg.database.username}"'
-
if [[ -e "${config.services.postgresql.dataDir}/.reassigning_${cfg.database.dbname}" ]]; then
-
echo "Reassigning ownership of database ${cfg.database.dbname} to user ${cfg.database.username} failed on last boot. Failing..."
-
exit 1
-
fi
-
touch "${config.services.postgresql.dataDir}/.reassigning_${cfg.database.dbname}"
-
PSQL "${cfg.database.dbname}" -tAc "REASSIGN OWNED BY \"$current_owner\" TO \"${cfg.database.username}\""
-
rm "${config.services.postgresql.dataDir}/.reassigning_${cfg.database.dbname}"
-
fi
-
'';
+
PSQL -tAc "SELECT 1 FROM pg_database WHERE datname = '${cfg.database.dbname}'" | grep -q 1 || PSQL -tAc 'CREATE DATABASE "${cfg.database.dbname}" OWNER "${cfg.database.username}"'
+
current_owner=$(PSQL -tAc "SELECT pg_catalog.pg_get_userbyid(datdba) FROM pg_catalog.pg_database WHERE datname = '${cfg.database.dbname}'")
+
if [[ "$current_owner" != "${cfg.database.username}" ]]; then
+
PSQL -tAc 'ALTER DATABASE "${cfg.database.dbname}" OWNER TO "${cfg.database.username}"'
+
if [[ -e "${pgsql.dataDir}/.reassigning_${cfg.database.dbname}" ]]; then
+
echo "Reassigning ownership of database ${cfg.database.dbname} to user ${cfg.database.username} failed on last boot. Failing..."
+
exit 1
+
fi
+
touch "${pgsql.dataDir}/.reassigning_${cfg.database.dbname}"
+
PSQL "${cfg.database.dbname}" -tAc "REASSIGN OWNED BY \"$current_owner\" TO \"${cfg.database.username}\""
+
rm "${pgsql.dataDir}/.reassigning_${cfg.database.dbname}"
+
fi
+
'';
-
serviceConfig = {
-
User = pgsql.superUser;
-
Type = "oneshot";
-
RemainAfterExit = true;
-
};
+
serviceConfig = {
+
User = pgsql.superUser;
+
Type = "oneshot";
+
RemainAfterExit = true;
};
+
};
users.users.${user} = lib.mkIf localDB {
group = user;
isSystemUser = true;
createHome = false;
};
+
users.groups.${user} = lib.mkIf localDB { };
services.phpfpm.pools.postfixadmin = {
···
error_log = 'stderr'
log_errors = on
'';
-
settings = lib.mapAttrs (name: lib.mkDefault) {
+
settings = lib.mapAttrs (_: lib.mkDefault) {
"listen.owner" = "nginx";
"listen.group" = "nginx";
"listen.mode" = "0660";