# 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 | App | `deps/icon.png` | | Reload table | Reload | `deps/reload.png` | | Add client | Add | `deps/add.png` | | Edit client | Edit | `deps/edit.png` | | Delete client | Delete | `deps/delete.png` | | Get info | Info | `deps/info.png` | | Get license file | License file | `deps/getLicenseFile.png` | | Drop files (автозаполнение) | 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` и пересоберите проект.