Merge "Use urllib to correctly escape URLs for Zaqar queues"
This commit is contained in:
commit
ff26784a4e
@ -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
|
||||
|
@ -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))
|
||||
|
Loading…
x
Reference in New Issue
Block a user