fix: added user doc + tech doc. minor fixes
This commit is contained in:
145
README.md
Normal file
145
README.md
Normal file
@@ -0,0 +1,145 @@
|
||||
# LicenseManager — пользовательская документация
|
||||
|
||||
## Назначение
|
||||
LicenseManager — настольное приложение на Qt5 для ведения базы клиентов и выпуска файлов лицензий на основе аппаратного идентификатора.
|
||||
|
||||
## Возможности
|
||||
- хранение клиентов в локальной базе SQLite;
|
||||
- добавление, редактирование и удаление записей;
|
||||
- импорт данных клиента из JSON-файла (drag-and-drop или выбор файла);
|
||||
- выдача файла лицензии по выбранной записи;
|
||||
- отображение статуса базы и информации о сборке.
|
||||
|
||||
## Требования
|
||||
- ОС: Linux/Windows/macOS (Qt5);
|
||||
- зависимости при сборке: Qt5 (Core, Gui, Widgets, Sql), OpenSSL;
|
||||
- для SQLite: системный драйвер Qt `QSQLITE` (например, пакет `libqt5sql5-sqlite` в Debian/Ubuntu).
|
||||
|
||||
## Сборка из исходников
|
||||
```bash
|
||||
cmake -S . -B build
|
||||
cmake --build build -j
|
||||
./build/LicenseManager
|
||||
```
|
||||
|
||||
## Установка как .deb (опционально)
|
||||
```bash
|
||||
./deb/build.sh /path/to/LicenseManager
|
||||
sudo dpkg -i licensemanager_*.deb
|
||||
```
|
||||
|
||||
## Первое использование и база данных
|
||||
- Приложение хранит данные в `./db.sqlite` относительно текущей рабочей директории.
|
||||
- При первом запуске, если структура базы отсутствует, приложение предложит создать базу.
|
||||
- Если нужен фиксированный путь, запускайте приложение из нужной папки или измените `DB_PATH` в коде.
|
||||
|
||||
## Интерфейс
|
||||
### Таблица клиентов
|
||||
Столбцы:
|
||||
- Фамилия, Имя, Отчество
|
||||
- Email, Телефон
|
||||
- Компания, Город
|
||||
- Срок лицензии (если пусто — отображается `Permanent`)
|
||||
- Комментарий
|
||||
|
||||
### Панель инструментов
|
||||
- Add client — добавить запись;
|
||||
- Edit client — редактировать выбранную запись;
|
||||
- Delete client — удалить выбранные записи;
|
||||
- Get info — информация о сборке.
|
||||
|
||||
### Контекстное меню таблицы
|
||||
- Reload table — обновить список;
|
||||
- Add/Edit/Delete client — действия с записями;
|
||||
- Get license file — сформировать файл лицензии.
|
||||
|
||||
### Иконки действий
|
||||
| Действие | Иконка | Файл |
|
||||
| --- | --- | --- |
|
||||
| App icon | <img src="deps/icon.png" width="28" height="28" alt="App"> | `deps/icon.png` |
|
||||
| Reload table | <img src="deps/reload.png" width="28" height="28" alt="Reload"> | `deps/reload.png` |
|
||||
| Add client | <img src="deps/add.png" width="28" height="28" alt="Add"> | `deps/add.png` |
|
||||
| Edit client | <img src="deps/edit.png" width="28" height="28" alt="Edit"> | `deps/edit.png` |
|
||||
| Delete client | <img src="deps/delete.png" width="28" height="28" alt="Delete"> | `deps/delete.png` |
|
||||
| Get info | <img src="deps/info.png" width="28" height="28" alt="Info"> | `deps/info.png` |
|
||||
| Get license file | <img src="deps/getLicenseFile.png" width="28" height="28" alt="License file"> | `deps/getLicenseFile.png` |
|
||||
| Drop files (автозаполнение) | <img src="deps/dropFiles.png" width="28" height="28" alt="Drop files"> | `deps/dropFiles.png` |
|
||||
|
||||
### Строка статуса
|
||||
Показывает состояние базы (готова/ошибка/в работе).
|
||||
|
||||
## Работа с клиентами
|
||||
### Добавление
|
||||
1. Нажмите `Add client`.
|
||||
2. Вкладка `File autofilled`:
|
||||
- перетащите JSON-файл на область или нажмите и выберите файл;
|
||||
- данные будут подставлены автоматически.
|
||||
3. Вкладка `Main info`:
|
||||
- заполните поля вручную.
|
||||
4. Вкладка `License time`:
|
||||
- включите `License is temporally`, чтобы выбрать дату окончания.
|
||||
5. Нажмите `Save`.
|
||||
|
||||
Важно: поле `Hardware hash` можно редактировать только при добавлении записи.
|
||||
|
||||
### Редактирование
|
||||
1. Выберите одну запись.
|
||||
2. Нажмите `Edit client`.
|
||||
3. Измените данные и нажмите `Save`.
|
||||
|
||||
Если нужно изменить `Hardware hash`, удалите запись и создайте новую.
|
||||
|
||||
### Удаление
|
||||
Выберите записи и нажмите `Delete client` (или через контекстное меню). Подтвердите удаление.
|
||||
|
||||
### Обновление списка
|
||||
Используйте `Reload table` для перечитывания данных из базы.
|
||||
|
||||
## Генерация файла лицензии
|
||||
1. Выберите одну запись в таблице.
|
||||
2. Нажмите `Get license file`.
|
||||
3. Укажите место сохранения (по умолчанию — `Documents/` или `Home/`).
|
||||
4. Файл сохраняется с расширением `.dat` (если расширение не указано, оно добавляется автоматически).
|
||||
|
||||
Внутри файла содержится зашифрованный (RSA) CBOR/JSON с полями:
|
||||
- `machineId` — аппаратный идентификатор (`hardwareHash`);
|
||||
- `validUntil` — дата окончания лицензии в ISO-формате (опционально).
|
||||
|
||||
## Формат JSON для авто‑заполнения
|
||||
Пример:
|
||||
```json
|
||||
{
|
||||
"lastName": "Иванов",
|
||||
"firstName": "Иван",
|
||||
"patronymic": "Иванович",
|
||||
"email": "ivan@example.com",
|
||||
"phone": "+7(777)777-77-77",
|
||||
"city": "Москва",
|
||||
"yourCompany": "ООО Ромашка",
|
||||
"hardwareHash": "abcdef0123456789"
|
||||
}
|
||||
```
|
||||
Любое поле можно опустить — оно останется пустым. Для выдачи лицензии важно заполнить `hardwareHash`.
|
||||
|
||||
## Хранилище данных
|
||||
SQLite-файл: `db.sqlite` в рабочей директории.
|
||||
|
||||
Таблица `clients`:
|
||||
- `id` (INTEGER, PK, AUTOINCREMENT)
|
||||
- `city`, `email`, `firstName`, `hardwareHash`, `lastName`, `patronymic`, `phone`, `yourCompany` (TEXT, NOT NULL)
|
||||
- `licenseTime` (TEXT, nullable)
|
||||
- `comment` (TEXT, nullable)
|
||||
|
||||
## Настройки
|
||||
Размеры окон сохраняются через `QSettings` (организация `LicenseManager`).
|
||||
Расположение конфигурации зависит от ОС (на Linux обычно `~/.config/LicenseManager/`).
|
||||
|
||||
## Технический обзор (для сопровождения)
|
||||
- Стек: C++20, Qt5 Widgets/Sql, OpenSSL, SQLite.
|
||||
- Основные модули:
|
||||
- `MainWidget` — главное окно, таблица, меню, выдача лицензии.
|
||||
- `LicenseModel` — модель таблицы и работа с SQLite (в асинхронных задачах).
|
||||
- `EditClientDialog` — диалог добавления/редактирования, импорт JSON.
|
||||
- `LicenseGenerator`/`Crypt` — утилиты шифрования и генерации файла (часть функций не привязана к UI).
|
||||
- Ресурсы Qt (`deps.qrc`) включают иконки, `tables.ddl` для инициализации БД и приватный ключ `Key`.
|
||||
- Для смены ключа шифрования замените `deps/Key` и пересоберите проект.
|
||||
Reference in New Issue
Block a user