Skip to content

Commit fcecc30

Browse files
shekhar-kambleOmer Katz
authored andcommitted
sanitise url when include_password is false (fixes celery#1085) (celery#1095)
* sanitise url when include_password is false (fixes celery#1085) * fix flake8 error
1 parent 2f6f5f6 commit fcecc30

File tree

2 files changed

+17
-4
lines changed

2 files changed

+17
-4
lines changed

kombu/connection.py

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@
3131
from .utils.collections import HashedSeq
3232
from .utils.functional import dictfilter, lazy, retry_over_time, shufflecycle
3333
from .utils.objects import cached_property
34-
from .utils.url import as_url, parse_url, quote, urlparse
34+
from .utils.url import as_url, parse_url, quote, urlparse, maybe_sanitize_url
3535

3636
__all__ = ('Connection', 'ConnectionPool', 'ChannelPool')
3737

@@ -656,11 +656,17 @@ def as_uri(self, include_password=False, mask='**',
656656
"""Convert connection parameters to URL form."""
657657
hostname = self.hostname or 'localhost'
658658
if self.transport.can_parse_url:
659+
connection_as_uri = self.hostname
659660
if self.uri_prefix:
660-
return '%s+%s' % (self.uri_prefix, hostname)
661-
return self.hostname
661+
connection_as_uri = '%s+%s' % (self.uri_prefix, hostname)
662+
if not include_password:
663+
connection_as_uri = maybe_sanitize_url(connection_as_uri)
664+
return connection_as_uri
662665
if self.uri_prefix:
663-
return '%s+%s' % (self.uri_prefix, hostname)
666+
connection_as_uri = '%s+%s' % (self.uri_prefix, hostname)
667+
if not include_password:
668+
connection_as_uri = maybe_sanitize_url(connection_as_uri)
669+
return connection_as_uri
664670
fields = self.info()
665671
port, userid, password, vhost, transport = getfields(fields)
666672

t/unit/test_connection.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,8 @@ def setup(self):
3030
'port': 5672,
3131
'virtual_host': 'my/vhost',
3232
}
33+
self.pg_url = 'sqla+postgresql://test:password@yms-pg/yms'
34+
self.pg_nopass = 'sqla+postgresql://test:**@yms-pg/yms'
3335

3436
def test_parse_url(self):
3537
result = parse_url(self.url)
@@ -115,6 +117,11 @@ def test_connection_copy(self):
115117
clone = deepcopy(conn)
116118
assert clone.alt == ['amqp://host']
117119

120+
def test_parse_generated_as_uri_pg(self):
121+
conn = Connection(self.pg_url)
122+
assert conn.as_uri() == self.pg_nopass
123+
assert conn.as_uri(include_password=True) == self.pg_url
124+
118125

119126
class test_Connection:
120127

0 commit comments

Comments
 (0)