From 25b2a4478ab7dfe364f5b5081f113ac00a93ddee Mon Sep 17 00:00:00 2001 From: Eduard Iten Date: Tue, 10 Feb 2026 16:24:38 +0100 Subject: [PATCH] Token caching --- bin/git-bw-helper | 34 ++++++++++++++++++++++------------ 1 file changed, 22 insertions(+), 12 deletions(-) diff --git a/bin/git-bw-helper b/bin/git-bw-helper index 784fa93..b2b4c86 100755 --- a/bin/git-bw-helper +++ b/bin/git-bw-helper @@ -1,6 +1,7 @@ #!/usr/bin/env bash CACHE_FILE="/tmp/git_bw_token_$USER" +TOKEN_NAME="Token" get_credentials() { # 1. Versuch: Cache laden @@ -9,25 +10,34 @@ get_credentials() { return fi - # 2. Versuch: Bitwarden abfragen (nur wenn BW_SESSION da ist) + # 2. Versuch: Bitwarden abfragen if [ -n "$BW_SESSION" ]; then - # Hier dein bw-Befehl (Beispielhaft) - TOKEN=$(bw get item gitea.iten.pro | jq -r '.login.password') - USER_NAME=$(bw get item gitea.iten.pro | jq -r '.login.username') + ITEM_JSON=$(bw get item gitea.iten.pro 2>/dev/null) - if [ -n "$TOKEN" ]; then - OUT="username=$USER_NAME\npassword=$TOKEN" - echo -e "$OUT" > "$CACHE_FILE" - chmod 600 "$CACHE_FILE" - echo -e "$OUT" - return + if [ -n "$ITEM_JSON" ]; then + # Wir nutzen BW_USER, um die System-Variable $USER nicht zu überschreiben + BW_USER=$(echo "$ITEM_JSON" | jq -r '.login.username') + + # 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 - printf "\033[1;31mFEHLER:\033[0m Bitwarden ist gesperrt! Bitte '\033[1munlock\033[22m' ausführen.\n" >&2 + + # 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) ;; # Git verlangt diese Endpunkte, wir ignorieren sie + store|erase) ;; esac