Files
XC_VM/docs/ru/development/input-validation.md
T

7.8 KiB

Стратегия валидации входных данных

Валидация в XC_VM сосредоточена в классе InputValidator. Он проверяет наличие обязательных полей перед тем, как API-обработчик начинает работу с данными.


Принцип работы

InputValidator::validate() принимает имя действия и массив входных данных, возвращает bool. Если метод вернул false — запрос отклоняется до вызова бизнес-логики.

if (!InputValidator::validate($rAction, $rData)) {
    // вернуть ошибку клиенту
}

Справочник действий и обязательных полей

Контент — стримы и каналы

Действие Обязательные поля
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:

case 'myNewAction':
    return !empty($rData['required_field_one'])
        && !empty($rData['required_field_two']);

Правила:

  • Проверяйте только обязательные поля — необязательные проверяются позже в сервисе
  • Для JSON-массивов используйте: is_array(json_decode($rData['field'] ?? '', true))
  • Для числовых значений: is_numeric($rData['field'] ?? null)

Связанные файлы

Файл Назначение
src/core/Validation/InputValidator.php Основной класс валидации
src/public/Controllers/ Контроллеры, вызывающие validate()