summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--nova/api/openstack/auth.py6
-rw-r--r--nova/tests/api/openstack/fakes.py8
-rw-r--r--nova/tests/api/openstack/test_auth.py44
3 files changed, 53 insertions, 5 deletions
diff --git a/nova/api/openstack/auth.py b/nova/api/openstack/auth.py
index 6754fea27..d435f8318 100644
--- a/nova/api/openstack/auth.py
+++ b/nova/api/openstack/auth.py
@@ -16,6 +16,7 @@
# under the License.
import hashlib
+import os
import time
import webob.exc
@@ -42,12 +43,9 @@ class NoAuthMiddleware(wsgi.Middleware):
@webob.dec.wsgify(RequestClass=wsgi.Request)
def __call__(self, req):
if 'X-Auth-Token' not in req.headers:
- os_url = req.url
- version = common.get_version_from_href(os_url)
user_id = req.headers.get('X-Auth-User', 'admin')
project_id = req.headers.get('X-Auth-Project-Id', 'admin')
- if version == '1.1':
- os_url += '/' + project_id
+ os_url = os.path.join(req.url, project_id)
res = webob.Response()
# NOTE(vish): This is expecting and returning Auth(1.1), whereas
# keystone uses 2.0 auth. We should probably allow
diff --git a/nova/tests/api/openstack/fakes.py b/nova/tests/api/openstack/fakes.py
index b07fe03a5..352949d71 100644
--- a/nova/tests/api/openstack/fakes.py
+++ b/nova/tests/api/openstack/fakes.py
@@ -68,7 +68,8 @@ def fake_wsgi(self, req):
def wsgi_app(inner_app11=None, fake_auth=True, fake_auth_context=None,
- serialization=os_wsgi.LazySerializationMiddleware):
+ serialization=os_wsgi.LazySerializationMiddleware,
+ use_no_auth=False):
if not inner_app11:
inner_app11 = openstack.APIRouter()
@@ -81,6 +82,11 @@ def wsgi_app(inner_app11=None, fake_auth=True, fake_auth_context=None,
limits.RateLimitingMiddleware(
serialization(
extensions.ExtensionMiddleware(inner_app11)))))
+ elif use_no_auth:
+ api11 = openstack.FaultWrapper(auth.NoAuthMiddleware(
+ limits.RateLimitingMiddleware(
+ serialization(
+ extensions.ExtensionMiddleware(inner_app11)))))
else:
api11 = openstack.FaultWrapper(auth.AuthMiddleware(
limits.RateLimitingMiddleware(
diff --git a/nova/tests/api/openstack/test_auth.py b/nova/tests/api/openstack/test_auth.py
index db0a5ce85..d6a52d4f0 100644
--- a/nova/tests/api/openstack/test_auth.py
+++ b/nova/tests/api/openstack/test_auth.py
@@ -269,3 +269,47 @@ class TestLimiter(test.TestCase):
result = req.get_response(fakes.wsgi_app(fake_auth=False))
self.assertEqual(result.status, '200 OK')
self.assertEqual(result.headers['X-Test-Success'], 'True')
+
+
+class TestNoAuthMiddleware(test.TestCase):
+
+ def setUp(self):
+ super(TestNoAuthMiddleware, self).setUp()
+ self.stubs.Set(context, 'RequestContext', fakes.FakeRequestContext)
+ fakes.FakeAuthManager.clear_fakes()
+ fakes.FakeAuthDatabase.data = {}
+ fakes.stub_out_rate_limiting(self.stubs)
+ fakes.stub_out_networking(self.stubs)
+
+ def tearDown(self):
+ fakes.fake_data_store = {}
+ super(TestNoAuthMiddleware, self).tearDown()
+
+ def test_authorize_user(self):
+ req = webob.Request.blank('/v1.1')
+ req.headers['X-Auth-User'] = 'user1'
+ req.headers['X-Auth-Key'] = 'user1_key'
+ req.headers['X-Auth-Project-Id'] = 'user1_project'
+ result = req.get_response(fakes.wsgi_app(fake_auth=False,
+ use_no_auth=True))
+ self.assertEqual(result.status, '204 No Content')
+ self.assertEqual(result.headers['X-CDN-Management-Url'],
+ "")
+ self.assertEqual(result.headers['X-Storage-Url'], "")
+ self.assertEqual(result.headers['X-Server-Management-Url'],
+ "http://localhost/v1.1/user1_project")
+
+ def test_authorize_user_trailing_slash(self):
+ #make sure it works with trailing slash on the request
+ req = webob.Request.blank('/v1.1/')
+ req.headers['X-Auth-User'] = 'user1'
+ req.headers['X-Auth-Key'] = 'user1_key'
+ req.headers['X-Auth-Project-Id'] = 'user1_project'
+ result = req.get_response(fakes.wsgi_app(fake_auth=False,
+ use_no_auth=True))
+ self.assertEqual(result.status, '204 No Content')
+ self.assertEqual(result.headers['X-CDN-Management-Url'],
+ "")
+ self.assertEqual(result.headers['X-Storage-Url'], "")
+ self.assertEqual(result.headers['X-Server-Management-Url'],
+ "http://localhost/v1.1/user1_project")