diff --git a/manage_mail_user.sh b/manage_mail_user.sh new file mode 100644 index 0000000..1487ee8 --- /dev/null +++ b/manage_mail_user.sh @@ -0,0 +1,123 @@ +#!/bin/bash +# manage_mail_user.sh +# Verwaltet E-Mail-User im DMS und synchronisiert die Liste mit AWS SES +# +# Usage: +# ./manage_mail_user.sh add user@domain.com "Password123" +# ./manage_mail_user.sh del user@domain.com +# ./manage_mail_user.sh sync domain.com + +set -e + +COMMAND=$1 +EMAIL=$2 +PASSWORD=$3 + +# Container Name deines DMS +DMS_CONTAINER="mailserver-new" +AWS_REGION="us-east-2" + +# Hilfsfunktion: Usage +usage() { + echo "Verwendung:" + echo " Account anlegen: $0 add " + echo " Account löschen: $0 del " + echo " Nur Sync zu AWS: $0 sync " + exit 1 +} + +# Parameter prüfen +if [ -z "$COMMAND" ]; then usage; fi + +# Domain extrahieren (falls Email gegeben) +if [ "$COMMAND" != "sync" ]; then + if [ -z "$EMAIL" ]; then usage; fi + DOMAIN=$(echo "$EMAIL" | cut -d'@' -f2) +else + # Beim Sync ist der 2. Parameter die Domain + DOMAIN=$2 + if [ -z "$DOMAIN" ]; then usage; fi +fi + +# Regel-Namen konstruieren (Dein Namensschema: store-domain-com-to-s3) +RULE_SET_NAME="bizmatch-ruleset" # Dein globaler Ruleset Name +RULE_NAME="store-${DOMAIN//./-}-to-s3" + +echo "============================================================" +echo "Managing User for Domain: $DOMAIN" +echo "Action: $COMMAND" +echo "SES Rule: $RULE_NAME" +echo "============================================================" + +# 1. Aktion im Docker Mailserver ausführen +if [ "$COMMAND" == "add" ]; then + if [ -z "$PASSWORD" ]; then + echo "Error: Passwort fehlt für 'add'." + exit 1 + fi + echo "-> [DMS] Erstelle Postfach $EMAIL..." + docker exec "$DMS_CONTAINER" setup email add "$EMAIL" "$PASSWORD" + +elif [ "$COMMAND" == "del" ]; then + echo "-> [DMS] Lösche Postfach $EMAIL..." + docker exec "$DMS_CONTAINER" setup email del "$EMAIL" + +elif [ "$COMMAND" == "sync" ]; then + echo "-> [Sync] Starte manuelle Synchronisation..." +else + usage +fi + +# 2. Liste aller User dieser Domain aus DMS holen ("Source of Truth") +echo "-> Lese aktuelle User-Liste aus DMS..." +# 'setup email list' format: "* user@domain.com (0/0)" -> awk holt die Email +RECIPIENTS_LIST=$(docker exec "$DMS_CONTAINER" setup email list | grep "@$DOMAIN" | awk '{print $2}' | sort) + +# Prüfen ob User vorhanden sind +if [ -z "$RECIPIENTS_LIST" ]; then + echo "WARNUNG: Keine User für $DOMAIN im DMS gefunden!" + echo "SES Rule wird NICHT aktualisiert, um Stillstand zu vermeiden." + exit 1 +fi + +# Zählen (Limit Check) +COUNT=$(echo "$RECIPIENTS_LIST" | wc -l) +echo "-> Gefundene User: $COUNT" +if [ "$COUNT" -gt 100 ]; then + echo "CRITICAL ERROR: AWS SES erlaubt maximal 100 Empfänger pro Regel!" + echo "Gefunden: $COUNT. Abbruch." + exit 1 +fi + +# JSON Array für AWS CLI bauen +# Wir bauen: "user1@domain.com", "user2@domain.com", ... +JSON_RECIPIENTS=$(echo "$RECIPIENTS_LIST" | jq -R . | jq -s .) + +echo "-> Neue Empfänger-Liste für SES:" +echo "$JSON_RECIPIENTS" + +# 3. AWS SES Rule updaten +echo "-> [AWS] Hole aktuelle Regel-Definition..." +CURRENT_RULE=$(aws ses describe-receipt-rule \ + --rule-set-name "$RULE_SET_NAME" \ + --rule-name "$RULE_NAME" \ + --region "$AWS_REGION" \ + --output json) + +# Wir müssen das JSON patchen. Wir ersetzen den "Recipients" Block. +# jq Trick: .Rule.Recipients = $new_list | .Rule +NEW_RULE_JSON=$(echo "$CURRENT_RULE" | jq --argjson recipients "$JSON_RECIPIENTS" '.Rule | .Recipients = $recipients') + +# WICHTIG: TlsPolicy ist im Output oft lowercase, update erwartet CamelCase oder es ist tricky. +# Wir bauen das Update Command sicherheitshalber explizit. + +echo "-> [AWS] Sende Update an SES..." +aws ses update-receipt-rule \ + --rule-set-name "$RULE_SET_NAME" \ + --rule-name "$RULE_NAME" \ + --rule "$NEW_RULE_JSON" \ + --region "$AWS_REGION" + +echo "============================================================" +echo "✅ Success! User angelegt/gelöscht und SES Rule aktualisiert." +echo "============================================================" \ No newline at end of file