From 60f65152cb6a8d7a754d38975e25a440694c555d Mon Sep 17 00:00:00 2001 From: William Mantly Date: Sat, 22 Feb 2025 16:49:26 -0500 Subject: [PATCH] proxy fixes --- routes/proxy.js | 115 +++++++++++++++++++++++++----------------------- 1 file changed, 61 insertions(+), 54 deletions(-) diff --git a/routes/proxy.js b/routes/proxy.js index 6c07de6..ac3729b 100644 --- a/routes/proxy.js +++ b/routes/proxy.js @@ -13,16 +13,21 @@ const mainjs = fs.readFileSync('./static/main.js', 'utf8'); // app.all("/*.js", function(req, res){res.send('')}); router.all('/static/main.js', function(req,res){ - res.write(mainjs); + res.write(mainjs); }); const proxyTarget = { - // target: "https://wtfismyip.com", - // host: "wtfismyip.com", - target: 'https://piratebay.party', - host: 'piratebay.party', - // target: 'http://172.16.0.1', - // host: 'piratebayo3klnzokct3wt5yyxb2vpebbuyjl7m623iaxmqhsd52coid.onion' + // target: "https://wtfismyip.com", + // host: "wtfismyip.com", + target: 'https://piratebay.party', + host: 'piratebay.party', + // target: 'http://172.16.0.1', + // target: 'http://piratebayo3klnzokct3wt5yyxb2vpebbuyjl7m623iaxmqhsd52coid.onion', + // host: 'piratebayo3klnzokct3wt5yyxb2vpebbuyjl7m623iaxmqhsd52coid.onion' + // target: 'https://thepiratebay.org', + // host: 'thepiratebay.org', + // target: 'https://www2.thepiratebay3.to', + // host: 'www2.thepiratebay3.to' } function generateRegexForDomain(domain) { @@ -36,60 +41,62 @@ function generateRegexForDomain(domain) { } router.all("/*", proxy({ - target: proxyTarget.target, - agent: proxyTarget.target.startsWith('https') ? https.globalAgent : http.globalAgent, - secure: false, - autoRewrite: true, - changeOrigin: true, + target: proxyTarget.target, + agent: proxyTarget.target.startsWith('https') ? https.globalAgent : http.globalAgent, + secure: true, + autoRewrite: true, + changeOrigin: true, followRedirects: true, - headers: { - host: proxyTarget.host - }, - selfHandleResponse: true, // so that the onProxyRes takes care of sending the response - onProxyRes: function(proxyRes, req, res){ + headers: { + host: proxyTarget.host, + 'Accept-Encoding': 'gzip', + }, + selfHandleResponse: true, // so that the onProxyRes takes care of sending the response + onProxyRes: function(proxyRes, req, res){ - if(proxyRes.statusCode === 403 && proxyRes.headers['content-type'] && - proxyRes.headers['content-type'].match('html') - ){ - console.log('403') - var url = (req.protocol + '://' + req.get('host') + req.originalUrl); - proxyRes.headers['location'] = url.replace(/\??ckattempt\=\d+/, ''); - proxyRes.statusCode == 307 + if(proxyRes.statusCode === 403 && proxyRes.headers['content-type'] && + proxyRes.headers['content-type'].match('html') + ){ + console.log('403') + var url = (req.protocol + '://' + req.get('host') + req.originalUrl); + proxyRes.headers['location'] = url.replace(/\??ckattempt\=\d+/, ''); + proxyRes.statusCode = 307; - return res.end() - } + return res.end() + } - for(let key of Object.keys(proxyRes.headers)){ - if(['content-encoding'].includes(key)) continue; - // res.set(key, proxyRes.headers[key].toString().replace('http://', 'https://')) - } + for(let key of Object.keys(proxyRes.headers)){ + if(['content-encoding'].includes(key)) continue; + // res.set(key, proxyRes.headers[key].toString().replace('http://', 'https://')) + } - let body = new Buffer(''); - proxyRes.on('error', function(e){ - console.error('ERROR!', e) - }); + let body = new Buffer(''); + proxyRes.on('error', function(e){ + console.error('ERROR!', e) + }); - proxyRes.on('data', function(data){ - body = Buffer.concat([body, data]); - }); + proxyRes.on('data', function(data){ + body = Buffer.concat([body, data]); + }); - proxyRes.on('end', function(){ - body = proxyRes.headers['content-encoding'] === 'gzip' ? zlib.gunzipSync(body).toString('utf8') : body; - body = proxyRes.headers['content-encoding'] === 'br' ? zlib.brotliDecompressSync(body).toString('utf8') : body; - if(proxyRes.statusCode === 200 && - proxyRes.headers['content-type'] && - proxyRes.headers['content-type'].match('html') - ){ - body = body.toString().replace(/<\s*script[^]*?script>/igm, ''); - body = body.replace(generateRegexForDomain(proxyTarget.host), ''); - body = body.replace(/<\s*iframe[^]*?iframe>/igm, ''); - body = body.replace("", ''); - body = body+inject+""; - } - res.status(proxyRes.statusCode).end(body); - }); + proxyRes.on('end', function(){ + // console.log("proxyRes.headers['content-encoding']", proxyRes.headers['content-encoding']); + body = proxyRes.headers['content-encoding'] === 'gzip' ? zlib.gunzipSync(body).toString('utf8') : body; + body = proxyRes.headers['content-encoding'] === 'br' ? zlib.brotliDecompressSync(body).toString('utf8') : body; + if(proxyRes.statusCode === 200 && + proxyRes.headers['content-type'] && + proxyRes.headers['content-type'].match('html') + ){ + body = body.toString().replace(/<\s*script[^]*?script>/igm, ''); + body = body.replace(generateRegexForDomain(proxyTarget.host), ''); + body = body.replace(/<\s*iframe[^]*?iframe>/igm, ''); + body = body.replace("", ''); + body = body+inject+""; + } + res.status(proxyRes.statusCode).end(body); + }); - } + } })); -module.exports = router; +module.exports = router; \ No newline at end of file