Skip to content

Identity Service

Файл: backend/src/services/identity.rs

Сервис управления идентичностью пользователя. Отвечает за создание, получение и обновление identity — центральной сущности, к которой привязаны устройства, ключи и пространства.

Эндпоинты

МетодПутьФункцияОписание
GET/api/identityget_identity_svcПолучить текущую identity
POST/api/identitycreate_identity_svcСоздать новую identity
POST/api/identity/nameupdate_identity_name_svcОбновить имя identity

Зависимости

  • IdentityManager — CRUD операции с identity в БД
  • DeviceManager — привязка устройства к identity
  • VaultManager — сохранение 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_managerArc<Mutex<IdentityManager>>Менеджер идентичности

Возвращает

Result<Option<Identity>, String>

Логика

  1. Захватывает lock на IdentityManager
  2. Возвращает клон текущей identity (если есть)
plantuml Diagram

create_identity_svc

POST /api/identity

Создаёт новую identity с опциональным именем. Генерирует Ed25519 ключевую пару, сохраняет signing key в vault (если разблокирован), привязывает текущее устройство к identity.

Параметры

ИмяТипОписание
nameOption<String>Имя identity (опционально)
identity_managerArc<Mutex<IdentityManager>>Менеджер идентичности
device_managerArc<Mutex<DeviceManager>>Менеджер устройств
vault_managerArc<Mutex<VaultManager>>Менеджер хранилища

Возвращает

Result<Identity, String>

Логика

  1. Создаёт identity через IdentityManager::create_identity(name)
  2. Извлекает байты signing key из созданной identity
  3. Если vault разблокирован — сохраняет signing key в vault
  4. Если vault заблокирован — сохраняет signing key как "pending" в памяти
  5. Зануляет (zeroize) signing key в стеке для безопасности
  6. Привязывает текущее устройство к identity через DeviceManager
  7. Записывает метрики (успех/ошибка)
plantuml Diagram

update_identity_name_svc

POST /api/identity/name

Обновляет отображаемое имя текущей identity.

Параметры

ИмяТипОписание
nameStringНовое имя
identity_managerArc<Mutex<IdentityManager>>Менеджер идентичности

Возвращает

Result<(), String>

Логика

  1. Захватывает lock на IdentityManager
  2. Вызывает update_identity_name(name)
  3. Записывает метрики (успех/ошибка)
plantuml Diagram