|
|
|
|
@@ -1,21 +1,43 @@
|
|
|
|
|
#!/usr/bin/env bash
|
|
|
|
|
if [ "$1" = "get" ]; then
|
|
|
|
|
# Prüfen, ob die Session-Variable da ist
|
|
|
|
|
if [ -z "$BW_SESSION" ]; then
|
|
|
|
|
echo "FEHLER: Bitwarden ist gesperrt! Bitte 'unlock' ausführen." >&2
|
|
|
|
|
exit 1
|
|
|
|
|
|
|
|
|
|
CACHE_FILE="/tmp/git_bw_token_$USER"
|
|
|
|
|
TOKEN_NAME="Token"
|
|
|
|
|
|
|
|
|
|
get_credentials() {
|
|
|
|
|
# 1. Versuch: Cache laden
|
|
|
|
|
if [ -f "$CACHE_FILE" ]; then
|
|
|
|
|
cat "$CACHE_FILE"
|
|
|
|
|
return
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
# Das gesamte Item einmal holen, um nicht mehrfach anfragen zu müssen
|
|
|
|
|
# 2. Versuch: Bitwarden abfragen
|
|
|
|
|
if [ -n "$BW_SESSION" ]; then
|
|
|
|
|
ITEM_JSON=$(bw get item gitea.iten.pro 2>/dev/null)
|
|
|
|
|
|
|
|
|
|
if [ -n "$ITEM_JSON" ]; then
|
|
|
|
|
# Benutzername extrahieren
|
|
|
|
|
USER=$(echo "$ITEM_JSON" | jq -r '.login.username')
|
|
|
|
|
# Token aus den Custom Fields extrahieren
|
|
|
|
|
TOKEN=$(echo "$ITEM_JSON" | jq -r '.fields[] | select(.name=="Token") | .value')
|
|
|
|
|
# Wir nutzen BW_USER, um die System-Variable $USER nicht zu überschreiben
|
|
|
|
|
BW_USER=$(echo "$ITEM_JSON" | jq -r '.login.username')
|
|
|
|
|
|
|
|
|
|
echo "username=$USER"
|
|
|
|
|
echo "password=$TOKEN"
|
|
|
|
|
# Korrekte Übergabe der Variable an jq via --arg
|
|
|
|
|
TOKEN=$(echo "$ITEM_JSON" | jq -r --arg TNAME "$TOKEN_NAME" '.fields[] | select(.name==$TNAME) | .value')
|
|
|
|
|
|
|
|
|
|
if [ -n "$TOKEN" ] && [ "$TOKEN" != "null" ]; then
|
|
|
|
|
# Hier die Variablen nutzen, die wir oben gefüllt haben
|
|
|
|
|
OUT="username=$BW_USER\npassword=$TOKEN"
|
|
|
|
|
echo -e "$OUT" > "$CACHE_FILE"
|
|
|
|
|
chmod 600 "$CACHE_FILE"
|
|
|
|
|
echo -e "$OUT"
|
|
|
|
|
return
|
|
|
|
|
fi
|
|
|
|
|
fi
|
|
|
|
|
fi
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
# Fehlermeldung nur, wenn kein Cache da war und BW Abfrage scheiterte
|
|
|
|
|
printf "\033[1;31mFEHLER:\033[0m Bitwarden ist gesperrt oder Token nicht gefunden! Bitte '\033[1munlock\033[22m' ausführen.\n" >&2
|
|
|
|
|
exit 1
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
case "$1" in
|
|
|
|
|
get) get_credentials ;;
|
|
|
|
|
store|erase) ;;
|
|
|
|
|
esac
|
|
|
|
|
|