Don't check for project-id if accessing the / route

The versions route (or / route) should be publicly accessible and is
used for keystone discovery. We shouldn't be checking for the
project-id if that's accessed. On the other hand, this also fixes the
issue where the server crashes if no version is given.

Change-Id: I0481ef6f3920c8ee56ea79ed5621206246b26299
Closes-Bug: #1609662
This commit is contained in:
Juan Antonio Osorio Robles 2016-08-04 10:20:35 +03:00
parent 77d0567dc5
commit cf6210df07
2 changed files with 42 additions and 1 deletions

View File

@ -91,14 +91,19 @@ def extract_project_id(req, resp, params):
:type params: dict
:rtype: None
"""
api_version_string = req.path.split('/')[1]
params['project_id'] = req.get_header('X-PROJECT-ID')
if not api_version_string:
# NOTE(jaosorior): The versions resource is public and shouldn't need
# a check for the project-id.
return
if params['project_id'] == "":
raise falcon.HTTPBadRequest('Empty project header not allowed',
_(u'X-PROJECT-ID cannot be an empty '
u'string. Specify the right header '
u'X-PROJECT-ID and retry.'))
api_version = LooseVersion(req.path.split('/')[1])
api_version = LooseVersion(api_version_string)
if not params['project_id'] and api_version >= LooseVersion('v1.1'):
raise falcon.HTTPBadRequest('Project-Id Missing',
_(u'The header X-PROJECT-ID was missing'))

View File

@ -0,0 +1,36 @@
# Copyright (c) 2016 Red Hat, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
# implied.
# See the License for the specific language governing permissions and
# limitations under the License.
from zaqar.tests.functional import base
class TestVersions(base.FunctionalTestBase):
"""Tests for Versions Resource."""
server_class = base.ZaqarServer
def setUp(self):
super(TestVersions, self).setUp()
self.base_url = "{url}/".format(url=self.cfg.zaqar.url)
self.client.set_base_url(self.base_url)
def test_get_versions_without_headers(self):
result = self.client.get('', headers={})
self.assertIn("versions", result.json())
def test_get_versions_with_headers(self):
result = self.client.get('')
self.assertIn("versions", result.json())