Improve address normalization in connection manager

This commit is contained in:
Odd Stråbø 2019-09-28 22:31:43 +02:00
parent 94b8fe85dc
commit 0f81a080a8

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):