import requests import decouple import pyotp import argparse arg_parser = argparse.ArgumentParser() arg_parser.add_argument("action", choices=["list", "create", "verify", "delete"]) arg_parser.add_argument("--name") arg_parser.add_argument("--realm") arg_parser.add_argument("--seed") arg_parser.add_argument("--admin-name") arg_parser.add_argument("--admin-realm") arg_parser.add_argument("--admin-seed") arg_parser.add_argument("--auth-name") arg_parser.add_argument("--auth-realm") arg_parser.add_argument("--auth-seed") args = arg_parser.parse_args() action = args.action if action == "list": assert args.admin_name and args.admin_realm and args.admin_seed, \ "You must pass --admin-name, --admin-realm and --admin-seed" data = \ { "admin_name": args.admin_name, "admin_realm": args.admin_realm, "admin_token": pyotp.TOTP(args.admin_seed).now() } r = requests.post("http://localhost:{}/list".format(decouple.config('PORT')), json=data) print(r.content.decode("utf-8")) elif action == "create": assert args.name and args.realm and args.admin_name and args.admin_realm and args.admin_seed, \ "You must pass --name, --realm, --admin-name, --admin-realm and --admin-seed" data = \ { "name": args.name, "realm": args.realm, "admin_name": args.admin_name, "admin_realm": args.admin_realm, "admin_token": pyotp.TOTP(args.admin_seed).now() } r = requests.post("http://localhost:{}/create".format(decouple.config('PORT')), json=data) print(r.content.decode("utf-8")) elif action == "verify": assert args.name and args.realm and args.seed and args.auth_name and args.auth_realm and args.auth_seed, \ "You must pass --name, --realm, --seed, --auth-name, --auth-realm and --auth-seed" data = \ { "name": args.name, "realm": args.realm, "token": pyotp.TOTP(args.seed).now(), "auth_name": args.auth_name, "auth_realm": args.auth_realm, "auth_token": pyotp.TOTP(args.auth_seed).now() } r = requests.post("http://localhost:{}/verify".format(decouple.config('PORT')), json=data) print(r.content.decode("utf-8")) elif action == "delete": assert args.name and args.admin_name and args.admin_realm and args.admin_seed, \ "You must pass --name, --admin-name, --admin-realm and --admin-seed" data = \ { "name": args.name, "admin_name": args.admin_name, "admin_realm": args.admin_realm, "admin_token": pyotp.TOTP(args.admin_seed).now() } r = requests.post("http://localhost:{}/delete".format(decouple.config('PORT')), json=data) print(r.content.decode("utf-8"))