diff --git a/p/server.js b/p/server.js new file mode 100644 index 00000000..a6686d3e --- /dev/null +++ b/p/server.js @@ -0,0 +1,51 @@ +const fs = require("fs"); +const express = require('express'); +const fetch = require('node-fetch'); +const htmlParser = require("node-html-parser"); + +const app = express(); + +app.use(express.json()) // for parsing application/json +app.use(express.urlencoded({ extended: true })) // for parsing application/x-www-form-urlencoded + + let Proxy = async (req, res) => { + var url = req.originalUrl + + let f = await fetch(url, { + method: req.method, + }); + if(false && f.headers.get('content-type').includes("html")){ + const body = await f.text(); + if(false && !htmlParser.valid(body)) { + console.warn(`[ERROR] Invalid HTML at ${url}`); + f.body.pipe(res); + return; + }; + const root = htmlParser.parse(body); + let html = root.childNodes.filter((x) => x.tagName && x.tagName.toLowerCase() == "html")[0]; + + if(!html) { + console.warn(`[ERROR] No at ${url}`); + res.send(body); + return; + }; + + + res.send(html.toString()); + } else { + f.body.pipe(res); + }; +}; + + +const listener = (req, res) => { + Proxy(req, res) +}; + + +app.get("/", (req, res) => res.redirect(`/https://www.google.com/`)); +app.all('/*', listener); + + +app.listen(3000, () => { + })