55b056fa9e
This adds the CORS support middleware to Keystone, allowing a deployer to optionally configure rules under which a javascript client may break the single-origin policy and access the API directly. For keystone the paste.ini method of deploying the middleware was chosen, because it needs to be able to annotate error responses created by other middlewares. If one such middleware throws an error - such as an error from sizelimit - that error response must still have CORS headers in order to be readable by the user agent. This patch also includes tests to assert that the expected setup entry points are present. It is expected that this test will be refined in future patches. OpenStack CrossProject Spec: http://specs.openstack.org/openstack/openstack-specs/specs/cors-support.html Oslo_Middleware Docs: http://docs.openstack.org/developer/oslo.middleware/cors.html OpenStack Cloud Admin Guide: http://docs.openstack.org/admin-guide-cloud/cross_project_cors.html Change-Id: I151e0ee5da1bf3d9fbbe8f11bb06e687b284e5f6
49 lines
1.6 KiB
Python
49 lines
1.6 KiB
Python
# 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.
|
|
|
|
import stevedore
|
|
from testtools import matchers
|
|
|
|
from keystone.tests.unit import core as test
|
|
|
|
|
|
class TestPasteDeploymentEntryPoints(test.TestCase):
|
|
def test_entry_point_middleware(self):
|
|
"""Assert that our list of expected middleware is present."""
|
|
expected_names = [
|
|
'admin_token_auth',
|
|
'build_auth_context',
|
|
'crud_extension',
|
|
'cors',
|
|
'debug',
|
|
'endpoint_filter_extension',
|
|
'ec2_extension',
|
|
'ec2_extension_v3',
|
|
'federation_extension',
|
|
'json_body',
|
|
'oauth1_extension',
|
|
'request_id',
|
|
'revoke_extension',
|
|
's3_extension',
|
|
'simple_cert_extension',
|
|
'sizelimit',
|
|
'token_auth',
|
|
'url_normalize',
|
|
'user_crud_extension',
|
|
]
|
|
|
|
em = stevedore.ExtensionManager('paste.filter_factory')
|
|
|
|
actual_names = [extension.name for extension in em]
|
|
|
|
self.assertThat(actual_names, matchers.ContainsAll(expected_names))
|