import requests import json import argparse import binascii from pyotp import TOTP from os.path import join as join_path from uncloud.common.settings import settings def get_otp_parser(): otp_parser = argparse.ArgumentParser('otp') otp_parser.add_argument('--name', default=settings['client']['name']) otp_parser.add_argument('--realm', default=settings['client']['realm']) otp_parser.add_argument('--seed', type=get_token, default=settings['client']['seed'], 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): r = request_method(join_path(settings['client']['api_server'], *args), json=data) 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