#!/bin/bash

####################################################
# Etabliert einen Reverse-SSH-Tunnel zum Jumpserver
# Reihenfolge: JUMP:22 → JUMP:443 → ALTJ:22 → ALTJ:443
# Wird von parse.sh getriggert
####################################################

USER="snowtv"
KEY_PATH="/home/snowtv/.ssh/id_ed25519"
LOG="/var/log/stv.log"

# Werte aus mc.cfg lesen (verankert, inline-Kommentare abschneiden)
JUMP=$(grep '^JUMP=' /home/snowtv/bin/mc.cfg | awk -F= '{print $2}' | awk '{print $1}' | tr -d '\r')
ALTJ=$(grep '^ALTJ=' /home/snowtv/bin/mc.cfg | awk -F= '{print $2}' | awk '{print $1}' | tr -d '\r')
JUMP=${JUMP:-139.162.165.199}
ALTJ=${ALTJ:-85.90.244.122}
ID=$(grep '^ID='   /home/snowtv/bin/mc.cfg | awk -F= '{print $2}' | awk '{print $1}' | tr -d '\r')
RPORT="10$(printf '%03d' "${ID}")"

# Tunnel zu Ziel:Port etablieren und Erfolg prüfen
connect_to() {
    local TARGET="$1"
    local PORT="$2"
    autossh -4 -M 0 \
        -o "ServerAliveInterval=30" \
        -o "ServerAliveCountMax=3" \
        -o "ExitOnForwardFailure=yes" \
        -o "TCPKeepAlive=yes" \
        -o "StrictHostKeyChecking=no" \
        -o "IdentitiesOnly=yes" \
        -i "$KEY_PATH" \
        -p "$PORT" \
        -f -N -R "${RPORT}:localhost:22" "${USER}@${TARGET}"
    sleep 3
    if ps aux | grep -q "[a]utossh.*${USER}@${TARGET}"; then
        echo "$(date)  INFO: sshcon – Tunnel zu ${TARGET}:${PORT} etabliert (Port $RPORT)" | tee -a "$LOG"
        return 0
    else
        echo "$(date)  WARN: sshcon – Tunnel zu ${TARGET}:${PORT} fehlgeschlagen" | tee -a "$LOG"
        return 1
    fi
}

# Prüfen ob Tunnel bereits aktiv
if ps aux | grep -q "[a]utossh.*${USER}@${JUMP}"; then
    echo "$(date)  INFO: sshcon – Tunnel zu $JUMP bereits aktiv" | tee -a "$LOG"
    exit 0
fi
if ps aux | grep -q "[a]utossh.*${USER}@${ALTJ}"; then
    echo "$(date)  INFO: sshcon – Tunnel zu $ALTJ bereits aktiv" | tee -a "$LOG"
    exit 0
fi

# Reihenfolge: JUMP:22 → JUMP:443 → ALTJ:22 → ALTJ:443
for TARGET in "$JUMP" "$ALTJ"; do
    for PORT in 22 443; do  # 443 via sslh (SSH+HTTPS Multiplexer)
        echo "$(date)  INFO: sshcon – versuche ${TARGET}:${PORT} ..." | tee -a "$LOG"
        if connect_to "$TARGET" "$PORT"; then
            exit 0
        fi
    done
done

echo "$(date)  ERR:  sshcon – kein Tunnel etabliert (alle 4 Kombinationen fehlgeschlagen)" | tee -a "$LOG"
exit 1
