Skip to content

Commit 9d07414

Browse files
committed
defaults
1 parent 795dbc0 commit 9d07414

File tree

3 files changed

+48
-20
lines changed

3 files changed

+48
-20
lines changed

services/web/server/src/simcore_service_webserver/products/_api.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,9 @@
1515
from .errors import BelowMinimumPaymentError, ProductPriceNotDefinedError
1616

1717

18-
def get_product_name(request: web.Request) -> str | None:
18+
def get_product_name(request: web.Request) -> str:
1919
"""Returns product name in request but might be undefined"""
20-
product_name: str | None = request[RQ_PRODUCT_KEY]
20+
product_name: str = request[RQ_PRODUCT_KEY]
2121
return product_name
2222

2323

@@ -39,6 +39,7 @@ def list_products(app: web.Application) -> list[Product]:
3939

4040

4141
def get_default_product_name(app: web.Application) -> str:
42+
# TODO: remove from api
4243
product_name: str = app[f"{APP_PRODUCTS_KEY}_default"]
4344
return product_name
4445

services/web/server/src/simcore_service_webserver/products/_middlewares.py

Lines changed: 44 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77

88
from .._constants import APP_PRODUCTS_KEY, RQ_PRODUCT_KEY
99
from .._meta import API_VTAG
10+
from ._api import get_default_product_name
1011
from ._model import Product
1112

1213
_logger = logging.getLogger(__name__)
@@ -41,6 +42,21 @@ def _discover_product_by_request_header(request: web.Request) -> str | None:
4142
_INCLUDE_PATHS: set[str] = {"/static-frontend-data.json", "/socket.io/"}
4243

4344

45+
def _get_diagnose_msg(request: web.Request):
46+
return (
47+
"\n".join(
48+
[
49+
f"{request.url=}",
50+
f"{request.host=}",
51+
f"{request.remote=}",
52+
*[f"{k}:{request.headers[k][:20]}" for k in request.headers],
53+
f"{request.headers.get('X-Forwarded-Host')=}",
54+
f"{request.get(RQ_PRODUCT_KEY)=}",
55+
]
56+
),
57+
)
58+
59+
4460
@web.middleware
4561
async def discover_product_middleware(request: web.Request, handler: Handler):
4662
"""
@@ -49,34 +65,44 @@ async def discover_product_middleware(request: web.Request, handler: Handler):
4965
- request[RQ_PRODUCT_KEY] is set to discovered product in 3 types of entrypoints
5066
- if no product discovered, then it is set to default
5167
"""
52-
request[RQ_PRODUCT_KEY] = None
53-
# - API entrypoints
54-
# - /static info for front-end
55-
if request.path.startswith(f"/{API_VTAG}") or request.path in _INCLUDE_PATHS:
68+
request[RQ_PRODUCT_KEY] = get_default_product_name(request.app)
69+
70+
if (
71+
# - API entrypoints
72+
# - /static info for front-end
73+
request.path.startswith(f"/{API_VTAG}")
74+
or request.path in _INCLUDE_PATHS
75+
):
5676
request[RQ_PRODUCT_KEY] = _discover_product_by_request_header(
5777
request
5878
) or _discover_product_by_hostname(request)
5979

60-
# - Publications entrypoint: redirections from other websites. SEE studies_access.py::access_study
61-
# - Root entrypoint: to serve front-end apps
80+
if not request[RQ_PRODUCT_KEY]:
81+
bad_request_error = web.HTTPBadRequest(
82+
reason="web api request must define a product"
83+
)
84+
_logger.warning("%s:\n%s", bad_request_error, _get_diagnose_msg(request))
85+
raise bad_request_error
86+
6287
elif (
88+
# - Publications entrypoint: redirections from other websites. SEE studies_access.py::access_study
89+
# - Root entrypoint: to serve front-end apps
6390
request.path.startswith("/study/")
6491
or request.path.startswith("/view")
6592
or request.path == "/"
6693
):
67-
request[RQ_PRODUCT_KEY] = _discover_product_by_hostname(request)
68-
69-
msg = "\n".join(
70-
[
71-
f"{request.url=}",
72-
f"{request.host=}",
73-
f"{request.remote=}",
74-
*[f"{k}:{request.headers[k][:20]}" for k in request.headers],
75-
f"{request.headers.get('X-Forwarded-Host')=}",
76-
f"{request.get(RQ_PRODUCT_KEY)=}",
77-
]
94+
request[RQ_PRODUCT_KEY] = _discover_product_by_hostname(
95+
request
96+
) and get_default_product_name(request.app)
97+
98+
assert request[RQ_PRODUCT_KEY] # nosec
99+
100+
_logger.warning(
101+
"\n%s\n%s\n%s\n",
102+
"------------------TESTING-------------------",
103+
_get_diagnose_msg(request),
104+
"-------------------------------------------",
78105
)
79-
_logger.warning("\n--TESTING->\n%s", msg)
80106

81107
assert request.get(RQ_PRODUCT_KEY) is not None or request.path.startswith( # nosec
82108
"/dev/doc"

services/web/server/src/simcore_service_webserver/statics/_handlers.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414

1515

1616
async def get_cached_frontend_index(request: web.Request):
17+
# NOTE: always deliver a front-end
1718
product_name = get_product_name(request)
1819

1920
assert ( # nosec

0 commit comments

Comments
 (0)