Проверьте передачу окончательного файла и прочитайте текущее решение approve. Затем приложение решает, отправлять ли задание в печать.
Используйте Native и Bash. Сначала пройдите руководство по Ваучеру. Сохраните его print-handoff.lspx, policy.json и ключ издателя. Типография независимо выбирает допустимые исходник, открытый ключ, исполняемый файл и ввод.
Свяжите запрос печати
Сохраните весь файл как current-request.checked.json в UTF-8 с переводами строк LF и завершающим переводом строки.
{
"input": "csk.checked-input/v1",
"value": [
true,
true,
true,
true,
"edition-final",
"print-request-123",
"operator-7",
"print",
1785600000
]
}Первые четыре значения описывают формат страницы, поля, встроенные шрифты и число страниц. Пятое обозначает редакцию окончательного файла. Остальные связывают идентификатор запроса, исполнителя, действие и срок действия с подписанным вводом.
Срок действия задан для упражнения. Для реального задания приложение передаёт доверенные факты, аутентифицирует исполнителя и проверяет срок по серверному времени. Правило читает только первые четыре значения. Подписанный ввод связывает все девять.
Выпустите запрос и проверьте его снова
Задайте в ISSUER_KEY_URI тот же абсолютный путь закрытого ключа, что и в руководстве по Ваучеру. Для каждого запроса используйте новые пути вывода.
lispex vouch issue --source print-handoff.lspx \
--input current-request.checked.json --profile csk.checked-profile/v1 \
--key-handle "$ISSUER_KEY_URI" --out-dir current-request-issued --emit-bundle
lispex vouch gate --bundle current-request-issued/vouch-input-bundle.json \
--trust-policy policy.json --source print-handoff.lspx \
--input current-request.checked.json --profile csk.checked-profile/v1 \
--require-decision approve --report-out current-request-gate.jsonОбе команды завершаются с кодом 0 без вывода. Выпуск создаёт issue-report.json, payload.json, envelope.dsse.json и vouch-input-bundle.json в current-request-issued. Отчёт выпуска содержит состояние issued-native. Проверка создаёт current-request-gate.json со следующим результатом.
{
"basis": "csk.current-native-agreement/v0",
"observed_decision": "approve",
"reason": null,
"required_decision": "approve",
"status": "granted"
}Проверка аутентифицирует запись, связывает независимо переданные исходник и ввод и повторяет правило в текущем вызове Native. Ваучер проверяет совпадение записи и повторного выполнения. Фактическое действие определяет приложение.
Прочитайте отчёт gate как запись запроса
Сохраните current-request-gate.json вместе с точным проверяемым вводом и подписанным пакетом. Следующие поля определяют, что проверил этот вызов.
| Поле | Значение |
|---|---|
context.input_sha256 | Идентификатор Ваучера для точных байтов проверяемого ввода |
context.source_sha256 | Идентификатор принятого исходника правила |
context.envelope_sha256 | Подписанный конверт, использованный этим вызовом |
authentication.status | authenticated для этого запроса |
comparison.current_vs_signed | agree для полных записей выполнения |
reexecution.status | execution-agreed для нового выполнения |
gate.status | granted, когда текущее решение соответствует требованию |
Приложение добавляет в журнал идентификатор запроса, аутентифицированного исполнителя, действие, срок, редакцию файла, идентификатор транзакции типографии и итоговое состояние. Сохраните вместе с записью точные байты ввода и отчёта gate. Идентификатор ввода Ваучера использует собственный домен хеширования и отличается от обычного SHA-256 файла.
Полученный пакет решения и транзакция приложения имеют отдельные записи. Атомарно зарезервируйте идентификатор запроса до отправки задания. Следуйте правилам идемпотентности сервиса печати и сохраняйте его ответ. При тайм-ауте выясните состояние транзакции до повторной попытки.
Обработайте отказ
Эти результаты получены с файлами данного упражнения и предыдущего руководства по Ваучеру.
| Изменение | Полученный результат | Действие приложения |
|---|---|---|
Передать запрос с девятью значениями пакету issued с пятью значениями | Код 1, native-request-input-mismatch, gate not-evaluated | Выпустить отдельный пакет запроса |
Передать исходник без --input | Ошибка использования и код 2 до выполнения | Передать исходник вместе с вводом |
Потребовать deny для одобренного ввода | Код 10, gate denied, причина required-decision-mismatch | Остановиться и проверить решение |
| Проверки исполнителя, действия, срока или повторного запроса в приложении не пройдены | Отказ приложения | Остановиться до отправки задания |
При несовпадении ввода gate записывает диагностический отчёт по указанному пути. Ошибка использования не создаёт отчёт. Несовпадение требуемого решения создаёт отчёт об отказе и оставляет стандартный вывод пустым. Храните отказы отдельно от завершённых транзакций печати.
Отправьте задание из приложения
- Аутентифицируйте оператора и прочитайте окончательный файл и доверенные результаты проверок.
- Проверьте действие, срок и связь редакции файла с его точными байтами.
- Передайте точные исходник и ввод новой проверке Ваучера, требующей
approve. - Атомарно зарезервируйте идентификатор запроса в хранилище приложения.
- Отправьте файл через подключение приложения к типографии.
- Сохраните ответ типографии и отметьте запрос завершённым.
- При неизвестном исходе выясните состояние перед повторной попыткой.
Команды выше заканчиваются отчётом проверки. Резервирование, печать и восстановление реализует приложение. Сохраните окончательный файл, подписанный ввод, пакет, политику, отчёт проверки и ответ типографии для совместного разбора проблемы с печатью.
Если аутентификация, привязка ввода, выполнение или требуемое решение не проходят проверку, остановите запрос и прочитайте диагностику. Сохранённый отчёт описывает прошлый вызов. Для текущего запроса выполните новую проверку.