forked from uncloud/uncloud
46 lines
1.3 KiB
Python
46 lines
1.3 KiB
Python
import requests
|
|
import json
|
|
import argparse
|
|
import binascii
|
|
|
|
from pyotp import TOTP
|
|
from os.path import join as join_path
|
|
from uncloud.common.shared import shared
|
|
|
|
|
|
def get_otp_parser():
|
|
otp_parser = argparse.ArgumentParser('otp')
|
|
otp_parser.add_argument('--name')
|
|
otp_parser.add_argument('--realm')
|
|
otp_parser.add_argument('--seed', type=get_token, dest='token', metavar='SEED')
|
|
|
|
return otp_parser
|
|
|
|
|
|
def load_dump_pretty(content):
|
|
if isinstance(content, bytes):
|
|
content = content.decode('utf-8')
|
|
parsed = json.loads(content)
|
|
return json.dumps(parsed, indent=4, sort_keys=True)
|
|
|
|
|
|
def make_request(*args, data=None, request_method=requests.post):
|
|
try:
|
|
r = request_method(join_path(shared.settings['client']['api_server'], *args), json=data)
|
|
except requests.exceptions.RequestException:
|
|
print('Error occurred while connecting to API server.')
|
|
else:
|
|
try:
|
|
print(load_dump_pretty(r.content))
|
|
except Exception:
|
|
print('Error occurred while getting output from api server.')
|
|
|
|
|
|
def get_token(seed):
|
|
if seed is not None:
|
|
try:
|
|
token = TOTP(seed).now()
|
|
except binascii.Error:
|
|
raise argparse.ArgumentTypeError('Invalid seed')
|
|
else:
|
|
return token
|