provide full URL in more field

This is a regression against the PHP version.

Fixes #3138.
This commit is contained in:
Sarah Hoffmann 2023-08-06 17:20:16 +02:00
parent 2c7e1db5f6
commit 996026e5ed
4 changed files with 25 additions and 1 deletions

View File

@ -69,6 +69,11 @@ class ASGIAdaptor(abc.ABC):
body of the response to 'output'.
"""
@abc.abstractmethod
def base_uri(self) -> str:
""" Return the URI of the original request.
"""
@abc.abstractmethod
def config(self) -> Configuration:
@ -481,7 +486,7 @@ async def search_endpoint(api: napi.NominatimAPIAsync, params: ASGIAdaptor) -> A
(str(r.place_id) for r in results if r.place_id))
queryparts['format'] = fmt
moreurl = urlencode(queryparts)
moreurl = params.base_uri() + '/search?' + urlencode(queryparts)
else:
moreurl = ''

View File

@ -67,6 +67,9 @@ class ParamWrapper(api_impl.ASGIAdaptor):
self.response.content_type = self.content_type
def base_uri(self) -> str:
return cast (str, self.request.forwarded_prefix)
def config(self) -> Configuration:
return self._config

View File

@ -50,6 +50,19 @@ class ParamWrapper(api_impl.ASGIAdaptor):
return Response(output, status_code=status, media_type=self.content_type)
def base_uri(self) -> str:
scheme = self.request.url.scheme
host = self.request.url.hostname
port = self.request.url.port
root = self.request.scope['root_path']
if (scheme == 'http' and port == 80) or (scheme == 'https' and port == 443):
port = None
if port is not None:
return f"{scheme}://{host}:{port}{root}"
return f"{scheme}://{host}{root}"
def config(self) -> Configuration:
return cast(Configuration, self.request.app.state.API.config)

View File

@ -47,6 +47,9 @@ class FakeAdaptor(glue.ASGIAdaptor):
return FakeResponse(status, output, self.content_type)
def base_uri(self) -> str:
return 'http://test'
def config(self):
return self._config