GPLVote Sign Doc Proxy API
Содержание |
Общее описание
Взаимодействие с прокси сервером идет по двум URI:
с помощью POST запросов, в теле которых в JSON формате размещаются параметры запроса.
Первый URI используется для:
- Отправки запросов на подписание документа
- Отправки подтверждений об обработке полученной от пользователя подписи документа
Второй URI используется для:
- Получения запросов на регистрацию публичного ключа пользователя в системе
- Получения подписей документов
Сайта клиента при обращении к прокси-серверу должен производить авторизацию. Авторизация осуществляется с использованием значения тэга "site" отправляемого документа в качестве логина. Пароль размещается в HTTP заголовке "x-password". Для регистрации сайта клиента на прокси сервере необходимо связаться с администрацией прокси-сервера (admin@gplvote.org).
Запросы
Отправка запроса на подписание документа
URL: http://signdoc.gplvote.org/send POST body: { "type": "SIGN_REQUEST", "site": "<идентификатор сайта клиента>", "user_key_id": "<идентификатор публичного ключа пользователя>", "doc_id": "<внутренний идентификатор документа на сайте клиента>", "data": "<зашифрованные публичным ключем клиента данные документа (формат далее)>", "template": "<шаблон для показа документа клиенту (формат далее)>" }
Идентификатор публичного ключа пользователя - хэш sha256 публичного ключа пользователя в кодировке base64. Хэш берется от бинарного представления публичного ключа пользователя.
Данные документа - JSON массив с данными, которые будут подставляться в шаблон документа при показе его пользователю. Пример: '["данные 1","данные 2","данные 3"]'
Шаблон документа - шаблон, в который будут подставлены данные документа при показе его пользователю перед подписанием. Представляет из себя текст. В первой строке шаблона размещается метка типа шаблона. Доступны два типа шаблонов - "LIST" и "HTML".
Шаблон типа "LIST" - предназначен для показа документов списочного типа, которые можно представить в виде списка пар "Описание" - "Значение". В каждой следующей строке - описание очередного значения данных из массива данных. Например:
Данные: ["данные 1","данные 2","данные 3"] Шаблон: LIST Описание данных 1 Описание данных 2 Описание данных 3
будут показаны в приложении в виде:
Описание данных 1 данные 1 Описание данных 2 данные 2 Описание данных 3 данные 3
Шаблон типа "HTML" - предназначен для показа документов с более сложным содержимым. Поддерживается ограниченный набор html элементов: <annotation>, <b>,<big>, <font> (supports attributes "height", "size", "fgcolor" and "bicolor", as integers), <i>, <li>, <marquee>, <small>, <strike>, <sub>, <sup>, <tt>, <u>;
Отправки подтверждений об обработке подписи
URL: http://signdoc.gplvote.org/send POST body: { "type": "SIGN_CONFIRM", "site": "<идентификатор сайта клиента>", "user_key_id": "<идентификатор публичного ключа пользователя>", "doc_id": "<внутренний идентификатор документа на сайте клиента>", }
Запрос позволяет пользователю отслеживать то, что сайт обработал его подпись. Нужно для того, что-бы пользователь знал когда можно продолжить действия, связанные с обработкой его подписи данного документа.
Получения новых документов для сайта-клиента с прокси сервера
URL: http://signdoc.gplvote.org/get Request POST body: { "type": "CLIENT_REQUEST", "site": "<идентификатор сайта клиента>", "from_time": "<время сервера в UNIXTIME формате с которого проверять новые документы>" } Response body: { "status": "<статус исполнения запроса: 0 - все нормально; 1 - ошибка авторизации клиента; 2 - ошибка ПО прокси-сервера>", "details": "<описание ошибки прокси-сервера если status равен 2>", "time": "<текущее время прокси-сервера в UNIXTIME формате для запоминания клиентом и последующего использования в запросе>", "documents": "<JSON массив имеющихся для клиента новых документов>" } Документ с подписью: { "type": "SIGN", "site": "<идентификатор сайта клиента>", "doc_id": "<внутренний идентификатор документа на сайте клиента>", "sign": "<подпись документа в кодировке Base64 без переводов строк>" } Документ с запросом на регистрацию публичного ключа пользователя: { "type": "REGISTER", "site": "<идентификатор сайта клиента>", "code": "<одноразовый код с сайта клиента, предоставленный пользователю в процессе процедуры регистрации подписи>", "public_key": "<публичный ключ пользователя в формате Base64 без переводов строк>", "sign": "<подпись секретным ключем пользователя строки с одноразовым кодом в виде Base64 без переводов строк>" }