Provision API
=============
Endpoint для получения конфигурации TVIP-приставками.
GET /prov/tvip_provision.xml
-----------------------------
Возвращает XML конфигурацию для TVIP-приставки. Этот endpoint вызывается автоматически приставками при загрузке.
**URL:** ``/prov/tvip_provision.xml``
**Метод:** ``GET``
**Теги:** ``Provision.xml``
Headers
~~~~~~~
.. list-table::
:header-rows: 1
:widths: 20 15 65
* - Параметр
- Обязательный
- Описание
* - ``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-IP`` → ``request.client.host``)
3. Проверяется наличие устройства в базе данных
* **Устройство не найдено**: создаётся новая запись, возвращается дефолтная конфигурация
* **Устройство существует**: обновляются метаданные (IP, модель, время), возвращается кастомная или дефолтная конфигурация
4. Конфигурация сериализуется в XML и возвращается с ``Content-Type: application/xml``
Response
~~~~~~~~
**Status Code:** ``200 OK``
**Content-Type:** ``application/xml``
**Body:** XML конфигурация
Пример ответа:
.. code-block:: xml
Примеры использования
~~~~~~~~~~~~~~~~~~~~~
**cURL запрос (имитация TVIP-приставки):**
.. code-block:: bash
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:**
.. code-block:: bash
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 пример:**
.. code-block:: 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``:
.. code-block:: json
{
"detail": [
{
"type": "missing",
"loc": ["header", "Mac-Address"],
"msg": "Field required"
}
]
}
**422 Unprocessable Entity**
Невалидный формат MAC-адреса:
.. code-block:: json
{
"detail": "Invalid MAC address format"
}
Автоматическая документация
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Полная автодокументация endpoint:
.. automodule:: presentation.api.endpoints.provision
:members:
:undoc-members:
:show-inheritance:
Настройка TVIP-приставок
~~~~~~~~~~~~~~~~~~~~~~~~~
Чтобы TVIP-приставки обращались к вашему серверу, необходимо:
1. **Вариант 1: DNS замена**
Настроить DNS сервер для перенаправления ``tvipupdate.net`` на IP вашего сервера.
2. **Вариант 2: Hosts файл**
Если есть доступ к файловой системе приставки, изменить ``/etc/hosts``:
.. code-block:: text
192.168.1.10 tvipupdate.net
3. **Вариант 3: Nginx**
Развернуть через nginx прокси ``tvipupdate.net``.
После настройки приставка будет обращаться на ``https://tvipupdate.net/prov/tvip_provision.xml``, что перенаправится на ваш сервер.
Периодичность обращений
~~~~~~~~~~~~~~~~~~~~~~~
Частота обновления конфигурации определяется параметром ``reload`` в XML (в секундах):
.. code-block:: xml
* **3600** — каждый час
* **86400** — раз в сутки
* **1800** — каждые 30 минут
Приставка автоматически запрашивает конфигурацию с указанной периодичностью.
Мониторинг обращений
~~~~~~~~~~~~~~~~~~~~~
Время последнего обращения каждого устройства сохраняется в поле ``last_activity``.
Это позволяет отслеживать активность приставок через API ``GET /api/devices``.