diff options
-rw-r--r-- | changes/bug-4592_Support-non-ascii-characters-in-a-provider-name | 1 | ||||
-rw-r--r-- | src/leap/bitmask/provider/providerbootstrapper.py | 32 |
2 files changed, 16 insertions, 17 deletions
diff --git a/changes/bug-4592_Support-non-ascii-characters-in-a-provider-name b/changes/bug-4592_Support-non-ascii-characters-in-a-provider-name new file mode 100644 index 00000000..b27d3dc4 --- /dev/null +++ b/changes/bug-4592_Support-non-ascii-characters-in-a-provider-name @@ -0,0 +1 @@ +- Support non-ascii characters in a provider name. Closes #4952. diff --git a/src/leap/bitmask/provider/providerbootstrapper.py b/src/leap/bitmask/provider/providerbootstrapper.py index 2adf8aa8..f5a2003f 100644 --- a/src/leap/bitmask/provider/providerbootstrapper.py +++ b/src/leap/bitmask/provider/providerbootstrapper.py @@ -105,13 +105,13 @@ class ProviderBootstrapper(AbstractBootstrapper): Checks that the name resolution for the provider name works """ leap_assert(self._domain, "Cannot check DNS without a domain") - logger.debug("Checking name resolution for %s" % (self._domain)) + logger.debug("Checking name resolution for %r" % (self._domain)) # We don't skip this check, since it's basic for the whole # system to work # err --- but we can do it after a failure, to diagnose what went # wrong. Right now we're just adding connection overhead. -- kali - socket.gethostbyname(self._domain) + socket.gethostbyname(self._domain.encode('idna')) def _check_https(self, *args): """ @@ -119,7 +119,7 @@ class ProviderBootstrapper(AbstractBootstrapper): checks out """ leap_assert(self._domain, "Cannot check HTTPS without a domain") - logger.debug("Checking https for %s" % (self._domain)) + logger.debug("Checking https for %r" % (self._domain)) # We don't skip this check, since it's basic for the whole # system to work. @@ -131,8 +131,8 @@ class ProviderBootstrapper(AbstractBootstrapper): verify = self.verify.encode(sys.getfilesystemencoding()) try: - res = self._session.get("https://%s" % (self._domain,), - verify=verify, + uri = "https://{0}".format(self._domain.encode('idna')) + res = self._session.get(uri, verify=verify, timeout=REQUEST_TIMEOUT) res.raise_for_status() except requests.exceptions.SSLError as exc: @@ -154,17 +154,17 @@ class ProviderBootstrapper(AbstractBootstrapper): """ leap_assert(self._domain, "Cannot download provider info without a domain") - logger.debug("Downloading provider info for %s" % (self._domain)) + logger.debug("Downloading provider info for %r" % (self._domain)) # -------------------------------------------------------------- # TODO factor out with the download routines in services. # Watch out! We're handling the verify paramenter differently here. headers = {} + domain = self._domain.encode(sys.getfilesystemencoding()) provider_json = os.path.join(util.get_path_prefix(), - "leap", - "providers", - self._domain, "provider.json") + "leap", "providers", domain, + "provider.json") mtime = get_mtime(provider_json) if self._download_if_needed and mtime: @@ -190,7 +190,7 @@ class ProviderBootstrapper(AbstractBootstrapper): logger.debug("Requesting for provider.json... " "uri: {0}, verify: {1}, headers: {2}".format( uri, verify, headers)) - res = self._session.get(uri, verify=verify, + res = self._session.get(uri.encode('idna'), verify=verify, headers=headers, timeout=REQUEST_TIMEOUT) res.raise_for_status() logger.debug("Request status code: {0}".format(res.status_code)) @@ -206,10 +206,8 @@ class ProviderBootstrapper(AbstractBootstrapper): provider_config = ProviderConfig() provider_config.load(data=provider_definition, mtime=mtime) - provider_config.save(["leap", - "providers", - self._domain, - "provider.json"]) + provider_config.save(["leap", "providers", + domain, "provider.json"]) api_version = provider_config.get_api_version() if SupportedAPIs.supports(api_version): @@ -228,7 +226,7 @@ class ProviderBootstrapper(AbstractBootstrapper): Populates the check queue. :param domain: domain to check - :type domain: str + :type domain: unicode :param download_if_needed: if True, makes the checks do not overwrite already downloaded data @@ -271,7 +269,7 @@ class ProviderBootstrapper(AbstractBootstrapper): leap_assert(self._provider_config, "Cannot download the ca cert " "without a provider config!") - logger.debug("Downloading ca cert for %s at %s" % + logger.debug("Downloading ca cert for %r at %r" % (self._domain, self._provider_config.get_ca_cert_uri())) if not self._should_proceed_cert(): @@ -302,7 +300,7 @@ class ProviderBootstrapper(AbstractBootstrapper): leap_assert(self._provider_config, "Cannot check the ca cert " "without a provider config!") - logger.debug("Checking ca fingerprint for %s and cert %s" % + logger.debug("Checking ca fingerprint for %r and cert %r" % (self._domain, self._provider_config.get_ca_cert_path())) |