# Интеграция UCS — поддомены-wildcard по линии

Эта возможность поддерживает **интеграцию UCS**, выдавая каждому клиенту уникальный поддомен балансировщика на основе его **ID линии** при построении редиректов на поток.

## Overview

Когда сервер-балансировщик (LB) использует wildcard-домен и включена опция **Serve Random IP / Domain**, XC_VM заменяет префикс `wildcard.` на ID аутентифицированной линии перед редиректом клиента.

| ID линии | LB-домен (настроенный) | Домен редиректа |
|---------:|------------------------|-----------------|
| 10 | `wildcard.example.com` | `10.example.com` |
| 42 | `wildcard.lb1.com` | `42.lb1.com` |

Каждая линия получает стабильный поддомен. UCS (или вышестоящий DNS/прокси) может маршрутизировать `*.example.com` на нужный backend или применять политики на уровне линии.

## Требования

1. **Сервер-балансировщик** (не главный сервер) с хотя бы одним доменом, настроенным в **Domains and IPs**.
2. Включённая опция **Serve Random IP / Domain** на этом LB (чекбокс `random_ip` на странице редактирования сервера).
3. Запись домена, начинающаяся с **`wildcard.`** (например, `wildcard.example.com`).
4. DNS: wildcard-запись для базовой зоны (например, `*.example.com`), указывающая на LB или ваш UCS-edge.

## Настройка

1. Откройте **Servers → Edit** на целевом LB-сервере.
2. В **Domains and IPs** добавьте `wildcard.example.com` (используйте свою реальную зону).
3. Включите **Serve Random IP / Domain**.
4. Сохраните сервер.
5. Убедитесь, что DNS резолвит `{line_id}.example.com` для любого ID линии, который вы выдаёте (wildcard-DNS или автоматизация UCS).

Когда клиент аутентифицируется через `auth.php`, XC_VM читает ID линии из `$rUserInfo['id']` и передаёт его в построитель URL редиректа.

## Когда применяется

Подстановка выполняется только когда **все** условия истинны:

- Запрос аутентифицирован и ID линии доступен.
- На выбранном LB включена **Serve Random IP / Domain**.
- Случайно выбранный из списка доменов сервера домен содержит подстроку `wildcard.`.

Если клиент подключился с подходящим заголовком `Host`, существующий хост сохраняется и wildcard-подстановка пропускается.

## Пример потока

1. Домены LB-сервера: `wildcard.example.com`, `lb2.example.com`
2. **Serve Random IP / Domain**: вкл.
3. ID линии клиента: `10`
4. Аутентификация выбирает `wildcard.example.com` из списка доменов
5. Хост URL редиректа становится `10.example.com`

## Реализация

Логика — в `StreamRedirector::getStreamingURL()`:

```php
// line_id : 10 => wildcard.lb1.com => 10.lb1.com
if ($rUserID && strpos($rDomain, 'wildcard.') !== false) {
    $rDomain = str_replace('wildcard.', $rUserID . '.', $rDomain);
}
```

Вызывается из `Public/stream/auth.php` с `$rUserID = $rUserInfo['id']` для live, VOD, timeshift и связанных редиректов.

## Примечания

- Используйте буквальный префикс **`wildcard.`** в строке домена; заменяется только этот сегмент.
- ID линии — это внутренний ID таблицы **lines** (`users.id` в стриминг-аутентификации), не имя пользователя.
- Wildcard-подстановка применяется только к URL редиректов LB; она не меняет хосты плейлистов или API, если только эти пути тоже не вызывают `getStreamingURL()` с ID линии.

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

| Файл | Роль |
| --- | --- |
| `src/Streaming/Delivery/StreamRedirector.php` | `getStreamingURL()` — wildcard-подстановка |
| `src/Public/stream/auth.php` | вызывает построитель редиректа с ID линии |
