From 9d700b969d3ee20fc56a6473b869eaa0630d96e1 Mon Sep 17 00:00:00 2001 From: Lukasz Nowak Date: Thu, 3 Jan 2019 13:38:57 +0100 Subject: [PATCH] caddy-frontend: Stabilise slashes (/) during rewrite /reviewed-on https://lab.nexedi.com/nexedi/slapos/merge_requests/489 --- software/caddy-frontend/buildout.hash.cfg | 2 +- .../templates/default-virtualhost.conf.in | 12 +++++----- software/caddy-frontend/test/test.py | 23 +++++++++++-------- 3 files changed, 20 insertions(+), 17 deletions(-) diff --git a/software/caddy-frontend/buildout.hash.cfg b/software/caddy-frontend/buildout.hash.cfg index e7db41860..9fb27119f 100644 --- a/software/caddy-frontend/buildout.hash.cfg +++ b/software/caddy-frontend/buildout.hash.cfg @@ -58,7 +58,7 @@ md5sum = f20d6c3d2d94fb685f8d26dfca1e822b [template-default-slave-virtualhost] filename = templates/default-virtualhost.conf.in -md5sum = 065bdb954a4c05c538d8264b6ad43fba +md5sum = 3b9d7c04206da76edb40740a51e4063c [template-cached-slave-virtualhost] filename = templates/cached-virtualhost.conf.in diff --git a/software/caddy-frontend/templates/default-virtualhost.conf.in b/software/caddy-frontend/templates/default-virtualhost.conf.in index 25cf64329..a845db9df 100644 --- a/software/caddy-frontend/templates/default-virtualhost.conf.in +++ b/software/caddy-frontend/templates/default-virtualhost.conf.in @@ -16,14 +16,14 @@ {%- if slave_parameter.get('custom_domain') not in host_list %} {%- do host_list.append(slave_parameter.get('custom_domain')) %} {%- endif %} -{%- set backend_url = slave_parameter.get('https-url', slave_parameter.get('url', '')) %} +{%- set backend_url = slave_parameter.get('https-url', slave_parameter.get('url', '')).rstrip('/') %} {%- set http_host_list = [] %} {%- set https_host_list = [] %} {%- for host in host_list %} {%- do http_host_list.append('http://%s:%s' % (host, slave_parameter['http_port'] )) %} {%- do https_host_list.append('https://%s:%s' % (host, slave_parameter['https_port'] )) %} {%- endfor %} {#- for host in host_list #} -{%- set default_path = slave_parameter.get('default-path', '') | urlencode %} +{%- set default_path = slave_parameter.get('default-path', '').strip('/') | urlencode %} # SSL enabled hosts {{ https_host_list|join(', ') }} { @@ -107,12 +107,12 @@ rewrite { regexp (.*) if {>Accept-Encoding} match "(^gzip,.*|.*, gzip,.*|.*, gzip$|^gzip$)" - to /prefer-gzip/VirtualHostBase/{scheme}%2F%2F{hostonly}:{{ slave_parameter.get('virtualhostroot-https-port', '443') | int }}%2F{{ slave_parameter.get('path', '') }}%2FVirtualHostRoot/{1} + to /prefer-gzip/VirtualHostBase/{scheme}%2F%2F{hostonly}:{{ slave_parameter.get('virtualhostroot-https-port', '443') | int }}%2F{{ slave_parameter.get('path', '').strip('/') }}%2FVirtualHostRoot/{1} } {%- else %} rewrite { regexp (.*) - to /VirtualHostBase/{scheme}%2F%2F{hostonly}:{{ slave_parameter.get('virtualhostroot-https-port', '443') | int }}%2F{{ slave_parameter.get('path', '') }}%2FVirtualHostRoot/{1} + to /VirtualHostBase/{scheme}%2F%2F{hostonly}:{{ slave_parameter.get('virtualhostroot-https-port', '443') | int }}%2F{{ slave_parameter.get('path', '').strip('/') }}%2FVirtualHostRoot/{1} } {# rewrite #} {%- endif %} {#- if prefer_gzip #} {%- elif slave_type == 'redirect' and backend_url %} {#- if slave_type == 'zope' and backend_url #} @@ -251,12 +251,12 @@ rewrite { regexp (.*) if {>Accept-Encoding} match "(^gzip,.*|.*, gzip,.*|.*, gzip$|^gzip$)" - to /prefer-gzip/VirtualHostBase/{scheme}%2F%2F{hostonly}:{{ slave_parameter.get('virtualhostroot-http-port', '80') | int }}%2F{{ slave_parameter.get('path', '') }}%2FVirtualHostRoot/{1} + to /prefer-gzip/VirtualHostBase/{scheme}%2F%2F{hostonly}:{{ slave_parameter.get('virtualhostroot-http-port', '80') | int }}%2F{{ slave_parameter.get('path', '').strip('/') }}%2FVirtualHostRoot/{1} } {%- else %} rewrite { regexp (.*) - to /VirtualHostBase/{scheme}%2F%2F{hostonly}:{{ slave_parameter.get('virtualhostroot-http-port', '80') | int }}%2F{{ slave_parameter.get('path', '') }}%2FVirtualHostRoot/{1} + to /VirtualHostBase/{scheme}%2F%2F{hostonly}:{{ slave_parameter.get('virtualhostroot-http-port', '80') | int }}%2F{{ slave_parameter.get('path', '').strip('/') }}%2FVirtualHostRoot/{1} } {# rewrite #} {% endif %} {#- if prefer_gzip #} {%- else %} {#- if https_only #} diff --git a/software/caddy-frontend/test/test.py b/software/caddy-frontend/test/test.py index db2a9808c..ac3c4895b 100644 --- a/software/caddy-frontend/test/test.py +++ b/software/caddy-frontend/test/test.py @@ -505,10 +505,10 @@ class SlaveHttpFrontendTestCase(HttpFrontendTestCase): certfile=cls.test_server_certificate_file.name, server_side=True) - cls.backend_url = 'http://%s:%s' % server.server_address + cls.backend_url = 'http://%s:%s/' % server.server_address cls.server_process = multiprocessing.Process(target=server.serve_forever) cls.server_process.start() - cls.backend_https_url = 'https://%s:%s' % server_https.server_address + cls.backend_https_url = 'https://%s:%s/' % server_https.server_address cls.server_https_process = multiprocessing.Process( target=server_https.serve_forever) cls.server_https_process.start() @@ -756,8 +756,8 @@ http://apachecustomhttpsaccepted.example.com:%%(http_port)s { 'url': cls.backend_url, }, 'url_https-url': { - 'url': cls.backend_url + '/http', - 'https-url': cls.backend_url + '/https', + 'url': cls.backend_url + 'http', + 'https-url': cls.backend_url + 'https', }, 'server-alias': { 'url': cls.backend_url, @@ -870,12 +870,12 @@ http://apachecustomhttpsaccepted.example.com:%%(http_port)s { 'type-zope-path': { 'url': cls.backend_url, 'type': 'zope', - 'path': 'path', + 'path': '///path/to/some/resource///', }, 'type-zope-default-path': { 'url': cls.backend_url, 'type': 'zope', - 'default-path': 'default-path', + 'default-path': '///default-path/to/some/resource///', }, 'type-notebook': { 'url': cls.backend_url, @@ -1264,8 +1264,10 @@ http://apachecustomhttpsaccepted.example.com:%%(http_port)s { self.assertEqualResultJson( result, 'Path', - '/VirtualHostBase/https//' - 'typezopepath.example.com:443/path/VirtualHostRoot/test-path/deeper' + '/VirtualHostBase/' + 'https//typezopepath.example.com:443/path/to/some/resource' + '/VirtualHostRoot/' + 'test-path/deeper' ) def test_type_zope_default_path(self): @@ -1296,7 +1298,8 @@ http://apachecustomhttpsaccepted.example.com:%%(http_port)s { ) self.assertEqual( - 'https://typezopedefaultpath.example.com:%s/default-path' % ( + 'https://typezopedefaultpath.example.com:%s/' + 'default-path/to/some/resource' % ( HTTPS_PORT,), result.headers['Location'] ) @@ -1952,7 +1955,7 @@ http://apachecustomhttpsaccepted.example.com:%%(http_port)s { ) self.assertEqual( - '%s/test-path/deeper' % (self.backend_url,), + '%stest-path/deeper' % (self.backend_url,), result.headers['Location'] ) -- 2.25.1