Add the project name into CinderKeystoneContext.

Fixed Bug 1178576.

Change-Id: I35cbd40c6f4aba45aeb8722ae5e10db8349d4510
This commit is contained in:
Vincent Hou 2013-06-17 16:42:43 +08:00
parent 229e74f464
commit 742bde97a3
3 changed files with 21 additions and 9 deletions

View File

@ -91,6 +91,7 @@ class CinderKeystoneContext(base_wsgi.Middleware):
# This is for legacy compatibility
project_id = req.headers['X_TENANT']
project_name = req.headers.get('X_TENANT_NAME')
# Get the auth token
auth_token = req.headers.get('X_AUTH_TOKEN',
req.headers.get('X_STORAGE_TOKEN'))
@ -101,6 +102,7 @@ class CinderKeystoneContext(base_wsgi.Middleware):
remote_address = req.headers.get('X-Forwarded-For', remote_address)
ctx = context.RequestContext(user_id,
project_id,
project_name=project_name,
roles=roles,
auth_token=auth_token,
remote_address=remote_address)

View File

@ -43,9 +43,9 @@ class RequestContext(object):
"""
def __init__(self, user_id, project_id, is_admin=None, read_deleted="no",
roles=None, remote_address=None, timestamp=None,
request_id=None, auth_token=None, overwrite=True,
quota_class=None, **kwargs):
roles=None, project_name=None, remote_address=None,
timestamp=None, request_id=None, auth_token=None,
overwrite=True, quota_class=None, **kwargs):
"""
:param read_deleted: 'no' indicates deleted records are hidden, 'yes'
indicates deleted records are visible, 'only' indicates that
@ -64,6 +64,7 @@ class RequestContext(object):
self.user_id = user_id
self.project_id = project_id
self.roles = roles or []
self.project_name = project_name
self.is_admin = is_admin
if self.is_admin is None:
self.is_admin = policy.check_is_admin(self.roles)
@ -105,6 +106,7 @@ class RequestContext(object):
def to_dict(self):
return {'user_id': self.user_id,
'project_id': self.project_id,
'project_name': self.project_name,
'is_admin': self.is_admin,
'read_deleted': self.read_deleted,
'roles': self.roles,

View File

@ -40,20 +40,28 @@ class TestCinderKeystoneContextMiddleware(test.TestCase):
self.assertEqual(response.status, '401 Unauthorized')
def test_user_only(self):
self.request.headers['X_USER_ID'] = 'testuserid'
response = self.request.get_response(self.middleware)
self.assertEqual(response.status, '200 OK')
self.assertEqual(self.context.user_id, 'testuserid')
def test_user_id_only(self):
self.request.headers['X_USER'] = 'testuser'
response = self.request.get_response(self.middleware)
self.assertEqual(response.status, '200 OK')
self.assertEqual(self.context.user_id, 'testuser')
def test_user_id_only(self):
self.request.headers['X_USER_ID'] = 'testuserid'
response = self.request.get_response(self.middleware)
self.assertEqual(response.status, '200 OK')
self.assertEqual(self.context.user_id, 'testuserid')
def test_user_id_trumps_user(self):
self.request.headers['X_USER_ID'] = 'testuserid'
self.request.headers['X_USER'] = 'testuser'
response = self.request.get_response(self.middleware)
self.assertEqual(response.status, '200 OK')
self.assertEqual(self.context.user_id, 'testuserid')
def test_tenant_id_name(self):
self.request.headers['X_USER_ID'] = 'testuserid'
self.request.headers['X_TENANT_NAME'] = 'testtenantname'
response = self.request.get_response(self.middleware)
self.assertEqual(response.status, '200 OK')
self.assertEqual(self.context.project_id, 'testtenantid')
self.assertEqual(self.context.project_name, 'testtenantname')