mirror of
				https://codeberg.org/ashley/poke
				synced 2025-07-17 16:52:11 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			52 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			52 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) => {
 | |
|   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 <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, () => {
 | |
|  })
 | 
