From 4fe26a23af7c75e608dff4713647adbbafc601c2 Mon Sep 17 00:00:00 2001 From: Eduard Iten Date: Tue, 10 Feb 2026 16:17:29 +0100 Subject: [PATCH] Token caching --- bin/git-bw-helper | 46 ++++++++++++++++++++++++++--------------- zsh_func_d/bw_logic.zsh | 3 ++- 2 files changed, 31 insertions(+), 18 deletions(-) diff --git a/bin/git-bw-helper b/bin/git-bw-helper index f243980..784fa93 100755 --- a/bin/git-bw-helper +++ b/bin/git-bw-helper @@ -1,21 +1,33 @@ #!/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" + +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 - 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') - - echo "username=$USER" - echo "password=$TOKEN" + # 2. Versuch: Bitwarden abfragen (nur wenn BW_SESSION da ist) + 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') + + if [ -n "$TOKEN" ]; then + OUT="username=$USER_NAME\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 + exit 1 +} + +case "$1" in + get) get_credentials ;; + store|erase) ;; # Git verlangt diese Endpunkte, wir ignorieren sie +esac diff --git a/zsh_func_d/bw_logic.zsh b/zsh_func_d/bw_logic.zsh index 225625d..bf21621 100644 --- a/zsh_func_d/bw_logic.zsh +++ b/zsh_func_d/bw_logic.zsh @@ -9,7 +9,8 @@ unlock() { } lock() { + rm -f "/tmp/git_bw_token_$USER" bw lock > /dev/null unset BW_SESSION - echo "🔒 Tresor gesperrt und Session gelöscht." + echo "🔒 Tresor gesperrt, Cache geleert und Session gelöscht." }