UNPKG

ngrid-electric-login

Version:

Login to the NGrid Electric website using curl

77 lines (73 loc) 2.34 kB
var should = require('should'); var querystring = require('querystring') var spawn = require('child_process').spawn; var rk = require('required-keys'); var fs = require('fs') var path = require('path') var temp = require('temp') module.exports = function (data, cb) { var keys = ['currentLogin', 'viewState', 'eventValidation'] var err = rk.truthySync(data, keys) if (err) { return cb({ message: 'error submitting login for to get new cookie jar file, missing key in data', error: err, stack: new Error().stack }) } var cookiePath = temp.path({suffix: '.txt'}) var currentLogin = data.currentLogin var username = currentLogin.username var password = currentLogin.password var viewState = data.viewState var eventValidation = data.eventValidation // var eventValidation = '/wEWCQKTztSdAwLo8czFCAK5/tMUAvGqxSICpKzY0wYCzo6K/A0C1fmwzwkCqZTCxQUC/fGsuwnw9wXFH5nx6LJN5aKqqko2YF2f0w==' viewState = viewState.replace(/\n$/,'') var postData = { __VIEWSTATE: viewState, __EVENTVALIDATION: eventValidation, ctl00$MainContent$UCSignIn$txtSigninID: username, ctl00$MainContent$UCSignIn$txtPassword: password, ctl00$MainContent$UCSignIn$btnSignin: 'foo' } var postString = querystring.stringify(postData)+'\n' var args = [ '--cookie-jar', cookiePath, '--insecure', '-X', 'POST', '--data', postString, '-H', 'User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.64 Safari/537.31', '-H', 'Content-Type:application/x-www-form-urlencoded', '-H', 'Content-Length:' + postString.length, '-s', '-D', '-', 'https://www1.nationalgridus.com/SignIn', '-o', '/dev/null' ] var cmd = 'curl' var curl = spawn(cmd, args) curl.stderr.setEncoding('utf8') curl.stdout.setEncoding('utf8') var stdOut = '' var stdErr = '' curl.stdout.on('data', function (data) { stdOut += data }) curl.stderr.on('data', function (data) { stdErr += data }) curl.on('exit', function(code) { if (code != 0) { return cb({ message: 'login failed', error: 'bad return code from curl when posting login form', stack: new Error().stack, stdout: stdOut, stderr: stdErr, code: code }) } cb(null, cookiePath) }) }