#!/usr/bin/env python
# -*- encoding: UTF8 -*-
# author: Pascal Gollor (https://gitbucket.pgollor.de)
# author: InterNetworX, info →AT→ inwx.de
from inwx.inwx import domrobot#, prettyprint
from inwx.configuration import get_account_data
import argparse
def main(args):
verbose = args.verbose
domain = args.domain
# split domain
h = domain.split('.')
if (len(h) != 3):
raise ValueError("invalid subdomain")
# end if
sub = h[0]
domain = h[1] + '.' + h[2]
if (args.debug):
print(args)
# end if
api_url, username, password, shared_secret = get_account_data(True, config_file=args.config_file, config_section=args.config_section)
inwx_conn = domrobot(api_url, False)
ret = inwx_conn.account.login({'lang': args.language, 'user': username, 'pass': password})
if (verbose):
print("login: " + str(ret))
# end if
# check domain
ret = inwx_conn.nameserver.list({'domain': domain})
if (verbose):
print('list: ' + str(ret))
# end if
if (ret['resData']['count'] == 0):
raise RuntimeError("You are not user of this domain.")
# end if
# looking if subdomain exists
subId = -1
ret = inwx_conn.nameserver.info({'domain': domain})
records = ret['resData']['record']
for r in records:
if (r['name'] == args.domain):
subId = r['id']
if (verbose):
print(r)
# end if
break
# end if
# end for
if (verbose):
print('subdomain id: ' + str(subId))
# end if
if (args.delete):
if (subId >= 0):
if (verbose):
print ("delete id: " + str(subId))
# end if
ret = inwx_conn.nameserver.deleteRecord({'id': subId})
else:
ret = None
# end if
else:
if (subId < 0):
ret = inwx_conn.nameserver.createRecord({'domain': domain, 'name': sub, 'type': args.record_type, 'content': str(args.content), 'ttl': args.ttl})
else:
ret = inwx_conn.nameserver.updateRecord({'id': subId, 'type': args.record_type, 'content': str(args.content), 'ttl': args.ttl})
# end if
# end if
if (verbose):
print('update/create: ' + str(ret))
# end if
# end main
if __name__ == '__main__':
parser = argparse.ArgumentParser(description='inwx subdomain update')
parser.add_argument('domain', metavar='domain', help='full domain like subdomain.example.com')
parser.add_argument('content', metavar='content', nargs='?', default=None, help='ip or string to fill into sub domain entry')
parser.add_argument('-r', '--record-type', metavar='type', required=True, choices=['A', 'AAAA', 'TXT', 'CNAME', 'TLSA'], help='record type (A, AAAA, TXT, CNAME, TLSA)')
parser.add_argument('--delete', action='store_true', required=False, help='delete existing record')
parser.add_argument('-c', '--config_file', metavar='path', default='./conf.cfg', help='path to configuration file')
parser.add_argument('-t', '--ttl', default=3600, type=int, help='TTL (time to live) of the nameserver record in seconds (default 3600)')
parser.add_argument('-s', '--config_section', metavar='section', default='live', choices=['live', 'ote'], help='configuration section (live, ote) default: live')
parser.add_argument('-l', '--language', metavar='lang', default='en', choices=['de', 'en'], help='answer language (de, en)')
parser.add_argument('-v', '--verbose', action='store_true', help='verbose')
parser.add_argument('-d', '--debug', action='store_true', help='debug')
args = parser.parse_args()
# do some checks
if (not args.delete and not args.content):
raise ValueError("Missing content for domain entry.")
# end if
if (args.debug):
main(args)
else:
try:
main(args)
except NameError as e:
print(e.args[0])
# end try
# end if
# end if