#!/bin/bash logins="$1" [[ -f $logins ]] || { echo "Usage: $(basename $0) logins.csv" exit 1 } declare -A urls n=0 readarray lines <"$1" for line in "${lines[@]}"; do IFS="," read -r -a fields <<< "$line" # combine fields in case values contained a comma idx=0 url="${fields[$((idx++))]}" while [[ $idx -le ${#fields[*]} && ${url: -1:1} != \" ]]; do url+=",${fields[$((idx++))]}" done user="${fields[$((idx++))]}" while [[ $idx -le ${#fields[*]} && ${user: -1:1} != \" ]]; do user+=",${fields[$((idx++))]}" done pass="${fields[$((idx++))]}" while [[ $idx -le ${#fields[*]} && ${pass: -1:1} != \" ]]; do pass+=",${fields[$((idx++))]}" done # sanity check before stripping quotes for pos in 0 -1; do [[ ${url:$pos:1} == \" ]] || echo -e "\n!!! missing quote in url at $pos\n" [[ ${user:$pos:1} == \" ]] || echo -e "\n!!! missing quote in user at $pos\n" [[ ${pass:$pos:1} == \" ]] || echo -e "\n!!! missing quote in pass at $pos\n" done # strip quotes url="${url:1:-1}" user="${user:1:-1}" pass="${pass:1:-1}" # skip irrelevant lines case "$url" in url|chrome://FirefoxAccounts) continue esac url=${url#https://} url=${url#http://} [[ $url == */* ]] && echo -e "\n!!! URL $url still contains slash\n" [[ ${urls[$url]} && ${urls[$url]} != $user:$pass ]] && { echo -e "\n!!! duplicate entry for $url -> ${urls[$url]} vs $user:$pass\n"; } urls=([$url]="$user:$pass") echo "$((n++)): $url -> $user:$pass" pass insert -e "web/$url${user:+/$user}" <<< "$pass" done