mirror of
				https://codeberg.org/ashley/poke
				synced 2025-07-17 16:52:11 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			49 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			49 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| 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) => {
 | |
|   const url = "https://" + req.originalUrl.slice(10);
 | |
| 
 | |
|   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 <html> 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, () => {});
 | 
