#!/bin/bash

# Skript zum Fixen der SSL-Zertifikat-Berechtigungen für Node.js

CERT_DIR="/etc/letsencrypt/live/tt-tagebuch.de"
CERT_GROUP="ssl-cert"  # Standard-Gruppe für SSL-Zertifikate

# Prüfe, ob Zertifikate existieren (mit sudo, da normaler Benutzer keinen Zugriff hat)
if ! sudo test -d "$CERT_DIR"; then
    echo "❌ Zertifikat-Verzeichnis nicht gefunden: $CERT_DIR"
    exit 1
fi

# Prüfe, ob ssl-cert-Gruppe existiert
if ! sudo getent group "$CERT_GROUP" > /dev/null 2>&1; then
    echo "⚠️  Gruppe '$CERT_GROUP' existiert nicht. Erstelle sie..."
    sudo groupadd "$CERT_GROUP"
fi

# Prüfe, welcher Benutzer den systemd-Service ausführt
SERVICE_USER=$(sudo systemctl show -p User tt-tagebuch.service 2>/dev/null | cut -d= -f2)

# Wenn kein User definiert ist oder "nobody", verwende www-data
if [ -z "$SERVICE_USER" ] || [ "$SERVICE_USER" = "nobody" ]; then
    echo "⚠️  Service-Benutzer ist '$SERVICE_USER' oder nicht definiert."
    echo "   Verwende 'www-data' als Standard (empfohlen für Webserver-Services)."
    SERVICE_USER="www-data"
    
    # Prüfe, ob www-data existiert
    if ! id "$SERVICE_USER" &>/dev/null; then
        echo "❌ Benutzer '$SERVICE_USER' existiert nicht!"
        exit 1
    fi
fi

echo "🔧 Konfiguriere SSL-Zertifikat-Berechtigungen..."
echo "   Service-Benutzer: $SERVICE_USER"
echo "   Zertifikat-Verzeichnis: $CERT_DIR"

# Füge Service-Benutzer zur ssl-cert-Gruppe hinzu
sudo usermod -a -G "$CERT_GROUP" "$SERVICE_USER"

# Setze Gruppen-Berechtigungen für Zertifikate
echo "📜 Setze Berechtigungen für Zertifikate..."

# Setze Gruppe für das Verzeichnis
sudo chgrp -R "$CERT_GROUP" "$CERT_DIR"

# Setze Berechtigungen: Owner (root) kann lesen/schreiben, Gruppe kann lesen
# WICHTIG: Verwende find, um auch die Symlinks zu behandeln
sudo find "$CERT_DIR" -name "privkey.pem" -exec chmod 640 {} \;
sudo find "$CERT_DIR" -name "fullchain.pem" -exec chmod 644 {} \;
sudo find "$CERT_DIR" -name "cert.pem" -exec chmod 644 {} \;
sudo find "$CERT_DIR" -name "chain.pem" -exec chmod 644 {} \;

# Setze auch für das archive-Verzeichnis (wo die Symlinks hinzeigen)
ARCHIVE_DIR="/etc/letsencrypt/archive/tt-tagebuch.de"
if sudo test -d "$ARCHIVE_DIR"; then
    echo "📜 Setze Berechtigungen für archive-Verzeichnis..."
    
    # WICHTIG: Setze Verzeichnis-Berechtigungen, damit Gruppe in Verzeichnis navigieren kann
    # Setze execute-Bit für Gruppe auf allen Verzeichnissen im Pfad
    sudo chgrp -R "$CERT_GROUP" "/etc/letsencrypt/archive"
    sudo chmod 750 "/etc/letsencrypt/archive"
    sudo chmod 750 "/etc/letsencrypt/archive/tt-tagebuch.de"
    
    # Setze Gruppe für alle Dateien
    sudo chgrp -R "$CERT_GROUP" "$ARCHIVE_DIR"
    
    # Setze Berechtigungen für alle privkey-Dateien (privkey.pem, privkey1.pem, privkey8.pem, etc.)
    sudo find "$ARCHIVE_DIR" -type f -name "privkey*.pem" -exec chmod 640 {} \;
    sudo find "$ARCHIVE_DIR" -type f -name "fullchain*.pem" -exec chmod 644 {} \;
    sudo find "$ARCHIVE_DIR" -type f -name "cert*.pem" -exec chmod 644 {} \;
    sudo find "$ARCHIVE_DIR" -type f -name "chain*.pem" -exec chmod 644 {} \;
    
    # Zeige, welche Dateien gefunden wurden
    echo "   Gefundene privkey-Dateien:"
    sudo find "$ARCHIVE_DIR" -type f -name "privkey*.pem" -exec ls -la {} \;
fi

# WICHTIG: Setze auch Verzeichnis-Berechtigungen für live-Verzeichnis
LIVE_DIR="/etc/letsencrypt/live"
if sudo test -d "$LIVE_DIR"; then
    echo "📜 Setze Verzeichnis-Berechtigungen für live-Verzeichnis..."
    sudo chgrp -R "$CERT_GROUP" "$LIVE_DIR"
    sudo chmod 750 "$LIVE_DIR"
    sudo chmod 750 "$LIVE_DIR/tt-tagebuch.de"
fi

echo "✅ Berechtigungen gesetzt!"
echo ""
echo "📋 Prüfe Berechtigungen:"
sudo ls -la "$CERT_DIR/privkey.pem"
sudo ls -la "$CERT_DIR/fullchain.pem"
echo ""
echo "⚠️  WICHTIG: Der Service muss neu gestartet werden, damit die Gruppenänderung wirksam wird:"
echo "   sudo systemctl restart tt-tagebuch"
