d5e827112a
- Created PROTOCOL.md to outline the MusicBridge protocol v1, detailing setup, TLS, pairing, state management, and command structure. - Implemented SystemVolume class for managing system audio levels, including methods for setting, reading, changing, and muting volume. - Added unit tests for the MusicBridge agent, covering pairing, identity storage, command validation, and media state management. - Included tests for real-time media reading from Windows and ensured proper handling of artwork caching and retrieval.
42 lines
3.7 KiB
Markdown
42 lines
3.7 KiB
Markdown
# Заготовки подключения — iOS не начинать до команды пользователя
|
||
|
||
## Уже есть
|
||
|
||
- `ConnectionInvitation`: проверяет домашний IPv4 HTTPS-адрес, код/срок и SHA-256
|
||
сертификата; создаёт строку `musicbridge://pair?data=<base64url UTF-8 JSON>`.
|
||
- Клавиша `I` в агенте выводит эту строку для каждого подходящего адреса при
|
||
открытом сопряжении (`B`) и запуске с `--lan`. Это **данные для QR, не QR-картинка**.
|
||
- В JSON: `version:1`, `endpoint`, `certificateSha256`, `code` (строка из 8 цифр),
|
||
`expiresAt` (ISO 8601). Payload содержит секрет сопряжения: не публиковать/не
|
||
отправлять внешним генераторам QR. Его срок совпадает со сроком кода.
|
||
- `DiscoveryDescriptor`: сервис `_musicbridge._tcp.local.`, имя
|
||
`MusicBridge-<12 первых символов отпечатка>`, TXT `v=1`, `id=<полный SHA-256>`.
|
||
- Авторизованный `GET /v1/info` возвращает `protocolVersion`, `agentId`,
|
||
`serviceType`, `instanceName`; идентификатор равен отпечатку сертификата.
|
||
|
||
## Следующая реализация на Windows
|
||
|
||
- [ ] Локальная генерация QR из payload; отображение в окне агента/трее.
|
||
- [ ] Закрывать/обновлять показанный QR при истечении кода, сопряжении или смене IP.
|
||
- [ ] Выбор адаптера при нескольких адресах; сейчас для каждого свой payload.
|
||
- [ ] mDNS/DNS-SD publisher: PTR/SRV/TXT/A, порт HTTPS агента, без кодов и токенов.
|
||
- [ ] Обработка конфликтов имён, смены адресов, сна/пробуждения и остановки сервиса.
|
||
- [ ] Проверка объявления со второго устройства. Сейчас multicast не отправляется.
|
||
- [ ] Tray, кнопки сопряжения/отзыва, автозапуск и упаковка Windows.
|
||
|
||
Не заменять mDNS рассылкой секретов. Объявления сети не являются доказательством
|
||
подлинности ПК: проверять сохранённый отпечаток TLS перед отправкой токена.
|
||
|
||
## Порядок подключения будущего нативного клиента
|
||
|
||
1. Считать QR внутри приложения, проверить схему/версию, размер payload,
|
||
HTTPS-адрес, отсутствие userinfo/параметров, формат отпечатка/кода и срок.
|
||
2. Проверить TLS по отпечатку из QR **до** отправки POST `/v1/pair`.
|
||
3. Сохранить токен и отпечаток в Keychain; не сохранять код как постоянный секрет.
|
||
4. Получить `/v1/info`, `/v1/state`, открыть WSS `/v1/events`.
|
||
5. При переподключении найти адрес по DNS-SD, сопоставить ID, проверить TLS;
|
||
при 401 запросить повторное сопряжение, не повторять команды автоматически.
|
||
|
||
Схема `musicbridge://` пока не зарегистрирована на iPhone; Safari ничего делать
|
||
с ней не должен. Swift, Xcode-проект, установка и интерфейс iPhone отложены.
|