Skip to content

Latest commit

 

History

History
510 lines (423 loc) · 28 KB

File metadata and controls

510 lines (423 loc) · 28 KB

NZ.RdpMaid / ПЛАН

Описание

Все планы по разработке будут зафиксированы в этом документе.

Формат

  • Формат записей следует виду [rdpm000] где:
    • [] литерал
    • rdpm приставка, сокращённое имя проекта
    • 000 номер записи

Шаблоны

  • [rdpm000] Испечь печеньки. Требования: n/a Создана: [2024-03-21] Начата: [n/a] Завершена: [n/a]

  • [rdpm000] [ОШИБКА] Сломалась фича.

    Описание:

    1. Шаг 1
    2. Шаг 2 Ожидается: Что-то. Фактически: То-то.

    Причина:

    Указать.

    Исправление:

    Описать.

    Создана: [2024-03-21] Начата: [n/a] Завершена: [n/a]

  • Следущий: [rdpm030]

СДЕЛАТЬ

  • [rdpm016] Подстраивать заголовок окна под тему оформления. Требования:

  • [rdpm017] Смена темы через аргументы командной строки. Требования:

    • Добавить возможность передать программе при старте настройку темы оформления: NZ.RdpMaid.App --theme PinkLoli Создана: [2023-11-21] Начата: [n/a] Завершена: [n/a]
  • [rdpm028] Добавить логи.

    Требования:

    • Интересующие события от приложения фиксируются в лог.
    • Лог пишется в файл в домашней директории в подпапку "logs".
    • Имя файла соответствует номеру дня месяца "01.log", "02.log" ... "31.log" таким образом оставляя возможность поднять старые логи, но и обеспечивая ротацию не захламлять папку большим объемом данных
    • По умолчанию уровень вывода "WARNING"
    • Пользователь может переопределить его в настройках без перезапуска
    • Лог должен писать события в буфер в памяти, периодически скидывая их на диск
    • Завершение работы должно форсировать процесс очистки буфера и записи на диск
    • Факт записи логов на диск не следует записывать в логи (1)
    • В лог фиксировать следующие события
      • Запуск
        • Начало запуска приложения
        • Завершение инициализации приложения
        • Завершение загрузки главного окна
      • Закрытие
        • Начало закрытия приложения
        • Начало освобождения мютекса
        • Окончание освобождения мютекса
        • Начало освобождения именованного канала
        • Окончание освобождения именованного канала
        • Окончание закрытия приложения
      • Фоновая работа
        • Переход в фоновый режим
        • Активация из фонового режима
        • Активация из фонового режима через именованный канал
      • Ввод/вывод
        • Начало чтения данных на диск
        • Окончание чтения данных на диск
        • Начало записи данных на диск (1)
        • Окончание записи данных на диск (1)
        • Начало чтения данных в сеть
        • Окончание чтения данных в сеть
      • Ошибки
        • Ошибка запуска: неверная конфигурация
        • Ошибка запуска: процесс уже запущен
        • Неожиданная ошибка

    Примечания:

    • Поступила жалоба пользователя на необычно долгое закрытие программы в конце рабочего дня.

    • Логирование этапов процесса завершения работы позволит определить причины задержки операции.

    • Прочие логи добавлены на всякий случай, авось пригодятся.

    Создана: [2024-03-21] Начата: [n/a] Завершена: [n/a]

  • [rdpm029] [ОПТИМИЗАЦИЯ] Работа в фоновом режиме.

    Требования:

    • Определять уход окна программы в фон.
    • Останавливать генерацию OTP.
    • Останавливать иные процессы если таковые имеются.
    • Определять активацию окна.
    • Запускать генерацию OTP.
    • Запускать иные процессы если таковые требуются.

    Примечания:

    • Поступила жалоба пользователя на необычно долгое закрытие программы в конце рабочего дня.

    • Есть подозрение, что в течение дня программа занимает ресурсы, которые при завершении приходится массово освобождать.

    • Следует максимально снизить деятельность программы в фоновом режиме, поидее можно остановить генерацию OTP, может выгрузить из памяти какие-нибудь объекты.

    Создана: [2024-03-21] Начата: [n/a] Завершена: [n/a]

ДЕЛАЮ

