You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Web API: невалидный context в поиске по alias/uri отдаёт другую ошибку, чем get/{id} #705
После #644 контекст в публичном каталоге проверяется в двух местах, и на одно и то же невалидное значение клиент получает разные ошибки.
CatalogQuery (из Единая валидация context в публичном каталоге #665) при невалидном context бросает CatalogContextException. GET /api/v1/product/get/{id}?context=bad → 400 с ms3_err_catalog_context_invalid.
CatalogResolve::sanitizeContext() (из Web API: resolve category/product по alias|uri #644) — приватная копия той же проверки: регулярка ^[a-zA-Z0-9_-]+$, ограничение длины, запрет префикса mgr. Возвращает null, и GET /api/v1/product/get?alias=x&context=bad → 400 с ms3_err_catalog_lookup_invalid.
Код ответа одинаковый, но клиент поиска по alias/uri не отличит плохой context от плохого alias. Для категорий то же самое.
Вторая сторона — дублирование правил. Следующее изменение правил контекста придётся вносить в два места.
Попутно: вызов CatalogQuery::resolveContext() внутри CatalogResolve::resolveLookupContext() до ветки с исключением не доходит — явный context к этому моменту уже проверен локальной копией. Там он работает только для контекста по умолчанию.
Предложение
CatalogResolve использует проверку из CatalogQuery, перехватывает CatalogContextException и отдаёт ms3_err_catalog_context_invalid. Своя копия регулярки удаляется.
Критерии приёмки
Правила валидации контекста реализованы в одном месте
get/{id}?context=bad и get?alias=x&context=bad отдают одинаковый ключ ошибки — для товаров и категорий
Activity