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
 |