Compare commits

..

2 Commits

Author SHA1 Message Date
25b2a4478a Token caching 2026-02-10 16:24:38 +01:00
4fe26a23af Token caching 2026-02-10 16:17:29 +01:00
2 changed files with 41 additions and 18 deletions

View File

@@ -1,21 +1,43 @@
#!/usr/bin/env bash #!/usr/bin/env bash
if [ "$1" = "get" ]; then
# Prüfen, ob die Session-Variable da ist CACHE_FILE="/tmp/git_bw_token_$USER"
if [ -z "$BW_SESSION" ]; then TOKEN_NAME="Token"
echo "FEHLER: Bitwarden ist gesperrt! Bitte 'unlock' ausführen." >&2
exit 1 get_credentials() {
# 1. Versuch: Cache laden
if [ -f "$CACHE_FILE" ]; then
cat "$CACHE_FILE"
return
fi fi
# Das gesamte Item einmal holen, um nicht mehrfach anfragen zu müssen # 2. Versuch: Bitwarden abfragen
ITEM_JSON=$(bw get item gitea.iten.pro 2>/dev/null) if [ -n "$BW_SESSION" ]; then
ITEM_JSON=$(bw get item gitea.iten.pro 2>/dev/null)
if [ -n "$ITEM_JSON" ]; then
# Benutzername extrahieren if [ -n "$ITEM_JSON" ]; then
USER=$(echo "$ITEM_JSON" | jq -r '.login.username') # Wir nutzen BW_USER, um die System-Variable $USER nicht zu überschreiben
# Token aus den Custom Fields extrahieren BW_USER=$(echo "$ITEM_JSON" | jq -r '.login.username')
TOKEN=$(echo "$ITEM_JSON" | jq -r '.fields[] | select(.name=="Token") | .value')
# Korrekte Übergabe der Variable an jq via --arg
echo "username=$USER" TOKEN=$(echo "$ITEM_JSON" | jq -r --arg TNAME "$TOKEN_NAME" '.fields[] | select(.name==$TNAME) | .value')
echo "password=$TOKEN"
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
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

View File

@@ -9,7 +9,8 @@ unlock() {
} }
lock() { lock() {
rm -f "/tmp/git_bw_token_$USER"
bw lock > /dev/null bw lock > /dev/null
unset BW_SESSION unset BW_SESSION
echo "🔒 Tresor gesperrt und Session gelöscht." echo "🔒 Tresor gesperrt, Cache geleert und Session gelöscht."
} }