Modify according to review feedback.

This commit is contained in:
Aaron Tan
2017-03-20 14:27:02 -04:00
parent f69c2569d6
commit 07e7e4cfd0
2 changed files with 27 additions and 14 deletions

View File

@@ -107,7 +107,17 @@ def test_https_logging_handler_splunk_auth_info():
('http://localhost', None, 'http://localhost'), ('http://localhost', None, 'http://localhost'),
('http://localhost', 80, 'http://localhost'), ('http://localhost', 80, 'http://localhost'),
('http://localhost', 8080, 'http://localhost:8080'), ('http://localhost', 8080, 'http://localhost:8080'),
('https://localhost', 443, 'https://localhost:443') ('https://localhost', 443, 'https://localhost:443'),
('ftp://localhost', 443, 'ftp://localhost:443'),
('https://localhost:550', 443, 'https://localhost:550'),
('https://localhost:yoho/foobar', 443, 'https://localhost:443/foobar'),
('https://localhost:yoho/foobar', None, 'https://localhost:yoho/foobar'),
('http://splunk.server:8088/services/collector/event', 80,
'http://splunk.server:8088/services/collector/event'),
('http://splunk.server/services/collector/event', 80,
'http://splunk.server/services/collector/event'),
('http://splunk.server/services/collector/event', 8088,
'http://splunk.server:8088/services/collector/event'),
]) ])
def test_https_logging_handler_http_host_format(host, port, normalized): def test_https_logging_handler_http_host_format(host, port, normalized):
handler = HTTPSHandler(host=host, port=port) handler = HTTPSHandler(host=host, port=port)

View File

@@ -6,7 +6,7 @@ import logging
import json import json
import requests import requests
import time import time
import re import urlparse
from concurrent.futures import ThreadPoolExecutor from concurrent.futures import ThreadPoolExecutor
from copy import copy from copy import copy
@@ -119,18 +119,21 @@ class BaseHTTPSHandler(logging.Handler):
def get_http_host(self): def get_http_host(self):
host = self.host or '' host = self.host or ''
# Force using http(s) protocol # urlparse requires scheme to be provided, default to use http if
if re.match(r'https?://', host) is None: # missing
if re.match(r'[a-zA-Z]+://', host) is None: if not urlparse.urlsplit(host).scheme:
host = 'http://%s' % self.host host = 'http://%s' % host
else: parsed = urlparse.urlsplit(host)
host = re.sub(r'[a-zA-Z]+://', r'http://', host, count=1) # Insert self.port if its special and port number is either not
# Insert self.port if its special and port number not given in host # given in host or given as non-numerical
if (self.port != 80 and self.port is not None and try:
re.match(r'https?://[^:/]+:[0-9]+', host) is None): port = parsed.port or self.port
host = re.sub(r'https?://[^/]+', except ValueError:
lambda m: '%s:%s' % (m.group(0), str(self.port), port = self.port
host, count=1) if port not in (80, None):
new_netloc = '%s:%s' % (parsed.hostname, port)
return urlparse.urlunsplit((parsed.scheme, new_netloc, parsed.path,
parsed.query, parsed.fragment))
return host return host
def get_post_kwargs(self, payload_input): def get_post_kwargs(self, payload_input):