def test_get_ip(self): ip = utils.get_ip() self.assertTrue(re.match(VALID_IP_REGEX, ip), "get_ip() failed.") # monkey patch for testing (forcing ConnectionError) utils.HTTPBIN_URL = "http://example.nothing" ip = utils.get_ip() self.assertTrue(ip is None, "get_ip() should return None. IP=%s" % ip)
def execute_update(args): """Execute the update based on command line args and returns a dictionary with 'execution result, ''response code', 'response info' and 'process friendly message'. """ provider_class = getattr(dnsupdater, dnsupdater.AVAILABLE_PLUGINS.get(args.provider)) updater_options = {} process_message = None auth = None if args.store: # --store argument if provider_class.auth_type == 'T': user_arg = args.usertoken or utils.read_input( "Paste your auth token: ") auth = authinfo.ApiAuth(usertoken=user_arg) else: user_arg = args.usertoken or utils.read_input( "Type your username: "******"Type your password: "******"Auth info stored." else: update_ddns = True # informations arguments elif args.usertoken and args.hostname: if provider_class.auth_type == 'T': auth = authinfo.ApiAuth(args.usertoken) else: auth = authinfo.ApiAuth(args.usertoken, args.password) update_ddns = True exec_result = EXECUTION_RESULT_OK elif args.hostname: if authinfo.exists(args.provider, args.config): auth = authinfo.load(args.provider, args.config) update_ddns = True exec_result = EXECUTION_RESULT_OK else: update_ddns = False exec_result = EXECUTION_RESULT_NOK process_message = "No stored auth information found for " \ "provider: '%s'" % args.provider else: # no arguments update_ddns = False exec_result = EXECUTION_RESULT_NOK process_message = "Warning: The hostname to be updated must be " \ "provided.\nUsertoken and password can be either " \ "provided via command line or stored with --store " \ "option.\nExecute noipy --help for more details." if update_ddns and args.provider == 'generic': if args.url: if not URL_RE.match(args.url): process_message = "Malformed URL." exec_result = EXECUTION_RESULT_NOK update_ddns = False else: updater_options['url'] = args.url else: process_message = "Must use --url if --provider is 'generic' " \ "(default)" exec_result = EXECUTION_RESULT_NOK update_ddns = False response_code = None response_text = None if update_ddns: ip_address = args.ip if args.ip else utils.get_ip() if not ip_address: process_message = "Unable to get IP address. Check connection." exec_result = EXECUTION_RESULT_NOK elif ip_address == utils.get_dns_ip(args.hostname): process_message = "No update required." else: updater = provider_class(auth, args.hostname, updater_options) print("Updating hostname '%s' with IP address %s " "[provider: '%s']..." % (args.hostname, ip_address, args.provider)) response_code, response_text = updater.update_dns(ip_address) process_message = updater.status_message proc_result = { 'exec_result': exec_result, 'response_code': response_code, 'response_text': response_text, 'process_message': process_message, } return proc_result
def execute_update(args): """Execute the update based on command line args and returns a tuple with Exit Code and the processing Status Massage """ provider_class = getattr(dnsupdater, dnsupdater.AVAILABLE_PLUGINS.get(args.provider)) updater_options = {} process_message = None exec_result = EXECUTION_RESULT_NOK update_ddns = False if args.store: # --store argument if args.usertoken: if args.password: auth = authinfo.ApiAuth(args.usertoken, args.password) else: auth = authinfo.ApiAuth(args.usertoken) else: if provider_class.auth_type == "T": token = utils.get_input("Paste your auth token: ") auth = authinfo.ApiAuth(usertoken=token) else: username = utils.get_input("Type your username: "******"Type your password: "******"Auth info stored." else: update_ddns = True # informations arguments elif args.usertoken and args.hostname: if args.password: auth = authinfo.ApiAuth(args.usertoken, args.password) elif provider_class.auth_type == "T": auth = authinfo.ApiAuth(args.usertoken) update_ddns = True exec_result = EXECUTION_RESULT_OK elif args.hostname: if authinfo.exists(args.provider, args.config): auth = authinfo.load(args.provider, args.config) update_ddns = True exec_result = EXECUTION_RESULT_OK else: update_ddns = False exec_result = EXECUTION_RESULT_NOK process_message = "No stored auth information found for " "provider: '%s'" % args.provider else: # no arguments update_ddns = False exec_result = EXECUTION_RESULT_NOK process_message = ( "Warning: The hostname to be updated must be " "provided.\nUsertoken and password can be either " "provided via command line or stored with --store " "option.\nExecute noipy --help for more details." ) if update_ddns and args.provider == "generic": if args.url: if not URL_RE.match(args.url): process_message = "Malformed URL." exec_result = EXECUTION_RESULT_NOK update_ddns = False else: updater_options["url"] = args.url else: process_message = "Must use --url if --provider is 'generic' " "(default)" exec_result = EXECUTION_RESULT_NOK update_ddns = False if update_ddns: ip_address = args.ip if args.ip else utils.get_ip() if not ip_address: process_message = "Unable to get IP address. Check connection." exec_result = False elif ip_address == utils.get_dns_ip(args.hostname): process_message = "No update required." else: updater = provider_class(auth, args.hostname, updater_options) print( "Updating hostname '%s' with IP address %s " "[provider: '%s']..." % (args.hostname, ip_address, args.provider) ) updater.update_dns(ip_address) process_message = updater.status_message return exec_result, process_message
def test_get_ip(self): ip = utils.get_ip() self.assertTrue(re.match(VALID_IP_REGEX, ip), "get_ip() failed.")