72 lines
2.8 KiB
Python
72 lines
2.8 KiB
Python
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"])
|