summaryrefslogtreecommitdiff
path: root/ar/.local/bin/otp
blob: be80265d0de9a063bd991b9b177b594c04debdae (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
#!/bin/sh

# Get a one-time password, or add a OTP secret to your pass-otp store.

# The assumption of this script is that all otp passwords are stored with the
# suffix `-otp`. This script automatically appends newly added otps as such.

# For OTP passwords to be generated properly, it is important for the local
# computer to have its time properly synced. This can be done with the command
# below which requires the package `ntp`.

ifinstalled pass pass-otp || exit 1

dir="${PASSWORD_STORE_DIR}"

choice="$({
  echo "🆕add"
  echo "🕙sync-time"
  ls "$dir"/*-otp.gpg
} | sed "s/.*\///;s/-otp.gpg//" | dmenu -p "Pick a 2FA:")"

case $choice in
🆕add)
  ifinstalled maim zbar || exit 1

  temp=$(mktemp -p "$XDG_RUNTIME_DIR" --suffix=.png)
  otp="otp-test-script"
  trap 'rm -f $temp; pass rm -f $otp' HUP INT QUIT TERM PWR EXIT

  notify-send "Scan the image." "Scan the OTP QR code."

  maim -s "$temp" || exit 1
  info="$(zbarimg -q "$temp")"
  info="${info#QR-Code:}"

  if echo "$info" | pass otp insert "$otp"; then
    while true; do
      export name="$(echo | dmenu -p "Give this One Time Password a one-word name:")"
      echo "$name" | grep -q -- "^[A-z0-9-]\+$" && break
    done
    pass mv "$otp" "$name-otp"
    notify-send "Successfully added." "$name-otp has been created."
  else
    notify-send "No OTP data found." "Try to scan the image again more precisely."
  fi
  ;;
🕙sync-time)
  ifinstalled ntp || exit 1
  notify-send -u low "🕙 Synchronizing Time..." "Synching time with remote NTP servers..."
  updatedata="$(sudo ntpdate pool.ntp.org)" &&
    notify-send -u low "🕙 Synchronizing Time..." "Done. Time changed by ${updatedata#*offset }"
  ;;
*) pass otp -c ${choice}-otp ;;
esac