Merge pull request #94 from oddstr13/pr-address-normalize-1

Improve address normalization in connection manager
This commit is contained in:
Odd Stråbø 2019-09-28 23:41:39 +02:00 committed by GitHub
commit ad14005f24
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -4,12 +4,13 @@
import json import json
import logging import logging
import hashlib
import socket import socket
import time import time
from datetime import datetime from datetime import datetime
from distutils.version import LooseVersion from distutils.version import LooseVersion
import urllib3
from credentials import Credentials from credentials import Credentials
from http import HTTP from http import HTTP
@ -109,7 +110,7 @@ class ConnectionManager(object):
if not server: if not server:
raise AttributeError("server cannot be empty") raise AttributeError("server cannot be empty")
try: try:
request = { request = {
'type': "POST", 'type': "POST",
@ -134,6 +135,8 @@ class ConnectionManager(object):
if not address: if not address:
return False return False
address = self._normalize_address(address)
def _on_fail(): def _on_fail():
LOG.error("connectToAddress %s failed", address) LOG.error("connectToAddress %s failed", address)
return self._resolve_failure() return self._resolve_failure()
@ -470,13 +473,18 @@ class ConnectionManager(object):
def _normalize_address(self, address): def _normalize_address(self, address):
# Attempt to correct bad input # Attempt to correct bad input
address = address.strip() url = urllib3.util.parse_url(address.strip())
address = address.lower()
if 'http' not in address: if url.scheme is None:
address = "http://%s" % address url = url._replace(scheme='http')
return address if url.scheme == 'http' and url.port == 80:
url = url._replace(port=None)
if url.scheme == 'https' and url.port == 443:
url = url._replace(port=None)
return url.url
def _save_user_info_into_credentials(self, server, user): def _save_user_info_into_credentials(self, server, user):