def delete(args): import processing # for DELETE HTTP method action = False # for delete sub-command if args.__dict__.get('domain'): from converter import JSONConvert domain = args.domain o = JSONConvert(domain) name, rtype, content, ttl, priority = getRecordParameters(args) record_dict = o.setRecord(name, rtype, content, ttl, priority) json = setJSON(domain, action, record=record_dict) # for bulk_delete sub-command else: domain = checkInfile(args.infile) json = setJSON(domain, action, filename=args.infile) password = getPassword(args) t = token(args.username, password, args.server) processing.deleteRecords(args.server, t, json)
def response(uri, method, res, token="", keyword="", domain=""): import json # response body if method == "GET" or (method == "PUT" and not token): data = res.read() data_utf8 = data.decode("utf-8") if token: datas = json.loads(data_utf8) else: token = json.loads(data_utf8)["hash"] return token # filtering with keyword if keyword == "serial": from converter import JSONConvert record = searchRecord(datas, "SOA")[0] # if SOA record, remove priority unnecessary del record["priority"] # override ttl record["ttl"] = int(record["ttl"]) c = JSONConvert(domain) new_record = c.getSOA(record) return record, new_record # '--search' option of 'get' subcommand elif keyword: records = searchRecord(datas, keyword) datas.update({"records": records}) # 'tmpl_get' subcommand if uri.split("/")[3] == "template": # when specify template identfier if len(uri.split("/")) == 5: formattedPrint(datas) # when get all templates else: for data in datas: formattedPrint(data) # 'get' subcommand else: formattedPrint(datas) # response non JSON data else: data = res.read() print(data)
def tonicDNSClient(uri, method, token, data, keyword='', domain=''): import sys import json if sys.version_info > (2, 6) and sys.version_info < (2, 8): import urllib2 as urllib elif sys.version_info > (3, 0): import urllib.request as urllib encoded = json.JSONEncoder().encode(data) o = urllib.build_opener(urllib.HTTPHandler) r = urllib.Request(uri, data=encoded.encode('utf-8')) r.add_header('x-authentication-token', token) # When encoded(=data) is False, retrieve data as GET method. if encoded: r.add_header('Content-Type', 'application/json') r.get_method = lambda: method try: url = o.open(r) except urllib.HTTPError as e: sys.stderr.write("ERROR: %s\n" % e) exit(1) # response body if method == 'GET': datas = json.loads(url.read().decode('utf-8')) # filtering with keyword if keyword == 'serial': from converter import JSONConvert record = searchRecord(datas, 'SOA')[0] del record['priority'] record['ttl'] = int(record['ttl']) c = JSONConvert(domain) new_record = c.getSOA(record) return record, new_record elif keyword: records = searchRecord(datas, keyword) datas.update({"records": records}) if uri.split('/')[3] == 'template': if len(uri.split('/')) == 5: formattedPrint(datas) else: for data in datas: formattedPrint(data) else: formattedPrint(datas) else: data = url.read() print(data)
def updateSerial(server, token, domain): # x-authentication-token: token # Get SOA record # `cur_soa` is current SOA record. # `new_soa` is incremental serial SOA record. method = 'GET' uri = 'https://' + server + '/zone/' + domain cur_soa, new_soa = tonicDNSClient(uri, method, token, data=False, keyword='serial', domain=domain) # set JSON from converter import JSONConvert cur_o = JSONConvert(domain) new_o = JSONConvert(domain) cur_o.records = [cur_soa] new_o.records = [new_soa] cur_o.genData(False) new_o.genData(True) # Create new SOA record uri = 'https://' + server + '/zone/' + domain method = 'PUT' tonicDNSClient(uri, method, token, new_o.dict_records[0]) # Delete current SOA record why zone has only one SOA record. method = 'DELETE' uri = 'https://' + server + '/zone' tonicDNSClient(uri, method, token, cur_o.dict_records[0])
def createZoneRecords(server, token, domain, data, identifier): # ContentType: application/json # x-authentication-token: token method = 'PUT' uri = 'https://' + server + '/zone' for i, v in enumerate(data): if i == 0: from converter import JSONConvert o = JSONConvert(domain) zone = o.generateZone(domain, identifier, v) tonicDNSClient(uri, method, token, zone) else: # method: PUT uri = 'https://' + server + '/zone/' + domain tonicDNSClient(uri, method, token, v)
def delete(args): import processing if args.__dict__.get('domain'): domain = args.domain from converter import JSONConvert o = JSONConvert(domain) name, rtype, content, ttl, priority = args.name, args.rtype, \ args.content, args.ttl, args.priority record_dict = o.setRecord(name, rtype, content, ttl, priority) json = setJSON(domain, False, record=record_dict) else: domain = checkInfile(args.infile) json = setJSON(domain, False, filename=args.infile) password = getPassword(args) t = token(args.username, password, args.server) processing.deleteRecords(args.server, t, json)
def tonicDNSClient(uri, method, token, data, keyword='', domain=''): import sys import json if sys.version_info > (2, 6) and sys.version_info < (2, 8): import urllib2 as urllib elif sys.version_info > (3, 0): import urllib.request as urllib encoded = json.JSONEncoder(object).encode(data) obj = urllib.build_opener(urllib.HTTPHandler) req = urllib.Request(uri, data=encoded.encode('utf-8')) req.add_header('x-authentication-token', token) # When encoded(=data) is False, retrieve data as GET method. if encoded: req.add_header('Content-Type', 'application/json') req.get_method = lambda: method try: res = obj.open(req) except urllib.HTTPError as e: sys.stderr.write("ERROR: %s\n" % e) exit(1) # response body if method == 'GET': data = res.read() datas = json.loads(data.decode('utf-8')) # filtering with keyword if keyword == 'serial': from converter import JSONConvert record = searchRecord(datas, 'SOA')[0] # if SOA record, remove priority unnecessary del record['priority'] # override ttl record['ttl'] = int(record['ttl']) c = JSONConvert(domain) new_record = c.getSOA(record) return record, new_record # '--search' option of 'get' subcommand elif keyword: records = searchRecord(datas, keyword) datas.update({"records": records}) # 'tmpl_get' subcommand if uri.split('/')[3] == 'template': # when specify template identfier if len(uri.split('/')) == 5: formattedPrint(datas) # when get all templates else: for data in datas: formattedPrint(data) # 'get' subcommand else: formattedPrint(datas) # response non JSON data else: data = res.read() print(data)