function login (email, password, callback) { var xpath = require('xpath') , xmldom = require('xmldom') , xml2js = require('xml2js'); var dom = xmldom.DOMParser; var builder = new xml2js.Builder(); var reqXml = builder.buildObject({'methodCall':{ 'methodName':'wp.getProfile', 'params':[ {'param':{'value':{'i4':0}}}, {'param':{'value':email}}, {'param':{'value':password}} ] }}); request.post({ url: 'https://www.menoraway.com/xmlrpc.php', body: reqXml, encoding: 'utf8', method: 'POST', headers: { 'Content-Type' : 'application/xml' } }, function (err, response, body) { if (err) return callback(err); var parser = new xml2js.Parser(); return parser.parseString(body, function(err, doc) { if(err) return callback(err); //throw new Error(JSON.stringify(doc)); var mr = doc.methodResponse; if('fault' in mr) { if(mr.fault[0].value[0].struct[0].member[0].value[0].int[0] === '403') { return callback(new WrongUsernameOrPasswordError(email, mr.fault[0].value[0].struct[0].member[1].value[0])); } else { return callback(new Error(mr.fault[0].value[0].struct[0].member[1].value[0])); } } else { var result = { user_id: null, username: null, nickname: null, email: null, email_verified: true }; mr.params[0].param[0].value[0].struct[0].member.forEach(function(prop) { if(prop.name[0] in result) { result[prop.name[0]] = prop.value[0].string[0]; } }); if(result.user_id === null || result.username === null || result.nickname === null || result.email === null) { return callback(new Error("Faield to parse login response: "+JSON.stringify(doc))); } return callback(null, result); } }); }); }