ngrid-electric-login
Version:
Login to the NGrid Electric website using curl
77 lines (73 loc) • 2.34 kB
JavaScript
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)
})
}