示例#1
0
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)
示例#2
0
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)
示例#3
0
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)
示例#4
0
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])
示例#5
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)
示例#6
0
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)
示例#7
0
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)