Стратегия валидации входных данных
Валидация в XC_VM сосредоточена в классе InputValidator. Он проверяет наличие обязательных полей перед тем, как API-обработчик начинает работу с данными.
Принцип работы
InputValidator::validate() принимает имя действия и массив входных данных, возвращает bool. Если метод вернул false — запрос отклоняется до вызова бизнес-логики.
Справочник действий и обязательных полей
Контент — стримы и каналы
| Действие |
Обязательные поля |
processStream |
stream_display_name (или review, или файл M3U) |
processChannel |
stream_display_name (или review, или файл M3U) |
processMovie |
stream_display_name (или review, или файл M3U) |
processRadio |
stream_display_name (или review, или файл M3U) |
Контент — серии и эпизоды
| Действие |
Обязательные поля |
processSeries |
title |
processEpisode |
series, числовой season_num, и multi или episode |
Организация контента
| Действие |
Обязательные поля |
processBouquet |
bouquet_name |
processGroup |
group_name |
processGroupLegacy |
group_name |
processCategory |
category_name, category_type |
processPackage |
package_name |
reorderBouquet |
stream_order_array (валидный JSON-массив) |
setChannelOrder |
stream_order_array (валидный JSON-массив) |
sortBouquets |
bouquet_order_array (валидный JSON-массив) |
orderCategories |
categories (валидный JSON-массив) |
orderServers |
server_order (валидный JSON-массив) |
Массовые операции
| Действие |
Обязательные поля |
massEditStreams |
streams (валидный JSON-массив) |
massEditChannels |
streams (валидный JSON-массив) |
massEditMovies |
streams (валидный JSON-массив) |
massEditRadios |
streams (валидный JSON-массив) |
massEditEpisodes |
streams (валидный JSON-массив) |
massDeleteStreams |
streams (валидный JSON-массив) |
massDeleteMovies |
movies (валидный JSON-массив) |
massDeleteLines |
lines (валидный JSON-массив) |
massDeleteUsers |
users (валидный JSON-массив) |
massDeleteStations |
radios (валидный JSON-массив) |
massDeleteMags |
mags (валидный JSON-массив) |
massDeleteEnigmas |
enigmas (валидный JSON-массив) |
massDeleteEpisodes |
episodes (валидный JSON-массив) |
massDeleteSeries |
series (валидный JSON-массив) |
massEditSeries |
series (валидный JSON-массив) |
massEditLines |
users_selected (валидный JSON-массив) |
massEditUsers |
users_selected (валидный JSON-массив) |
massEditMags |
devices_selected (валидный JSON-массив) |
massEditEnigmas |
devices_selected (валидный JSON-массив) |
Серверы и инфраструктура
| Действие |
Обязательные поля |
processServer |
server_name, server_ip |
processProxy |
server_name, server_ip |
installServer |
ssh_port, root_password |
moveStreams |
content_type, source_server, replacement_server |
replaceDNS |
old_dns, new_dns |
Устройства
| Действие |
Обязательные поля |
processMAG |
mac |
processEnigma |
mac |
Безопасность
| Действие |
Обязательные поля |
blockIP |
ip |
processRTMPIP |
ip |
processISP |
isp |
processUA |
user_agent |
Прочее
| Действие |
Обязательные поля |
scheduleRecording |
title, source_id |
processProvider |
ip, port, username, password, name |
processCode |
code |
processProfile |
profile_name |
processEPG |
epg_name, epg_file |
processWatchFolder |
folder_type, selected_path, server_id |
Действия без дополнительной валидации
Следующие действия всегда возвращают true — их валидация выполняется на уровне бизнес-логики:
processUser, processLine, processHMAC, editAdminProfile
Добавление валидации для нового действия
Добавьте case в метод InputValidator::validate() в файле src/core/Validation/InputValidator.php:
Правила:
- Проверяйте только обязательные поля — необязательные проверяются позже в сервисе
- Для JSON-массивов используйте:
is_array(json_decode($rData['field'] ?? '', true))
- Для числовых значений:
is_numeric($rData['field'] ?? null)
Связанные файлы
| Файл |
Назначение |
src/core/Validation/InputValidator.php |
Основной класс валидации |
src/public/Controllers/ |
Контроллеры, вызывающие validate() |