ГОТОВО

  • [rdpm027] Обновление III - Распаковка и Установка. Требования:

    • После завершения скачивания, не открывать каталог с дистрибутивом
    • На экране статуса обновления, если есть новое обновление в загрузках, и его версия выше версии приложения, программа предлагает установить его, отображая кнопку "установить"
    • После того как пользователь нажимает кнопку, начинается установка
    • Сначала дистрибутив распаковывается во временный каталог
    • После этого запускается специально приложение NZ.RdpMaid.Updater
    • NZ.RdpMaid.Updater посылает основному приложению сигнал на выключение И ждёт пока оно не выключится
    • Основное приложение принимает сигнал и выключается
    • NZ.RdpMaid.Updater дождавшись выключения основного приложения, делает резервную копию файлов основного приложения, потом резервную копию настроек приложения, потом заменяет файлы приложения файлами из временного каталога
    • NZ.RdpMaid.Updater запускает основное приложение и выключается
    • NZ.RdpMaid.Updater должен иметь графический интерфейс:
      • текстовый статус
      • полоска прогресса
    • Скрипт публикации должен включать программу обновления в установочный пакет Создана: [2024-02-15] Начата: [2024-02-17] Завершена: [2024-02-27]
  • [rdpm026] Обновление II - Скачка. Требования:

    • На экране статуса обновления, если нашлось новое обновление, программа сообщает об этом пользователю и предлагает скачать его, отображая кнопку "скачать"
    • После того как пользователь нажимает кнопку, начинается скачивание
    • Во время скачивания экран отображает прогресс
    • Скачивание происходит асинхронно
    • Экран можно закрыть и продолжить пользоваться программой
    • После завершения скачивания, открывать каталог с дистрибутивом, для ручной установки Создана: [2024-02-15] Начата: [2024-02-16] Завершена: [2024-02-17]
  • [rdpm025] Обновление I - Проверка. Требования:

    • Добавлена кнопка, запускающая процесс проверки обновления.
    • Добавлено окно, отображающее статус проверки.
    • Проверка обновления происходит через страницу релизов github.
    • При наличии обновления, ссылка на скачивание должна быть кликабельной.
    • По нажатии на ссылку, открывается браузер со страницей релиза. Создана: [2024-02-15] Начата: [2024-02-15] Завершена: [2024-02-16]
  • [rdpm024] Запуск в единственном экземпляре. Требования:

    • При запуске приложения проверять, а не запущен ли уже другой экземпляр этого приложения
    • Если запущен, то отменить запуск второго экземпляра, а окно первого экземпляра сделать активным Создана: [2024-02-14] Начата: [2024-02-14] Завершена: [2024-02-14]
  • [rdpm023] Тема оформления "Неко Арк" Требования:

    • Персонаж: "Неко Арк"
    • Главный цвет: желтый
    • Тона: серые ближе к светлому Создана: [2024-02-13] Начата: [2024-02-13] Завершена: [2024-02-13]
  • [rdpm022] Очищать пароль из буфера обмена через 10 секунд Требования:

    • После того как пароль скопирован в буфер обмена запускать таймер на 10 сек
    • По прошествии таймера заменять содержимое буфера пустой строкой
    • Если пока таймер работает пароль был отправлен в бефер еще раз, то откладывать таймер на еще 10 сек
    • Если на момент срабатывания таймера содержимое буфера отличается от пароля, то не трогать содержимое буфера Создана: [2024-02-13] Начата: [2024-02-13] Завершена: [2024-02-13]
  • [rdpm021] Подготовка у публикации на github. Требования:

    • Удалены небезопасные форматы хранилища.
    • Удалены все ссылки на внутреннюю инфраструктуру.
    • Код-ревью.
    • Пересоздан репозиторий. Создана: [2024-01-14] Начата: [2024-01-14] Завершена: [2024-01-14]
  • [rdpm020] Сделать кнопку для открытия каталога настроек в проводнике. Требования:

    • Навигация в венде к appdata / roaming / blahblahblah слишком геморная, потому нужна кнопка, которая сразу откроет этот каталог. Создана: [2024-01-14] Начата: [2024-01-14] Завершена: [2024-01-14]
  • [rdpm019] Предоставить возможность отредактировать шаблон RDP-файла. Требования:

    • Шаблон RDP-файла лежит в каталоге установки программы.
    • Шаблон можно отредактировать вручную, чтобы повлиять на настройки RDP.
    • Бонус:
      • При обновлении программы, файл-шаблона перетрётся и пользователь потеряет свои изменения, это печально. Потому стоит также проверять на наличие кастомного шаблона в пользовательском каталоге, и порекомендовать пользователям переопределять настройки скопировав файл туда из каталога установки. Создана: [2024-01-14] Начата: [2024-01-14] Завершена: [2024-01-14]
  • [rdpm018] [ОШИБКА] Не сохраняется секретный ключ генератора пин-кодов.

    Описание:

    1. Нажать кнопку [Исток]
    2. В диалоге задать новый секретный код
    3. Нажать кнопку [Сохранить] Ожидается: Секретный код поменялся - пин-коды генерятся от нового источника. Фактически: Секретный код остался как есть, пин-коды генерятся от старого источника.

    Причина:

    При рефакторинге PublishEventCommand была заменена на PublishNotificationCommand. Место использования - диалог сохранения секретного кода TOTP, кнопка [Сохранить], не было обновлено.

    Исправление:

    Заменить PublishEventCommand на PublishNotificationCommand.

    Рекоменации:

    • Дополнительно пройтись всем файлам и поискать идентификатор PublishEventCommand.
    • Попробовать сделать RuntimeContext заранее известным ресурсом, и обращаться к нему через StaticResource а не Binding, тогда данные ошибки будут отлавливаться на этапе компиляции XAML.
    • Альтернативно попробовать сделать так, чтобы ошибка в Binding приводила к аварийному завершению программы.

    Появилась в версии: [0.6.2] Коммит: [a1373acf046f1faf2b0e3625b4f6f40b1aa23dfc] Создана: [2023-11-21] Начата: [2023-11-21] Завершена: [2023-11-21]

  • [rdpm015] Безопасное хранилище. Требования:

    • в файле настроек добавлена опция "использовать безопасное хранилище"
    • при старте программа генерирует [секретный ключ] и кладёт его пользовательский каталог
    • сохранение данных
      • сериализуем данные в json
      • читаем [секретный ключ]
      • инициализируем AES алгоритм
      • генерируем случайный IV
      • шифруем сериализованные данные с помошью IV и [секретного ключа]
      • сохраняем данные в формате хранилища в пользовательский каталог
    • загрузка данных
      • загружаем данные в формате хранилища в пользовательский каталог
      • проверяем метку формата
      • проверяем IV
      • читаем IV
      • проверяем метку данных
      • читаем данные
      • читаем [секретный ключ]
      • инициализируем AES алгоритм
      • инициализируем прочитанный IV
      • расшифруем данные с помошью IV и [секретного ключа]
      • десериализуем расшифрованные данные из json
    • формат файл хранилища
      • метка формата 4 байта
      • метка IV 1 байт
      • длинна IV 4 байта
      • тело IV X байт
      • метка зашифрованных данных 1 байт
      • длинна зашифрованных данных 4 байта
      • тело зашифрованных данных X байт
    • если опция "использовать безопасное хранилище" включена
      • то хранение "какого-то текста" и "источника пин-кодов" переносится в безопасное хранилище
      • иначе работает по старой схеме Создана: [2023-11-19] Начата: [2023-11-19] Завершена: [2023-11-19]
  • [rdpm014] Переключатель тем оформления. Требования:

    • интерфейс
      • добавить выпадающий список с темами оформления
      • при выборе значения применять тему оформления без перезапуска программы
    • запоминать выбранную тему
    • загружать запомненную тему при старте программы Создана: [2023-11-18] Начата: [2023-11-19] Завершена: [2023-11-20]
  • [rdpm013] Темы оформления. Требования:

    • опция в файле настроек переключающая тему оформления
    • сделать параметры стилизации интерфейса
    • сделать настраивать параметры через файл стилей
    • сделать два файла стилей "Розовая лоли" и "Хозяйка ночи"
    • при старте брать тему из настроек и грузить соответствующий файл стилей Создана: [2023-11-18] Начата: [2023-11-18] Завершена: [2023-11-18]
  • [rdpm012] Подключить автогенерацию временных кодов. Требования:

    • опция в файле настроек включающая генерацию, по умолчанию (вкл)
    • интерфейс (при включённой настройке)
      • табло с обратным отсчетом времени жизни кода
      • полоска жизни кода
      • актуальный код сам подставляется в поле ввода
      • кнопка вызова диалога установки источника кодов
      • диалог установки источника кодов
      • импорт из формата Google Authenticator
    • адаптировать Ромину реализацию генератора кодов
      • библиотека Otp.NET
      • генератор
      • таймер
      • обновление интерфейса по таймеру
    • безопасное хранение и доступ к источнику кодов Создана: [2023-11-18] Начата: [2023-11-18] Завершена: [2023-11-18]
  • [rdpm011] [ОШИБКА] Не работает копирование "текста" в буфер обмена.

    Описание:

    Сценарий 1 "Псс!"

    1. Нажать "Тсс!"
    2. Ввести текст "123"
    3. Нажать "Сохранить"
    4. Нажать "Псс!"
    5. Вставить содержимое буфера обмена в блокнот Ожидается: Из буфера обмена скопировался текст "123". Фактически: Из буфера обмена скопировалась пустота.

    Сценарий 2 "Погнали вжобывать!"

    1. Нажать "Тсс!"
    2. Ввести текст "123"
    3. Нажать "Сохранить"
    4. Нажать "Погнали вжобывать!"
    5. Вставить содержимое буфера обмена в блокнот Ожидается: Из буфера обмена скопировался текст "123". Фактически: Из буфера обмена скопировалась пустота.

    Причина:

    Ошибка появилась в ветке [rdpm007] коммите [085df01ded7678b2abc78989430d54c4e71d2c24]. При проверке файла с текстом на существование путь не был отрезолвлен.

    Исправление:

    Добавлена резолюция пути к файлу с текстом.

    Создана: [2023-04-05] Начата: [2023-04-05] Завершена: [2023-04-05]

  • [rdpm010] Сделать скрипт создания портабельного пакета с ПО. Требования:

    • сборка всех файлов в zip-архив
    • добавление файлов README.md, и CHANGELOG.md
    • добавление файла ИНСТРУКЦИЯ.txt
    • исключение файла appsettings.json Создана: [2023-04-03] Начата: [2023-04-05] Завершена: [2023-04-05]
  • [rdpm009] Подготовка к дистрибуции. Требования:

    • убрать захардкоженные значения Login/Address из исходников appsettings.json
    • переименовать appsettings.json в appsettings.example.json
    • добавить файл ИНСТРУКЦИЯ.txt
    • в ИНСТРУКЦИЯ.txt вписать шаг копирования appsettings.example.json в appsettings.json Создана: [2023-04-12] Начата: [2023-04-12] Завершена: [2023-04-12]
  • [rdpm008] [ОШИБКА] После старта программы фокус на поле ввода пин-кода не ставится.

    Описание:

    1. Запустить программу
    2. Начать вводить пинкод Ожидается: Фокус ввода на поле "пин-код", пин-код вводится успешно. Фактически: Фокус ввода пёс знает где, пин-код не вводится.

    Если нажать или <ЛКМ> на поле "пин-код", то пин-код вводится, из этого следует, что проблема именно в первоначальной установке фокуса.

    Возможно она возникло в рамках [rdpm006] когда менялась разметка главного окна.

    Не воспроизводится на коммите [a3a9a0056df624281038f6a14c5612a9e59e1a18] ( master до мёржа [rdpm006] ). Воспроизводится на коммите [0e4f8a62b8abde68ce051d15171a5cc5bd459db0] ( master после мёржа [rdpm006] ).

    Следовательно ошибка была привнесена в рамках [rdpm006] когда менялась разметка главного окна.

    Причина:

    Изменения в разметке, которые прячут поле-ввода вместе с главным контентом на старте приложения не дают фокус-менеджеру зафокусировать поле ввода пин-кода.

    Исправление:

    • Добавлен триггер на состояние видимости основного контента, который устанавливает фокус-менеджер на фокусировку на поле-ввода пин-кода.
    • Убран более не нужный код в главном окне, инициализирующий фокус-менеджер, т.к. его теперь заместил код в вышеупомянутом триггере.

    Создана: [2023-04-12] Начата: [2023-04-12] Завершена: [2023-04-12]

  • [rdpm007] Опционально: RDP-файл в AppData Требования:

    • Добавить опцию в настройки: запись RDP-файла в AppData
      • Значения: true | false
      • По умолчанию: false
      • Если true: при попытке записать в RDP-файл
        • Создавать (если нет) каталог C:\users\username\AppData\RdpMaid
        • Писать RDP-файл туда
        • При запуске RDP читать файл оттуда
        • Аналогично при работе ПСС/ТСС
      • Обеспечить обратную совместимость:
        • appsettings.json от старой версии программы должен фолбечить на false Создана: [2023-04-12] Начата: [2023-04-12] Завершена: [2023-04-12]
  • [rdpm006] Проверка на запись RDP-файла. Требования:

    • При запуске проверить, есть ли доступ на запись в RDP-файл.
    • Если есть - то всё ок, ничего не делаем.
    • Если нет - ругаемся и просим юзера решить проблему.
      • Предложить варианты решения
        • Дать права на запись в RDP-файл или каталог программы.
        • Предложить скопировать программу в пользовательский каталог. Создана: [2023-04-12] Начата: [2023-04-12] Завершена: [2023-04-12]
  • [rdpm005] При фокусе на поле ввода и нажатии на переключаться на кнопку

  • [rdpm004] При активации окна автофокус на поле ввода пин-кода

  • [rdpm003] При запуске сессии копировать пароль в буфер обмена, чтобы потом руками не вводить

  • [rdpm002] При нажатии / запускать сессию, чтобы кнопку не жамкать

  • [rdpm001] Запилить иконку