fix(manager): выровнять ответ обновления заказа с GET и скрыть секретный token#426
Open
Ibochkarev wants to merge 3 commits into
Open
fix(manager): выровнять ответ обновления заказа с GET и скрыть секретный token#426Ibochkarev wants to merge 3 commits into
Ibochkarev wants to merge 3 commits into
Conversation
PUT /api/mgr/orders/{id} returned a raw $order->toArray(): the secret
order token leaked and the shape diverged from GET (no address merge,
no formatted cost). Route update() through buildOrderPayloadFromModel()
like GET and add a null-guard after the status-change reload.
Strip the web-order secret token from every Manager order payload via
HIDDEN_ORDER_FIELDS inside the formatOrder() funnel (get, list, create,
finalize, recalculate-cost, update), closing the leak consistently.
Optional MODX-backed smoke that asserts update() matches GET shape and that the web-order token never appears in Manager order responses.
Live MODX smoke stays out of the repo; it is environment-specific.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Описание
OrdersController::update()(PUT /api/mgr/orders/{id}) возвращал сырой$order->toArray(). Из-за этого:tokenзаказа (тот же, чтоms3_tokenдля авторизации действий над заказом в Web API);GET /api/mgr/orders/{id}: не было merge адреса,status_name/delivery_name/payment_name, форматированной стоимости — клиент ломался при переиспользовании shape GET.Изменения:
update()формирует ответ черезbuildOrderPayloadFromModel(), какget()(address-merge, форматирование, отношения).500вместо фатала наtoArray().tokenубирается из всех Manager-ответов по заказу черезHIDDEN_ORDER_FIELDSв общей точкеformatOrder()(get, list, create, finalize, recalculate-cost, update).Изменение контракта: поле
tokenбольше не возвращается ни одним Manager order endpoint. Vue-менеджер его не читает (проверено grep поvueManager/src); web-фронт используетms3_tokenиз cookie/API, а не это поле ответа. Для внешних интеграций это намеренный security-fix.Тип изменений
Связанные Issues
Closes #421
Как это было протестировано?
Команды и результат:
Регрессия проверена red-green: при возврате
formatOrder()без вырезанияtokenтест падает (token must be stripped), после фикса — проходит.Конфигурация тестирования:
Чеклист
php -lДополнительные заметки
Вне scope этого PR (pre-existing, для отдельных задач):
update()(~строка 968) иOrderStatusService::change(): непроверенный$order->save()при откате статуса может вернуть success без фактической смены — silent failure.PUT/POST/DELETE /ordersзащищён только правомmsorder_list; разумно развести наmsorder_save/msorder_remove.uuid/propertiesизменения не касаются.