mirror of
https://github.com/simonw/datasette.git
synced 2025-12-10 16:51:24 +01:00
request.url now respects force_https_urls, closes #781
This commit is contained in:
parent
40885ef24e
commit
7bb30c1f11
3 changed files with 14 additions and 0 deletions
|
|
@ -786,6 +786,13 @@ class DatasetteRouter(AsgiRouter):
|
||||||
base_url = self.ds.config("base_url")
|
base_url = self.ds.config("base_url")
|
||||||
if base_url != "/" and path.startswith(base_url):
|
if base_url != "/" and path.startswith(base_url):
|
||||||
path = "/" + path[len(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)
|
return await super().route_path(scope, receive, send, path)
|
||||||
|
|
||||||
async def handle_404(self, scope, receive, send, exception=None):
|
async def handle_404(self, scope, receive, send, exception=None):
|
||||||
|
|
|
||||||
|
|
@ -46,6 +46,9 @@ def render_cell(value, database):
|
||||||
|
|
||||||
@hookimpl
|
@hookimpl
|
||||||
def extra_template_vars(template, database, table, view_name, request, datasette):
|
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):
|
async def query_database(sql):
|
||||||
first_db = list(datasette.databases.keys())[0]
|
first_db = list(datasette.databases.keys())[0]
|
||||||
return (await datasette.execute(first_db, sql)).rows[0][0]
|
return (await datasette.execute(first_db, sql)).rows[0][0]
|
||||||
|
|
|
||||||
|
|
@ -1676,6 +1676,10 @@ def test_config_force_https_urls():
|
||||||
"toggle_url"
|
"toggle_url"
|
||||||
].startswith("https://")
|
].startswith("https://")
|
||||||
assert response.json["suggested_facets"][0]["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):
|
def test_infinity_returned_as_null(app_client):
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue