#!/bin/sh
# Stellt den geteilten Maschinen-ssh-agent sicher: Socket läuft und hält beide
# Keys, die auf dieser Maschine gebraucht werden. Idempotent — mehrfach
# aufrufbar, macht nur was fehlt.
#
#   SSH isac agent        SSH auf interne Systeme (User mwiegand-agent)
#   SSH Signing Key       Git-Signing, für mich UND Agent-Sessions
#
# Wird von agent-env bei jedem Start gerufen; manuell nur nötig, wenn man nach
# einem Reboot committen will, bevor die erste Agent-Session lief (Symptom:
# "error: Couldn't find key in agent?").
#
# Der kundenfähige Haupt-Key ("SSH Key mwiegand") gehört bewusst NICHT hierher:
# er lebt nur hinter der 1Password-Freigabe (~/.1password/agent.sock, siehe
# Host * in ~/.ssh/config), damit Agents ihn nicht unbemerkt nutzen können.
# Architektur und Begründungen: agents/README.md im dotfiles-Repo.

PATH="/opt/homebrew/bin:/usr/bin:/bin:$PATH"
SOCK="$HOME/.ssh/isac-agent.sock"
OP_ACCOUNT="WHZOJQOJPZHTFPJC6JZAOCUCBI"
export SSH_AUTH_SOCK="$SOCK"

# Agent tot oder nie gestartet? (ssh-add exit 2 = Socket antwortet nicht)
ssh-add -l >/dev/null 2>&1
if [ $? -eq 2 ]; then
    rm -f "$SOCK"
    /usr/bin/ssh-agent -a "$SOCK" >/dev/null || exit 1
fi

# $1 = Fingerprint (schon geladen?), $2 = op-Referenz, $3 = Anzeigename
ensure_key() {
    if ssh-add -l 2>/dev/null | grep -q "$1"; then
        return 0
    fi
    if op read --account "$OP_ACCOUNT" "$2" | ssh-add -q -; then
        echo "$3 geladen (bis zum nächsten Reboot)." >&2
    else
        echo "$3 konnte nicht geladen werden (1Password gesperrt?)" >&2
        return 1
    fi
}

rc=0
ensure_key "SHA256:SvHSJQcHlAWUmF8EnflNsrv0mhWGARvAKLRPSBQ460I" \
    "op://Employee/37z2tbpilrjrgyrhckb5cbrhsq/private key?ssh-format=openssh" \
    "Signing-Key" || rc=1
ensure_key "SHA256:77FiJM6Z1eN7Ka7YpoCKIn9xVJFQUj6nBQa/g1rFya4" \
    "op://Employee/ec2mtn4kkxnypyc4gxutg7lajq/private key?ssh-format=openssh" \
    "Agent-Key" || rc=1
exit $rc
