import urllib.request import argparse import json from pyotp import TOTP class ungleichDNS(object): def __init__(self, parser, parents): self.parser = parser self.parser['dns'] = self.parser['sub'].add_parser( 'dns', help="Manage DNS entries @ ungleich", parents=[parents]) self.parser['dns'].add_argument('--set-reverse', help='REQUIRED: IPv6 Address of your VM', required=True) self.parser['dns'].add_argument('--user', help='Your stored user ID', required=True) self.parser['dns'].add_argument('--name', help='Hostname', required=True) self.parser['dns'].add_argument('--email', help='registered email', required=True) self.parser['dns'].set_defaults(func=self._handle_dns) def _handle_dns(self, args): """Reverse dns endpoint.""" f = open('users.json', 'r') data = json.loads(f.read())[args.user] url = 'https://dns.service.ungleich.ch' req = urllib.request.Request( url=url, method='POST', headers={ "Content-Type": "application/json" }, data=json.dumps({ 'username': data['name'], 'token': TOTP(data['seed']).now(), 'ipaddress': args.set_reverse, 'name': args.name, 'email': args.email, 'realm': data['realm'] }).encode('utf-8') ) try: response = urllib.request.urlopen(req).read() except urllib.error.HTTPError as e: error_message = e.read() print(json.loads(error_message))