46 lines
1.6 KiB
Python
46 lines
1.6 KiB
Python
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))
|