Ejemplo n.º 1
0
def test_can_update_dns_record():
    global client
    if client is None:
        client = GoDaddyClient()
    domain = account['test_domain']
    prefix = 'test{}'.format(random.randint(10000, 99999))
    addr = '{}.{}.{}.{}'.format(random.randint(10, 20), random.randint(10, 20),
                                random.randint(10, 20), random.randint(10, 20))
    addr2 = '{}.{}.{}.{}'.format(random.randint(20, 30), random.randint(20, 30), \
                                random.randint(20, 30), random.randint(20, 30))
    # can create new record
    assert client.update_dns_record(prefix+'.'+domain, addr), 'Create DNS Failed'
    for record in client.find_dns_records(domain):
        if record.hostname == prefix:
            assert record.value == addr, 'DNS Record Doesnot Match Addr {}'.format(addr)
            break
    else:
        raise ValueError('DNS Record Cannot Created')

    # can update previous record
    assert client.update_dns_record(prefix+'.'+domain, addr2), 'Update DNS Failed'
    for record in client.find_dns_records(domain):
        if record.hostname == prefix:
            assert record.value == addr2, 'DNS Record Doesnot Match Addr2 {}'.format(addr2)
            break

    # can delete dns record
    assert client.delete_dns_record(prefix+'.'+domain), 'Delete DNS Failed'
    for record in client.find_dns_records(domain):
        if record.hostname == prefix:
            raise ValueError('DNS Record still exists')
Ejemplo n.º 2
0
def test_can_update_dns_record():
    global client
    if client is None:
        client = GoDaddyClient()
    domain = account['test_domain']
    prefix = 'test{}'.format(random.randint(10000, 99999))
    addr = '{}.{}.{}.{}'.format(random.randint(10, 20), random.randint(10, 20),
                                random.randint(10, 20), random.randint(10, 20))
    addr2 = '{}.{}.{}.{}'.format(random.randint(20, 30), random.randint(20, 30), \
                                random.randint(20, 30), random.randint(20, 30))
    # can create new record
    assert client.update_dns_record(prefix + '.' + domain,
                                    addr), 'Create DNS Failed'
    for record in client.find_dns_records(domain):
        if record.hostname == prefix:
            assert record.value == addr, 'DNS Record Doesnot Match Addr {}'.format(
                addr)
            break
    else:
        raise ValueError('DNS Record Cannot Created')

    # can update previous record
    assert client.update_dns_record(prefix + '.' + domain,
                                    addr2), 'Update DNS Failed'
    for record in client.find_dns_records(domain):
        if record.hostname == prefix:
            assert record.value == addr2, 'DNS Record Doesnot Match Addr2 {}'.format(
                addr2)
            break

    # can delete dns record
    assert client.delete_dns_record(prefix + '.' + domain), 'Delete DNS Failed'
    for record in client.find_dns_records(domain):
        if record.hostname == prefix:
            raise ValueError('DNS Record still exists')
Ejemplo n.º 3
0
class GodaddyDnsUpdater:
    @property
    def __publicip(self):
        return get('https://api.ipify.org').text

    @property
    def __isfullymanaged(self):
        if self.__configparser.get('global', 'fully_managed').lower() == 'yes':
            return True
        else:
            return False

    @property
    def __usetls(self):
        if self.__configparser.get('global', 'smtp_tls').lower() == 'yes':
            return True
        else:
            return False

    def __init__(self, configfile):

        self.__godaddyclient = GoDaddyClient()

        # read config
        self.__configparser = ConfigParser()
        self.__configparser.read(configfile)
        self.__updatemessage = ''
        self.__username = self.__configparser.get('global', 'username')
        self.__password = self.__configparser.get('global', 'password')
        self.__logfile = self.__configparser.get('global', 'logfile')
        self.__changedetected = False
        self.__domains = []
        for section in self.__configparser.sections():
            if section != 'global':
                self.__domains.append(section)

        # mail config
        self.__mailnotifyenabled = self.__configparser.get('global', 'mail_notify_enabled')
        self.__mailreceiver = self.__configparser.get('global', 'mail_receiver')
        self.__mailsender = self.__configparser.get('global', 'mail_sender')
        self.__mailuser = self.__configparser.get('global', 'smtp_user')
        self.__mailpassword = self.__configparser.get('global', 'smtp_password')
        self.__smtphost = self.__configparser.get('global', 'smtp_host')
        self.__smtpport = self.__configparser.get('global', 'smtp_port')

    def updatedns(self):
        self.__login()
        for domain in self.__domains:
            self.__update(domain)
        if self.__mailnotifyenabled and self.__changedetected:
            self.__mailnotify(self.__updatemessage)

    def __update(self, domain):
        hostnames = [hostname.strip() for hostname in self.__configparser.get(domain, 'hostnames').split(',')]
        godaddyhostnames = [host[1] for host in self.__godaddyclient.find_dns_records(domain)]

        # update listed hostnames
        for hostname in hostnames:
            if hostname in godaddyhostnames:
                if self.__godaddyclient.update_dns_record(hostname + '.' + domain, self.__publicip):
                    print(hostname + '.' + domain + ' updated.')
                    self.__changedetected = True
                    self.__updatemessage = self.__updatemessage + hostname + '.' + domain + ' updated. \n'
            else:
                if self.__isfullymanaged:
                    if self.__godaddyclient.update_dns_record(hostname + '.' + domain, self.__publicip):
                        print(hostname + '.' + domain + ' added.')
                        self.__changedetected = True
                        self.__updatemessage = self.__updatemessage + hostname + '.' + domain + ' added. \n'

        # delete not listed hostnames
        godaddyhostnames = [host[1] for host in self.__godaddyclient.find_dns_records(domain)]
        if self.__isfullymanaged:
            for godaddyhostname in godaddyhostnames:
                if godaddyhostname not in hostnames:
                    if self.__godaddyclient.delete_dns_record(godaddyhostname + '.' + domain):
                        print(godaddyhostname + '.' + domain + ' deleted.')
                        self.__changedetected = True
                        self.__updatemessage = self.__updatemessage + godaddyhostname + '.' + domain + ' deleted. \n'

    def __login(self):
        if not self.__godaddyclient.is_loggedin():
            self.__godaddyclient.login(self.__username, self.__password)

    def __mailnotify(self, message):
        smtpserver = SMTP(self.__smtphost, self.__smtpport)
        header = 'To:' + self.__mailreceiver + '\n' + 'From: ' + self.__mailsender + '\n' + 'Subject:Godaddy dns updater \n'
        msg = header + '\n' + 'Public ip: ' + self.__publicip + '\n\n' + message + '\n\n'
        try:
            if self.__usetls:
                smtpserver.starttls()
            smtpserver.login(self.__mailuser, self.__mailpassword)
            smtpserver.sendmail(self.__mailsender, self.__mailreceiver, msg)
            print('mail notify sent.')
        except:
            print('mail notify failed service failed!')
        finally:
            smtpserver.close()