import urllib.request import json import sys from pyotp import TOTP from tabulate import tabulate UNGLEICH_PAY_SERVER_URL = "https://pay.ungleich.ch" class ungleichPay(object): def __init__(self, parser, parents): self.parser = parser self.parser['customers-list'] = self.parser['sub'].add_parser( 'customers-list', help="List customers who have an active VM at ungleich", parents=[parents]) self.parser['customers-list'].add_argument('--username', required=True) self.parser['customers-list'].add_argument('--realm', required=True) self.parser['customers-list'].add_argument( '--seed', required=True, help="A valid seed obtained from ungleich" ) self.parser['customers-list'].add_argument( '--email', required=True, help="Email associated with the username" ) self.parser['customers-list'].add_argument( '--ungleich-pay-server', required=False, help="A valid ungleich pay server url" ) self.parser['customers-list'].set_defaults(func=self.customers_list) def customers_list(self, args): customers_list_endpoint = "/customers-list/" if args.ungleich_pay_server: request_url = args.ungleich_pay_server + customers_list_endpoint else: request_url = UNGLEICH_PAY_SERVER_URL + customers_list_endpoint print(f"request_url={request_url}") req = urllib.request.Request(url=request_url, method='GET', headers={ "email": args.email, "username": args.username, "realm": args.realm, "token": TOTP(args.seed).now(), "Accept": "application/json" }) try: response = urllib.request.urlopen(req) except urllib.error.HTTPError as err: print(str(err)) sys.exit(1) except urllib.error.URLError as uerr: print(str(uerr)) sys.exit(2) response_json = json.loads(response.read().decode('utf-8')) if (response_json['response'] == 'success'): data = response_json["data"] rows = [(x['email'], x['vm_count']) for x in data] headers = ["customer", "vm_count"] print("---") print(tabulate(rows, headers)) print("---") vm_count = 0 for x in data: vm_count += x['vm_count'] print("Total vm_count = {}".format(vm_count)) else: print("An error occurred.") print(response_json["message"])