#!/bin/bash
# awsiam.sh - Erstellt einen IAM-Benutzer für Amazon SES mit SMTP-Zugangsdaten

# Überprüfen, ob die Domain-Variable gesetzt ist
if [ -z "$DOMAIN_NAME" ]; then
  echo "Fehler: DOMAIN_NAME ist nicht gesetzt."
  echo "Bitte setzen Sie die Variable mit: export DOMAIN_NAME='IhreDomain.de'"
  exit 1
fi

# Konfiguration
AWS_REGION=${AWS_REGION:-"us-east-2"}
USER_NAME="${DOMAIN_NAME//./-}-ses-user"  # Ersetzt Punkte durch Bindestriche für validen IAM-Username
NODE_SCRIPT_PATH="./generate_ses_smtp_password.js"
OUTPUT_FILE="${DOMAIN_NAME//./_}_ses_credentials.txt"  # Sichere Dateibenennung

# Prüfen, ob das Node.js-Script existiert
if [ ! -f "$NODE_SCRIPT_PATH" ]; then
    echo "Fehler: Das Node.js-Script '$NODE_SCRIPT_PATH' wurde nicht gefunden."
    echo "Bitte stelle sicher, dass das Script im angegebenen Pfad existiert."
    exit 1
fi

echo "=== IAM-Benutzer für SES SMTP-Zugang erstellen ==="
echo "Domain: $DOMAIN_NAME"
echo "Region: $AWS_REGION"
echo "IAM-Benutzername: $USER_NAME"

# --------------------------
# IAM-User erstellen
# --------------------------
echo "Erstelle IAM-User: $USER_NAME"
aws iam create-user --user-name $USER_NAME

# Benutzerdefinierte Policy für SES-Sendeberechtigungen erstellen
POLICY_NAME="${USER_NAME}-SendRawEmailPolicy"
POLICY_DOCUMENT='{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "ses:SendRawEmail",
            "Resource": "*"
        }
    ]
}'

echo "Erstelle benutzerdefinierte Policy für SES SendRawEmail"
POLICY_ARN=$(aws iam create-policy \
  --policy-name $POLICY_NAME \
  --policy-document "$POLICY_DOCUMENT" \
  --query 'Policy.Arn' \
  --output text)

echo "Hänge Policy an: $POLICY_ARN"
aws iam attach-user-policy \
  --user-name $USER_NAME \
  --policy-arn $POLICY_ARN

# Access Key und Secret Key für den User erstellen
echo "Erstelle Access Key für den User: $USER_NAME"
KEY_OUTPUT=$(aws iam create-access-key --user-name $USER_NAME)

# Keys ausgeben und in Variablen speichern
echo "Zugriffsschlüssel wurden erstellt. Bitte sicher aufbewahren:"
echo "$KEY_OUTPUT" | jq .

ACCESS_KEY=$(echo "$KEY_OUTPUT" | jq -r .AccessKey.AccessKeyId)
SECRET_KEY=$(echo "$KEY_OUTPUT" | jq -r .AccessKey.SecretAccessKey)

echo "ACCESS_KEY: $ACCESS_KEY"
echo "SECRET_KEY: $SECRET_KEY"

echo "WICHTIG: Speichere den Secret Key jetzt, da er später nicht mehr abgerufen werden kann!"

# --------------------------
# SMTP Passwort generieren
# --------------------------
echo -e "\nGeneriere SMTP-Passwort für Region $AWS_REGION..."

# Führe das Node.js-Script aus, um das SMTP-Passwort zu generieren
SMTP_PASSWORD=$(node "$NODE_SCRIPT_PATH" "$SECRET_KEY" "$AWS_REGION")

# Prüfen, ob die Ausführung erfolgreich war
if [ $? -ne 0 ]; then
    echo "Fehler bei der Generierung des SMTP-Passworts. Bitte überprüfe das Node.js-Script."
    exit 1
fi

# SMTP-Benutzername ist der Access Key
SMTP_USERNAME="$ACCESS_KEY"

# Ausgabe der SMTP-Anmeldeinformationen
echo -e "\nSMTP-Anmeldeinformationen für Amazon SES in Region $AWS_REGION:"
echo "--------------------------------------------------------------"
echo "SMTP-Server: email-smtp.$AWS_REGION.amazonaws.com"
echo "SMTP-Port: 587 (TLS) oder 465 (SSL)"
echo "SMTP-Benutzername: $SMTP_USERNAME"
echo "SMTP-Passwort: $SMTP_PASSWORD"

# Speichere die Anmeldeinformationen in einer Datei
echo -e "\nSpeichere SMTP-Anmeldeinformationen in $OUTPUT_FILE"
cat > "$OUTPUT_FILE" << EOF
DOMAIN_NAME: $DOMAIN_NAME
SMTP-Server: email-smtp.$AWS_REGION.amazonaws.com
SMTP-Port: 587 (TLS) oder 465 (SSL)
SMTP-Benutzername: $SMTP_USERNAME
SMTP-Passwort: $SMTP_PASSWORD

IAM-Benutzer: $USER_NAME
Access Key ID: $ACCESS_KEY
Secret Access Key: $SECRET_KEY
EOF

chmod 600 "$OUTPUT_FILE"  # Nur für den Besitzer lesbar machen

# Format für .env-Datei
echo -e "\nFür .env-Datei:"
echo "AWS_SES_SMTP_USERNAME=$SMTP_USERNAME"
echo "AWS_SES_SMTP_PASSWORD=$SMTP_PASSWORD"
echo "AWS_SES_SMTP_HOST=email-smtp.$AWS_REGION.amazonaws.com"
echo "AWS_SES_SMTP_PORT=587"

echo -e "\nHinweise:"
echo "1. Die SMTP-Anmeldeinformationen wurden in $OUTPUT_FILE gespeichert."
echo "2. Verwenden Sie diese SMTP-Anmeldeinformationen in Ihrer E-Mail-Anwendung oder Ihrem E-Mail-Server."
echo "3. Der IAM-Benutzer hat nur die Berechtigung, E-Mails über SES zu senden."