#!/bin/bash # Funktion zur Auswahl mit fuzzel oder choose select_item() { local prompt="$1" local input="$2" if [[ "$OSTYPE" == "darwin"* ]]; then echo "$input" | choose -p "$prompt" else echo "$input" | fuzzel -d -p "$prompt" fi } # Funktion zum Bereinigen des ausgewählten Textes clean_text() { local text="$1" if [[ "$text" == *": "* ]]; then echo "$text" | sed 's/^[^:]*: //' else echo "$text" fi } # Funktion zum Kopieren in die Zwischenablage copy_to_clipboard() { local text="$1" if [[ "$OSTYPE" == "darwin"* ]]; then echo -n "$text" | pbcopy else echo -n "$text" | wl-copy fi } # Funktion zum Erzeugen eines TOTP aus otpauth URL totp_from_otpauth() { local url="$1" if [[ "$url" =~ ^otpauth://totp/.*secret= ]]; then local secret=$(echo "$url" | grep -oP 'secret=\K[^&]*') if [[ -z "$secret" ]]; then echo "Kein Secret im OTPAUTH-URL gefunden." return 2 fi oathtool -b --totp "$secret" else echo "" return 1 fi } # Liste mit Name+User kombinieren und formatieren entries=$(rbw list --fields name,user | awk -F'\t' '{print $1 " | " $2}') # Auswahl des kombinierten Eintrags selected=$(select_item "Wähle einen Login: " "$entries") if [[ -n "$selected" ]]; then # Extrahiere Name und User aus der Auswahl name=$(echo "$selected" | awk -F' \\| ' '{print $1}') user=$(echo "$selected" | awk -F' \\| ' '{print $2}') # Hole Details mit beiden Parametern details=$(rbw get "$name" "$user" --full 2>/dev/null) if [[ -z "$details" ]]; then echo "Fehler beim Abrufen der Details" exit 1 fi # Detailauswahl wie bisher selected_detail=$(select_item "Details für $name: " "$details") if [[ -n "$selected_detail" ]]; then cleaned_text=$(clean_text "$selected_detail") # Wenn cleaned_text ein otpauth:// URL ist, versuche TOTP Code zu generieren totp_code=$(totp_from_otpauth "$cleaned_text") if [[ $? -eq 0 && -n "$totp_code" ]]; then cleaned_text="$totp_code" echo "TOTP-Code generiert: $cleaned_text" fi copy_to_clipboard "$cleaned_text" echo "In Zwischenablage kopiert: ${cleaned_text:0:20}..." # Passwortverarbeitung if [[ "$OSTYPE" != "darwin"* ]]; then choice=$(select_item "Passwort mit dotool eingeben?" "$(echo -e "Nein\nJa")") if [[ "$choice" == "Ja" ]]; then echo "Tippe Passwort in 5 Sekunden (Layout: DE)..." { echo "typedelay 100" echo "type $cleaned_text" } | DOTOOL_XKB_LAYOUT=de dotool && \ notify-send -t 5000 -u low "Eingabe abgeschlossen" "Inhalt wurde getippt" fi fi fi fi