53 lines
1.3 KiB
Bash
Executable File
53 lines
1.3 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
. $HOME/.bin/_config
|
|
set -x
|
|
|
|
shopt -s nullglob globstar
|
|
|
|
prefix=${PASSWORD_STORE_DIR-~/.password-store}
|
|
password_files=( "$prefix"/**/*.gpg )
|
|
password_files=( "${password_files[@]#"$prefix"/}" )
|
|
password_files=( "${password_files[@]%.gpg}" )
|
|
password=$(printf '%s\n' "${password_files[@]}" | $DMENU_CMD -p Password)
|
|
|
|
[[ -n $password ]] || exit
|
|
|
|
# read password file
|
|
password_out=$(pass "$password" 2> /dev/null)
|
|
|
|
|
|
copy_password() {
|
|
# copy password line
|
|
printf "%s" "$password_out" | head -1 | xclip -r
|
|
|
|
# extract additional information
|
|
password_info=$(printf "%s" "$password_out" | grep -Ei -m 1 'login|user|email')
|
|
#url_info=$(printf "%s" "$password_out" | grep -Ei '^url' | awk -F"[ :]*" '{ $1=""; print $0 }' )
|
|
|
|
# show desktop notification
|
|
if [[ -n $password_info ]]; then
|
|
NOTIFY_CMD "$(printf '%s' "$password_info")"
|
|
else
|
|
NOTIFY_CMD "No username provided."
|
|
fi
|
|
}
|
|
|
|
copy_otp() {
|
|
password_otp=$(pass otp "$password" 2> /dev/null)
|
|
printf "%s" "$password_otp" | xclip -r
|
|
NOTIFY_CMD "$password_otp"
|
|
|
|
}
|
|
|
|
if echo "$password_out" | grep -q otpauth
|
|
then
|
|
sel=$(printf 'Copy Password\nCopy OTP' | $DMENU_CMD -p Copy)
|
|
case $sel in
|
|
*Password) copy_password; ;;
|
|
*OTP) copy_otp; ;;
|
|
esac
|
|
else
|
|
copy_password
|
|
fi
|
|
|