81 lines
No EOL
2.8 KiB
Python
81 lines
No EOL
2.8 KiB
Python
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")) |