Merge "Use urllib to correctly escape URLs for Zaqar queues"

This commit is contained in:
Jenkins 2017-01-05 08:15:57 +00:00 committed by Gerrit Code Review
commit ff26784a4e
2 changed files with 26 additions and 11 deletions

View File

@ -20,6 +20,8 @@ from heat.engine import properties
from heat.engine import resource
from heat.engine import support
from six.moves.urllib import parse as urlparse
class ZaqarQueue(resource.Resource):
"""A resource for managing Zaqar queues.
@ -113,7 +115,7 @@ class ZaqarQueue(resource.Resource):
queue_name = self.physical_resource_name()
return '%s/v%s/queues/%s' % (client.api_url.rstrip('/'),
client.api_version,
queue_name)
urlparse.quote(queue_name))
def _resolve_attribute(self, name):
if name == self.QUEUE_ID:
@ -228,11 +230,15 @@ class ZaqarSignedQueueURL(resource.Resource):
"""
paths = jsonutils.loads(data[self.PATHS_ATTR])
methods = jsonutils.loads(data[self.METHODS_ATTR])
return ('signature={0}&expires={1}&paths={2}'
'&methods={3}&project_id={4}&queue_name={5}'.format(
data[self.SIGNATURE], data[self.EXPIRES],
','.join(paths), ','.join(methods),
data[self.PROJECT], self.properties[self.QUEUE]))
query = {
'signature': data[self.SIGNATURE],
'expires': data[self.EXPIRES],
'paths': ','.join(paths),
'methods': ','.join(methods),
'project_id': data[self.PROJECT],
'queue_name': self.properties[self.QUEUE],
}
return urlparse.urlencode(query)
def handle_delete(self):
# We can't delete a signed URL

View File

@ -14,6 +14,8 @@
import mock
import six
from six.moves.urllib import parse as urlparse
from heat.common import template_format
from heat.engine.clients import client_plugin
from heat.engine import resource
@ -350,8 +352,15 @@ resources:
self.assertEqual(['/v2/foo/messages', '/v2/foo/sub'],
self.rsrc.FnGetAtt('paths'))
self.assertEqual(['DELETE', 'POST'], self.rsrc.FnGetAtt('methods'))
self.assertEqual(
'signature=secret&expires=2020-01-01'
'&paths=/v2/foo/messages,/v2/foo/sub&methods=DELETE,POST'
'&project_id=project_id&queue_name=foo',
self.rsrc.get_attribute('query_str'))
expected_query = {
'queue_name': ['foo'],
'expires': ['2020-01-01'],
'signature': ['secret'],
'project_id': ['project_id'],
'paths': ['/v2/foo/messages,/v2/foo/sub'],
'methods': ['DELETE,POST']
}
query_str_attr = self.rsrc.get_attribute('query_str')
self.assertEqual(expected_query,
urlparse.parse_qs(query_str_attr,
strict_parsing=True))