Files
abdristus/docs/TASKS.md

13 KiB
Raw Blame History

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

Note

Каждый тикет — одна атомарная единица работы: её можно взять, выполнить и смержить независимо от других. Архитектурные решения описаны в ARCHITECTURE.md.


[INFRA] — Инициализация и Инфраструктура

  • INFRA-01 Создать Tauri-проект (tauri init) с базовой конфигурацией tauri.conf.json
  • INFRA-02 Создать Angular-проект с флагом --standalone (без NgModules)
  • INFRA-03 Настроить Rust-зависимости в Cargo.toml: argon2, chacha20poly1305, sqlx, keyring, uuid
  • INFRA-04 Настроить npm-зависимости: @tauri-apps/api, rxjs, установить ESLint + строгий TypeScript
  • INFRA-05 Настроить tauri-plugin-global-shortcut в main.rs
  • INFRA-06 Настроить глобальные CSS-переменные и тему (цвета, типографику из DESIGN.md)

[CRYPTO] — Криптография (Rust · core/crypto.rs)

  • CRYPTO-01 Реализовать генерацию случайной соли (rand) для Argon2id
  • CRYPTO-02 Реализовать деривацию ключа DEK из Мастер-пароля через Argon2id (параметры: 2 прохода, ≥64 МБ)
  • CRYPTO-03 Реализовать шифрование данных через XChaCha20-Poly1305 (возвращает nonce + ciphertext)
  • CRYPTO-04 Реализовать дешифрование данных через XChaCha20-Poly1305 (принимает nonce + ciphertext)
  • CRYPTO-05 Написать unit-тесты: шифрование → дешифрование возвращает исходные данные
  • CRYPTO-06 Написать unit-тест: неверный nonce вызывает ошибку аутентификации

[PASSGEN] — Генератор Паролей (Rust · core/password_gen.rs)

  • PASSGEN-01 Реализовать генерацию пароля заданной длины из набора символов (буквы, цифры)
  • PASSGEN-02 Добавить поддержку флага включения специальных символов
  • PASSGEN-03 Написать unit-тест: результат соответствует заданным параметрам (длина, набор символов)

[DB] — База Данных (Rust · database/)

  • DB-01 Написать SQL-схему для таблицы accounts (database/schema.sql): поля id, service_name, encrypted_data, nonce, updated_at, is_deleted
  • DB-02 Реализовать функцию создания/открытия изолированного файла БД vault_<uuid>.sqlite (database/repository.rs)
  • DB-03 Определить Rust-структуры для маппинга таблиц БД (database/models.rs)
  • DB-04 Реализовать INSERT — добавление новой зашифрованной записи (repository.rs)
  • DB-05 Реализовать SELECT — получение всех записей по vault_id (с фильтром is_deleted = false)
  • DB-06 Реализовать UPDATE — обновление записи и её поля updated_at
  • DB-07 Реализовать UPDATE — Soft-delete записи (установка is_deleted = true)
  • DB-08 Написать integration-тест для каждой операции репозитория (CRUD)

[AUTH] — Аутентификация (Rust · commands/auth.rs)

  • AUTH-01 Реализовать IPC-команду unlock_vault: принимает Мастер-пароль, возвращает успех/ошибку
  • AUTH-02 Реализовать сохранение DEK в системный Keyring после успешного ввода Мастер-пароля (macOS Keychain)
  • AUTH-03 Реализовать сохранение DEK в системный Keyring (Windows Credential Manager)
  • AUTH-04 Реализовать IPC-команду unlock_vault_biometric: вытащить DEK из Keyring через biometric prompt (macOS Touch ID)
  • AUTH-05 Реализовать IPC-команду unlock_vault_biometric: вытащить DEK из Keyring через biometric prompt (Windows Hello)
  • AUTH-06 Реализовать IPC-команду lock_vault: сбросить сессионный DEK из памяти
  • AUTH-07 Написать integration-тест для команды unlock_vault с корректным и некорректным паролем

[VAULT] — Управление Записями (Rust · commands/vault.rs)

  • VAULT-01 Реализовать IPC-команду get_accounts: расшифровать и вернуть все записи для текущей сессии
  • VAULT-02 Реализовать IPC-команду create_account: принять данные от фронтенда, зашифровать через DEK, сохранить в БД
  • VAULT-03 Реализовать IPC-команду update_account: обновить запись, выставить updated_at
  • VAULT-04 Реализовать IPC-команду delete_account: выполнить soft-delete (is_deleted = true)
  • VAULT-05 Написать integration-тест для каждой IPC-команды vault

[EVENTS] — Push-события (Rust · events/emitter.rs)

  • EVENTS-01 Реализовать эмиттер события vault-updated (отправляется после create/update/delete)
  • EVENTS-02 Реализовать эмиттер события system-locked (отправляется при блокировке ОС или по таймеру)

[FE-CORE] — Frontend: Сервисы и Ядро (Angular · app/core/)

  • FE-CORE-01 Реализовать TauriIpcService: типизированная обертка над window.__TAURI__.invoke
  • FE-CORE-02 Реализовать TauriEventBusService: RxJS-адаптер, слушающий события vault-updated и system-locked
  • FE-CORE-03 Реализовать VaultService: BehaviorSubject<Account[]> для хранения сессионного стейта
  • FE-CORE-04 В VaultService: реализовать метод clear()сброс данных из памяти при блокировке
  • FE-CORE-05 Реализовать CryptoStrategyService: интерфейс AuthStrategy с двумя реализациями — MasterPasswordStrategy и BiometricStrategy

