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
This commit is contained in:
Corentin Ardeois 2016-11-22 09:16:17 -05:00
parent 6c5824d72f
commit 706f104e33
3 changed files with 31 additions and 1 deletions

View File

@ -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

View File

@ -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)

View File

@ -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.