# Клиент сервера лицензий

Данное приложение дает возможность активации продукте через сервер лицензий.

## Сборка

Перед началом сборки, нужно [настроить](https://gitlab.iwarma.ru/groups/iwa/dev/license/-/wikis/home) go
чтобы он мог работать с приватным репозиторием.

В начале, вызываем `go mod tidy` чтобы получить все зависимости, после этого, выполняем `go build`
в текущей папке чтобы собрать приложение.

## API

### Генерация токена

Чтобы получить токен активации, пользователь должен вызвать `/token/` с запросом GET. Аргумент `serial`
должно быть предоставлено. Это должен быть "полный" uuid лицензии. 

UUID запроса полной лицензии на сервере лицензий:
```
{
  licenseFullUuid(id: 1)
}
```

с получение ответа:
```
{
  "data": {
    "licenseFullUuid": "373f50bb-1c1b-4675-b19e-51089a3cd8a6"
  }
}
```

Запрос к клиенту будет выглядеть так:
```
curl -X GET localhost:8050/token/?serial=373f50bb-1c1b-4675-b19e-51089a3cd8a6
```

На что мы получим ответ:
```
{"status":"ok","reason":"","response":"==================BEGIN=================\r\nNz9QuxwbRnWxnlEImjzYpmGI2RCl+zuDs453Zw/N\r\n6HIAAAAeMjAyMS0wOC0wMVQxMDoyODozMi4yNTY1MjYyNjFa\r\n==================END==================="}
```

Поле `response` вместе со всеми `\r\n` необходимо отправить на сервер лицензий для получения файла активации.

### Активация лицензии


При получени нашего зароса активации, сервер лицензий проверяет его и отвечает нам файлом лицензии:
```
{"license":"eyJ1dWlkIjoiNzhkMDg3OTAtN2QzNi00YjBiLWFiNDEtY2Q2NWI3ZDVhMDliIiwiaGFyZHdhcmUiOiI2MTg4ZDkxMC1hNWZiLTNiODMtYjM4ZS03NzY3MGZjZGU4NzIiLCJjdXN0b21lciI6IlNpZW1lbnMiLCJwcm9kdWN0IjoiQ29uc29sZSIsInR5cGUiOiJFTlRFUlBSSVNFIiwiZmVhdHVyZXMiOltdLCJvcHRpb25zIjp7fSwiZXZhbHVhdGlvblN0YXJ0IjoiMjAyMS0wNy0zMFQyMDoxODo1OC4zOTY3NTdaIiwiZXZhbHVhdGlvbkVuZCI6IjIwMjEtMDgtMjlUMjA6MTg6NTguMzk2NzY1WiJ9","signature":" "}
```

Чтобы активировать продукт, нужно отправить этот "файл" через POST запрос на API `/activate/`, например так:
```
curl -X GET localhost:805POST localhost:8050/activate/ -H "Content-Type: application/json" -d '{"license":"eyJ1dWlkIjoiNzhkMDg3OTAtN2QzNi00YjBiLWFiNDEtY2Q2NWI3ZDVhMDliIiwiaGFyZHdhcmUiOiI2MTg4ZDkxMC1hNWZiLTNiODMtYjM4ZS03NzY3MGZjZGU4NzIiLCJjdXN0b21lciI6IlNpZW1lbnMiLCJwcm9kdWN0IjoiQ29uc29sZSIsInR5cGUiOiJFTlRFUlBSSVNFIiwiZmVhdHVyZXMiOltdLCJvcHRpb25zIjp7fSwiZXZhbHVhdGlvblN0YXJ0IjoiMjAyMS0wNy0zMFQyMDoxODo1OC4zOTY3NTdaIiwiZXZhbHVhdGlvbkVuZCI6IjIwMjEtMDgtMjlUMjA6MTg6NTguMzk2NzY1WiJ9","signature":" "}'
```

**Важно!**  Заголовок`Content-Type` должен быть выставлен в `application/json`.

В ответ, мы получаем:
```
{"status":"ok","reason":"","response":"license activated"}
```

Что означает, что лицензия была проверена и принята.

### Авто активация ицензии

Если у приложения есть доступ в Интернет, мы можем активировать лицензию одним запросом API:
```
curl -X GET localhost:8050/auto/?serial=78d08790-7d36-4b0b-b3d4-0b7b34c04dfc
```

В ответ, мы получаем такой же ответ о результате активации:
```
{"status":"ok","reason":"","response":"license activated"}
```

### Информация о лицензии

Когда лицензия активирована, программное обеспечение может вызвать GET запрос на API `/license/`, чтобы проверить
статус лицензии и получить его функции. Если нет файла лицензии, или он поврежден, или у лицензии
истек срок действия, будет возвращена ошибка 404.

Только если лицензия действительна, API вернет 200 с информацией о лицензии.

Запрос на этот api: 
```
curl -X GET localhost:8050/license/
```

Ответ с валидной лицензией:
```
{
   "status":"ok",
   "reason":"",
   "response":{
      "uuid":"78d08790-7d36-4b0b-ab41-cd654fef2f25",
      "hardware":"6188d910-a5fb-3b83-b38e-77670fcde872",
      "customer":"Siemens",
      "product":"Console",
      "type":"ENTERPRISE",
      "features":[
         "antivirus",
         "opc_da"
      ],
      "options":{
         "input_10":"10"
      },
      "evaluationStart":"2021-08-02T20:02:20.226357Z",
      "evaluationEnd":"2021-09-01T20:02:20.226360Z"
   }
}
```