Files
abdristus/docs/ARCHITECTURE.md

4.2 KiB
Raw Blame History

Architectural Guidance: Кроссплатформенный Менеджер Паролей

Эта документация детально описывает архитектурные решения, структуру проекта и стандарты разработки, обеспечивающие безопасность, масштабируемость и поддерживаемость системы.

1. Архитектурные принципы и паттерны

Backend (Rust / Tauri)

  • Separation of Concerns (SoC): Четкое разделение между инфраструктурой Tauri (commands/), бизнес-логикой (core/) и слоем данных (database/).
  • Dependency Inversion: Ядро системы (core/) не зависит от деталей реализации Tauri.
  • Repository Pattern: Работа с SQLite инкапсулирована в репозиториях, что позволяет легко менять схему БД или переходить на другой движок.

Frontend (Angular)

  • Domain-Driven Design (DDD): Структура папок организована вокруг бизнес-доменов (auth, vault), а не технических типов (все компоненты в одной куче).
  • Strategy Pattern: Используется в CryptoStrategyService для гибкого переключения между методами аутентификации (пароль, биометрия).
  • Adapter Pattern: TauriIpcService скрывает детали взаимодействия с Tauri API, предоставляя чистые RxJS интерфейсы.
  • Smart/Dumb Components: Четкое разделение ответственности: "умные" компоненты управляют состоянием, "глупые" — только отображением.

2. Структура папок и именование

Backend Structure (src-tauri/src/)

src-tauri/src/
├── commands/      # Обработчики IPC. Имя: [domain].rs (например, auth.rs)
├── core/          # Математика и логика. Имя: [feature].rs (например, crypto.rs)
├── database/      # SQL и миграции. 
├── events/        # Рассылка событий во фронтенд.
└── main.rs        # Конфигурация приложения.

Frontend Structure (src/app/)

src/app/
├── core/          # Singleton сервисы (Crypto, Auth, Ipc)
├── models/        # Классы сущностей. Имя: [name].model.ts
├── shared/        # UI-кит (Buttons, Inputs, Cards)
└── features/      # Модули фич. Свои компоненты, роуты и локальные сервисы.

3. Контракты и интерфейсы (Примеры)

IPC Command (Rust -> TS)

Rust:

#[tauri::command]
pub async fn decrypt_vault(password: String, vault_path: PathBuf) -> Result<VaultData, String> { ... }

TypeScript:

interface VaultData {
  accounts: AccountDTO[];
  updatedAt: number;
}

4. Стратегия безопасности

  1. Zero Trust Storage: Данные шифруются индивидуальным ключом DEK, который не хранится на диске без системной защиты (Keyring).
  2. Memory Safety: Rust гарантирует отсутствие утечек памяти в ядре. В Angular VaultService обязуется очищать BehaviorSubject при потере фокуса или блокировке.
  3. Argon2id: Минимум 2 прохода, 64МБ памяти (настраиваемо) для защиты от брутфорса.

5. Управление зависимостями

  • Rust: Использование cargo-edit для контроля версий. Минимизация unsafe кода.
  • Frontend: Строгое следование версиям в package.json. Использование ESLint со строгими правилами для Angular.