git.fiddlerwoaroof.com
setup_user_account.sh
d6e0d78a
 #!/usr/bin/env bash
2705034f
 set -e -u -o pipefail
ee5e259c
 
2705034f
 DUAL_CONTROL="$(command -v dual_control || printf '')"
ee5e259c
 DUAL_CONTROL="${DUAL_CONTROL:-./dual_control}"
 
 get_key() {
   "$DUAL_CONTROL" | awk '$1 == "Key:" { print $2 }'
 }
 
 get_token() {
d6e0d78a
   "$DUAL_CONTROL" | awk '$2 == "Token:" { print $0 }'
ee5e259c
 }
 
 qr() {
   local VAL=$1
bc315f19
   local MODE=${2:-ANSI}
2705034f
   shift 2 || true
ee5e259c
 
   qrencode -t $MODE $VAL
 }
 
 get_url() {
   local user="$(whoami)"
   printf "otpauth://totp/${user}?secret=$1"
 }
 
 main() {
   pushd "$(dirname $0)" > /dev/null
   local KEY="$(get_key)"
   local KEY_URL="$(get_url "$KEY")"
   local NONINTERACTIVE="$1"
 
2705034f
   if command -v qrencode > /dev/null; then
ee5e259c
     qr $KEY_URL
   else
     echo "Run 'yum install qrencode' to get a QR code"
   fi
   echo
 
   "$DUAL_CONTROL"
   local MORE
   while [[ -z "$NONINTERACTIVE" ]]; do
     read -r -p 'Another token [Y/n]? ' MORE
     MORE="${MORE:-y}"
     if [[ "${MORE/Y/y}" != 'y' ]]; then
       break
     fi
     get_token
   done
 
   popd > /dev/null
 }
 
2705034f
 case "${1:-}" in
 '-h')
ee5e259c
   cat <<EOF
 USAGE:
   $(basename $0) [--help]
   $(basename $0) [is_not_interactive]
 EOF
   exit 0
   ;;
2705034f
 
ee5e259c
 *)
2705034f
   main "${1:-}"
ee5e259c
 esac