Перейти к содержанию

Документы, подпись, файлы

Всё, что происходит у кассы, должно оставлять неотрицаемый след. Этот раздел охватывает юридически значимую подпись, используемые в ней личные активы и хранение файлов с интеграциями.

Электронная подпись (PAdES)

Серверная подпись PDF выполняется через API eID Mongolia /v3. Есть две формы:

Форма Эндпоинты Для чего
Без документа (digest) POST /api/v1/sign/initiateGET /api/v1/sign/status/{sid} Подпись только хеша SHA-256 — переводы и транзакции
PDF (PAdES) POST /api/v1/sign/initGET /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.