config to read/store user data in json file
This commit is contained in:
parent
79abf872f2
commit
ba6e83f925
3 changed files with 98 additions and 10 deletions
4
ungleich
4
ungleich
|
@ -7,6 +7,7 @@ from ungleich_ripe import ungleichRIPE
|
||||||
from ungleich_account import Account_Create
|
from ungleich_account import Account_Create
|
||||||
from ungleich_weather import ungleichWeather
|
from ungleich_weather import ungleichWeather
|
||||||
from ungleich_ssh_key import SSHKey
|
from ungleich_ssh_key import SSHKey
|
||||||
|
from ungleich_config import Ungleich_Config
|
||||||
|
|
||||||
VERSION = "0.0.4"
|
VERSION = "0.0.4"
|
||||||
|
|
||||||
|
@ -17,7 +18,8 @@ class ungleichCLI(object):
|
||||||
# FIXME: make it generic
|
# FIXME: make it generic
|
||||||
dns = ungleichDNS(self.parser, self.parser_parents)
|
dns = ungleichDNS(self.parser, self.parser_parents)
|
||||||
ripe = ungleichRIPE(self.parser, self.parser_parents)
|
ripe = ungleichRIPE(self.parser, self.parser_parents)
|
||||||
ripe = Account_Create(self.parser, self.parser_parents)
|
account = Account_Create(self.parser, self.parser_parents)
|
||||||
|
config = Ungleich_Config(self.parser, self.parser_parents)
|
||||||
SSHKey(self.parser, self.parser_parents)
|
SSHKey(self.parser, self.parser_parents)
|
||||||
ungleichWeather(self.parser, self.parser_parents)
|
ungleichWeather(self.parser, self.parser_parents)
|
||||||
|
|
||||||
|
|
82
ungleich_config.py
Normal file
82
ungleich_config.py
Normal file
|
@ -0,0 +1,82 @@
|
||||||
|
import argparse
|
||||||
|
import json
|
||||||
|
import urllib.request
|
||||||
|
|
||||||
|
|
||||||
|
class Ungleich_Config(object):
|
||||||
|
def __init__(self, parser, parents):
|
||||||
|
self.parser = parser
|
||||||
|
|
||||||
|
self.parser['add'] = self.parser['sub'].add_parser(
|
||||||
|
'config-add',
|
||||||
|
help="Add user to configuration file",
|
||||||
|
parents=[parents])
|
||||||
|
|
||||||
|
self.parser['list'] = self.parser['sub'].add_parser(
|
||||||
|
'config-list',
|
||||||
|
help="list users in configuration file",
|
||||||
|
parents=[parents])
|
||||||
|
|
||||||
|
self.parser['delete'] = self.parser['sub'].add_parser(
|
||||||
|
'config-delete',
|
||||||
|
help="remove a user in configuration file",
|
||||||
|
parents=[parents])
|
||||||
|
|
||||||
|
self.parser['add'].add_argument('--name', help='otp name', required=True)
|
||||||
|
self.parser['add'].add_argument('--realm', help='otp realm', required=True)
|
||||||
|
self.parser['add'].add_argument('--seed', help='otp seed', required=True)
|
||||||
|
|
||||||
|
self.parser['delete'].add_argument('--id', help='user ID to remove', required=True)
|
||||||
|
self.parser['list'].set_defaults(func=self._list_users)
|
||||||
|
self.parser['add'].set_defaults(func=self._add_user)
|
||||||
|
self.parser['delete'].set_defaults(func=self._delete_user)
|
||||||
|
|
||||||
|
def _add_user(self, args):
|
||||||
|
try:
|
||||||
|
f = open('users.json', 'r')
|
||||||
|
json_info = json.loads(f.read())
|
||||||
|
if len(json_info) > 0:
|
||||||
|
with open('users.json', 'w') as fp:
|
||||||
|
last_id = int(list(json_info.keys())[-1]) + 1
|
||||||
|
json_info[last_id] = {"name": args.name, "realm": args.realm, "seed": args.seed}
|
||||||
|
json.dump(json_info, fp)
|
||||||
|
print('User added.')
|
||||||
|
else:
|
||||||
|
with open('users.json', 'w') as fp:
|
||||||
|
d = {"name": args.name, "realm": args.realm, "seed": args.seed}
|
||||||
|
json.dump({"1": d}, fp)
|
||||||
|
print('User added.')
|
||||||
|
|
||||||
|
except FileNotFoundError:
|
||||||
|
with open('users.json', 'w') as fp:
|
||||||
|
d = {"name": args.name, "realm": args.realm, "seed": args.seed}
|
||||||
|
json.dump({"1": d}, fp)
|
||||||
|
print('User added.')
|
||||||
|
|
||||||
|
def _list_users(self, args):
|
||||||
|
try:
|
||||||
|
f = open('users.json', 'r')
|
||||||
|
json_info = json.loads(f.read())
|
||||||
|
for key, value in json_info.items():
|
||||||
|
print('{}: {}'.format(key, value['name']))
|
||||||
|
except FileNotFoundError:
|
||||||
|
print('No users loaded.')
|
||||||
|
|
||||||
|
def _delete_user(self, args):
|
||||||
|
try:
|
||||||
|
f = open('users.json', 'r')
|
||||||
|
json_info = json.loads(f.read())
|
||||||
|
try:
|
||||||
|
del json_info[args.id]
|
||||||
|
f = open('users.json', 'w')
|
||||||
|
x = 1
|
||||||
|
for i in list(json_info.keys()):
|
||||||
|
json_info[str(x)] = json_info.pop(i)
|
||||||
|
x+=1
|
||||||
|
f.write(json.dumps(json_info))
|
||||||
|
f.close()
|
||||||
|
except KeyError:
|
||||||
|
print("No user with such id.")
|
||||||
|
|
||||||
|
except FileNotFoundError:
|
||||||
|
print('No users loaded.')
|
|
@ -1,7 +1,7 @@
|
||||||
|
|
||||||
import urllib.request
|
import urllib.request
|
||||||
import argparse
|
import argparse
|
||||||
import json
|
import json
|
||||||
|
from pyotp import TOTP
|
||||||
|
|
||||||
class ungleichDNS(object):
|
class ungleichDNS(object):
|
||||||
def __init__(self, parser, parents):
|
def __init__(self, parser, parents):
|
||||||
|
@ -13,15 +13,16 @@ class ungleichDNS(object):
|
||||||
parents=[parents])
|
parents=[parents])
|
||||||
|
|
||||||
self.parser['dns'].add_argument('--set-reverse', help='REQUIRED: IPv6 Address of your VM', required=True)
|
self.parser['dns'].add_argument('--set-reverse', help='REQUIRED: IPv6 Address of your VM', required=True)
|
||||||
self.parser['dns'].add_argument('--user', help='Your ungleich username', required=True)
|
self.parser['dns'].add_argument('--user', help='Your stored user ID', required=True)
|
||||||
self.parser['dns'].add_argument('--token', help='Your ungleich 6 digit OTP generated token', type=int, required=True)
|
|
||||||
self.parser['dns'].add_argument('--name', help='Hostname', 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'].add_argument('--email', help='registered email', required=True)
|
||||||
self.parser['dns'].add_argument('--realm', help='Otp realm', required=True)
|
|
||||||
self.parser['dns'].set_defaults(func=self._handle_dns)
|
self.parser['dns'].set_defaults(func=self._handle_dns)
|
||||||
|
|
||||||
def _handle_dns(self, args):
|
def _handle_dns(self, args):
|
||||||
"""Reverse dns endpoint."""
|
"""Reverse dns endpoint."""
|
||||||
|
f = open('users.json', 'r')
|
||||||
|
data = json.loads(f.read())[args.user]
|
||||||
|
|
||||||
url = 'https://dns.service.ungleich.ch'
|
url = 'https://dns.service.ungleich.ch'
|
||||||
req = urllib.request.Request(
|
req = urllib.request.Request(
|
||||||
url=url,
|
url=url,
|
||||||
|
@ -30,13 +31,16 @@ class ungleichDNS(object):
|
||||||
"Content-Type": "application/json"
|
"Content-Type": "application/json"
|
||||||
},
|
},
|
||||||
data=json.dumps({
|
data=json.dumps({
|
||||||
'username': args.user,
|
'username': data['name'],
|
||||||
'token': args.token,
|
'token': TOTP(data['seed']).now(),
|
||||||
'ipaddress': args.set_reverse,
|
'ipaddress': args.set_reverse,
|
||||||
'name': args.name,
|
'name': args.name,
|
||||||
'email': args.email,
|
'email': args.email,
|
||||||
'realm': args.realm
|
'realm': data['realm']
|
||||||
}).encode('utf-8')
|
}).encode('utf-8')
|
||||||
)
|
)
|
||||||
|
try:
|
||||||
response = urllib.request.urlopen(req).read()
|
response = urllib.request.urlopen(req).read()
|
||||||
print(json.loads(response))
|
except urllib.error.HTTPError as e:
|
||||||
|
error_message = e.read()
|
||||||
|
print(json.loads(error_message))
|
||||||
|
|
Loading…
Reference in a new issue