From 706f104e33db724c3fe334a301f84414934cab39 Mon Sep 17 00:00:00 2001 From: Corentin Ardeois Date: Tue, 22 Nov 2016 09:16:17 -0500 Subject: [PATCH] Add CORS filter to versions pipeline This patch exposes the root (version) resource to CORS-enabled browser clients that wish to perform API version discovery. This feature is required for js-openstack-lib, and its devstack tests. https://review.openstack.org/#/c/370389/ Change-Id: I4052186bffa3bddb4d28e378e6a135694a71e05b Needed-By: Ia19afa530ae8c2df60db740cec9267fe240978c0 --- etc/nova/api-paste.ini | 2 +- nova/tests/functional/test_middleware.py | 24 +++++++++++++++++++ ...to-versions-pipeline-56277ca66e796569.yaml | 6 +++++ 3 files changed, 31 insertions(+), 1 deletion(-) create mode 100644 releasenotes/notes/add-cors-to-versions-pipeline-56277ca66e796569.yaml diff --git a/etc/nova/api-paste.ini b/etc/nova/api-paste.ini index 13c8499170f7..cbac3e9ea5bd 100644 --- a/etc/nova/api-paste.ini +++ b/etc/nova/api-paste.ini @@ -61,7 +61,7 @@ paste.filter_factory = nova.api.openstack:LegacyV2CompatibleWrapper.factory paste.app_factory = nova.api.openstack.compute:APIRouterV21.factory [pipeline:oscomputeversions] -pipeline = faultwrap http_proxy_to_wsgi oscomputeversionapp +pipeline = cors faultwrap http_proxy_to_wsgi oscomputeversionapp [app:oscomputeversionapp] paste.app_factory = nova.api.openstack.compute.versions:Versions.factory diff --git a/nova/tests/functional/test_middleware.py b/nova/tests/functional/test_middleware.py index 00630b0e81da..40b2d519785b 100644 --- a/nova/tests/functional/test_middleware.py +++ b/nova/tests/functional/test_middleware.py @@ -96,3 +96,27 @@ class TestCORSMiddleware(api_sample_base.ApiSampleTestBaseV21): self.assertEqual(response.status_code, 200) self.assertNotIn('Access-Control-Allow-Origin', response.headers) + + def test_valid_cors_get_versions_request(self): + response = self._do_get('', + strip_version=True, + headers={ + 'Origin': 'http://valid.example.com', + 'Access-Control-Request-Method': 'GET' + }) + + self.assertEqual(response.status_code, 200) + self.assertIn('Access-Control-Allow-Origin', response.headers) + self.assertEqual('http://valid.example.com', + response.headers['Access-Control-Allow-Origin']) + + def test_invalid_cors_get_versions_request(self): + response = self._do_get('', + strip_version=True, + headers={ + 'Origin': 'http://invalid.example.com', + 'Access-Control-Request-Method': 'GET' + }) + + self.assertEqual(response.status_code, 200) + self.assertNotIn('Access-Control-Allow-Origin', response.headers) diff --git a/releasenotes/notes/add-cors-to-versions-pipeline-56277ca66e796569.yaml b/releasenotes/notes/add-cors-to-versions-pipeline-56277ca66e796569.yaml new file mode 100644 index 000000000000..928c4a0ffcc1 --- /dev/null +++ b/releasenotes/notes/add-cors-to-versions-pipeline-56277ca66e796569.yaml @@ -0,0 +1,6 @@ +--- +upgrade: + - CORS headers have been added to the versions REST API, in order + to support versions discovery. If using 'oscomputeversions' + pipeline in '/etc/nova/api-paste.ini', it is required to update the + pipeline to include 'cors' filter.