Документы, подпись, файлы¶
Всё, что происходит у кассы, должно оставлять неотрицаемый след. Этот раздел охватывает юридически значимую подпись, используемые в ней личные активы и хранение файлов с интеграциями.
Электронная подпись (PAdES)¶
Серверная подпись PDF выполняется через API eID Mongolia /v3. Есть две
формы:
| Форма | Эндпоинты | Для чего |
|---|---|---|
| Без документа (digest) | POST /api/v1/sign/initiate → GET /api/v1/sign/status/{sid} |
Подпись только хеша SHA-256 — переводы и транзакции |
| PDF (PAdES) | POST /api/v1/sign/init → GET /api/v1/sign/{id} → GET /api/v1/sign/{id}/download |
Договоры, согласия, официальные документы |
Все требуют вошедшего гражданина. Поток асинхронный: init открывает
сессию, опрос возвращает состояние ожидания, пока гражданин не подтвердит в
приложении eID, после чего download отдаёт подписанный PDF.
UI: /me/eid/sign.
Sign relay — сторонние RP¶
/v3 eID Mongolia отклоняет вызовы без учётных данных с кодом 401. Поэтому
платформа, у которой такие данные есть, встаёт впереди как обратный прокси:
Стороннее приложение ──► https://sso.gerege.mn/rp/sign/v3/* ──► eidmongolia /v3/*
(здесь добавляются учётные данные RP)
Так сторонние приложения получают подпись, не владея собственными учётными
данными eID RP. Доступ регулируется грантом svc:eid-sign — см.
API-шлюз.
Порт
В compose-стеке этого репозитория api слушает на loopback
127.0.0.1:8091, чтобы nginx проксировал туда /rp/sign. Весь остальной
трафик приложения идёт через web BFF.
Личные активы¶
Изображение, имя и печать, используемые в подписи, пользователь ведёт сам
(/api/v1/me/*; на записи действует ограничитель govWrite):
| Метод | Путь | Что |
|---|---|---|
GET PUT DELETE |
/api/v1/me/signature |
Изображение подписи |
PUT |
/api/v1/me/latin-name |
Латинское имя (для международных документов) |
PUT |
/api/v1/me/org-name-latin/{regNo} |
Латинское название организации |
GET PUT DELETE |
/api/v1/me/orgstamp/{regNo} |
Печать организации |
В некириллических языках интерфейса (en, zh) предпочитается латинское имя;
русский — кириллический, поэтому имя в монгольской графике сохраняется.
UI: /me/profile.
Gerege Space — собственное хранилище¶
Хранилище поверх собственного SFTP платформы. Каждому пользователю выдаётся
квота, файлы лежат в BASE_PATH/users/<userID>/.
| Метод | Путь | Что |
|---|---|---|
GET |
/api/v1/gspace |
Список файлов + использование/квота |
POST |
/api/v1/gspace/upload |
Загрузка (при превышении квоты — отказ) |
GET |
/api/v1/gspace/download |
Скачивание |
DELETE |
/api/v1/gspace |
Удаление |
- Квота по умолчанию — 2 МБ (
GSPACE_QUOTA_BYTES). - Если
GSPACE_HOSTпуст, возможность выключена, и UI это учитывает.
Ключ хоста обязателен
GSPACE_HOST_KEY — открытый ключ SFTP-хоста. Обязателен в production:
без него SFTP-соединение падает по принципу fail-closed. В разработке пустое
значение допускается без проверки (риск MITM, только локально).
Сторонние интеграции¶
Пользователь связывает свои учётные записи со сторонними сервисами. OAuth-токены хранятся зашифрованными AES-256-GCM на уровне хранилища; доменный слой лишь переносит значения.
| Провайдер | Что даёт |
|---|---|
google-drive |
Список, предпросмотр и загрузка файлов |
dropbox |
Список, предпросмотр и загрузка файлов |
google-meet |
Создание пространства встречи |
google-login |
Связка учётной записи (часть аутентификации) |
Базовые эндпоинты:
| Метод | Путь | Что |
|---|---|---|
GET |
/api/v1/integrations |
Подключённые провайдеры |
POST |
/api/v1/integrations |
Подключить (после OAuth-колбэка) |
GET |
/api/v1/integrations/{provider}/token |
Токен провайдера (на сервере) |
DELETE |
/api/v1/integrations/{provider} |
Отключить |
BFF добавляет поверх рабочие эндпоинты по каждому провайдеру —
/api/integrations/google-drive/files, /api/integrations/dropbox/upload,
/api/integrations/google-meet/create-space и другие.
INTEGRATION_ENC_KEY
Ключ, которым шифруются эти токены. Никогда не меняйте его — им же зашифрованы TOTP-секрет MFA суперадмина и все токены интеграций; смена сломает их все.
UI: /me/integrations.