NODEDC_PLATFORM/services/proxy-contur/README.md

3.5 KiB
Raw Blame History

proxy-contur

Прокси-сервис для тендерного контура (Synology upstream).

Legacy Cesium note. Контурные endpoints этого сервиса остаются поддерживаемым назначением. Его /proxy/cesium/fetch сохраняется только как историческая совместимость и не является production-маршрутом Foundry Map. Канонический Cesium egress: Map Gateway → dc-amd-proxy → dc-amd-connector → Windows VPN; см. services/dc-amd-proxy/OPERATIONS.md.

Назначение

Сервис принимает запросы от локального backend NodeDC и делает внешний трафик:

  1. Поиск тендеров (Contour search).
  2. Карточка закупки (Contour purchases).
  3. Fetch документов по url с stream passthrough (без base64).
  4. Ограниченный VPN egress для Platform Map Gateway / Cesium.

Endpoints

  1. GET /healthz
  2. POST /proxy/contour/search
  3. GET /proxy/contour/purchases/:purchaseId
  4. GET /proxy/contour/limit-groups
  5. GET /proxy/fetch?url=<encoded-url>
  6. GET /proxy/cesium/fetch?url=<encoded-url>

Auth

Если задан PROXY_TOKEN, требуется:

  1. x-proxy-token: <token>
    или
  2. Authorization: Bearer <token>

Contour API key

Рекомендуемый режим:

  1. Задать CONTOUR_API_KEY в .env на стороне proxy-contur.
  2. После этого ключ Контура не нужно передавать в каждом запросе.

Совместимость:

  1. Если CONTOUR_API_KEY не задан, сервис возьмёт ключ из запроса (x-kontur-apikey / query / body), как раньше.

Security

По умолчанию включено:

  1. Только http/https.
  2. Блок private/local/loopback сетей.
  3. Проверка каждого redirect.
  4. Лимиты timeout/size/redirect count.

/proxy/cesium/fetch дополнительно принимает только канонические hosts Cesium Ion и Bing, проверяет каждый redirect и не допускает произвольные outbound headers. Внутренние x-nodedc-cesium-authorization и x-nodedc-map-referer передаёт только Map Gateway через закрытую сеть nodedc-map-egress; в логах query credentials маскируются.

Quick Start

cd proxy-contur
cp .env.example .env
npm install
npm run start

Docker Compose Start

cd proxy-contur
cp .env.example .env
docker compose up -d --build

Проверка:

docker compose ps
curl -sS http://172.22.0.222:8787/healthz | jq

Остановка:

docker compose down

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

Проверка:

curl -sS http://172.22.0.222:8787/healthz | jq

Contour search:

curl -sS -X POST "http://172.22.0.222:8787/proxy/contour/search" \
  -H "x-proxy-token: change-me" \
  -H "content-type: application/json" \
  -d '{"PageNumber":0,"PageSize":50}' | jq

Contour purchase:

curl -sS "http://172.22.0.222:8787/proxy/contour/purchases/12345" \
  -H "x-proxy-token: change-me" | jq

Fetch file stream:

curl -L -o out.bin \
  "http://172.22.0.222:8787/proxy/fetch?url=https%3A%2F%2Fexample.com%2Ffile.pdf" \
  -H "x-proxy-token: change-me"