[FE-MODELS] — Frontend: Модели данных (Angular · app/models/)

  • FE-MODELS-01 Определить интерфейс AccountDTO (raw данные от Rust)
  • FE-MODELS-02 Реализовать класс Account с геттерами, валидацией и методом accept(visitor) для паттерна Visitor
  • FE-MODELS-03 Реализовать класс User с полями профиля
  • FE-MODELS-04 Реализовать CsvExportVisitor — экспорт аккаунтов в CSV через паттерн Visitor

[FE-SHARED] — Frontend: UI-кит (Angular · app/shared/)

  • FE-SHARED-01 Создать компонент ButtonComponent (primary / secondary / tertiary варианты из DESIGN.md)
  • FE-SHARED-02 Создать компонент PasswordInputComponent: поле ввода + иконка показать/скрыть
  • FE-SHARED-03 В PasswordInputComponent: добавить визуальный индикатор сложности пароля (weak / fair / strong)
  • FE-SHARED-04 Создать компонент AccountCardComponent: отображение одной записи (сервис, логин, кнопки действий)
  • FE-SHARED-05 Создать компонент NotificationComponent: toast-уведомления об ошибках и успехе

[FE-AUTH] — Frontend: Экран Авторизации (Angular · app/features/auth/)

  • FE-AUTH-01 Создать экран ввода Мастер-пароля: форма с PasswordInputComponent, кнопка «Войти»
  • FE-AUTH-02 Подключить экран к CryptoStrategyService (MasterPasswordStrategy)
  • FE-AUTH-03 Создать экран Биометрии: кнопка «Войти по биометрии», fallback на Мастер-пароль
  • FE-AUTH-04 Подключить экран биометрии к CryptoStrategyService (BiometricStrategy)
  • FE-AUTH-05 Реализовать навигацию: успешная авторизация → главное окно; ошибка → сообщение об ошибке

[FE-MAIN] — Frontend: Главное Окно (Angular · app/features/main-window/)

  • FE-MAIN-01 Создать layout главного окна: сайдбар + основной контент
  • FE-MAIN-02 Реализовать список аккаунтов, подписанный на VaultService (реактивное обновление)
  • FE-MAIN-03 Добавить строку поиска/фильтрации по названию сервиса
  • FE-MAIN-04 Добавить фильтрацию по тегам
  • FE-MAIN-05 Создать форму добавления записи: поля (сервис, логин, пароль, заметки, теги) + кнопка «Сгенерировать пароль»
  • FE-MAIN-06 Подключить форму добавления к IPC-команде create_account
  • FE-MAIN-07 Создать форму редактирования записи (переиспользует форму добавления, предзаполнена данными)
  • FE-MAIN-08 Подключить форму редактирования к IPC-команде update_account
  • FE-MAIN-09 Реализовать удаление записи с confirm-диалогом, использовать delete_account
  • FE-MAIN-10 Создать экран Настроек: поле «таймер автоблокировки» (минуты), параметры генератора паролей

[FE-SPOTLIGHT] — Frontend: Окно Spotlight (Angular · app/features/spotlight/)

  • FE-SPOTLIGHT-01 Создать изолированный компонент Spotlight-окна (отдельный BrowserWindow в Tauri)
  • FE-SPOTLIGHT-02 Реализовать строку быстрого поиска по аккаунтам (live-filter из VaultService)
  • FE-SPOTLIGHT-03 Реализовать быстрое добавление аккаунта прямо из Spotlight-окна
  • FE-SPOTLIGHT-04 Реализовать закрытие Spotlight-окна при потере фокуса (blur event)

[SYSUX] — Системные UX-функции (Rust + Angular)

  • SYSUX-01 Зарегистрировать глобальный шорткат (Cmd/Ctrl+Shift+Space) для открытия Spotlight (main.rs)
  • SYSUX-02 Реализовать таймер бездействия на стороне Rust: по истечении отправлять событие system-locked
  • SYSUX-03 Подписать Angular (TauriEventBusService) на событие system-locked → вызвать VaultService.clear() и перейти на экран авторизации
  • SYSUX-04 Реализовать обработку события блокировки ОС (Rust) → отправлять system-locked

[TEST] — Тестирование

  • TEST-01 Unit-тесты криптографии (покрыты в тикетах CRYPTO-05, CRYPTO-06)
  • TEST-02 Unit-тесты генератора паролей (покрыт в PASSGEN-03)
  • TEST-03 Integration-тесты репозитория БД (покрыты в DB-08)
  • TEST-04 Integration-тесты IPC-команд auth (покрыты в AUTH-07)
  • TEST-05 Integration-тесты IPC-команд vault (покрыты в VAULT-05)
  • TEST-06 Unit-тесты Angular сервисов (VaultService, TauriIpcService, CryptoStrategyService)
  • TEST-07 E2E: создание нового сейфа и первый вход (Мастер-пароль)
  • TEST-08 E2E: добавление и поиск записи в главном окне
  • TEST-09 E2E: автоблокировка по таймеру — данные очищаются из памяти
  • TEST-10 E2E: открытие Spotlight по глобальному шорткату