runv-server

server tooling for runv.club
Log | Files | Refs | README

commit d7a80ddfd355802f3d646c36e8a99f5509460eee
parent 84a7feeddec6e465170d7b70691e3a8676eaca8b
Author: Pablo Murad <pablo@pablomurad.com>
Date:   Tue, 19 May 2026 20:58:49 -0300

better mail

Diffstat:
Memail/config/runv-member-mail.example.json | 12++++++------
Mscripts/admin/inspect_postfix_mysql_aliases.py | 4++--
Mtools/lib/runv_mail_sync.py | 10++++++++++
3 files changed, 18 insertions(+), 8 deletions(-)

diff --git a/email/config/runv-member-mail.example.json b/email/config/runv-member-mail.example.json @@ -1,13 +1,13 @@ { - "enabled": false, + "enabled": true, "backend": "postfix-mysql", "mysql_map_file": "/etc/postfix/mysql-virtual-alias-maps.cf", "mysql": { - "table": "", - "address_column": "", - "goto_column": "", - "managed_column": "comment", - "managed_value": "runv-email-alias" + "table": "virtual_aliases", + "address_column": "source", + "goto_column": "destination", + "active_column": "active", + "active_value": "1" }, "reload_postfix": true, "reload_command": ["systemctl", "reload", "postfix"], diff --git a/scripts/admin/inspect_postfix_mysql_aliases.py b/scripts/admin/inspect_postfix_mysql_aliases.py @@ -93,8 +93,8 @@ def main() -> int: f' "table": "{table}",\n' f' "address_column": "{addr_col or "address"}",\n' f' "goto_column": "{dest_col or "goto"}",\n' - ' "managed_column": "comment",\n' - ' "managed_value": "runv-email-alias"\n' + ' "active_column": "active",\n' + ' "active_value": "1"\n' " },\n" ' "reload_postfix": true,\n' ' "auto_sync_on_approve": true\n' diff --git a/tools/lib/runv_mail_sync.py b/tools/lib/runv_mail_sync.py @@ -148,6 +148,8 @@ def mysql_sync_options(cfg: dict[str, Any]) -> dict[str, str]: goto_col = goto_col or inferred_goto managed_col = str(block.get("managed_column", "")).strip() managed_val = str(block.get("managed_value", "runv-email-alias")).strip() + active_col = str(block.get("active_column", "")).strip() + active_val = str(block.get("active_value", "1")).strip() return { "map_file": map_file, "parsed": parsed, # type: ignore[dict-item] @@ -156,6 +158,8 @@ def mysql_sync_options(cfg: dict[str, Any]) -> dict[str, str]: "goto_column": goto_col, "managed_column": managed_col, "managed_value": managed_val, + "active_column": active_col, + "active_value": active_val, } @@ -269,6 +273,8 @@ def sync_postfix_mysql(*, dry_run: bool = False, cfg: dict[str, Any] | None = No goto_col = opts["goto_column"] managed_col = opts["managed_column"] managed_val = opts["managed_value"] + active_col = opts["active_column"] + active_val = opts["active_value"] rows = active_forwarding_rows() active_addresses = {alias for alias, _ in rows} @@ -289,6 +295,10 @@ def sync_postfix_mysql(*, dry_run: bool = False, cfg: dict[str, Any] | None = No cols.append(f"`{managed_col}`") vals.append(sql_literal(managed_val)) updates.append(f"`{managed_col}` = {sql_literal(managed_val)}") + if active_col: + cols.append(f"`{active_col}`") + vals.append(active_val) + updates.append(f"`{active_col}` = {active_val}") upsert = ( f"INSERT INTO `{table}` ({', '.join(cols)}) VALUES ({', '.join(vals)}) " f"ON DUPLICATE KEY UPDATE {', '.join(updates)};"