return sort_keys, sort_dirs
+def get_request_url(request):
+ url = request.application_url
+ headers = request.headers
+ forwarded = headers.get('X-Forwarded-Host')
+ if forwarded:
+ url_parts = list(urllib.parse.urlsplit(url))
+ url_parts[1] = re.split(',\s?', forwarded)[-1]
+ url = urllib.parse.urlunsplit(url_parts).rstrip('/')
+ return url
+
+
def remove_version_from_href(href):
"""Removes the first api version from the href.
"""Return href string with proper limit and marker params."""
params = request.params.copy()
params["marker"] = identifier
- prefix = self._update_link_prefix(request.application_url,
+ prefix = self._update_link_prefix(get_request_url(request),
CONF.osapi_volume_base_URL)
url = os.path.join(prefix,
request.environ["cinder.context"].project_id,
def _get_href_link(self, request, identifier):
"""Return an href string pointing to this object."""
- prefix = self._update_link_prefix(request.application_url,
+ prefix = self._update_link_prefix(get_request_url(request),
CONF.osapi_volume_base_URL)
return os.path.join(prefix,
request.environ["cinder.context"].project_id,
def _get_bookmark_link(self, request, identifier):
"""Create a URL that refers to a specific resource."""
- base_url = remove_version_from_href(request.application_url)
+ base_url = remove_version_from_href(get_request_url(request))
base_url = self._update_link_prefix(base_url,
CONF.osapi_volume_base_URL)
return os.path.join(base_url,
"http://new.prefix.com:20455/new_extra_prefix")
self.assertEqual("http://new.prefix.com:20455/new_extra_prefix/v1",
result)
+
+
+class RequestUrlTest(test.TestCase):
+ def test_get_request_url_no_forward(self):
+ app_url = 'http://127.0.0.1/v2;param?key=value#frag'
+ request = type('', (), {
+ 'application_url': app_url,
+ 'headers': {}
+ })
+ result = common.get_request_url(request)
+ self.assertEqual(app_url, result)
+
+ def test_get_request_url_forward(self):
+ request = type('', (), {
+ 'application_url': 'http://127.0.0.1/v2;param?key=value#frag',
+ 'headers': {'X-Forwarded-Host': '192.168.0.243:24'}
+ })
+ result = common.get_request_url(request)
+ self.assertEqual('http://192.168.0.243:24/v2;param?key=value#frag',
+ result)