Задача [EDI5]: Сервис проверки экспортированных документов

Формулировка проблемы:

Задача проходит в рамках реализации прототипа системы EDI на базе платформы ARTA Synergy.

Необходим сервис проверки документов, которые были экспортированы из ARTA Synergy (см. задачу EDI1):

Проверка должна отвечать на следующие вопросы:

  1. Сохранил ли целостность экспортированный документ: не изменены ли файлы в архиве, не были ли какие-то из них удалены либо добавлены новые

  2. Соответствует ли выгруженный документ исходному документу в хранилище ARTA Synergy: не были ли изменены в ARTA Synergy файлы экспортированного документа либо добавлены/удалены/сброшены подписи на нём

Решение:

Необходимо реализовать сервис проверки экспортированных документов в виде метода API ARTA Synergy.

На вход методу должен быть передан параметр document, с содержимым - экспортированным документом в виде файла формата 7z. (см. EDI1), при этом все требования к содержимому типа multipart/form-data[2] должны быть соблюдены.

Результатом работы метода является JSON-объект следующего вида:

{
   "errorCode":0,
   "errorMessage":"",
   "signs":[
      {
         "userId":"user's identifier",
         "login":"user's login",
         "fullname":"lastname firstname patronymic",
         "positions":[
            {
               "positionName":"position name",
               "departmentName":"department name"
            }
         ],
         "signDate":"2015-05-27 13:53:56",
         "signature":"6BOn2EMZlNgYEudZKOJOOLIEgeY=",
         "certificate":"aGFzaA=="
      }
   ]
}

где:

Кроме этого, для сигнализации о некоторых ошибках используются коды ошибок HTTP-ответа:

Сообщение об ошибке передаётся в параметре errorMessage.

Для удобства использования сервиса в ответе также передаются следующие параметры:

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

POST /Synergy/checkdocument HTTP/1.1
Host: <somehost>:<someport>
Connection: keep-alive
Content-Length: 2258766
User-Agent: SomeBrowser/1.0
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryNcKjWA55TMhmmIW8
Referer: <somereferer>

------WebKitFormBoundaryNcKjWA55TMhmmIW8
Content-Disposition: form-data; name="document"; filename="dokument dlya rassmotreniya.7zip"
Content-Type: application/octet-stream

<binary data>