mirror of
https://github.com/frebib/dotfiles.git
synced 2024-06-14 12:57:23 +00:00
scripts/otp: Refactor & ensure notifications are dismissed
Modernise the script and make it more sane. Ensure lingering notifications are removed when the script exits to prevent collecting many notifications if the script is called in a loop. Signed-off-by: Joe Groocock <me@frebib.net>
This commit is contained in:
parent
787008fdb7
commit
2cc93a1649
61
scripts/otp
61
scripts/otp
@ -1,42 +1,45 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
|
NOTIF_PERSIST=30000
|
||||||
|
NOTIF_INFORM=5000
|
||||||
|
|
||||||
|
stdout=
|
||||||
|
caller=
|
||||||
|
notif=
|
||||||
|
|
||||||
while getopts "on:" o; do
|
while getopts "on:" o; do
|
||||||
case "${o}" in
|
case "${o}" in
|
||||||
o)
|
o)
|
||||||
stdout=1;;
|
stdout=1;;
|
||||||
n)
|
n)
|
||||||
caller="${OPTARG}"
|
caller="${OPTARG}"
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
exec ykman oath accounts list
|
exec ykman oath accounts list
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
done
|
done
|
||||||
shift $((OPTIND-1))
|
shift $((OPTIND-1))
|
||||||
|
|
||||||
if [ $# -lt 1 ]; then
|
if [ $# -lt 1 ]; then
|
||||||
exec ykman oath accounts list
|
exec ykman oath accounts list
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ -n "$caller" ]; then
|
if [ -n "$caller" ]; then
|
||||||
notif="$(notify-send -p "Touch your Yubikey" "$caller is requesting otp for $1")"
|
notif="$(notify-send -p -t $NOTIF_PERSIST "Touch your Yubikey" "$caller is requesting otp for $1")"
|
||||||
|
trap 'notify-send -r $notif -t 1 "Touch your Yubikey" "$caller is requesting otp for $1"' EXIT
|
||||||
fi
|
fi
|
||||||
|
|
||||||
ykman oath accounts code -s "$1" 2>&1 |
|
code=$(ykman oath accounts code -s "$1")
|
||||||
while read -r x; do
|
if [ -z "$stdout" ]; then
|
||||||
if grep -Pqw '[0-9]{6}' <<< "$x"; then
|
echo "$code" | tee >(xclip -i)
|
||||||
if [ -z "$stdout" ]; then
|
xdotool type "$code"
|
||||||
echo "$x" | tee >(xclip -i)
|
else
|
||||||
xdotool type "$x"
|
echo "$code"
|
||||||
else
|
fi
|
||||||
echo "$x"
|
|
||||||
fi
|
if [ -n "$code" ] && [ -n "$notif" ]; then
|
||||||
fi
|
trap : EXIT
|
||||||
if [ -z "$stdout" ]; then
|
notify-send -r "$notif" -t $NOTIF_INFORM "Yubikey Touched" "otp generated for $caller"
|
||||||
notify-send "$x";
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
|
|
||||||
if [ -n "$notif" ]; then
|
|
||||||
notify-send -r "$notif" -t 1000 "Touch your Yubikey" "otp generated for $caller"
|
|
||||||
fi
|
fi
|
||||||
|
Loading…
Reference in New Issue
Block a user