proxy fixes #8

Merged
wmantly merged 1 commits from cache-fix into master 2025-02-22 21:50:34 +00:00

View File

@ -13,16 +13,21 @@ const mainjs = fs.readFileSync('./static/main.js', 'utf8');
// app.all("/*.js", function(req, res){res.send('')}); // app.all("/*.js", function(req, res){res.send('')});
router.all('/static/main.js', function(req,res){ router.all('/static/main.js', function(req,res){
res.write(mainjs); res.write(mainjs);
}); });
const proxyTarget = { const proxyTarget = {
// target: "https://wtfismyip.com", // target: "https://wtfismyip.com",
// host: "wtfismyip.com", // host: "wtfismyip.com",
target: 'https://piratebay.party', target: 'https://piratebay.party',
host: 'piratebay.party', host: 'piratebay.party',
// target: 'http://172.16.0.1', // target: 'http://172.16.0.1',
// host: 'piratebayo3klnzokct3wt5yyxb2vpebbuyjl7m623iaxmqhsd52coid.onion' // 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) { function generateRegexForDomain(domain) {
@ -36,60 +41,62 @@ function generateRegexForDomain(domain) {
} }
router.all("/*", proxy({ router.all("/*", proxy({
target: proxyTarget.target, target: proxyTarget.target,
agent: proxyTarget.target.startsWith('https') ? https.globalAgent : http.globalAgent, agent: proxyTarget.target.startsWith('https') ? https.globalAgent : http.globalAgent,
secure: false, secure: true,
autoRewrite: true, autoRewrite: true,
changeOrigin: true, changeOrigin: true,
followRedirects: true, followRedirects: true,
headers: { headers: {
host: proxyTarget.host host: proxyTarget.host,
}, 'Accept-Encoding': 'gzip',
selfHandleResponse: true, // so that the onProxyRes takes care of sending the response },
onProxyRes: function(proxyRes, req, res){ 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'] && if(proxyRes.statusCode === 403 && proxyRes.headers['content-type'] &&
proxyRes.headers['content-type'].match('html') proxyRes.headers['content-type'].match('html')
){ ){
console.log('403') console.log('403')
var url = (req.protocol + '://' + req.get('host') + req.originalUrl); var url = (req.protocol + '://' + req.get('host') + req.originalUrl);
proxyRes.headers['location'] = url.replace(/\??ckattempt\=\d+/, ''); proxyRes.headers['location'] = url.replace(/\??ckattempt\=\d+/, '');
proxyRes.statusCode == 307 proxyRes.statusCode = 307;
return res.end() return res.end()
} }
for(let key of Object.keys(proxyRes.headers)){ for(let key of Object.keys(proxyRes.headers)){
if(['content-encoding'].includes(key)) continue; if(['content-encoding'].includes(key)) continue;
// res.set(key, proxyRes.headers[key].toString().replace('http://', 'https://')) // res.set(key, proxyRes.headers[key].toString().replace('http://', 'https://'))
} }
let body = new Buffer(''); let body = new Buffer('');
proxyRes.on('error', function(e){ proxyRes.on('error', function(e){
console.error('ERROR!', e) console.error('ERROR!', e)
}); });
proxyRes.on('data', function(data){ proxyRes.on('data', function(data){
body = Buffer.concat([body, data]); body = Buffer.concat([body, data]);
}); });
proxyRes.on('end', function(){ proxyRes.on('end', function(){
body = proxyRes.headers['content-encoding'] === 'gzip' ? zlib.gunzipSync(body).toString('utf8') : body; // console.log("proxyRes.headers['content-encoding']", proxyRes.headers['content-encoding']);
body = proxyRes.headers['content-encoding'] === 'br' ? zlib.brotliDecompressSync(body).toString('utf8') : body; body = proxyRes.headers['content-encoding'] === 'gzip' ? zlib.gunzipSync(body).toString('utf8') : body;
if(proxyRes.statusCode === 200 && body = proxyRes.headers['content-encoding'] === 'br' ? zlib.brotliDecompressSync(body).toString('utf8') : body;
proxyRes.headers['content-type'] && if(proxyRes.statusCode === 200 &&
proxyRes.headers['content-type'].match('html') 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.toString().replace(/<\s*script[^]*?script>/igm, '');
body = body.replace(/<\s*iframe[^]*?iframe>/igm, ''); body = body.replace(generateRegexForDomain(proxyTarget.host), '');
body = body.replace("</html>", ''); body = body.replace(/<\s*iframe[^]*?iframe>/igm, '');
body = body+inject+"</html>"; body = body.replace("</html>", '');
} body = body+inject+"</html>";
res.status(proxyRes.statusCode).end(body); }
}); res.status(proxyRes.statusCode).end(body);
});
} }
})); }));
module.exports = router; module.exports = router;