mirror of
https://github.com/QuiteAFancyEmerald/Holy-Unblocker.git
synced 2025-05-12 19:40:02 -04:00
Initial commit
This commit is contained in:
commit
7be921c250
42 changed files with 5858 additions and 0 deletions
79
app.js
Normal file
79
app.js
Normal file
|
@ -0,0 +1,79 @@
|
|||
/***************
|
||||
* node-unblocker: Web Proxy for evading firewalls and content filters,
|
||||
* similar to CGIProxy or PHProxy
|
||||
*
|
||||
*
|
||||
* This project is hosted on github: https://github.com/nfriedly/nodeunblocker.com
|
||||
*
|
||||
* By Nathan Friedly - http://nfriedly.com
|
||||
* Released under the terms of the Affero GPL v3
|
||||
*/
|
||||
|
||||
var url = require('url');
|
||||
var querystring = require('querystring');
|
||||
var express = require('express');
|
||||
var unblocker = require('unblocker');
|
||||
var Transform = require('stream').Transform;
|
||||
|
||||
var app = express();
|
||||
|
||||
var google_analytics_id = process.env.GA_ID || null;
|
||||
|
||||
function addGa(html) {
|
||||
if (google_analytics_id) {
|
||||
var ga = [
|
||||
"<script type=\"text/javascript\">",
|
||||
"var _gaq = []; // overwrite the existing one, if any",
|
||||
"_gaq.push(['_setAccount', '" + google_analytics_id + "']);",
|
||||
"_gaq.push(['_trackPageview']);",
|
||||
"(function() {",
|
||||
" var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;",
|
||||
" ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';",
|
||||
" var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);",
|
||||
"})();",
|
||||
"</script>"
|
||||
].join("\n");
|
||||
html = html.replace("</body>", ga + "\n\n</body>");
|
||||
}
|
||||
return html;
|
||||
}
|
||||
|
||||
function googleAnalyticsMiddleware(data) {
|
||||
if (data.contentType == 'text/html') {
|
||||
|
||||
// https://nodejs.org/api/stream.html#stream_transform
|
||||
data.stream = data.stream.pipe(new Transform({
|
||||
decodeStrings: false,
|
||||
transform: function(chunk, encoding, next) {
|
||||
this.push(addGa(chunk.toString()));
|
||||
next();
|
||||
}
|
||||
}));
|
||||
}
|
||||
}
|
||||
|
||||
var unblockerConfig = {
|
||||
prefix: '/call/',
|
||||
responseMiddleware: [
|
||||
googleAnalyticsMiddleware
|
||||
]
|
||||
};
|
||||
|
||||
|
||||
|
||||
// this line must appear before any express.static calls (or anything else that sends responses)
|
||||
app.use(unblocker(unblockerConfig));
|
||||
|
||||
// serve up static files *after* the proxy is run
|
||||
app.use('/', express.static(__dirname + '/public'));
|
||||
|
||||
// this is for users who's form actually submitted due to JS being disabled or whatever
|
||||
app.get("/b", function(req, res) {
|
||||
// grab the "url" parameter from the querystring
|
||||
var site = querystring.parse(url.parse(req.url).query).url;
|
||||
// and redirect the user to /proxy/url
|
||||
res.redirect(unblockerConfig.prefix + site);
|
||||
});
|
||||
|
||||
// for compatibility with gatlin and other servers, export the app rather than passing it directly to http.createServer
|
||||
module.exports = app;
|
Loading…
Add table
Add a link
Reference in a new issue