#!/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