13 KiB
13 KiB
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 по глобальному шорткату