Added CORS support to Nova
This adds the CORS support middleware to Nova, allowing a deployer to optionally configure rules under which a javascript client may break the single-origin policy and access the API directly. The paste.ini method of deploying the middleware was chosen, because it needs to be able to annotate responses created by keystonemiddleware. If the middleware were explicitly included, keystone would reject the request before the cross-domain headers could be annotated, resulting in an error response that was unreadable by the user agent. The test suite was expanded, to permit the inclusion of HTTP headers, and to add the ability to send an OPTIONS request. 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 bp:nova-cors Change-Id: Ibc95df0860799ff36f682da7d032d5422b0c39c1
This commit is contained in:
@@ -314,8 +314,8 @@ class ApiSampleTestBase(integrated_helpers._IntegratedTestBase):
|
||||
}
|
||||
|
||||
def _get_response(self, url, method, body=None, strip_version=False,
|
||||
api_version=None):
|
||||
headers = {}
|
||||
api_version=None, headers=None):
|
||||
headers = headers or {}
|
||||
headers['Content-Type'] = 'application/' + self.ctype
|
||||
headers['Accept'] = 'application/' + self.ctype
|
||||
if api_version:
|
||||
@@ -323,26 +323,39 @@ class ApiSampleTestBase(integrated_helpers._IntegratedTestBase):
|
||||
return self.api.api_request(url, body=body, method=method,
|
||||
headers=headers, strip_version=strip_version)
|
||||
|
||||
def _do_get(self, url, strip_version=False, api_version=None):
|
||||
def _do_options(self, url, strip_version=False, api_version=None,
|
||||
headers=None):
|
||||
return self._get_response(url, 'OPTIONS', strip_version=strip_version,
|
||||
api_version=(api_version or
|
||||
self.request_api_version),
|
||||
headers=headers)
|
||||
|
||||
def _do_get(self, url, strip_version=False, api_version=None,
|
||||
headers=None):
|
||||
return self._get_response(url, 'GET', strip_version=strip_version,
|
||||
api_version=(api_version or
|
||||
self.request_api_version))
|
||||
self.request_api_version),
|
||||
headers=headers)
|
||||
|
||||
def _do_post(self, url, name, subs, method='POST', api_version=None):
|
||||
def _do_post(self, url, name, subs, method='POST', api_version=None,
|
||||
headers=None):
|
||||
body = self._read_template(name) % subs
|
||||
sample = self._get_sample(name, self.request_api_version)
|
||||
if self.generate_samples and not os.path.exists(sample):
|
||||
self._write_sample(name, body)
|
||||
return self._get_response(url, method, body,
|
||||
api_version=(api_version or
|
||||
self.request_api_version))
|
||||
self.request_api_version),
|
||||
headers=headers)
|
||||
|
||||
def _do_put(self, url, name, subs, api_version=None):
|
||||
def _do_put(self, url, name, subs, api_version=None, headers=None):
|
||||
return self._do_post(url, name, subs, method='PUT',
|
||||
api_version=(api_version or
|
||||
self.request_api_version))
|
||||
self.request_api_version),
|
||||
headers=headers)
|
||||
|
||||
def _do_delete(self, url, api_version=None):
|
||||
def _do_delete(self, url, api_version=None, headers=None):
|
||||
return self._get_response(url, 'DELETE',
|
||||
api_version=(api_version or
|
||||
self.request_api_version))
|
||||
self.request_api_version),
|
||||
headers=headers)
|
||||
|
||||
Reference in New Issue
Block a user