diff --git a/doc/developer/server_side.rst.mako b/doc/developer/server_side.rst.mako index f34599cdf80..25f5b8fa36e 100644 --- a/doc/developer/server_side.rst.mako +++ b/doc/developer/server_side.rst.mako @@ -74,7 +74,7 @@ To run a specific test use the ``-k`` switch. For example: .. prompt:: bash - ./docker-compose-run py.tests -k test_catalogue geoportal/tests + ./docker-compose-run py.test -k test_catalogue geoportal/tests Profiling --------- diff --git a/geoportal/c2cgeoportal_geoportal/lib/checker.py b/geoportal/c2cgeoportal_geoportal/lib/checker.py index 8cf56ea9d03..845de2eba02 100644 --- a/geoportal/c2cgeoportal_geoportal/lib/checker.py +++ b/geoportal/c2cgeoportal_geoportal/lib/checker.py @@ -27,24 +27,32 @@ # of the authors and should not be interpreted as representing official policies, # either expressed or implied, of the FreeBSD Project. -import requests import logging import subprocess from time import sleep from urllib.parse import urlsplit, urlunsplit +import requests + log = logging.getLogger(__name__) def build_url(name, url, request, headers=None): + settings = { + elem['netloc']: elem for elem in request.registry.settings["checker"].get("host_map", []) + } url_fragments = urlsplit(url) headers = _build_headers(request, headers) - if url_fragments.netloc == request.environ.get("SERVER_NAME") or \ - url_fragments.netloc.startswith("localhost:"): + netloc = '*' if '*' in settings and url_fragments.netloc not in settings else url_fragments.netloc + if netloc in settings: + mapped_host = settings[netloc] url_ = urlunsplit(( - "http", "localhost", url_fragments.path, url_fragments.query, url_fragments.fragment + mapped_host['to'].get('schema', url_fragments.scheme), + mapped_host['to'].get('netloc', url_fragments.netloc), + url_fragments.path, url_fragments.query, url_fragments.fragment )) - headers["Host"] = url_fragments.netloc + if mapped_host.get('forward_host', False): + headers["Host"] = url_fragments.netloc else: url_ = url @@ -228,9 +236,7 @@ def _phantomjs(settings, health_check): def check(request): url = request.route_url(route["name"], _query=route.get("params", {})) - if urlsplit(url).netloc.startswith("localhost:"): - # For Docker - url = build_url("Check", url, request)["url"] + url = build_url("Check", url, request)["url"] cmd = [ "phantomjs", "--local-to-remote-url-access=true", diff --git a/geoportal/c2cgeoportal_geoportal/scaffolds/nondockercreate/vars_nondocker.yaml_tmpl b/geoportal/c2cgeoportal_geoportal/scaffolds/nondockercreate/vars_nondocker.yaml_tmpl index f5cfb9e0030..d90e52a58f1 100644 --- a/geoportal/c2cgeoportal_geoportal/scaffolds/nondockercreate/vars_nondocker.yaml_tmpl +++ b/geoportal/c2cgeoportal_geoportal/scaffolds/nondockercreate/vars_nondocker.yaml_tmpl @@ -53,6 +53,7 @@ vars: backend: dogpile.cache.memory_pickle checker: + host_map: [] phantomjs: routes: [] diff --git a/geoportal/c2cgeoportal_geoportal/scaffolds/update/CONST_config-schema.yaml b/geoportal/c2cgeoportal_geoportal/scaffolds/update/CONST_config-schema.yaml index 66a6f4191f9..b709b715d19 100644 --- a/geoportal/c2cgeoportal_geoportal/scaffolds/update/CONST_config-schema.yaml +++ b/geoportal/c2cgeoportal_geoportal/scaffolds/update/CONST_config-schema.yaml @@ -526,6 +526,24 @@ mapping: type: map required: True mapping: + host_map: + type: seq + sequence: + - type: map + mapping: + netloc: + type: str + required: True + to: + type: map + required: True + mapping: + schema: + type: str + netloc: + type: str + forward_host: + type: bool fulltextsearch: type: map required: True diff --git a/geoportal/c2cgeoportal_geoportal/scaffolds/update/CONST_vars.yaml_tmpl b/geoportal/c2cgeoportal_geoportal/scaffolds/update/CONST_vars.yaml_tmpl index f7b5a44f307..8b047ac4c65 100644 --- a/geoportal/c2cgeoportal_geoportal/scaffolds/update/CONST_vars.yaml_tmpl +++ b/geoportal/c2cgeoportal_geoportal/scaffolds/update/CONST_vars.yaml_tmpl @@ -537,6 +537,11 @@ vars: # Checker configuration checker: + host_map: + - netloc: '*' + to: + schema: http + netloc: localhost:8080 fulltextsearch: level: 1 search: text to search diff --git a/geoportal/tests/test_checker.py b/geoportal/tests/test_checker.py index 0d3d31623f0..756854cc79c 100644 --- a/geoportal/tests/test_checker.py +++ b/geoportal/tests/test_checker.py @@ -38,13 +38,37 @@ class TestExportCSVView(TestCase): @staticmethod - def _create_dummy_request(): + def _create_dummy_request(netloc="example.com", forward_host=True): request = DummyRequest() - request.environ = { - "SERVER_NAME": "example.com" + request.registry.settings = { + "checker": { + "host_map": [{ + "netloc": netloc, + "to": { + "netloc": "localhost", + "schema": "http", + }, + "forward_host": forward_host + }] + } } return request + def test_build_url_star(self): + self.assertEqual( + build_url( + "Test", + "http://example.com/toto?titi#tutu", + self._create_dummy_request("*", False) + ), + { + "url": "http://localhost/toto?titi#tutu", + "headers": { + "Cache-Control": "no-cache", + } + } + ) + def test_build_url_http(self): self.assertEqual( build_url( @@ -94,9 +118,6 @@ def test_build_url_other(self): def test_build_url_forward_headers(self): request = DummyRequest() - request.environ = { - "SERVER_NAME": "example.com" - } request.registry.settings = { "checker": { "forward_headers": ["Cookie"]