proxy fixes #8
							
								
								
									
										115
									
								
								routes/proxy.js
									
									
									
									
									
								
							
							
						
						
									
										115
									
								
								routes/proxy.js
									
									
									
									
									
								
							| @ -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; | ||||||
		Reference in New Issue
	
	Block a user