5.5 KiB
5.5 KiB
Lic Decoder API
Endpoints
GET /api/status
Проверка готовности системы (JRE и Ring).
- Аутентификация: не требуется
- Rate limit: не применяется
Пример ответа:
{
"jre": { "installed": true, "version": "11.0.21", "valid": true },
"ring": { "installed": true, "version": "0.19.5+12", "valid": true },
"ready": true
}
POST /api/decode
Декодирование файла лицензии 1С (.lic).
- Content-Type:
multipart/form-data - Аутентификация: опционально (Bearer JWT) — см. ниже
- Rate limit: 3 запроса в час на IP (без JWT)
Параметры:
| Поле | Тип | Обязательный | Описание |
|---|---|---|---|
license |
file | да | .lic файл (макс. 5 МБ) |
detailed |
string | нет | "true" — добавить сравнение аппаратной конфигурации |
Заголовки:
| Заголовок | Обязательный | Описание |
|---|---|---|
Authorization |
нет | Bearer <JWT> — обходит rate limit |
Пример ответа:
{
"licName": "XXXXXXXXXXXXXXX",
"pinCode": "XXXX-XXX-XXX-XXX-X",
"licData": "Данные лицензии...",
"validateData": "Результат валидации...",
"licHWConfig": null,
"currentHWConfig": null
}
При detailed=true поля licHWConfig и currentHWConfig содержат текст аппаратных конфигураций.
Коды ошибок:
| Код | Описание |
|---|---|
| 400 | Файл не загружен или неверный тип (.lic only) |
| 413 | Файл слишком большой (макс 5 МБ) |
| 422 | Не удалось декодировать файл лицензии |
| 429 | Превышен rate limit |
GET /api/docs
Возвращает данную документацию в формате JSON.
Rate Limits
| Параметр | Значение |
|---|---|
| Окно | 1 час |
| Максимум запросов | 3 |
| Ключ | IP-адрес (из X-Forwarded-For) |
| Обход | Валидный JWT токен в Authorization |
Сервер читает IP из заголовков реверс-прокси (X-Forwarded-For). Убедитесь что trust proxy включён (по умолчанию true).
Заголовки ответа:
| Заголовок | Описание |
|---|---|
X-RateLimit-Limit |
Максимум запросов в окне |
X-RateLimit-Remaining |
Оставшиеся запросы в текущем окне |
X-RateLimit-Reset |
Секунды до сброса окна |
Пример ответа 429:
{
"error": "Rate limit exceeded",
"message": "Maximum 3 decode requests per hour. Retry after 2453s.",
"retryAfter": 2453
}
Аутентификация (JWT)
Аутентификация опциональна. Предоставление валидного JWT токена в заголовке Authorization снимает rate limit.
Использование
Authorization: Bearer <ваш_JWT_токен>
Генерация токена
Токен подписывается алгоритмом HS256 с секретом из переменной окружения JWT_SECRET:
# Генерация токена (серверный JWT_SECRET должен совпадать)
JWT_SECRET="your-secret-key" node -e "
const jwt = require('jsonwebtoken');
console.log(jwt.sign({}, process.env.JWT_SECRET, { expiresIn: '30d' }));
"
Переменные окружения
| Переменная | Описание |
|---|---|
JWT_SECRET |
Секрет для проверки JWT |
PORT |
Порт сервера (по умолчанию 3000) |
UPLOAD_DIR |
Директория для загрузок |
TMP_BASE |
Базовая директория для временных файлов |
RING_CMD |
Путь к команде ring |
Примеры запросов
Без JWT (с rate limit)
curl -F "license=@license.lic" http://localhost:3000/api/decode
С JWT (без rate limit)
curl -H "Authorization: Bearer eyJhbGciOiJIUzI1NiJ9..." \
-F "license=@license.lic" \
http://localhost:3000/api/decode
Подробный режим
curl -F "license=@license.lic" -F "detailed=true" http://localhost:3000/api/decode