diff options
Diffstat (limited to 'hosts')
| -rw-r--r-- | hosts/surtr/email/default.nix | 2 | ||||
| -rw-r--r-- | hosts/surtr/postgresql.nix | 4 |
2 files changed, 4 insertions, 2 deletions
diff --git a/hosts/surtr/email/default.nix b/hosts/surtr/email/default.nix index eb4ec69e..b4ae5ffb 100644 --- a/hosts/surtr/email/default.nix +++ b/hosts/surtr/email/default.nix | |||
| @@ -293,7 +293,7 @@ in { | |||
| 293 | args = ${pkgs.writeText "dovecot-sql.conf" '' | 293 | args = ${pkgs.writeText "dovecot-sql.conf" '' |
| 294 | driver = pgsql | 294 | driver = pgsql |
| 295 | connect = host=localhost dbname=email | 295 | connect = host=localhost dbname=email |
| 296 | user_query = SELECT mailbox AS user, quota_rule FROM mailbox WHERE mailbox = '%u' | 296 | user_query = SELECT user, quota_rule FROM imap_user WHERE user = '%u' |
| 297 | ''} | 297 | ''} |
| 298 | default_fields = uid=dovecot2 gid=dovecot2 | 298 | default_fields = uid=dovecot2 gid=dovecot2 |
| 299 | } | 299 | } |
diff --git a/hosts/surtr/postgresql.nix b/hosts/surtr/postgresql.nix index 932ff531..e3384fbd 100644 --- a/hosts/surtr/postgresql.nix +++ b/hosts/surtr/postgresql.nix | |||
| @@ -34,7 +34,7 @@ in { | |||
| 34 | id uuid PRIMARY KEY NOT NULL DEFAULT gen_random_uuid(), | 34 | id uuid PRIMARY KEY NOT NULL DEFAULT gen_random_uuid(), |
| 35 | mailbox text NOT NULL CONSTRAINT mailbox_non_empty CHECK (mailbox <> '''), | 35 | mailbox text NOT NULL CONSTRAINT mailbox_non_empty CHECK (mailbox <> '''), |
| 36 | quota_bytes bigint CONSTRAINT quota_bytes_positive CHECK (CASE WHEN quota_bytes IS NOT NULL THEN quota_bytes > 0 ELSE true END), | 36 | quota_bytes bigint CONSTRAINT quota_bytes_positive CHECK (CASE WHEN quota_bytes IS NOT NULL THEN quota_bytes > 0 ELSE true END), |
| 37 | quota_rule text GENERATED ALWAYS AS (CASE WHEN quota_bytes IS NULL THEN '*:ignore' ELSE '*:bytes=' || quota_bytes END) STORED | 37 | CONSTRAINT mailbox_unique UNIQUE mailbox |
| 38 | ); | 38 | ); |
| 39 | CREATE TABLE mailbox_mapping ( | 39 | CREATE TABLE mailbox_mapping ( |
| 40 | id uuid PRIMARY KEY NOT NULL DEFAULT gen_random_uuid(), | 40 | id uuid PRIMARY KEY NOT NULL DEFAULT gen_random_uuid(), |
| @@ -47,6 +47,8 @@ in { | |||
| 47 | 47 | ||
| 48 | CREATE VIEW virtual_mailbox_domain (domain) AS SELECT DISTINCT domain FROM virtual_mailbox_mapping; | 48 | CREATE VIEW virtual_mailbox_domain (domain) AS SELECT DISTINCT domain FROM virtual_mailbox_mapping; |
| 49 | CREATE VIEW virtual_mailbox_mapping (mailbox, lookup) AS SELECT mailbox.mailbox as mailbox, (CASE WHEN local IS NULL THEN ''' ELSE local END) || '@' || domain AS lookup FROM mailbox_mapping INNER JOIN mailbox on mailbox.id = mailbox_mapping.mailbox; | 49 | CREATE VIEW virtual_mailbox_mapping (mailbox, lookup) AS SELECT mailbox.mailbox as mailbox, (CASE WHEN local IS NULL THEN ''' ELSE local END) || '@' || domain AS lookup FROM mailbox_mapping INNER JOIN mailbox on mailbox.id = mailbox_mapping.mailbox; |
| 50 | |||
| 51 | CREATE VIEW imap_user ("user", quota_rule) AS SELECT mailbox AS "user", (CASE WHEN quota_bytes IS NULL THEN '*:ignore' ELSE '*:bytes=' || quota_bytes END) AS quota_rule FROM mailbox; | ||
| 50 | COMMIT; | 52 | COMMIT; |
| 51 | ''} | 53 | ''} |
| 52 | ''; | 54 | ''; |
