shtools/zpass/src/prompt.sh

62 lines
1.3 KiB
Bash

#!/bin/sh
# $1 = prompt
console_prompt_hidden()
{
(
_tty_on() { stty echo; }
trap _tty_on INT
local prompt
printf "%s" "$1" >&2
stty -echo
read -r prompt || { stty echo; return 1; }
stty echo
printf "\n" >&2
echo "$prompt"
)
}
# $1 = prompt message
prompt_password() {
if [ -n "$DISPLAY" ]
then
if which kdialog >/dev/null 2>&2
then kdialog --title "$fname" --password "$1" 2>/dev/null
else zenity --title "$fname" --password 2>/dev/null
fi
else
console_prompt_hidden "$1: "
fi
}
# $1 = message
error_dialog() {
if which kdialog >/dev/null 2>&2
then kdialog --title "$fname" --error "$1" 2>/dev/null
else zenity --title "$fname" --error --text="$1" 2>/dev/null
fi
}
new_key_with_confirm()
{
[ -n "$ZPASS_KEY" ] && echo "$ZPASS_KEY" && return 0
pass1=1
pass2=2
while [ "$pass1" != "$pass2" ]
do
pass1=$(prompt_password "Enter new key") || error 100 "Cancelled"
pass2=$(prompt_password "Confirm key") || error 100 "Cancelled"
[ "$pass1" != "$pass2" ] && error_dialog "Passwords do not match.\nTry again"
done
write_cache "$pass1" &
echo "$pass1"
}
# $1 = prompt message
ask_key() {
message="Enter key"
[ -n "$1" ] && message="$1"
key=$(prompt_password "$message") || return $?
write_cache "$key" &
echo "$key"
}