pdfer-login-imacros
Version:
Login to the pdfer service using iMacros for Firefox
95 lines (88 loc) • 2.89 kB
JavaScript
/**
* Login to pdfer website using iMacros for Firefox
*/
module.exports = function(config, cb) {
// clear all existing cookies and sessions
if (!config) {
return cb('"config" parameter missing');
}
var uploadURL = 'https://' + config.pdfer.host + '/upload';
var code = iimPlay('CODE:URL GOTO='+uploadURL);
var atPage = atUploadPage();
if (atPage) {
var username = getUsername();
if (username === config.pdfer.username) {
return cb();
}
}
var loginURL = 'https://'+ config.pdfer.host + '/login/api';
code = iimPlay('CODE:URL GOTO='+loginURL);
if (code !==1) {
return cb('failed to login to pdfer service, imacros error: ' + iimGetLastError());
}
atPage = atLoginPage();
if (!atPage) {
var logoutURL = 'http://'+config.pdfer.host + ':' + config.pdfer.port + '/logout';
code = iimPlay('CODE:URL GOTO=' +logoutURL);
code = iimPlay('CODE:URL GOTO='+loginURL);
atPage = atLoginPage();
if (!atPage) {
return cb('not at login page when we should be');
}
}
fillLogin(config, function (err, reply) {
if (err) { return cb(err); }
atPage = atUploadPage();
if (!atPage) {
return cb('pdfer login failed, not at upload page after submitting login');
}
cb();
});
};
function getUsername() {
var code = iimPlay('CODE: TAG POS=1 TYPE=SPAN ATTR=ID:username EXTRACT=TXT');
if (code !== 1) {
return null;
}
var extract = iimGetLastExtract().trim();
if (extract === '#EANF#') {
return null;
}
return extract;
}
function fillLogin(config, cb) {
var pdfer = config.pdfer
var code = iimPlay('CODE: SET !TIMEOUT_TAG 0\n'
+ 'TAG POS=1 TYPE=INPUT:TEXT FORM=NAME:NoFormName ATTR=ID:id_email CONTENT=' + pdfer.email);
if (code !== 1) {
return cb('login failed, imacros error when filling in email field: ' + iimGetLastError());
}
var password = pdfer.password;
code = iimPlay('CODE: SET !TIMEOUT_TAG 0\n'
+ 'TAG POS=1 TYPE=INPUT:PASSWORD ATTR=ID:id_password CONTENT=' + password);
if (code !== 1) {
return cb('login failed, imacros error when filling in password field: ' + iimGetLastError());
}
code = iimPlay('CODE:SET !TIMEOUT_TAG 0\n'
+ 'TAG POS=1 TYPE=INPUT:SUBMIT FORM=NAME:NoFormName ATTR=*');
if (code !== 1) {
return cb('login failed, imacros error when pressing submit button on login page: ' + iimGetLastError());
}
cb();
}
function atLoginPage() {
var code = iimPlay('CODE: SET !TIMEOUT_TAG 0\n'
+ 'TAG POS=1 TYPE=P ATTR=TXT:Use<SP>your<SP>email<SP>and<SP>password<SP>to<SP>login')
if (code === 1) {
return true;
}
return false;
}
function atUploadPage() {
var code = iimPlay('CODE:SET !TIMEOUT_TAG 0\n'
+ 'TAG POS=1 TYPE=H1 ATTR=TXT:Upload<SP>PDF');
if (code === 1) {
return true;
}
return false;
}