Files
LicenseManager/README.md

146 lines
7.7 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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` и пересоберите проект.