Описание
Вебхук POST webhooks/remnawave возвращает 500 при получении вебхука с объектом hwidUserDevice. Библиотека remnawave==2.8.0 при разборе payload эагерно строит HwidUserDeviceDto, у которого поле userUuid обязательно, а панель это поле в HWID-событиях не присылает. Ошибка возникает на этапе WebhookUtility.parse_webhook(...) — до того, как приложение проверяет тип события, поэтому падает даже событие, которое мы не обрабатываем.
Поскольку панель ретраит вебхуки при 5xx, это приводит к бесконечным повторам и потоку 500 в логах.
Как воспроизвести
Отправить на POST /webhooks/remnawave payload с hwidUserDevice без поля userUuid.
Получить 500 Internal Server Error.
Ожидаемое поведение
Неподдерживаемое/непарсящееся событие не должно ронять эндпоинт. Ответ 200, событие пропускается и логируется.
Трейс
File "/app/app/api/v1/webhooks_router.py", line 190, in webhook_remnawave
payload = WebhookUtility.parse_webhook(...)
File ".../remnawave/controllers/webhooks.py", line 113, in parse_webhook
return WebhookPayloadDto.from_dict(body)
File ".../remnawave/models/webhook.py", line 408, in from_dict
hwid_device = HwidUserDeviceDto(**data_raw["hwidUserDevice"])
pydantic_core.ValidationError: 1 validation error for HwidUserDeviceDto
userUuid
Field required [type=missing, input_value={'hwid': '4cd2f4dac82d4ea...', ...}, input_type=dict]
Рассинхрон схемы HwidUserDeviceDto в библиотеке remnawave с payload'ом текущей версии панели: userUuid помечен как required, но не приходит.
Описание
Вебхук POST webhooks/remnawave возвращает 500 при получении вебхука с объектом hwidUserDevice. Библиотека remnawave==2.8.0 при разборе payload эагерно строит HwidUserDeviceDto, у которого поле userUuid обязательно, а панель это поле в HWID-событиях не присылает. Ошибка возникает на этапе WebhookUtility.parse_webhook(...) — до того, как приложение проверяет тип события, поэтому падает даже событие, которое мы не обрабатываем.
Поскольку панель ретраит вебхуки при 5xx, это приводит к бесконечным повторам и потоку 500 в логах.
Как воспроизвести
Отправить на POST /webhooks/remnawave payload с hwidUserDevice без поля userUuid.
Получить 500 Internal Server Error.
Ожидаемое поведение
Неподдерживаемое/непарсящееся событие не должно ронять эндпоинт. Ответ 200, событие пропускается и логируется.
Трейс
File "/app/app/api/v1/webhooks_router.py", line 190, in webhook_remnawave
payload = WebhookUtility.parse_webhook(...)
File ".../remnawave/controllers/webhooks.py", line 113, in parse_webhook
return WebhookPayloadDto.from_dict(body)
File ".../remnawave/models/webhook.py", line 408, in from_dict
hwid_device = HwidUserDeviceDto(**data_raw["hwidUserDevice"])
pydantic_core.ValidationError: 1 validation error for HwidUserDeviceDto
userUuid
Field required [type=missing, input_value={'hwid': '4cd2f4dac82d4ea...', ...}, input_type=dict]
Рассинхрон схемы HwidUserDeviceDto в библиотеке remnawave с payload'ом текущей версии панели: userUuid помечен как required, но не приходит.