diff --git a/sphinx/ext/intersphinx.py b/sphinx/ext/intersphinx.py index 6c7b4aa11..4433f61ff 100644 --- a/sphinx/ext/intersphinx.py +++ b/sphinx/ext/intersphinx.py @@ -135,27 +135,14 @@ def _strip_basic_auth(url): :param url: url which may or may not contain basic auth credentials :type url: ``str`` - :return: 3-``tuple`` of: - - * (``str``) -- *url* with any basic auth creds removed - * (``str`` or ``NoneType``) -- basic auth username or ``None`` if basic - auth username not given - * (``str`` or ``NoneType``) -- basic auth password or ``None`` if basic - auth password not given - - :rtype: ``tuple`` + :return: *url* with any basic auth creds removed + :rtype: ``str`` """ - url_parts = urlsplit(url) - username = url_parts.username - password = url_parts.password - frags = list(url_parts) + frags = list(urlsplit(url)) # swap out "user[:pass]@hostname" for "hostname" - if url_parts.port: - frags[1] = "%s:%s" % (url_parts.hostname, url_parts.port) - else: - frags[1] = url_parts.hostname - url = urlunsplit(frags) - return (url, username, password) + if '@' in frags[1]: + frags[1] = frags[1].split('@')[1] + return urlunsplit(frags) def _read_from_url(url): @@ -212,7 +199,7 @@ def fetch_inventory(app, uri, inv): localuri = '://' not in uri if not localuri: # case: inv URI points to remote resource; strip any existing auth - uri, _, _ = _strip_basic_auth(uri) + uri = _strip_basic_auth(uri) try: if '://' in inv: f = _read_from_url(inv) diff --git a/tests/test_ext_intersphinx.py b/tests/test_ext_intersphinx.py index 64cc03d75..0a6be0a5b 100644 --- a/tests/test_ext_intersphinx.py +++ b/tests/test_ext_intersphinx.py @@ -230,29 +230,23 @@ class TestStripBasicAuth(unittest.TestCase): """basic auth creds stripped from URL containing creds""" url = 'https://user:12345@domain.com/project/objects.inv' expected = 'https://domain.com/project/objects.inv' - actual_url, actual_username, actual_password = _strip_basic_auth(url) - self.assertEqual(expected, actual_url) - self.assertEqual('user', actual_username) - self.assertEqual('12345', actual_password) + actual = _strip_basic_auth(url) + self.assertEqual(expected, actual) def test_no_auth(self): """url unchanged if param doesn't contain basic auth creds""" url = 'https://domain.com/project/objects.inv' expected = 'https://domain.com/project/objects.inv' - actual_url, actual_username, actual_password = _strip_basic_auth(url) - self.assertEqual(expected, actual_url) - self.assertEqual(None, actual_username) - self.assertEqual(None, actual_password) + actual = _strip_basic_auth(url) + self.assertEqual(expected, actual) def test_having_port(self): """basic auth creds correctly stripped from URL containing creds even if URL contains port""" url = 'https://user:12345@domain.com:8080/project/objects.inv' expected = 'https://domain.com:8080/project/objects.inv' - actual_url, actual_username, actual_password = _strip_basic_auth(url) - self.assertEqual(expected, actual_url) - self.assertEqual('user', actual_username) - self.assertEqual('12345', actual_password) + actual = _strip_basic_auth(url) + self.assertEqual(expected, actual) def test_getsafeurl_authed():