#!/bin/sh
|
|
|
|
skey="$(bw unlock --raw)"
|
|
|
|
export BW_SESSION="$skey"
|
|
|
|
data="$(bw list items | jq -r -M \
|
|
'.[]| select( .type | contains(1)) |.name,.folderId,(.login|.username,.password,.totp,(.uris|.[0]|.uri))')"
|
|
|
|
echo "Fetched passwords from bitwarden."
|
|
|
|
uri=""
|
|
password=""
|
|
name=""
|
|
username=""
|
|
totp=""
|
|
fid=""
|
|
|
|
echo "Cleaning previuos store"
|
|
prev=$(pwd)
|
|
cd $PASSWORD_STORE_DIR
|
|
for f in *; do
|
|
pass rm -rf "$f"
|
|
done
|
|
cd $prev
|
|
|
|
strip_domain(){
|
|
if [ "$1" = "null" ]; then
|
|
echo "null"
|
|
return 0
|
|
fi
|
|
echo "$1" | head -n 1 | sed 's~http[s]*://~~g' | cut -d"/" -f 1
|
|
}
|
|
|
|
get_folder(){
|
|
if [ "$1" = "null" ]; then
|
|
echo "No Folder"
|
|
return 0
|
|
fi
|
|
bw get folder "$1" | jq -r -M ".name"
|
|
}
|
|
|
|
|
|
IFS="
|
|
"
|
|
for l in $data; do
|
|
if [ "$name" = "" ]; then
|
|
name=$l
|
|
echo "$name"
|
|
elif [ "$fid" = "" ]; then
|
|
fid=$l
|
|
elif [ "$username" = "" ]; then
|
|
username=$l
|
|
elif [ "$password" = "" ]; then
|
|
password=$l
|
|
elif [ "$totp" = "" ]; then
|
|
totp=$l
|
|
elif [ "$uri" = "" ]; then
|
|
uri=$(strip_domain $l)
|
|
folder=$(get_folder $fid)
|
|
|
|
if [ "$uri" = "null" ]; then
|
|
echo "$password" | pass insert -f -e "$folder/$name/$username" 2> /dev/null > /dev/null
|
|
if [ ! "$totp" = "null" ]; then
|
|
echo "$totp" | pass otp append -f -e "$folder/$name/$username" > /dev/null 2> /dev/null
|
|
fi
|
|
else
|
|
echo "$password" | pass insert -f -e "$folder/$uri/$username" 2> /dev/null > /dev/null
|
|
if [ ! "$totp" = "null" ]; then
|
|
echo "$totp" | pass otp append -f -e "$folder/$uri/$username" > /dev/null 2> /dev/null
|
|
fi
|
|
fi
|
|
uri=""
|
|
fid=""
|
|
password=""
|
|
name=""
|
|
username=""
|
|
totp=""
|
|
fi
|
|
done
|
|
|