text: /***************
   * Inspired from node-unblocker
   * 
   */
  
  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: '/proxy/',
      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("/no-js", 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;
  