124 lines
3.5 KiB
Markdown
124 lines
3.5 KiB
Markdown
# 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
|
||
|
||
```bash
|
||
cd proxy-contur
|
||
cp .env.example .env
|
||
npm install
|
||
npm run start
|
||
```
|
||
|
||
## Docker Compose Start
|
||
|
||
```bash
|
||
cd proxy-contur
|
||
cp .env.example .env
|
||
docker compose up -d --build
|
||
```
|
||
|
||
Проверка:
|
||
|
||
```bash
|
||
docker compose ps
|
||
curl -sS http://172.22.0.222:8787/healthz | jq
|
||
```
|
||
|
||
Остановка:
|
||
|
||
```bash
|
||
docker compose down
|
||
```
|
||
|
||
## Пример запросов
|
||
|
||
Проверка:
|
||
|
||
```bash
|
||
curl -sS http://172.22.0.222:8787/healthz | jq
|
||
```
|
||
|
||
Contour search:
|
||
|
||
```bash
|
||
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:
|
||
|
||
```bash
|
||
curl -sS "http://172.22.0.222:8787/proxy/contour/purchases/12345" \
|
||
-H "x-proxy-token: change-me" | jq
|
||
```
|
||
|
||
Fetch file stream:
|
||
|
||
```bash
|
||
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"
|
||
```
|