[fix] correctly handle all cases

This commit is contained in:
Laurent Peuch 2016-10-30 05:19:15 +01:00
parent 39aaa17639
commit 7dbbd7fdc2

View file

@ -608,15 +608,24 @@ def _dns_ip_match_public_ip(public_ip, domain):
traceback.print_exc(file=sys.stdout) traceback.print_exc(file=sys.stdout)
raise MoulinetteError(errno.EINVAL, m18n.n('certmanager_error_contacting_dns_api', api="dns-api.org", reason=exception)) raise MoulinetteError(errno.EINVAL, m18n.n('certmanager_error_contacting_dns_api', api="dns-api.org", reason=exception))
dns_ip = result.json() try:
if not dns_ip or "value" not in dns_ip[0]: dns_ip = result.json()
except Exception as exception:
raise MoulinetteError(errno.EINVAL, m18n.n('certmanager_error_parsing_dns', domain=domain, value=result.text)) raise MoulinetteError(errno.EINVAL, m18n.n('certmanager_error_parsing_dns', domain=domain, value=result.text))
dns_ip = dns_ip[0]["value"] if len(dns_ip) == 0:
raise MoulinetteError(errno.EINVAL, m18n.n('certmanager_error_parsing_dns', domain=domain, value=result.text))
dns_ip = dns_ip[0]
if dns_ip.get("error") == "NXDOMAIN": if dns_ip.get("error") == "NXDOMAIN":
raise MoulinetteError(errno.EINVAL, m18n.n('certmanager_no_A_dns_record', domain=domain)) raise MoulinetteError(errno.EINVAL, m18n.n('certmanager_no_A_dns_record', domain=domain))
if "value" not in dns_ip:
raise MoulinetteError(errno.EINVAL, m18n.n('certmanager_error_parsing_dns', domain=domain, value=result.text))
dns_ip = dns_ip["value"]
if dns_ip == public_ip: if dns_ip == public_ip:
return True return True
else: else: