# Config

## Описание

Сервис выдачи настроек других сервисов. 

## Работа с шифрованными файлами конфигурации

Функционал шифрования обеспечивает наиболее безопасный способ хранения данных доступа к различным ресурсам (базы данных, почтовые сервера, провайдеры отправки смс-сообщений). Для шифрования файлов конфигурации используется симметричный алгоритм блочного шифрования  **aes-256-cbc**.

Алгоритм действий системного администратора:

-   Формирование конфигурационных файлов.
-   Шифрование файлов с использованием предоставленного скрипта.
-   Подготовка сервиса конфигурации для работы с шифрованными файлами конфигурации.
-   Сборка образа с шифрованными файлами и настройками.

### Шифрование файлов конфигурации

Для обеспечения шифрования файлов в составе пакета  _ecosoft-lexema8-configuration-service_  присутствует скрипт  _encryptConfigs.js_, который позволяет зашифровать все файлы формата  _*.js_  в определенной папке. Для работы скрипта необходима платформа  _NodeJS_. Запуск скрипта осуществляется с помощью следующей команды:

`node <путь к файлу скрипта> <путь к папке с конфигурационными файлами> <пароль для шифрования>`

Пароль должен удовлетворять правилам безопасности организации, в которую поставляется решение. Держателем пароля является организация потребитель.

В результате выполнения скрипта получаем зашифрованные файлы с расширение  _.enc_.

**Примечание:**  запуск скрипта возможен как в ручном режиме так и с помощью средств автоматизации при сборке образа.

### Сервис конфигурации ecosoft-lexema8-configuration-service

Сервис выдачи настроек других сервисов

Обращение к сервису из других сервисов для получения настроек идет по адресу config_service:3071

!!! note
    Обязательный элемент системы. API доступно только внутри инфраструктуры серверной части lexema8. 
### Настройка сервиса для работы с шифрованными файлами

Для работы сервиса с шифрованными файлами необходимо:

-   Настроить переменную окружения CONFIG_CIPHER, которая является флагом работы с шифрованием. Доступные значения  _true/false_.
-   Настроить переменную окружения CONFIG_KEY, которая должна содержать пароль, который использовался для шифрования файлов.

#### В производственном режиме

Настройка переменных окружения производится в  _dockerfile_  сервиса конфигурации:

`ENV CONFIG_CIPHER=true CONFIG_KEY=PaSsWoRd`

При запуске сервиса в контейнере производится расшифровка файлов конфигурации.

### Настройка сервиса 

- **protocol** - используемый веб-протокол (по умолчанию `http`).
- **host** - имя хоста (по умолчанию `localhost`).
- **port** - порт для запуска (по умолчанию `3071`).
- **timeout** - количество миллисекунд бездействия, после которого считается, что время ожидания истекло (по умолчанию `120`).
- **script** - путь к модулю, запускающему сервис (по умолчанию `ecosoft-lexema8-configuration-service`).
- **noProxify** - настройка проксирования сервиса (по умолчанию `true`).
- **useCredentialVault** - флаг использовать хранилища учетных записей windows (по умолчанию `false`).
- **keys** - используемые ключи хранилища учетных записей windows (по умолчанию `[]`).

## Маршрут запроса настроек

По маршруту '/config' через POST запрос можно получить настройки проекта по требуемым ключам (ключи передаются через строковый массив).

`post /config`

headers: {
   "content-type": "application/json"
}
body: {
   "keys": keys
}

где keys - массив ключей, для которых необходимо загрузить настройки. Ключи задаются строками, в которых через точку указан путь до требуемого раздела настроек или конкретного значения настройки. Если раздел находится в корне то пишут только его название.

Примеры:

`'applications.data', 'common', 'db', 'applications.gate.ldap.url'`

Возвращает объект с настройками в теле ответа на запрос.

### Пример запроса

Запрос:

headers: {
   "content-type": "application/json"
}
body: {
   "keys":["applications.radio","db"]
}

Ответ:

 
body: {
  "db": {
    "main": {
      "host": "HOST",
      "database": "DATABASE",
      "dialect": "mssql",
      "instanceName": "sql",
      "user": "USER",
      "password": "PASSWORD",
      "isolationLevel": "READ_UNCOMMITTED",
      "requestTimeout": 15000,
      "applicationName": "ara",
      "pool": {
        "max": 20,
        "min": 0,
        "idleTimeoutMillis": 10000
      }
    },
    "radio": {
      "dialect": "sqlite",
      "logging": false
    },
    "session": {
      "host": "localhost",
      "port": 6379,
      "db": 0
    }
  },
  "applications": {
    "radio.channels": {
      "ecosoft-lexema8-config": [
        "messageCreated",
        "userIsTyping"
      ],
      "ecosoft-lexema8-chocolate": [
        "kindCreated",
        "kindSearched"
      ],
      "ecosoft-lexema8": [
        "legacy"
      ]
    }
  }
}

## Маршрут запроса файла настроек

По маршруту '/files' через GET запрос можно получить файл настроек из корневой папки files сервиса конфигурации.

`get /files/*Название файла*`

Возвращает запрошенный файл без изменений.