Hello,
I wrote a bash script to help with the bitwarden cli which for me just does not cut it. I will post it here please try it out and give feedback. It has as a dependencies jq for json parsing and the bitwarden cli. Both are in the official repositories.
Thanks,
frog
#!/bin/bash
vaultUnlock(){
sessiontoken=$(bw unlock)
if [ -z "$sessiontoken" ]; then
echo "Master Password Incorrect"
exit
else
sessiontoken=$(grep -E -m 1 -o '"(.*)"' <<< "$sessiontoken")
fi
}
vaultClose(){
bw sync
bw lock
}
editItem(){
read -p 'Item ID: ' itemID
echo 'Enter u to change Username and p to change Password'
read -p 'Element to change: ' element
if [ "$element" == 'u' ] ; then
read -p 'New Username: ' newusername
newusername=\"$newusername\"
bw get item $itemID | jq '.login.username='$newusername'' | bw encode | bw edit item $itemID > /dev/null
elif [ "$element" == 'p' ] ; then
echo 'Enter g for Bitwarden generated password or m for manual entry'
read -p 'Method: ' method
if [ "$method" == 'g' ]; then
read -p 'Password Length: ' length
newpassword=$(bw generate -uln --length $length)
elif [ "$method" == 'm' ]; then
read -p 'New Password: ' newpassword
fi
newpassword=\"$newpassword\"
echo $newpassword
bw get item $itemID | jq '.login.password='$newpassword'' | bw encode | bw edit item $itemID > /dev/null
else
echo 'Element to change was spelled incorrectly'
fi
}
createItem(){
read -p 'Item Name: ' itemname
read -p 'Username: ' username
read -p 'Password: ' password
itemname=\"$itemname\"
username=\"$username\"
password=\"$password\"
bw get template item | jq ".name=$itemname | .login=$(bw get template item.login | jq '.username='$username' | .password='$password'')" | bw encode | bw create item
}
deleteItem(){
read -p 'Id of item to delete' deleteid
bw delete item $deleteid
}
listItems(){
items=$(bw list items)
names=$(jq '.[].name' <<< "$items")
id=$(jq '.[].id' <<< "$items")
paste <(printf "%s\n" "${names[@]}") <(printf "%s\n" "${id[@]}")
}
getItem(){
read -p 'Id of item to get: ' getitemid
rawitem=$(bw get item $getitemid)
jq . <<< $rawitem
}
echo '###### Bitwarden-Cli Wrapper in Bash ######'
echo
echo 'Avaible Options'
echo '0) Exit'
echo '1) Edit Item'
echo '2) Create Item'
echo '3) Delete Item'
echo '4) List Items'
echo '5) Get Item'
echo
read -p 'Select Action from above list: ' action
vaultUnlock
export BW_SESSION=$sessiontoken
while [[ $action -ne 0 ]]; do
case "$action" in
1) editItem
;;
2) createItem
;;
3) deleteItem
;;
4) listItems
;;
5) getItem
;;
esac
echo
echo 'Avaible Options'
echo '0) Exit'
echo '1) Edit Item'
echo '2) Create Item'
echo '3) Delete Item'
echo '4) List Items'
echo '5) Get Item'
read -p 'Select Next Action: ' action
done
vaultClose