jsforce
Version:
Salesforce API Library for JavaScript
67 lines (65 loc) • 2.01 kB
JavaScript
var async = require('async'),
phantom = require('node-phantom');
module.exports = function(url, username, password, callback) {
var ph, page;
async.waterfall([
function(cb) {
phantom.create(cb);
},
function(_ph, cb) {
ph = _ph;
setTimeout(function() {
ph.createPage(cb);
}, 100);
},
function(_page, cb) {
page = _page;
page.open(url, cb);
},
function(status, cb) {
setTimeout(function() {
page.evaluate(function(username, password) {
document.querySelector('#username').value = username;
document.querySelector('#password').value = password;
var e = document.createEvent('MouseEvents');
e.initEvent("click", false, true);
document.querySelector('button[name=Login]').dispatchEvent(e);
return true;
}, cb, username, password);
}, 4000);
},
function(status, cb) {
setTimeout(function() {
page.evaluate(function() {
if (location.href.indexOf("RemoteAccessAuthorizationPage.apexp") > 0) {
var e = document.createEvent('MouseEvents');
e.initEvent("click", false, true);
document.querySelector('#oaapprove').dispatchEvent(e);
return false;
}
return true;
}, cb);
}, 4000);
},
function(loaded, cb) {
setTimeout(function() {
page.evaluate(function() {
var params = {};
var m = document.querySelector('head script').innerText.match(/\/callback\?([^'"]+)/);
if (m) {
var qparams = m[1].split('&');
for (var i=0; i<qparams.length; i++) {
var qparam = qparams[i];
var pair = qparam.split('=');
params[pair[0]] = decodeURIComponent(pair[1]);
}
}
return params;
}, cb);
}, loaded ? 0 : 4000);
}
], function(err, params) {
ph.exit();
callback(err, params);
});
};