#!/usr/bin/env python3 """ Centrale configuratie voor alle mailcat-scripts. Setup: python3 config.py --setup Gebruik in andere scripts: import config cfg = config.load() # leest --account uit sys.argv, anders actief account mail.login(cfg.username, cfg.password) Wisselen van account zonder config te wijzigen: python3 maak_mappen.py --account backup python3 verplaats_bestaand.py --account backup --uitvoeren """ import json import sys import getpass from pathlib import Path from dataclasses import dataclass CONFIG_FILE = Path(__file__).parent / "config.json" @dataclass class Account: name: str username: str password: str imap_host: str imap_port: int smtp_host: str smtp_port: int sieve_host: str sieve_port: int def load(account_name: str | None = None) -> Account: """ Laad het opgegeven account (of het actieve account uit config.json). account_name kan ook via --account op de commandoregel worden opgegeven. """ # --account vlag heeft prioriteit boven argument args = sys.argv[1:] if "--account" in args: idx = args.index("--account") if idx + 1 < len(args): account_name = args[idx + 1] if not CONFIG_FILE.exists(): print("Geen config gevonden. Draai eerst: python3 config.py --setup") sys.exit(1) raw = json.loads(CONFIG_FILE.read_text(encoding="utf-8")) name = account_name or raw.get("active", "") if not name: print("Geen actief account ingesteld. Gebruik --account of stel 'active' in config.json in.") sys.exit(1) accounts = raw.get("accounts", {}) if name not in accounts: beschikbaar = ", ".join(accounts.keys()) print(f"Account '{name}' niet gevonden. Beschikbaar: {beschikbaar}") sys.exit(1) acc = accounts[name] return Account( name = name, username = acc["username"], password = acc["password"], imap_host = raw.get("imap_host", "australius.nl"), imap_port = raw.get("imap_port", 993), smtp_host = raw.get("smtp_host", "australius.nl"), smtp_port = raw.get("smtp_port", 587), sieve_host = raw.get("sieve_host", "australius.nl"), sieve_port = raw.get("sieve_port", 4190), ) def active_account_name() -> str: """Geef de naam van het actief te gebruiken account (voor weergave).""" args = sys.argv[1:] if "--account" in args: idx = args.index("--account") if idx + 1 < len(args): return args[idx + 1] if CONFIG_FILE.exists(): raw = json.loads(CONFIG_FILE.read_text(encoding="utf-8")) return raw.get("active", "?") return "?" # ── setup ───────────────────────────────────────────────────────────────────── def setup(): """Interactief: voeg een account toe of wijzig een bestaand account.""" raw: dict = {} if CONFIG_FILE.exists(): raw = json.loads(CONFIG_FILE.read_text(encoding="utf-8")) raw.setdefault("imap_host", "australius.nl") raw.setdefault("imap_port", 993) raw.setdefault("smtp_host", "australius.nl") raw.setdefault("smtp_port", 587) raw.setdefault("sieve_host", "australius.nl") raw.setdefault("sieve_port", 4190) raw.setdefault("accounts", {}) print("─" * 50) print("Mailcat account setup") print("─" * 50) bestaande = list(raw["accounts"].keys()) if bestaande: print(f"Bestaande accounts: {', '.join(bestaande)}") naam = input("\nAccountnaam (bijv. hans of backup): ").strip() if not naam: print("Afgebroken.") return huidig = raw["accounts"].get(naam, {}) huidig_user = huidig.get("username", "") username = input(f"E-mailadres [{huidig_user}]: ").strip() or huidig_user password = getpass.getpass("Wachtwoord: ") raw["accounts"][naam] = {"username": username, "password": password} # Vraag of dit het actieve account moet zijn huidig_actief = raw.get("active", "") instellen = input(f"\nDit als actief account instellen? (huidig: {huidig_actief or 'geen'}) [J/n]: ").strip().lower() if instellen != "n": raw["active"] = naam CONFIG_FILE.write_text(json.dumps(raw, indent=2, ensure_ascii=False), encoding="utf-8") CONFIG_FILE.chmod(0o600) print(f"\n✓ Account '{naam}' opgeslagen. Actief: {raw['active']}") print(f" Config: {CONFIG_FILE}") if len(raw["accounts"]) > 1: print(f"\nWisselen: voeg --account toe aan elk script.") print(f" Bijv: python3 maak_mappen.py --account backup") if __name__ == "__main__": if "--setup" in sys.argv: setup() else: # Toon huidige status if not CONFIG_FILE.exists(): print("Geen config. Draai: python3 config.py --setup") else: raw = json.loads(CONFIG_FILE.read_text(encoding="utf-8")) actief = raw.get("active", "?") accounts = list(raw.get("accounts", {}).keys()) print(f"Actief account : {actief}") print(f"Alle accounts : {', '.join(accounts)}") print(f"IMAP : {raw.get('imap_host')}:{raw.get('imap_port')}") print(f"\nSetup: python3 config.py --setup") print(f"Wisselen in script: python3