You've already forked certbot-dns-dnspod
Fix compatibility for lexicon 2.x and 3.x
This commit is contained in:
@@ -2,6 +2,8 @@
|
||||
import logging
|
||||
|
||||
import zope.interface
|
||||
|
||||
from requests.exceptions import HTTPError
|
||||
from lexicon.providers import dnspod
|
||||
|
||||
from certbot import errors
|
||||
@@ -75,6 +77,44 @@ class _DNSPodLexiconClient(dns_common_lexicon.LexiconClient):
|
||||
'ttl': ttl,
|
||||
})
|
||||
|
||||
def _find_domain_id(self, domain):
|
||||
"""
|
||||
Find the domain_id for a given domain.
|
||||
Rewrite certbot/plugins/dns_common_lexicon.py to ensure compatibility
|
||||
for Lexicon 2.x and 3.x
|
||||
|
||||
:param str domain: The domain for which to find the domain_id.
|
||||
:raises errors.PluginError: if the domain_id cannot be found.
|
||||
"""
|
||||
|
||||
domain_name_guesses = dns_common.base_domain_name_guesses(domain)
|
||||
|
||||
for domain_name in domain_name_guesses:
|
||||
try:
|
||||
if hasattr(self.provider, 'options'):
|
||||
# For Lexicon 2.x
|
||||
self.provider.options['domain'] = domain_name
|
||||
else:
|
||||
# For Lexicon 3.x
|
||||
self.provider.domain = domain_name
|
||||
|
||||
self.provider.authenticate()
|
||||
|
||||
return # If `authenticate` doesn't throw an exception, we've found the right name
|
||||
except HTTPError as e:
|
||||
result = self._handle_http_error(e, domain_name)
|
||||
|
||||
if result:
|
||||
raise result
|
||||
except Exception as e: # pylint: disable=broad-except
|
||||
result = self._handle_general_error(e, domain_name)
|
||||
|
||||
if result:
|
||||
raise result
|
||||
|
||||
raise errors.PluginError('Unable to determine zone identifier for {0} using zone names: {1}'
|
||||
.format(domain, domain_name_guesses))
|
||||
|
||||
def _handle_http_error(self, e, domain_name):
|
||||
hint = None
|
||||
if str(e).startswith('400 Client Error:'):
|
||||
|
||||
Reference in New Issue
Block a user