Merge branch '#84-improve-topdesk-organisation' into 'main'

Add a BCC to service account mails to enable threading

Closes #84

See merge request compsoc1/skynet/nixos!38
This commit is contained in:
silver 2024-07-25 08:21:33 +00:00
commit 86e0c091fb

View file

@ -92,7 +92,7 @@ with lib; let
} }
]; ];
configFile = sieveConfigFile =
# https://doc.dovecot.org/configuration_manual/sieve/examples/#plus-addressed-mail-filtering # https://doc.dovecot.org/configuration_manual/sieve/examples/#plus-addressed-mail-filtering
pkgs.writeText "basic_sieve" pkgs.writeText "basic_sieve"
'' ''
@ -105,17 +105,32 @@ with lib; let
# this should be close to teh last step # this should be close to teh last step
if allof ( if allof (
address :localpart ["To"] ["${toString create_config_to}"], address :localpart ["To", "Cc"] ["${toString create_config_to}"],
address :domain ["To"] "skynet.ie" address :domain ["To", "Cc"] "skynet.ie"
){ ){
if address :matches ["To"] "*@skynet.ie" { if address :matches ["To", "Cc"] "*@skynet.ie" {
if header :is "X-Spam" "Yes" { if header :is "X-Spam" "Yes" {
fileinto :create "''${1}.Junk"; fileinto :create "''${1}.Junk";
stop; stop;
} else { } else {
fileinto :create "''${1}"; fileinto :create "''${1}";
} stop;
} }
}
}
if allof (
address :localpart ["From"] ["${toString create_config_to}"],
address :domain ["From"] "skynet.ie"
){
if address :matches ["From"] "*@skynet.ie" {
if header :is "X-Spam" "Yes" {
fileinto :create "''${1}.Junk";
stop;
} else {
fileinto :create "''${1}";
stop;
}
}
} }
''; '';
in { in {
@ -462,7 +477,40 @@ in {
}; };
services.dovecot2.sieve.scripts = { services.dovecot2.sieve.scripts = {
before = configFile; before = sieveConfigFile;
};
# This is to add a bcc to outgoing mail
# this then interacts with teh filters to put it in the right folder
# we can directly add to the postfix service here
services.postfix = let
# mostly copied from the upstream mailserver config/functions
mappedFile = name: "hash:/var/lib/postfix/conf/${name}";
sender_bcc_maps_file = let
content = lookupTableToString create_skynet_service_bcc;
in
builtins.toFile "sender_bcc_maps" content;
lookupTableToString = attrs: let
valueToString = value: lib.concatStringsSep ", " value;
in
lib.concatStringsSep "\n" (lib.mapAttrsToList (name: value: "${name} ${valueToString value}") attrs);
# convert the mailboxes config to something that can be used here
create_skynet_email_bcc = mailbox: {
name = "${mailbox}@skynet.ie";
value = ["${mailbox}@skynet.ie"];
};
create_skynet_service_bcc = builtins.listToAttrs (map (mailbox: (create_skynet_email_bcc mailbox.account)) service_mailboxes);
in {
mapFiles."sender_bcc_maps" = sender_bcc_maps_file;
config = {
sender_bcc_maps = [
(mappedFile "sender_bcc_maps")
];
};
}; };
# tune the spam filter # tune the spam filter