wip
This commit is contained in:
parent
4852a9903c
commit
f6decf8e5f
251
arch-user/bin/bemenu/pinentry.sh
Executable file
251
arch-user/bin/bemenu/pinentry.sh
Executable file
@ -0,0 +1,251 @@
|
||||
#!/bin/bash -efu
|
||||
### This file is covered by the GNU General Public License,
|
||||
### which should be included with libshell as the file LICENSE.
|
||||
### All copyright information are listed in the COPYING.
|
||||
|
||||
#exec 2>/tmp/pinentry.log
|
||||
#set -x
|
||||
|
||||
VERSION='1.0'
|
||||
FLAVOR='bash'
|
||||
|
||||
############################### PATCH #################################
|
||||
. ~/.config/bemenu/env.sh
|
||||
#######################################################################
|
||||
|
||||
keyinfo=''
|
||||
error=''
|
||||
timeout=0
|
||||
touch_file=''
|
||||
|
||||
readonly def_desc='Enter password for GPG key'
|
||||
readonly def_prompt='Password:'
|
||||
readonly def_title='GPG Key Credentials'
|
||||
readonly def_repeat='Confirm password for GPG key'
|
||||
readonly def_labelok='OK'
|
||||
readonly def_labelnotok='Do not do this'
|
||||
readonly def_labelcancel='Cancel'
|
||||
|
||||
# from /usr/include/gpg-error.h
|
||||
readonly GPG_ERR_NO_ERROR=0
|
||||
readonly GPG_ERR_TIMEOUT=62
|
||||
readonly GPG_ERR_CANCELED=99
|
||||
readonly GPG_ERR_NOT_CONFIRMED=114
|
||||
readonly GPG_ERR_ASS_PARAMETER=280
|
||||
|
||||
strerror()
|
||||
{
|
||||
case "$1" in
|
||||
$GPG_ERR_NO_ERROR) echo "Success" ;;
|
||||
$GPG_ERR_TIMEOUT) echo "Timeout" ;;
|
||||
$GPG_ERR_CANCELED) echo "Operation cancelled" ;;
|
||||
$GPG_ERR_NOT_CONFIRMED) echo "Not confirmed" ;;
|
||||
$GPG_ERR_ASS_PARAMETER) echo "IPC parameter error" ;;
|
||||
esac
|
||||
}
|
||||
|
||||
assuan_result()
|
||||
{
|
||||
[ "$1" -gt 0 ] &&
|
||||
echo -n "ERR $(( 5 << 24 | $1 )) " ||
|
||||
echo -n "OK "
|
||||
strerror "$1"
|
||||
}
|
||||
|
||||
cmd_settimeout()
|
||||
{
|
||||
[ -n "${1##0*}" ] && [ -n "${1##*[!0-9]*}" ] && [ "$1" -gt 0 ] 2>/dev/null ||
|
||||
return 0
|
||||
timeout="$1"
|
||||
assuan_result $GPG_ERR_NO_ERROR
|
||||
}
|
||||
|
||||
cmd_setkeyinfo()
|
||||
{
|
||||
[ "$1" = "--clear" ] &&
|
||||
keyinfo="" ||
|
||||
keyinfo="$1"
|
||||
assuan_result $GPG_ERR_NO_ERROR
|
||||
}
|
||||
|
||||
set_text_variable()
|
||||
{
|
||||
printf -v "$1" "${2//%/\\x}"
|
||||
eval "set_$1=1"
|
||||
assuan_result $GPG_ERR_NO_ERROR
|
||||
}
|
||||
|
||||
cmd_setoption()
|
||||
{
|
||||
case "$1" in
|
||||
default-prompt=*) set_text_variable prompt "${1#*=}" ;;
|
||||
default-ok=*) set_text_variable labelok "${1#*=}" ;;
|
||||
default-cancel=*) set_text_variable labelcancel "${1#*=}" ;;
|
||||
touch-file=*)
|
||||
touch_file="${1#*=}"
|
||||
assuan_result $GPG_ERR_NO_ERROR
|
||||
;;
|
||||
*)
|
||||
assuan_result $GPG_ERR_NO_ERROR
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
cmd_getinfo()
|
||||
{
|
||||
case "$1" in
|
||||
version)
|
||||
echo "D $VERSION"
|
||||
assuan_result $GPG_ERR_NO_ERROR
|
||||
;;
|
||||
pid)
|
||||
echo "D $BASHPID"
|
||||
assuan_result $GPG_ERR_NO_ERROR
|
||||
;;
|
||||
flavor)
|
||||
echo "D $FLAVOR"
|
||||
assuan_result $GPG_ERR_NO_ERROR
|
||||
;;
|
||||
ttyinfo)
|
||||
echo "D - - - - $(id -u 2>/dev/null || echo 0)/$(id -g 2>/dev/null || echo 0) -"
|
||||
assuan_result $GPG_ERR_NO_ERROR
|
||||
;;
|
||||
*)
|
||||
assuan_result $GPG_ERR_ASS_PARAMETER
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
cmd_getpin()
|
||||
{
|
||||
local ret=0 result output password=1 repeatpassword=3
|
||||
|
||||
output="$(
|
||||
echo -n "|"
|
||||
############################### PATCH #################################
|
||||
bemenu \
|
||||
--password indicator \
|
||||
--prompt "${prompt:-$def_prompt}" \
|
||||
</dev/null | tr -d '\n'
|
||||
ret=${PIPESTATUS[0]}
|
||||
# yad \
|
||||
# --splash \
|
||||
# --no-markup \
|
||||
# --title="${title:-$def_title}" \
|
||||
# --form \
|
||||
# --separator="\n" \
|
||||
# --field="${desc:-$def_desc}:LBL" \
|
||||
# --field="${prompt:-$def_prompt}:H" \
|
||||
# ${set_repeat:+--field="${repeat:-$def_repeat}:LBL"} \
|
||||
# ${set_repeat:+--field="${prompt-$def_prompt}:H"} \
|
||||
# ${error:+--field="$error:LBL"} \
|
||||
# --button="${labelok:-$def_labelok}:0" \
|
||||
# --button="${labelcancel:-$def_labelcancel}:1" \
|
||||
# --timeout="${timeout:-0}" \
|
||||
# </dev/null || ret=$?
|
||||
######################################################################
|
||||
echo -n "|"
|
||||
exit $ret
|
||||
)" || ret=$?
|
||||
|
||||
set_error='' error=''
|
||||
|
||||
case "$ret" in
|
||||
1) assuan_result $GPG_ERR_CANCELED; return 0; ;;
|
||||
70) assuan_result $GPG_ERR_TIMEOUT; return 0; ;;
|
||||
esac
|
||||
|
||||
output="${output#|}"
|
||||
output="${output%|}"
|
||||
|
||||
############################### PATCH #################################
|
||||
declare -A result
|
||||
result[$password]="$output"
|
||||
result[$repeatpassword]="$output"
|
||||
# readarray -t result <<<"$output"
|
||||
# output=''
|
||||
#
|
||||
#######################################################################
|
||||
if [ -n "${set_repeat-}" ]; then
|
||||
set_repeat='' repeat=''
|
||||
|
||||
if [ "${result[$password]}" != "${result[$repeatpassword]}" ]; then
|
||||
cmd_confirm --one-button "${repeaterror:-Error: Passwords did not match.}"
|
||||
assuan_result $GPG_ERR_NOT_CONFIRMED
|
||||
return
|
||||
fi
|
||||
echo "S PIN_REPEATED"
|
||||
fi
|
||||
|
||||
[ -z "$touch_file" ] ||
|
||||
touch "$touch_file"
|
||||
|
||||
echo "D ${result[$password]}"
|
||||
assuan_result $GPG_ERR_NO_ERROR
|
||||
}
|
||||
|
||||
cmd_confirm()
|
||||
{
|
||||
local ret=0 showmsg='' showcfm=1
|
||||
|
||||
if [ "$1" = '--one-button' ]; then
|
||||
shift
|
||||
showmsg=1
|
||||
showcfm=
|
||||
fi
|
||||
|
||||
yad \
|
||||
--splash \
|
||||
--no-markup \
|
||||
--title="${title:-$def_title}" \
|
||||
--text="${1:-${desc:-$def_desc}}" \
|
||||
${showmsg:+--button="${labelok:-$def_labelok}:0"} \
|
||||
${showcfm:+${error:+--field="$error:LBL"}} \
|
||||
--timeout="${timeout:-0}" \
|
||||
< /dev/null ||
|
||||
ret=$?
|
||||
|
||||
set_error='' error=''
|
||||
|
||||
case "$ret" in
|
||||
0) assuan_result $GPG_ERR_NO_ERROR ;;
|
||||
1) assuan_result $GPG_ERR_CANCELED ;;
|
||||
70) assuan_result $GPG_ERR_TIMEOUT ;;
|
||||
*) assuan_result $GPG_ERR_NOT_CONFIRMED ;;
|
||||
esac
|
||||
}
|
||||
|
||||
echo "OK Your orders please"
|
||||
|
||||
while :; do
|
||||
read -r cmd args 2>/dev/null ||
|
||||
continue
|
||||
|
||||
#echo >&2 "$cmd: $args"
|
||||
|
||||
case "$cmd" in
|
||||
BYE)
|
||||
echo "OK closing connection"
|
||||
exit 0
|
||||
;;
|
||||
GETPIN) cmd_getpin ;;
|
||||
CONFIRM) cmd_confirm "$args" ;;
|
||||
MESSAGE) cmd_confirm --one-button ;;
|
||||
GETINFO) cmd_getinfo "$args" ;;
|
||||
SETTIMEOUT) cmd_settimeout "$args" ;;
|
||||
SETKEYINFO) cmd_setkeyinfo "$args" ;;
|
||||
OPTION) cmd_setoption "$args" ;;
|
||||
SETDESC) set_text_variable desc "$args" ;;
|
||||
SETPROMPT) set_text_variable prompt "$args" ;;
|
||||
SETTITLE) set_text_variable title "$args" ;;
|
||||
SETOK) set_text_variable labelok "$args" ;;
|
||||
SETCANCEL) set_text_variable labelcancel "$args" ;;
|
||||
SETNOTOK) set_text_variable labelnotok "$args" ;;
|
||||
SETERROR) set_text_variable error "$args" ;;
|
||||
SETREPEAT) set_text_variable repeat "$args" ;;
|
||||
SETREPEATERROR) set_text_variable repeaterror "$args" ;;
|
||||
*)
|
||||
assuan_result $GPG_ERR_NO_ERROR
|
||||
;;
|
||||
esac
|
||||
done
|
@ -10,11 +10,11 @@ export BEMENU_OPTS="\
|
||||
--bdr #{{ .theme.color.fg_accent }}{{ math.Mul .theme.opacity.med 255 | conv.ToInt64 | printf "%02X" }} \
|
||||
--scf #{{ .theme.color.fg_accent }}{{ math.Mul .theme.opacity.med 255 | conv.ToInt64 | printf "%02X" }} \
|
||||
--scb #{{ .theme.color.bg }}{{ math.Mul .theme.opacity.high 255 | conv.ToInt64 | printf "%02X" }} \
|
||||
--nb #{{ .theme.color.bg }}{{ math.Mul .theme.opacity.high 255 | conv.ToInt64 | printf "%02X" }} \
|
||||
--ab #{{ .theme.color.bg }}{{ math.Mul .theme.opacity.high 255 | conv.ToInt64 | printf "%02X" }} \
|
||||
--hb #{{ .theme.color.bg }}{{ math.Mul .theme.opacity.high 255 | conv.ToInt64 | printf "%02X" }} \
|
||||
--fb #{{ .theme.color.bg }}{{ math.Mul .theme.opacity.high 255 | conv.ToInt64 | printf "%02X" }} \
|
||||
--tb #{{ .theme.color.bg }}{{ math.Mul .theme.opacity.high 255 | conv.ToInt64 | printf "%02X" }} \
|
||||
--nb #{{ .theme.color.bg }} \
|
||||
--ab #{{ .theme.color.bg }} \
|
||||
--hb #{{ .theme.color.bg }} \
|
||||
--fb #{{ .theme.color.bg }} \
|
||||
--tb #{{ .theme.color.bg }} \
|
||||
--nf #{{ .theme.color.fg }} \
|
||||
--af #{{ .theme.color.fg }} \
|
||||
--cf #{{ .theme.color.fg }} \
|
||||
|
@ -7,3 +7,10 @@ export WLR_RENDERER=vulkan
|
||||
for fpath in ~/.config/*/env.sh; do
|
||||
. "$fpath"
|
||||
done
|
||||
|
||||
unset SSH_AGENT_PID
|
||||
if [ "${gnupg_SSH_AUTH_SOCK_by:-0}" -ne $$ ]; then
|
||||
export SSH_AUTH_SOCK="$(gpgconf --list-dirs agent-ssh-socket)"
|
||||
fi
|
||||
export GPG_TTY=$(tty)
|
||||
gpg-connect-agent updatestartuptty /bye >/dev/null
|
||||
|
Loading…
Reference in New Issue
Block a user