]> git.immae.eu Git - perso/Immae/Config/Nix.git/blobdiff - modules/private/mail/dovecot.nix
Add automatic backup of received e-mails
[perso/Immae/Config/Nix.git] / modules / private / mail / dovecot.nix
index 6220da2b34b35a971f24feae0e0d6a27fd37ed58..f52f26352022642aa7228a6651cc80663b3f0b8f 100644 (file)
@@ -37,11 +37,13 @@ in
           base = ${myconfig.env.mail.dovecot.ldap.base}
           scope = subtree
 
-          user_filter = ${myconfig.env.mail.dovecot.ldap.filter}
           pass_filter = ${myconfig.env.mail.dovecot.ldap.filter}
+          pass_attrs = ${myconfig.env.mail.dovecot.ldap.pass_attrs}
 
           user_attrs = ${myconfig.env.mail.dovecot.ldap.user_attrs}
-          pass_attrs = ${myconfig.env.mail.dovecot.ldap.pass_attrs}
+          user_filter = ${myconfig.env.mail.dovecot.ldap.filter}
+          iterate_attrs = ${myconfig.env.mail.dovecot.ldap.iterate_attrs}
+          iterate_filter = ${myconfig.env.mail.dovecot.ldap.iterate_filter}
           '';
       }
     ];
@@ -90,6 +92,17 @@ in
           }
         ''
 
+        # ACL
+        ''
+          mail_plugins = $mail_plugins acl
+          plugin {
+            acl = vfile:${pkgs.writeText "dovecot-acl" ''
+              Backup/* owner lrp
+              ''}
+            acl_globals_only = yes
+          }
+        ''
+
         # Full text search
         ''
           # needs to be bigger than any mailbox size
@@ -115,6 +128,8 @@ in
             sieve_plugins = sieve_imapsieve sieve_extprograms
             imapsieve_url = sieve://127.0.0.1:4190
 
+            sieve_before = file:${./sieve_scripts}/backup.sieve
+
             # From elsewhere to Junk folder
             imapsieve_mailbox1_name = Junk
             imapsieve_mailbox1_causes = COPY APPEND
@@ -185,8 +200,8 @@ in
           args = ${config.secrets.fullPaths."dovecot/ldap"}
         }
         userdb {
-          driver = static
-          args = user=%u uid=vhost gid=vhost home=/var/lib/vhost/%d/%n/ mail=mbox:~/Mail:INBOX=~/Mail/Inbox:INDEX=~/.imap
+          driver = ldap
+          args = ${config.secrets.fullPaths."dovecot/ldap"}
         }
         ''
 
@@ -223,7 +238,7 @@ in
         # Needs to come last if there are mail_plugins entries
         ''
         protocol imap {
-          mail_plugins = $mail_plugins imap_sieve
+          mail_plugins = $mail_plugins imap_sieve imap_acl
         }
         protocol lda {
           mail_plugins = $mail_plugins sieve
@@ -239,6 +254,16 @@ in
         '';
     };
 
+    services.cron.systemCronJobs = let
+      cron_script = pkgs.writeScriptBin "cleanup-imap-folders" ''
+        ${pkgs.dovecot}/bin/doveadm expunge -A MAILBOX "Backup/*" NOT UID 1:256
+        ${pkgs.dovecot}/bin/doveadm expunge -A MAILBOX Junk SEEN NOT FLAGGED BEFORE 4w
+        ${pkgs.dovecot}/bin/doveadm search -A MAILBOX Trash NOT FLAGGED BEFORE 4w
+        '';
+      in
+      [
+        "0 2 * * * root ${cron_script}/bin/cleanup-imap-folders"
+      ];
     security.acme.certs."mail" = {
       postRun = ''
         systemctl restart dovecot2.service