Skip to content

Commit 95a88d1

Browse files
fix api-key creation response
1 parent d6deede commit 95a88d1

File tree

2 files changed

+17
-4
lines changed

2 files changed

+17
-4
lines changed

services/web/server/src/simcore_service_webserver/api_keys/_controller/rest.py

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
from ...login.decorators import login_required
2222
from ...models import RequestContext
2323
from ...security.decorators import permission_required
24-
from ...utils_aiohttp import envelope_json_response
24+
from ...utils_aiohttp import envelope_json_response, iter_originating_hosts
2525
from .. import _service
2626
from ..models import ApiKey
2727
from .rest_exceptions import handle_plugin_requests_exceptions
@@ -36,6 +36,12 @@ class ApiKeysPathParams(StrictRequestParameters):
3636
api_key_id: IDStr
3737

3838

39+
def _get_api_base_url(request: web.Request) -> str:
40+
originating_host = next(iter_originating_hosts(request), None)
41+
api_host = f"api.{originating_host}"
42+
return f"{request.url.with_host(api_host)}"
43+
44+
3945
@routes.post(f"/{API_VTAG}/auth/api-keys", name="create_api_key")
4046
@login_required
4147
@permission_required("user.apikey.*")
@@ -55,8 +61,8 @@ async def create_api_key(request: web.Request):
5561
api_key = ApiKeyCreateResponse.model_validate(
5662
{
5763
**asdict(created_api_key),
58-
"api_base_url": "http://localhost:8000",
59-
} # TODO: https://github.com/ITISFoundation/osparc-simcore/issues/6340 # @pcrespov
64+
"api_base_url": _get_api_base_url(request),
65+
}
6066
)
6167

6268
return envelope_json_response(api_key)

services/web/server/src/simcore_service_webserver/utils_aiohttp.py

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import io
22
import logging
3-
from collections.abc import Callable
3+
from collections.abc import Callable, Generator
44
from typing import Any, Generic, Literal, TypeAlias, TypeVar
55

66
from aiohttp import web
@@ -128,3 +128,10 @@ class NextPage(BaseModel, Generic[PageParameters]):
128128
..., description="Code name to the front-end page. Ideally a PageStr"
129129
)
130130
parameters: PageParameters | None = None
131+
132+
133+
def iter_originating_hosts(request) -> Generator[str, None, None]:
134+
if (forwarded := request.headers.get("X-Forwarded-Host")) is not None:
135+
yield forwarded
136+
if request.host is not None:
137+
yield request.host

0 commit comments

Comments
 (0)