#!/usr/bin/env bash set -e -u -o pipefail DUAL_CONTROL="$(command -v dual_control || printf '')" DUAL_CONTROL="${DUAL_CONTROL:-./dual_control}" get_key() { "$DUAL_CONTROL" | awk '$1 == "Key:" { print $2 }' } get_token() { "$DUAL_CONTROL" | awk '$2 == "Token:" { print $0 }' } qr() { local VAL=$1 local MODE=${2:-ANSI} shift 2 || true 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" if command -v qrencode > /dev/null; then 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 } case "${1:-}" in '-h') cat <