Identity Service
Файл:
backend/src/services/identity.rs
Сервис управления идентичностью пользователя. Отвечает за создание, получение и обновление identity — центральной сущности, к которой привязаны устройства, ключи и пространства.
Эндпоинты
| Метод | Путь | Функция | Описание |
|---|---|---|---|
| GET | /api/identity | get_identity_svc | Получить текущую identity |
| POST | /api/identity | create_identity_svc | Создать новую identity |
| POST | /api/identity/name | update_identity_name_svc | Обновить имя identity |
Зависимости
IdentityManager— CRUD операции с identity в БДDeviceManager— привязка устройства к identityVaultManager— сохранение signing key в защищённое хранилище
Scope: этот сервис управляет собственной (own) identity пользователя. Связи с чужими identity (known external identities) — отдельная сущность, см. Meet Service и таблицу
acquaintances. Identity Service не знает о чужих identity; MeetService не модифицирует own identity. Граница чёткая: own ↔ external — два разных хранилища.
get_identity_svc
GET /api/identity
Возвращает текущую identity пользователя (или None, если ещё не создана).
Параметры
| Имя | Тип | Описание |
|---|---|---|
identity_manager | Arc<Mutex<IdentityManager>> | Менеджер идентичности |
Возвращает
Result<Option<Identity>, String>
Логика
- Захватывает lock на
IdentityManager - Возвращает клон текущей identity (если есть)
create_identity_svc
POST /api/identity
Создаёт новую identity с опциональным именем. Генерирует Ed25519 ключевую пару, сохраняет signing key в vault (если разблокирован), привязывает текущее устройство к identity.
Параметры
| Имя | Тип | Описание |
|---|---|---|
name | Option<String> | Имя identity (опционально) |
identity_manager | Arc<Mutex<IdentityManager>> | Менеджер идентичности |
device_manager | Arc<Mutex<DeviceManager>> | Менеджер устройств |
vault_manager | Arc<Mutex<VaultManager>> | Менеджер хранилища |
Возвращает
Result<Identity, String>
Логика
- Создаёт identity через
IdentityManager::create_identity(name) - Извлекает байты signing key из созданной identity
- Если vault разблокирован — сохраняет signing key в vault
- Если vault заблокирован — сохраняет signing key как "pending" в памяти
- Зануляет (zeroize) signing key в стеке для безопасности
- Привязывает текущее устройство к identity через
DeviceManager - Записывает метрики (успех/ошибка)
update_identity_name_svc
POST /api/identity/name
Обновляет отображаемое имя текущей identity.
Параметры
| Имя | Тип | Описание |
|---|---|---|
name | String | Новое имя |
identity_manager | Arc<Mutex<IdentityManager>> | Менеджер идентичности |
Возвращает
Result<(), String>
Логика
- Захватывает lock на
IdentityManager - Вызывает
update_identity_name(name) - Записывает метрики (успех/ошибка)