Provision API

Endpoint для получения конфигурации TVIP-приставками.

GET /prov/tvip_provision.xml

Возвращает XML конфигурацию для TVIP-приставки. Этот endpoint вызывается автоматически приставками при загрузке.

URL: /prov/tvip_provision.xml

Метод: GET

Теги: Provision.xml

Headers

Параметр

Обязательный

Описание

Mac-Address

Да

MAC-адрес устройства в формате XX:XX:XX:XX:XX:XX

tvip-model

Нет

Модель TVIP-приставки (например, TVIP S-Box v.605)

X-Real-IP

Нет

Реальный IP-адрес клиента (устанавливается nginx)

Логика работы

  1. Извлекается MAC-адрес из заголовка Mac-Address

  2. Определяется IP-адрес клиента (приоритет: X-Real-IPrequest.client.host)

  3. Проверяется наличие устройства в базе данных

    • Устройство не найдено: создаётся новая запись, возвращается дефолтная конфигурация

    • Устройство существует: обновляются метаданные (IP, модель, время), возвращается кастомная или дефолтная конфигурация

  4. Конфигурация сериализуется в XML и возвращается с Content-Type: application/xml

Response

Status Code: 200 OK

Content-Type: application/xml

Body: XML конфигурация

Пример ответа:

<?xml version="1.0" encoding="UTF-8"?>
<provision reload="86400">
    <operator name="MyOperator"/>
    <logo url="http://example.com/logo.png"/>
    <time tz="Europe/Moscow" ntp="pool.ntp.org"/>
    <features>
        <mediaplayer enabled="true"/>
        <dvr enabled="false"/>
        <cctv enabled="false"/>
        <vod enabled="false"/>
    </features>
    <tv_stream type="multicast"/>
    <tv_protocols default="stalker">
        <protocol type="stalker" server="http://portal.example.com"/>
    </tv_protocols>
    <preferences>
        <pref_network_config value="DHCP"/>
        <pref_tv>
            <pref_tv_streamtype visible="false"/>
            <pref_tv_udpxyaddress visible="false"/>
            <pref_tv_middleware disabled="true"/>
        </pref_tv>
    </preferences>
</provision>

Примеры использования

cURL запрос (имитация TVIP-приставки):

curl -H "Mac-Address: 00:11:22:33:44:55" \
     -H "tvip-model: TVIP S-Box v.605" \
     http://localhost:7373/prov/tvip_provision.xml

Запрос через nginx с X-Real-IP:

curl -H "Mac-Address: 00:11:22:33:44:55" \
     -H "X-Real-IP: 192.168.1.100" \
     http://localhost:7373/prov/tvip_provision.xml

Python пример:

import requests

headers = {
    "Mac-Address": "00:11:22:33:44:55",
    "tvip-model": "TVIP S-Box v.605"
}

response = requests.get(
    "http://localhost:7373/prov/tvip_provision.xml",
    headers=headers
)

if response.status_code == 200:
    xml_config = response.text
    print(xml_config)

Ошибки

400 Bad Request

Отсутствует обязательный заголовок Mac-Address:

{
    "detail": [
        {
            "type": "missing",
            "loc": ["header", "Mac-Address"],
            "msg": "Field required"
        }
    ]
}

422 Unprocessable Entity

Невалидный формат MAC-адреса:

{
    "detail": "Invalid MAC address format"
}

Автоматическая документация

Полная автодокументация endpoint:

async presentation.api.endpoints.provision.tvip_provision_endpoint(request, mac_address, x_real_ip=None, tvip_model=None, use_case=Depends(get_handle_provision_use_case))[исходный код]

Generate XML configuration for TVIP device.

Параметры:
  • mac_address (str) – Device MAC address from request headers.

  • x_real_ip (str | None) – Real client IP address from nginx proxy.

  • tvip_model (str | None) – TVIP device model from request headers.

  • use_case (HandleProvisionRequestUseCase) – Business logic handler (injected automatically).

  • request (Request) –

Результат:

Device-specific settings.

Тип результата:

Response

Настройка TVIP-приставок

Чтобы TVIP-приставки обращались к вашему серверу, необходимо:

  1. Вариант 1: DNS замена

    Настроить DNS сервер для перенаправления tvipupdate.net на IP вашего сервера.

  2. Вариант 2: Hosts файл

    Если есть доступ к файловой системе приставки, изменить /etc/hosts:

    192.168.1.10  tvipupdate.net
    
  3. Вариант 3: Nginx

    Развернуть через nginx прокси tvipupdate.net.

После настройки приставка будет обращаться на https://tvipupdate.net/prov/tvip_provision.xml, что перенаправится на ваш сервер.

Периодичность обращений

Частота обновления конфигурации определяется параметром reload в XML (в секундах):

<provision reload="86400">
    <!-- 86400 секунд = 24 часа -->
</provision>
  • 3600 — каждый час

  • 86400 — раз в сутки

  • 1800 — каждые 30 минут

Приставка автоматически запрашивает конфигурацию с указанной периодичностью.

Мониторинг обращений

Время последнего обращения каждого устройства сохраняется в поле last_activity. Это позволяет отслеживать активность приставок через API GET /api/devices.