Протокол обмена с драйвером VCV
Содержание
- 1 Описание
- 2 Запрос
- 3 Ответ
- 4 Формат вывода для плагинов
- 5 Формат вывода для встроенных команд
- 6 Описание групп команд драйвера
- 6.1 Управление состоянием драйвера
- 6.2 Основные функции криптографии
- 6.2.1 Создание пары ключ-сертификат для корневого центра сертификации
- 6.2.2 Создание пары ключ-сертификат
- 6.2.3 Генерация private ключа
- 6.2.4 Отзыв сертификата
- 6.2.5 Изменение параметров сертификата
- 6.2.6 Подпись файла
- 6.2.7 Подпись текста
- 6.2.8 Проверка подписи текста
- 6.2.9 Создание запроса на создание сертификата
- 6.2.10 Создание сертификата на основании запроса на создание сертификата
- 6.2.11 Создание запроса на получение сертификата для запуска драйвера
- 6.2.12 Инициализация сервера и корневого центра сертификации
- 7 Список команд
Описание
Для обмена данными с программной оболочкой Linux написан драйвер, который работает как сервис операционной системы.
Драйвер использует для обмена данными именованные каналы (named pipes). Один - на прием команд, другой - на отображение ответа. Протокол обмена состоит из пары запрос- ответ. Форматы запроса и ответа описаны ниже. В качестве транспорта используется JSON.
Драйвер может находиться в следующих состояниях:
- 0 Свободен
- 1 В процессе выполнения команды
- 2 Выполнение команды завершено
- -1 Ошибка
Ниже будут приведены алгоритм обработки запроса на стороне сервера и на стороне клиента. Поскольку драйвер реализован в качестве однопоточного приложения, и может выполнять команды только по очереди, протокол обмена предполагает наличие очереди на стороне клиента, а так же контроль состояния на стороне сервера. Проще говоря, драйвер следует принципу:
- Если я свободен - могу выполнять все команды кроме break
- Если я в процессе выполнения - могу выполнять только команду break
- Если я в состоянии отличном от первых двух - могу исполнять только команду reset
Естественно, что перед посылкой следующей команды необходимо получить состояние драйвера, поэтому AJAX интерфейс имеет команду getstate, которая показывает состояние драйвера, если используется прямое чтение из канала, то данная команда не имеет смысла.
Алгоритм обработки запроса в очереди на клиенте
Алгоритм обработки запроса на сервере
Ниже приведен алгоритм обработки запроса на сервере:
Требования к интерфейсу
Для обеспечения устойчивой работы интерфейса необходимо:
- Генерировать reqID случайным образом так, чтобы при открытии с разных клиентов не могло быть одинаковых значений
- Заставка, которая показывается пока обрабатывается очередь должна иметь кнопки
- Прервать команду - тогда очищается вся очередь и состояние драйвера сбрасывается в свободен.
- В случае, когда команда завершилась ошибкой, в заставке должно быть описание ошибки и кнопка повторить
- Перезагрузить апач и драйвер
- На каждой закладке нужна кнопка Обновить
- Обработчик ответа на команду должен содержать код, который вновь ставит в очередь команду в случае, если предыдущая попытка завершилась ошибкой
Запрос
Запрос состоит из тела запроса и признака конца запроса: {Тело запроса}<<<eof>>>
- Тело запроса - строка содержащая объект JSON
- <<<eof>>> - признак конца запроса. Данная последовательность обязательна и обозначает конец запроса.
Тело запроса: {"command":"команда", "request":[null | параметры команды в виде списка {"Имя параметра":"значение параметра",...} ], "reqID":Целое число}<<<eof>>>
- command - имя команды
- request - null или список параметров
- reqID - идентификатор запроса в очереди запросов на клиенте. Имеет смысл только для случая, когда клиент использует очередь запросов. В остальных случаях
может быть равен нулю Все поля обязательны
Ответ
{"resp":"Ответ драйвера в JSON формате","reqID":Целое число,"state":"1 | 2 | 0 | -1","description":"Строка","percent":Целое число [0-100]}
- resp - Ответ драйвера в JSON формате
- reqID - идентификатор запроса в очереди запросов на клиенте. Имеет смысл только для случая, когда клиент использует очередь запросов. В остальных случаях может быть равен нулю
- description - Описание ошибки, или состояния, или просто пустая строка
- percent - Процент выполнения команды - целое число в диапазоне от 0 до 100
- state - Статус драйвера:
Все поля обязательны
Формат вывода для плагинов
Формат вывода для плагина: {"data": json | null, "description": str, "result": true | false, "percent":int(0-100)}
где:
- data - данные в формате json, которые плагин возвращает
- description - описание ошибки, если ошибка произошла, либо комментарий
- result - результат выполнения операции true/false, в зависимости от успешного, или неуспешного завершения операции
- percent - процент выполнения задачи. Число от 0 до 100
Формат вывода для встроенных команд
Формат вывода для плагина: {"data": json | null, "description": str, "result": true | false, "percent":int(0-100)}
где:
- data - данные в формате json = {"data": json | null, "description": str, "result": true | false, "percent":int(0-100)} (при этом содержимое полей result, description и percent переносится в соответствующие поля верхнего уровня)
- description - описание ошибки, если ошибка произошла, либо комментарий
- result - результат выполнения операции true/false, в зависимости от успешного, или неуспешного завершения операции
- percent - процент выполнения задачи. Число от 0 до 100
Примечание
По сути формат вывода внутренней команды полностью аналогичен формату внешнего плагина и отличается только тем, что вовнутрь поля data встроен объект точно такой же как у внешнего плагина. При анализе ответа внутренний анализатор переносит встроенные в поле дата значения соответствующие поля объекта-владельца т.е.:
description = data.description;
result = data.result;
percent = data.percent;
Описание групп команд драйвера
Управление состоянием драйвера
Команды правления драйвером:
- reset - сбрасывает драйвер в состояние в Свободен из состояний Ошибка, Выполнение команды завершено
- break - прерывает выполнение команды, если драйвер находится в состоянии В процессе выполнения команды
- quit - прерывает выполнение команды и выгружает драйвер из памяти
Основные функции криптографии
Создание пары ключ-сертификат для корневого центра сертификации
Для инициализации центра сертификации необходимо создать пару ключ-сертификат.
Команда драйвера для создания пары:
{
- "command":"create_ca_pair",
- "request":{"format": | "pem" | "pkcs12","country":str,"province":str,"city":str,"org":str,"cn": str,"key_bits":int,"not_before":str,"life_time":int,"password":str},
- "reqID":int
}
где:
- format - формат, в котором будет возвращен результат может принимать строковые значения pem, или pkcs12
- country - страна, двухсимвольная строка с обозначением страны. Пример: UA, RU, US
- province - строка с областью
- city - строка с названием города
- org - строка с названием фирмы
- key_bits - целое число - количество бит ключа
- not_before - строка с датой в формате YYYY-MM-DD-HH-mm-ss
- life_time - целое число (long) с количеством секунд, которое будет добавлено к дате not_before
- password - строка, пароль для ключа центра сертификации
Возвращаемое значение:
- В случае, когда значение параметра format равно pem :
{"response":{"key": str, "cert": str, "p12": null},"reqID":int,"state":1 | 2 | 0 | -1,"description": str,"percent": int[0-100]}
- В случае, когда значение параметра format равно pkcs12 :
{"response":{"key": null,"cert": str, "p12": str},"reqID":int,"state":1 | 2 | 0 | -1,"description": str,"percent": int[0-100]}
где:
key - строка с ключем:
- в формате PEM, если значение свойства format в запросе было равно pem
- пакет pkcs12 кодированный base64, если значение format в запросе было равно pkcs12.
cert - строка с сертификатом:
- в формате PEM, если значение свойства format в запросе было равно pem
- null, если значение format в запросе было равно pkcs12.
Создание пары ключ-сертификат
Команда драйвера для создания пары ключ-сертификат:
Вариант с использованием полного имени
{
- "command":"create_pair",
- "request":{"format": "pem"|"pkcs12","country":str,"province":str,"city":str,"org":str,"cn","key_bits":int,"serial":int,"not_before":str,"life_time":int, ("ca_cert": str, "ca_key": str) || "ca_p12": str , "ca_password": str, "password": str},
- "reqID":int
}
где:
- format - формат, в котором будет возвращен результат может принимать строковые значения pem, или pkcs12
- country - страна, двухсимвольная строка с обозначением страны. Пример: UA, RU, US
- province - строка с областью
- city - строка с названием города
- org - строка с названием фирмы
- cn - строка с информацией о том, для кого выдан сертификат
- key_bits - целое число - количество бит ключа
- serial - целое число - серийный номер сертификата
- not_before - строка с датой в формате YYYY-MM-DD-HH-mm-ss
- life_time - целое число (long) с количеством секунд, которое будет добавлено к дате not_before
- ca_cert - строка содержащая сертификат центра сертификации в формате PEM
- ca_key - строка содержащая закрытый ключ центра сертификации в формате PEM
- ca_p12 - перекодированный в base64 пакет PKCS12, содержащий СА сертификат и ключ для подписи
- ca_password - пароль для ключа центра сертификации, либо пакета PKCS12
- password - пароль для ключа клиента, либо пакета PKCS12
Вариант с использованием данных из сертификата СА
Параметры country, province, city, org могут быть опущены. В этом случае они будут взяты из сертификата центра сертификации.
Т.е. запрос может иметь вид:
{
- "command":"create_pair",
- "request":{"format": "pem"|"pkcs12", "cn","bits":int,"serial":int,"not_before":str,"life_time":int, ["ca_cert": str, "ca_key": str || "ca_p12": str ], "ca_password": str, "password": str},
- "reqID":int
}
Возвращаемое значение:
- В случае, когда значение параметра format равно pem :
{"response":{"key": str, "cert": str, "p12": null},"reqID":int,"state":1 | 2 | 0 | -1,"description": str,"percent": int[0-100]}
- В случае, когда значение параметра format равно pkcs12 :
{"response":{"key": null,"cert": str, "p12": str},"reqID":int,"state":1 | 2 | 0 | -1,"description": str,"percent": int[0-100]}
где:
- key - строка с ключем в формате PEM
- cert - строка с сертификатом в формате PEM
Примечание: Если не указан хотя бы один из параметров country, province, city, org - будет использована краткая форма.
Генерация private ключа
Команда драйвера для генерации private ключа:
{"command":"create_key", "request":{"bits":int, "passwd": str}, "reqID":int}
где:
- bits - количество бит ключа
- passwd - пароль, может быть пустым
Возвращаемое значение: {"response":{"key":"cert"},"reqID":int,"state":1 | 2 | 0 | -1,"description": str,"percent": int[0-100]}
Отзыв сертификата
Команда драйвера на отзыв сертификата(тов):
{"command":"revoke",
- "request":{"ca_cert":str, "ca_key": str || "ca_p12":base64, "ca_password": str|null,
- "bundle": [{"cert": str||null || "serial": int }], "rd": YYYY-MM-DD-HH-mm-ss,
- ["crl": str|null, "crl_serial": str | int | null], "next_update_offset": int}, "reqID":int}
где:
- bundle - массив из объетов с полями cert и serial. В объекте должно присутствовать только одно из полей. По тому, какое поле присутствует будет выбран способ добавления с crl. В случае, если указан cert серийный номер будет взят из сертификата, если указан serial серийным номер будет будет записан из этого параметра напрямую.
- cert - сертификат, который должен быть отозван
- serial - серийный номер сертификата, который должен быть отозван
- ca_pkey - приватный ключ центра сертификации
- ca_password - пароль для ключа центра сертификации, либо null, если ключ без защиты паролем
- ca_p12 - пакет pkcs12 содержащий ключ и сертификат цента авторизации
- ca_cert - сертификат центра сертификации
- crl - список отозванных сертификатов (crl) в формате PEM, либо null - в этом случае будет создан новый список
- rd - дата, с которой будет отозван сертификат
- next_update_offset - количество времени с секундах до следующего обновления crl
- crl_serial - серийный номер для crl, который будет создан после отзыва сертификатов. Если отсутствует, или указан неправильно, то будет использован серийный номер предыдущего crl, указанного в одноименном параметре. Если параметр не указан и crl_serial указан неправильно, будет выдана ошибка.
Примечание: запрос может проходить в двух формах
- с указанием непосредственно сертификата, который необходимо отозвать. В этом случае необходимо указать свойство cert
- c указанием серийного номера. В этом случае необходимо указать свойство serial
Сертификат и ключ центра авторизации могут быть переданы в двух вариантах
- каждый отдельно в формате PEM
- в пакете PKCS12
Возвращаемое значение: {"response":{"crl": str},"reqID": int,"state": 1 | 2 | 0 | -1,"description": str,"percent": int[0-100]}
Изменение параметров сертификата
Команда драйвера на изменение параметров сертификата:
{"command:"}
Подпись файла
Команда драйвера для подписи файла:
{"command:"}
Подпись текста
Команда драйвера для подписи текста:
{"command":"sign_msg", "request":{"msg": str, "key": str || "p12": str, passwd: str}, "reqID":int}
где:
- msg - текст, который будет подписан
- key - private ключ, которым будет подписан текст
- passwd - пароль к ключу, в случае, если указан key, или к пакету pkcs12, если указан p12
Возвращаемое значение: {"response":{"dig":str},"reqID":int,"state":1 | 2 | 0 | -1,"description": str,"percent": int[0-100]}
- dig - текст подписи (digest-дайджест)
Проверка подписи текста
Команда драйвера для проверки подписи текста:
{"command":"verify_sign_msg", "request":{"msg": str, "sig": str, "cert": str || "p12": str, passwd: str}, "reqID":int}
где:
- msg - текст, который был подписан
- sig - подпись текста (digest)
- cert - сертификат X509, содержащий public ключ, необходимый для расшифровки дайджеста
- passwd - пароль к ключу, в случае, если указан key, или к пакету pkcs12, если указан p12
Возвращаемое значение: {"response":{"result":true|false},"reqID":int,"state":1 | 2 | 0 | -1,"description": str,"percent": int[0-100]}
- result - если проверка прошла успешно, то result будет равен true иначе - false.
Создание запроса на создание сертификата
Команда драйвера для создания запроса на создание сертификата драйвера
{
- "command":"create_req",
- "request":{"country":str, "province":str, "city":str, "org":str, "cn":str, ["key_bits":int | "key":str ]},
- "reqID":int
}
где:
- country - страна, двухсимвольная строка с обозначением страны. Пример: UA, RU, US
- province - строка с областью
- city - строка с названием города
- org - строка с названием фирмы
- cn - строка с информацией о том, для кого выдан сертификат
- key_bits - целое число - количество бит ключа
- key - строка с ключем с формате PEM
Возвращаемое значение: {"response":{"key": str, "req": str}, "reqID":int,"state":1 | 2 | 0 | -1,"description": str,"percent": int[0-100]}
где:
- key - строка с ключем в формате PEM
- req - строка с запросом на создание сертификата в формате PEM
Примечание: Параметры key_bits и key могут быть указаны только по отдельности. При этом наличие хотя бы одного из них обязательно.
Создание сертификата на основании запроса на создание сертификата
Команда драйвера для создания сертификата:
{
- "command":"create_cert_from_req",
- "request":{"req": str ,"serial": int ,"not_before": str ,"life_time": int , ("ca_cert": str, "ca_key": str) || "ca_p12": str , "ca_passwd": str},
- "reqID":int
}
где:
- req - строка содержащая запрос на создание сертификата в формате PEM
- serial - целое число - серийный номер сертификата
- not_before - строка с датой в формате YYYY-MM-DD-HH-mm-ss
- life_time - целое число (long) с количеством секунд, которое будет добавлено к дате not_before
- ca_cert - строка содержащая сертификат центра сертификации в формате PEM
- ca_key - строка содержащая закрытый ключ центра сертификации в формате PEM
- ca_p12 - перекодированный в base64 пакет PKCS12, содержащий СА сертификат и ключ для подписи
- ca_passwd - пароль для ключа центра сертификации, либо пакета PKCS12
Возвращаемое значение: {"response":{"cert":str},"reqID":int,"state":1 | 2 | 0 | -1,"description": str,"percent": int[0-100]}
где:
- cert - строка с сертификатом в формате PEM
Создание запроса на получение сертификата для запуска драйвера
Команда драйвера для создания сертификата драйвера
{
- "command":"create_drv_cert",
- "request":{"format":pem|pkcs12,"hash": str, "key_bits":int, "serial":int, "not_before":str, "life_time":int, "ca_cert": str, "ca_key": str || "ca_p12": str , "ca_passwd": str},
- "reqID":int
}
где:
- format - формат, в котором будет возвращен результат может принимать строковые значения pem, или pkcs12
- hash - строка с хешем для машины, для которой создается драйвер
- key_bits - целое число - количество бит ключа
- serial - целое число - серийный номер сертификата
- not_before - строка с датой в формате YYYY-MM-DD-HH-mm-ss
- life_time - целое число (long) с количеством секунд, которое будет добавлено к дате not_before
- ca_cert - строка содержащая сертификат центра сертификации в формате PEM
- ca_key - строка содержащая закрытый ключ центра сертификации в формате PEM
- ca_p12 - перекодированный в base64 пакет PKCS12, содержащий СА сертификат и ключ для подписи
- ca_passwd - пароль для ключа центра сертификации, либо пакета PKCS12
Возвращаемое значение: {"response":{"cert":str},"reqID":int,"state":1 | 2 | 0 | -1,"description": str,"percent": int[0-100]}
где:
- key - строка с ключем в формате PEM
- cert - строка с сертификатом в формате PEM
Примечание: Если не указан хотя бы один из параметров country, province, city, org - будет использована краткая форма.
Инициализация сервера и корневого центра сертификации
Для инициализации сервера и корневого центра сертификации необходимо:
- создать пару ключ-сертификат центра.
- создать пару ключ-сертификат для web сервера
- создать пару ключ-сертификат для пользователя
- создать пустой список отозванных сертификатов, подписанный новым ключем
{
- "command":"init_ca_srv",
- "request":{"country":str,"province":str,"city":str,"org":str,"cn":str,"hostname":str, "username":str,
- "key_bits":int,"ca_key_bits":int,"not_before":str,"ca_life_time":int,"life_time":int,
- "password":str,"ca_password":str,"crl_next_update_offset":int},
- "reqID":int
}
где:
- country - страна, двухсимвольная строка с обозначением страны. Пример: UA, RU, US
- province - строка с областью
- city - строка с названием города
- org - строка с названием фирмы
- cn - строка с названием центра сертификации
- hostname - имя web-сервера
- username - имя пользователя, для которого создается сертификат
- key_bits - целое число - количество бит ключа
- ca_key_bits - целое число - количество бит ключа центра сертификации
- not_before - строка с датой в формате YYYY-MM-DD-HH-mm-ss
- ca_life_time - целое число (long) с количеством секунд, которое будет добавлено к дате not_before для корневого сертификата
- life_time - целое число (long) с количеством секунд, которое будет добавлено к дате not_before
- password - строка, пароль для ключа пользователя
- ca_password - строка, пароль для ключа центра сертификации
- crl_next_update_offset - количество секунд от точки создания CRL до следующего CRL
Возвращаемое значение:
- В случае, когда значение параметра format равно pkcs12 :
{"response":{"ca_pair": str,"user_pair": str, "srv_cert": str, "srv_key": str, "ca_cert": str, "crl": str},"reqID":int,"state":1 | 2 | 0 | -1,"description": str,"percent": int[0-100]}
где:
- ca_pair - пакет pkcs12 кодированный base64
- user_pair - пакет pkcs12 кодированный base64
- srv_cert - сертификат сервера в формате base64
- srv_key - ключ сервера в формате base64
- ca_cert - сертификат центра сертификации в формате base64
- crl - пустой CRL кодированный в base64
Список команд
Команда | Описание |
rebootserver | Перезагрузка сервера. |
status1сservice | Статус сервиса 1с. |
start1сservice | Запуск сервиса 1с. |
stop1сservice | Остановка сервиса 1с. |
reboot1сservice | Перезагрузка сервиса 1с. |
sambastatus | Статус сервиса Samba. |
sambastart | Запуск сервиса Samba. |
sambastop | Остановка сервиса Samba. |
sambarestart | Перезагрузка сервиса Samba. |
reset | Сброс состояния. Переводит драйвер в состояние Свободен если до поступления команды, он не находился в состоянии В процессе выполнения команды |
break | Превывает исполнение текущей команды. Если драйвер не находится в состоянии выполнения команды - просто игнорируется |
getusers | Возвращает список пользователей SAMBA. Запрос : {"command":"getusers", "request":null, "reqID": Идентификатор запроса}. Ответ драйвера : {"response" : { userRID : { "username" : username } } } |
adduser | Добавление нового пользователя. Запрос : {"command":"adduser","request": {"username": Имя пользователя, "password": Пароль, "surname": Фамилия, "given_name": Отчество, "initials": Инициалы, "company": Компания, "mail_address": Почтовый адрес, "telephone_number": Номер телефона, "profile_path": Путь к профилю, "script_path": Путь к скрипту, "home_drive": Домашнее дисковое устройство, "home_directory": Домашняя директория }, "reqID":Идентификатор запроса}. Поле username и password являются обязательным для заполнения. Ответ драйвера при удачном создании пользователя: { "response": "SID"}. Ответ драйвера при ошибке : {"description": Текст ошибки}. |
upduser | Редактирование пользователя. Запрос : {"command":"upduser","request": {"username": Имя пользователя, "username_new": Новое имя пользователя, "password": Пароль, "surname": Фамилия, "given_name": Отчество, "initials": Инициалы, "company": Компания, "mail_address": Почтовый адрес, "telephone_number": Номер телефона, "profile_path": Путь к профилю, "script_path": Путь к скрипту, "home_drive": Домашнее дисковое устройство, "home_directory": Домашняя директория }, "reqID":Идентификатор запроса}. Поле username и password являются обязательным для заполнения. Ответ драйвера при удачном редактировании группы : { "response": "User updated"}. Ответ драйвера при ошибке : {"description": Текст ошибки}. |
deluser | Удаление пользователя. Запрос : {"command": "deluser", "request": {"username": Имя пользователя }, "reqID":Идентификатор запроса}. Ответ драйвера при удачном удалении : {"response" : "Deleted user 'username'"}. Отвер драйвера при ошибке : {"description": Текст ошибки} |
createusers | |
getgroups | Возвращает список групп SAMBA. Запрос : {"command":"getgroups","request": null, "reqID": Идентификатор запроса}. Ответ драйвера : {"response": { Название группы : { "group_rid" : РИД группы, "members" : { Список пользователей, состоящих в данной группе (аналогично ответу команды 'getusers') } } }} |
addgroup | Добавление новой группы. Запрос : {"command":"addgroup","request": {"groupname": Название группы }, "reqID":Идентификатор запроса}. Ответ драйвера при удачном создании пользователя : { "response": "Added group 'groupname'"}. Ответ драйвера при ошибке : {"description": Текст ошибки}. |
updgroup | Редактирование группы. Запрос : {"command": "updgroup", "request": {"groupname": Название группы, "groupname_new": Новое название группы }, "reqID":Идентификатор запроса}. Ответ драйвера при удачном редактировании : {"response" : "Group updated"}. Отвер драйвера при ошибке : {"description": Текст ошибки} |
delgroup | Удаление группы. Запрос : {"command": "delgroup", "request": {"groupname": Название группы }, "reqID":Идентификатор запроса}. Ответ драйвера при удачном удалении : {"response" : "Deleted group 'groupname'"}. Отвер драйвера при ошибке : {"description": Текст ошибки} |
creategroups | |
lstgroupmembers | Вывод списка пользователей группы Запрос : {"command":"lstgroupmembers","request": {"groupname": Название группы }, "reqID":Идентификатор запроса}. Ответ драйвера : { "response": [ Список пользователей ]}. Ответ драйвера при ошибке : {"description": Текст ошибки} |
addgroupmember | Добавление пользователя в группу Запрос : {"command":"addgroupmember","request": {"groupname": Название группы, "username": Имя пользователя }, "reqID":Идентификатор запроса}. Ответ драйвера : { "response": "Added members to group 'groupname'"}. Ответ драйвера при ошибке : {"description": Текст ошибки} |
delgroupmember | Удаление пользователя из группы Запрос : {"command":"delgroupmember","request": {"groupname": Название группы, "username": Имя пользователя }, "reqID":Идентификатор запроса}. Ответ драйвера : { "response": "Removed members from group 'groupname'"}. Ответ драйвера при ошибке : {"description": Текст ошибки} |
getdomainsid | Возвращает SID домена Запрос : {"command":"getdomainsid","request": null, "reqID":Идентификатор запроса}. Ответ драйвера : { "response": SID домена}. Ответ драйвера при ошибке : {"description": Текст ошибки} |
setdomainsid | Задает SID домену Запрос : {"command":"setdomainsid","request": {"domainsid": SID}, "reqID":Идентификатор запроса}. Ответ драйвера : { "response": ""}. Ответ драйвера при ошибке : {"description": Текст ошибки} |
getfreedisks | Возвращает список свободных дисков Запрос : {"command":"getfreedisks","request": null, "reqID":Идентификатор запроса}. Ответ драйвера : { "response": Cписок свободных дисков }. Ответ драйвера при ошибке : {"description": Текст ошибки} |
getmddisks | Возвращает список MD устройств Запрос : {"command":"getmddisks","request": null, "reqID":Идентификатор запроса}. Ответ драйвера : { "response": Cписок MD устройств }. Ответ драйвера при ошибке : {"description": Текст ошибки} |
adddisk | |
removedisk | |
getshares | Возвращает список шар Самбы Запрос : {"command":"getshares","request": null, "reqID":Идентификатор запроса}. Ответ драйвера : { "response": ["body":{"Comment": комментарий, "GuestOk": Гостевой доступ(true/false), "GuestWrite": Права на запись для гостевого доступа(true/false), "Users":{Юзер/Группа: Права на запись(true/false)},"network_name": Имя шары},"share_id": ИД шары] }. Ответ драйвера при ошибке : {"description": Текст ошибки} |
addshare | Добавление шары Самбы Запрос : {"command":"addshare","request": {"name": string(Имя шары) ,"comment": string(Комментарий) , "gOk": boolean(Гостевой доступ) ,"gWrite": boolean(Права на запись при гостевом доступе) ,"acl":{ "Имя пользователя/группы": boolean }}, "reqID":Идентификатор запроса}. Ответ драйвера : { "response": {"body": {"Comment": string(Комментарий), "GuestOk": boolean(Гостевой доступ), "GuestWrite": boolean(Права на запись при гостевом доступе), "Users": { "Имя пользователя/группы": boolean}, "network_name": string(Имя шары)},"share_id": int(ИД шары) }. Ответ драйвера при ошибке : {"description": Текст ошибки} |
removeshare | Удаление шары Самбы Запрос : {"command":"removeshare","request": {"share_id":int(ИД шары)}, "reqID":Идентификатор запроса}. Ответ драйвера : { "description": Ответ}. Ответ драйвера при ошибке : {"description": Текст ошибки} |
updshare | Редактирование шары Самбы Запрос : {"command":"updshare","request": {"share_id": int(ИД шары), "name": string(Имя шары) ,"comment": string(Комментарий) , "gOk": boolean(Гостевой доступ) ,"gWrite": boolean(Права на запись при гостевом доступе) ,"acl":{ "Имя пользователя/группы": boolean }}, "reqID":Идентификатор запроса}. Ответ драйвера : { "response": {"body": {"Comment": string(Комментарий), "GuestOk": boolean(Гостевой доступ), "GuestWrite": boolean(Права на запись при гостевом доступе), "Users": { "Имя пользователя/группы": boolean}, "network_name": string(Имя шары)},"share_id": int(ИД шары) }. Ответ драйвера при ошибке : {"description": Текст ошибки} |
destroydataspace | |
ping | Возвращает результат выполнения команды ping в цикле. Процент выполнения вычисляется из 500 строк ответа команды. Запрос : {"command":"ping","request":null, "reqID":Идентификатор запроса}. Ответ драйвера : { "response": { "count": Номер результата по порядку, "out": Ответ команды, "percent": Процент выполнения команды} }. Ответ драйвера при ошибке : {"description": Текст ошибки} |