commit a002febdc75295832ad0f7822d9bfa6a542027ae Author: He4eT Date: Thu Jul 11 02:52:43 2024 +0200 Initial commit diff --git a/bwc b/bwc new file mode 100755 index 0000000..0f1a8ee --- /dev/null +++ b/bwc @@ -0,0 +1,61 @@ +#!/bin/zsh + +set -ef + +copy_data () { + local id=$1 + local login=$2 + local sessionkey=$3 + local totp + echo "Name: $(jq -r ".name" <<< $login), ID: $(jq -r ".id" <<< $login)" + # Copy the username to the clipboard + echo "> Copying Username" + jq -r ".login.username" <<< $login | xclip -sel clip + # Wait for user input before coping the password + echo "> Press Enter to copy password..." + read + # Copy the password to the clipboard + echo "> Copying Password" + jq -r ".login.password" <<< $login | xclip -sel clip + # Copy a TOTP Token if available + totp=$(jq -r ".login.totp" <<< $login) + if [[ $totp != "null" ]]; then + # Wait for user input before coping the totp token + echo "> Press any key to copy TOTP Token..." + read + echo "> Copying TOTP Token" + bw get totp $id --session $sessionkey | xclip -sel clip + fi +} + +main() { + local searchterm=$1 + local sessionkey logins login id + # Use an existing BW_SESSION or obtain a new session key + if [[ -z $BW_SESSION ]] ; then + echo "Creating new sessionkey..." + sessionkey=$(bw unlock --raw) + else + echo "Using existing sessionkey..." + sessionkey=$BW_SESSION + fi + # Search for passwords using the search term + if [[ -z $searchterm ]] ; then + echo "Searchterm can't be empty" + exit 1 + fi + echo "Searching for '$searchterm'..." + logins=$(bw list items --search $searchterm --session $sessionkey) + id=$(jq -r '.[] | "\(.name)\t\(.login.username)\t\(.id)"' <<< $logins \ + | fzf --reverse --with-nth=1,2 --delimiter="\t" --select-1 --exit-0 \ + | awk -F"\t" '{print $3}' + ) + if [[ -n $id ]]; then + login="$(jq ".[] | select(.id == \"$id\")" <<< $logins)" + copy_data $id $login $sessionkey + else + echo "No entry found..." + fi +} + +main "$@"