Remove accounts.<name>.aliases and rename extraVirtualAliases to virtualAccountAliases
Some checks failed
Test / tests (push) Failing after 3m0s

In order to simplify configuration and reduce configuration variability,
this commit removes the option to directly add aliases to each single
mail account. Instead, aliaes should be centrally configured using the
option 'virtualAccountAliases'.
This commit is contained in:
Thomas Preisner 2025-01-06 23:29:40 +01:00
parent 28796695af
commit faf6f549b0
3 changed files with 15 additions and 53 deletions

View file

@ -92,17 +92,6 @@ in {
'';
};
aliases = lib.mkOption {
type = with lib.types; listOf types.str;
example = ["abuse@example.com" "postmaster@example.com"];
default = [];
description = ''
A list of aliases of this login account.
Note: Use list entries like "@example.com" to create a catchAll
that allows sending from all email addresses in these domain.
'';
};
isSystemUser = lib.mkOption {
type = lib.types.bool;
default = false;
@ -153,7 +142,7 @@ in {
default = {};
};
extraVirtualAliases = lib.mkOption {
virtualAccountAliases = lib.mkOption {
type = let
account = lib.mkOptionType {
name = "Mail Account";

View file

@ -21,25 +21,15 @@ with (import ./common.nix {inherit config;}); let
mergeLookupTables = tables: lib.zipAttrsWith (n: v: lib.flatten v) tables;
account_virtual_aliases = mergeLookupTables (lib.flatten (lib.mapAttrsToList
(name: value: let
to = name;
in
map (from: {"${from}" = to;}) (value.aliases ++ lib.singleton name))
cfg.accounts));
virtual_accounts = mergeLookupTables (lib.map (name: {"${name}" = name;}) (lib.attrNames cfg.accounts));
virtual_account_aliases = attrsToLookupTable cfg.virtualAccountAliases;
virtual_domain_aliases = let
alias_domains =
lib.concatMapAttrs (src: dst: {
"@${src}" = "@${dst}";
})
cfg.virtualDomainAliases;
alias_domains = lib.mapAttrs' (src: dst: lib.nameValuePair "@${src}" "@${dst}") cfg.virtualDomainAliases;
in
attrsToLookupTable alias_domains;
extra_virtual_aliases = attrsToLookupTable cfg.extraVirtualAliases;
all_virtual_aliases = mergeLookupTables [account_virtual_aliases virtual_domain_aliases extra_virtual_aliases];
all_virtual_aliases = mergeLookupTables [virtual_accounts virtual_account_aliases virtual_domain_aliases];
aliases_file = let
content = lookupTableToString all_virtual_aliases;

View file

@ -1,5 +1,6 @@
{pkgs, ...}:
with (import ./common/lib.nix {inherit pkgs;}); let
lib = pkgs.lib;
accounts = {
"normal" = {
address = "user1@example.com";
@ -11,32 +12,23 @@ with (import ./common/lib.nix {inherit pkgs;}); let
};
"alias" = {
address = "user3@example.com";
aliases = ["alias@example.com"];
password = "secret-password3";
};
"extra-alias" = {
address = "user4@example.com";
password = "secret-password4;";
};
"multi-alias1" = {
address = "multi-alias1@example.com";
aliases = ["multi-alias@example.com"];
password = "secret-password5;";
password = "secret-password4;";
};
"multi-alias2" = {
address = "multi-alias2@example.com";
aliases = ["multi-alias@example.com"];
password = "secret-password6;";
password = "secret-password5;";
};
"catchall" = {
address = "catchall@example.com";
aliases = ["@example.com"];
password = "secret-password7;";
password = "secret-password6;";
};
"otherdomain" = {
address = "otherdomain@example.com";
aliases = ["user@otherdomain.com"];
password = "secret-password8;";
password = "secret-password7;";
};
};
in
@ -53,8 +45,11 @@ in
virtualDomainAliases = {
"aliased.com" = "example.com";
};
extraVirtualAliases = {
"extra-alias@example.com" = accounts."extra-alias".address;
virtualAccountAliases = {
"alias@example.com" = accounts."alias".address;
"multi-alias@example.com" = lib.map (x: accounts.${x}.address) ["multi-alias1" "multi-alias2"];
"@example.com" = accounts."catchall".address;
"user@otherdomain.com" = accounts."otherdomain".address;
};
};
};
@ -182,18 +177,6 @@ in
# fetchmail returns EXIT_CODE 0 when it retrieves mail
client.succeed("${recvMail "otherdomain"} >&2")
with subtest("mail incoming on extraVirtualAlias"):
client.succeed("${sendMail "normal" "" "extra-alias@example.com" ''
Subject: extraVirtualAliases-Test
Hello User4,
this is mail is sent to you by using an extraVirtualAlias as recipient.
''}")
server.wait_until_fails('${pendingPostqueue}')
client.execute("${cleanupMail}")
# fetchmail returns EXIT_CODE 0 when it retrieves mail
client.succeed("${recvMail "extra-alias"} >&2")
with subtest("receiving mail on aliased domain using normal account"):
client.succeed("${sendMail "normal" "" "user2@aliased.com" ''
Subject: aliasedDomain with normal account