6.5 KiB
Модуль Федерации (Federation Module) — Knot Messager
Модуль федерации обеспечивает децентрализованное взаимодействие между независимыми узлами (серверами) Knot Messager. Он реализует безопасный обмен сообщениями, синхронизацию присутствия (Presence), проксирование медиафайлов и координацию системных политик.
🏗 Архитектура конфедерации
Федерация Knot Messager построена на принципах Zero-Knowledge и Intersected Policies. Ключевые аспекты:
- Peer-to-Peer Trust: Узлы доверяют друг другу на основе предварительного обмена публичными ключами (Handshake).
- Domain Isolation: Модуль Федерации полностью изолирован от других модулей. Взаимодействие происходит через Domain Events (MediatR).
- No Data Duplication: Файлы не копируются на чужие сервера, а стримятся через авторизованные прокси-каналы.
🔒 Безопасность и Шифрование
Для защиты межсерверного трафика используется гибридная схема:
- Payload Encryption (AES-256): Содержимое пакетов шифруется на лету уникальным ключом AES.
- Key Wrapping (RSA-2048): Ключ AES и IV шифруются на публичный ключ сервера-получателя.
- Authentication (RSA Signature): Каждый входящий пакет подписывается приватным ключом отправителя. Подпись проверяется получателем по белому списку доменов.
📥 Входящие типы пакетов (Inbound Messages)
Модуль обрабатывает следующие типы федеративных транзакций через InboundFederationCommand:
| Тип сообщения | Описание | Действие |
|---|---|---|
text |
Обычное текстовое сообщение. | Сохранение в БД и уведомление локальных юзеров. |
presence_update |
Обновление статуса (Online/Offline/LastSeen). | Обновление кэша IsOnline для внешнего контакта. |
sync_capabilities |
Синхронизация системных настроек. | Обновление правил (Media, Polls, RTC) для партнера. |
rtc_signal |
WebRTC сигнализация (Offer/ICE). | Проброс сигнала конечному пользователю для звонка. |
message_edited |
Редактирование сообщения. | Обновление контента локальной копии сообщения. |
message_deleted |
Удаление сообщения "у всех". | Перманентное удаление сообщения из локальной БД. |
reaction_added |
Добавление эмодзи-реакции. | Синхронизация реакции внешнего пользователя. |
📂 Проксирование медиа (Storage Proxy)
Критически важный механизм, исключающий хранение чужих данных:
- Outgoing Proxy:
/api/federation/v1/proxy/{id}— сервер отдает файл только авторизованным серверам-партнерам. - Incoming Proxy:
/api/files/remote/{domain}/{id}— ваш сервер выступает "транзитом", запрашивает файл у партнера и стримит его вашему клиенту. - Безопасность: Ссылки на медиа внутри сообщений всегда указывают на локальный прокси, а не на оригинальный домен отправителя.
⚙ Настройка и Handshake
Администратор добавляет домен в белый список через Admin Module:
- Генерируется пара RSA-ключей для своего сервера (если нет).
- Выполняется запрос
/handshakeк удаленному серверу. - Обмениваются
Public Keysи Capabilities (возможности сервера). - С этого момента домен считается Trusted Node.
📡 Реализованные API Эндпоинты
POST /api/federation/v1/handshake— Установка связи.POST /api/federation/v1/inbound— Прием зашифрованных пакетов.GET /api/federation/v1/resolve/{username}— Поиск профиля по всей сети.GET /api/federation/v1/proxy/{id}— Стриминг контента для партнеров.
🧩 Взаимодействие с другими модулями (MediatR Events)
- MessageSentDomainEvent ➡ Триггерит рассылку сообщения внешним участникам.
- UserStatusChangedDomainEvent ➡ Пушит статус пользователя всем серверам-контактам.
- SystemSettingsUpdatedDomainEvent ➡ Синхронизирует возможности (Capabilities) с сетью.
MessageEdited/DeletedDomainEvent➡ Транслирует действия с сообщениями.
Important
Модуль Федерации требует корректно настроенного
System:DomainUrlв глобальном конфиге для формирования подписей.