ngrid-electric-login
Version:
Login to the NGrid Electric website using curl
65 lines (63 loc) • 2.02 kB
JavaScript
var fs = require('fs')
var async = require('async')
var rk = require('required-keys');
var getSignInPageData = require('./getSignInPageData')
var submitLogin = require('./submitLogin')
var validateAuthenticatedCookieData = require('./validateAuthenticatedCookieData')
module.exports = function (data, callback) {
var keys = ['username', 'password']
var err = rk.truthySync(data, keys)
if (err) {
return callback({
message: 'error performing login, missing key in data',
error: err,
stack: new Error().stack
})
}
var cookiePath
var viewState, eventValidation
async.series([
function(cb) {
getSignInPageData(function (err, reply) {
if (err) { return cb(err) }
viewState = reply.viewState
eventValidation = reply.eventValidation
cb()
})
},
function(cb) {
var loginData = {
viewState: viewState,
eventValidation: eventValidation,
currentLogin: data
}
submitLogin(loginData, function (err, cookiePathReply) {
if (err) { return cb(err) }
cookiePath = cookiePathReply
fs.readFile(cookiePath, 'utf8', function (err, cookieData) {
if (err) {
return cb({
message: 'error performing login, failed to read cookie file on disk after submitting login form',
cookiePath: cookiePath,
error: err,
stack: new Error().stack
})
}
var isGoodLogin = validateAuthenticatedCookieData(cookieData)
if (isGoodLogin) {
return cb()
}
return cb({
message: 'error performing login',
cookiePath: cookiePath,
error: 'cookie is not a valid authenticated cookie, this means submit login post failed and the scraper is not logged in' ,
stack: new Error().stack
})
})
})
}
], function(err) {
viewState = eventValidation = null
callback(err, cookiePath)
})
}