request.url now respects force_https_urls, closes #781

pull/783/head
Simon Willison 2020-05-28 10:09:32 -07:00
rodzic 40885ef24e
commit 7bb30c1f11
3 zmienionych plików z 14 dodań i 0 usunięć

Wyświetl plik

@ -786,6 +786,13 @@ class DatasetteRouter(AsgiRouter):
base_url = self.ds.config("base_url")
if base_url != "/" and path.startswith(base_url):
path = "/" + path[len(base_url) :]
# Apply force_https_urls, if set
if (
self.ds.config("force_https_urls")
and scope["type"] == "http"
and scope.get("scheme") != "https"
):
scope = dict(scope, scheme="https")
return await super().route_path(scope, receive, send, path)
async def handle_404(self, scope, receive, send, exception=None):

Wyświetl plik

@ -46,6 +46,9 @@ def render_cell(value, database):
@hookimpl
def extra_template_vars(template, database, table, view_name, request, datasette):
# This helps unit tests that want to run assertions against the request object:
datasette._last_request = request
async def query_database(sql):
first_db = list(datasette.databases.keys())[0]
return (await datasette.execute(first_db, sql)).rows[0][0]

Wyświetl plik

@ -1676,6 +1676,10 @@ def test_config_force_https_urls():
"toggle_url"
].startswith("https://")
assert response.json["suggested_facets"][0]["toggle_url"].startswith("https://")
# Also confirm that request.url and request.scheme are set correctly
response = client.get("/")
assert client.ds._last_request.url.startswith("https://")
assert client.ds._last_request.scheme == "https"
def test_infinity_returned_as_null(app_client):