From dff373ba1beb8b5f3612f6874d129505d50631ae Mon Sep 17 00:00:00 2001 From: bcail Date: Tue, 30 Jan 2018 11:18:23 -0500 Subject: [PATCH] if defined, use proxy_path for canonical link (issue #359) (#395) * if defined, use proxy_path for canonical link (issue #359) * add test for canonical link when proxy_path isn't set --- loris/webapp.py | 13 +++++++++---- tests/webapp_t.py | 15 +++++++++++++++ 2 files changed, 24 insertions(+), 4 deletions(-) diff --git a/loris/webapp.py b/loris/webapp.py index 46dc2fd1..290a2710 100755 --- a/loris/webapp.py +++ b/loris/webapp.py @@ -546,6 +546,13 @@ def _get_info(self,ident,request,base_uri): return (info,last_mod) + def _set_canonical_link(self, request, image_request, response): + if self.proxy_path: + root = self.proxy_path + else: + root = request.url_root + canonical_uri = '%s%s' % (root, image_request.canonical_request_path) + response.headers['Link'] = '%s,<%s>;rel="canonical"' % (response.headers['Link'], canonical_uri,) def get_img(self, request, ident, region, size, rotation, quality, target_fmt, base_uri): '''Get an Image. @@ -612,8 +619,7 @@ def get_img(self, request, ident, region, size, rotation, quality, target_fmt, b image_request.info = info # we need to do the above to set the canonical link header - canonical_uri = '%s%s' % (request.url_root, image_request.canonical_request_path) - r.headers['Link'] = '%s,<%s>;rel="canonical"' % (r.headers['Link'], canonical_uri,) + self._set_canonical_link(request, image_request, r) return r else: try: @@ -669,8 +675,7 @@ def get_img(self, request, ident, region, size, rotation, quality, target_fmt, b r.status_code = 200 r.last_modified = datetime.utcfromtimestamp(path.getctime(fp)) r.headers['Content-Length'] = path.getsize(fp) - canonical_uri = '%s%s' % (request.url_root, image_request.canonical_request_path) - r.headers['Link'] = '%s,<%s>;rel="canonical"' % (r.headers['Link'], canonical_uri,) + self._set_canonical_link(request, image_request, r) r.response = file(fp) if not self.enable_caching: diff --git a/tests/webapp_t.py b/tests/webapp_t.py index e19f6f25..a6dc92d4 100644 --- a/tests/webapp_t.py +++ b/tests/webapp_t.py @@ -380,6 +380,21 @@ def test_image_no_redirect_to_canonical(self): resp = self.client.get(to_get, follow_redirects=False) self.assertEqual(resp.status_code, 200) + def test_image_proxy_path_canonical_link(self): + self.app.proxy_path = 'https://proxy_example.org/image/' + to_get = '/%s/full/full/0/default.jpg' % (self.test_jp2_color_id,) + resp = self.client.get(to_get, follow_redirects=False) + self.assertEqual(resp.status_code, 200) + link = ';rel="profile",;rel="canonical"' + self.assertEqual(resp.headers['Link'], link) + + def test_image_canonical_link(self): + to_get = '/%s/full/full/0/default.jpg' % (self.test_jp2_color_id,) + resp = self.client.get(to_get, follow_redirects=False) + self.assertEqual(resp.status_code, 200) + link = ';rel="profile",;rel="canonical"' + self.assertEqual(resp.headers['Link'], link) + def test_img_sends_304(self): to_get = '/%s/full/full/0/default.jpg' % (self.test_jp2_color_id,)