1
0
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:
Joe Groocock 2023-03-29 13:43:29 +01:00
parent 787008fdb7
commit 2cc93a1649
Signed by: frebib
GPG Key ID: E0B16BEACFBB6A86

View File

@ -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