const Component = require("./_component"); const express = require("express"); const bodyParser = require("body-parser"); const bodyHand = require('body'); const url = require('url'); const path = require('path'); const fetch = require('node-fetch'); function logger (...p) { return; console.log("[DEBUG.main]:", ...p); } module.exports = class HTTPReverse extends Component { constructor (adr, syntaxTree) { super(adr, syntaxTree); } run () { this.app = express(); const address = this.adr.address ?? "127.0.0.1"; const reverseTo = this.syntax.target ?? "https://example.org"; this.app.use('/*', async (req, res, next) => { // Myself body parser :) bodyHand(req, res, { limit: 9999999999, cache: false, encoding: 'base64' }, (err, body) => { if (!err) { req.body = Buffer.from(body, 'base64'); } else { req.body = undefined; } next(); }); }); this.app.use("*", async (req, res) => { logger("REQ HEADERS:>", req.headers); logger("originalUrl:>", req.originalUrl); const currentDomain = req.hostname; const params = { method: req.method.toUpperCase(), headers: Object.assign({}, req.headers), redirect: "follow", follow: 20 }; delete params.headers.host; delete params.headers.referer; if (!["GET", "HEAD"].includes(params.method)) params.body = req.body; logger("hostname:", currentDomain); const reverseToLoc = !this.syntax.domains[currentDomain] ? reverseTo : this.syntax.domains[currentDomain].target; const reqAddress = url.resolve(reverseToLoc, path.join("/", req.originalUrl)); fetch(reqAddress, params) .then(async result => { const content = await result.text(); logger("result:", result); logger("result.text():", content); Object.entries(result?.headers ? result.headers : new Object()).forEach(([header, value]) => { res.set(header, value); }); res.status(result.status).send(content); }) .catch(err => { console.error(err); res.status(500).send("Error

Error:


Error catched. Check logs

"); }); }); this.app.listen(this.adr.port, address, (err) => { if (err) { throw err; } console.log(`Koboldcpp reverse proxy server listened at ${ address }:${this.adr.port}`); }) } };