From f2f6ddbe9b810327cafd48dd5b4b9e9bf7496ad3 Mon Sep 17 00:00:00 2001 From: Brian Shaler Date: Thu, 7 Jun 2012 20:39:52 -0700 Subject: [PATCH] initial commit --- .gitignore | 1 + app.js | 105 +++++++++++++++++++++++++++++++++++++++++++++++++++ package.json | 7 ++++ 3 files changed, 113 insertions(+) create mode 100644 .gitignore create mode 100755 app.js create mode 100644 package.json diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..3c3629e --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +node_modules diff --git a/app.js b/app.js new file mode 100755 index 0000000..75d050d --- /dev/null +++ b/app.js @@ -0,0 +1,105 @@ +var url = require('url'), + querystring = require('querystring'), + http = require('http'), + scraper = require('scraper'); + +var hotspots = { + cartel: { + check: function ($) { + if ($("title").html().toLowerCase().indexOf("cartel") != -1) { + return true; + } + return false; + }, + credentials: { + auth_user: "cartel", + auth_pass: "cartel", + redirurl: "http://google.com/", + accept: "Continue" + }, + postOptions: { + path: "/" + } + } +}; + +function checkForRedirect () { + var checkOptions = { + host: "s3.amazonaws.com", + path: "/brianshaler/status.json", + method: "GET" + }; + http.request(checkOptions, isThisARedirect).on('error', onError).end(); +} + +function isThisARedirect (res) { + if (res.statusCode == 301 || res.statusCode == 302) { + console.log("Redirect? HOW SUSPICIOUS."); + redirecting(res); + } +} + +function redirecting (res) { + var _url = url.parse(res.headers.location); + + console.log("Scrape: "+res.headers.location); + scraper(res.headers.location, function(err, $) { + if (err) {throw err} + var found = false; + for (var k in hotspots) { + if (!found && hotspots[k].check($)) { + console.log(k.toUpperCase()+" WANTS YOU TO LOG IN"); + connectToNetwork(hotspots[k].credentials, mergeObjects(_url, hotspots[k].postOptions)); + return; + } + } + console.log("Unrecognized login form"); + }); +} + +function connectToNetwork (loginFormData, loginFormOptions) { + + loginFormData = querystring.stringify(loginFormData); + + loginFormOptions.method = "POST", + loginFormOptions.headers = { + 'Content-Type': 'application/x-www-form-urlencoded', + 'Content-Length': loginFormData.length + }; + + // Set up the request + var post_req = http.request(loginFormOptions, function(res) { + res.setEncoding('utf8'); + res.on('data', function (chunk) { + //console.log('Response: ' + chunk); + }); + res.on('error', onError); + res.on('close', function () { + console.log("Logged in!"); + }); + }); + + post_req.on('error', onError); + + // post the data + post_req.write(loginFormData); + post_req.end(); +} + +function onError (e) { + console.log(e); +} + +function mergeObjects (obj1, obj2) { + obj = {}; + for (k in obj1) { + obj[k] = obj1[k]; + } + for (k in obj2) { + obj[k] = obj2[k]; + } + return obj; +} + +setInterval(checkForRedirect, 10000); +checkForRedirect(); diff --git a/package.json b/package.json new file mode 100644 index 0000000..74662e2 --- /dev/null +++ b/package.json @@ -0,0 +1,7 @@ +{ + "name": "cartel", + "version": "0.0.1", + "dependencies" : { + "scraper" : "0.0.9" + } +} \ No newline at end of file