Handle multiple content-types into one header field

HTTP specification states that multiple values for one header can be
passed if separated by commas. rOCCI uses that for the content type,
therefore we must support it.

Change-Id: Ib02e6659e112ee9fb90da986339f2f749f0dbc87
Closes-Bug: 1507925
This commit is contained in:
Alvaro Lopez Garcia 2015-10-20 10:18:06 +02:00
parent 02a99bc5cd
commit 64688e792a
2 changed files with 28 additions and 4 deletions

View File

@ -113,6 +113,27 @@ class TestMiddleware(base.TestCase):
result = req.get_response(self.app)
self.assertEqual(406, result.status_code)
def test_various_content_type_post(self):
req = webob.Request.blank("/foos",
method="POST",
content_type="text/occi,text/plain")
result = req.get_response(self.app)
self.assertEqual(501, result.status_code)
def test_various_one_bad_content_type_post(self):
req = webob.Request.blank("/foos",
method="POST",
content_type="text/bazonk,text/plain")
result = req.get_response(self.app)
self.assertEqual(501, result.status_code)
def test_various_bad_content_types_post(self):
req = webob.Request.blank("/foos",
method="POST",
content_type="text/bazonk,text/foobar")
result = req.get_response(self.app)
self.assertEqual(406, result.status_code)
def test_bad_content_type_post(self):
req = webob.Request.blank("/foos",
method="POST",

View File

@ -48,11 +48,14 @@ class Request(webob.Request):
if not self.should_have_body():
return None
if self.content_type not in parsers.get_supported_content_types():
LOG.debug("Unrecognized Content-Type provided in request")
raise exception.InvalidContentType(content_type=self.content_type)
content_types = self.content_type.split(",")
return self.content_type
for ct in content_types:
if ct in parsers.get_supported_content_types():
return ct
LOG.debug("Unrecognized Content-Type provided in request")
raise exception.InvalidContentType(content_type=self.content_type)
def get_best_match_content_type(self, default_match=None):
content_types = serializers.get_supported_content_types()