Skip to content

Instantly share code, notes, and snippets.

@dobesv
Last active July 31, 2018 16:37
Show Gist options
  • Select an option

  • Save dobesv/fd70974421b891b3f277 to your computer and use it in GitHub Desktop.

Select an option

Save dobesv/fd70974421b891b3f277 to your computer and use it in GitHub Desktop.

Revisions

  1. dobesv revised this gist Jun 5, 2015. 1 changed file with 6 additions and 0 deletions.
    6 changes: 6 additions & 0 deletions ReadMe.md
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,6 @@
    You must provide the following configuration variables:

    1. `WP_XMLRPC_URL` = `https://www.yourdomain.com/xmlrpc.php` (replace with your domain and use http:// if you don't have SSL support)
    2. `WP_ADMIN_USER` = `admin` (use your own admin username)
    3. `WP_ADMIN_PASSWORD` = `somepassword` (use your own admin password)

  2. dobesv revised this gist Jun 4, 2015. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion getByEmail.js
    Original file line number Diff line number Diff line change
    @@ -15,7 +15,7 @@ function getByEmail (name, callback) {
    }});

    request.post({
    url: 'https://www.menoraway.com/xmlrpc.php',
    url: configuration.WP_XMLRPC_URL,
    body: reqXml,
    encoding: 'utf8',
    method: 'POST',
  3. dobesv revised this gist Jun 4, 2015. 1 changed file with 5 additions and 4 deletions.
    9 changes: 5 additions & 4 deletions login.js
    Original file line number Diff line number Diff line change
    @@ -14,21 +14,22 @@ function login (email, password, callback) {
    }});

    request.post({
    url: 'https://www.menoraway.com/xmlrpc.php',
    url: configuration.WP_XMLRPC_URL,
    body: reqXml,
    encoding: 'utf8',
    method: 'POST',
    headers: { 'Content-Type' : 'application/xml' }
    headers: { 'Content-Type' : 'application/xml', 'Accept' : '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);
    var mr = doc.methodResponse;
    if(typeof(mr) === 'undefined') {
    throw new Error(JSON.stringify(mr)+" <-- "+body);
    }
    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].string[0]));
    } else {
  4. dobesv revised this gist Jun 4, 2015. 1 changed file with 70 additions and 0 deletions.
    70 changes: 70 additions & 0 deletions getByEmail.js
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,70 @@
    function getByEmail (name, 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.getUsers',
    'params':[
    {'param':{'value':{'i4':0}}},
    {'param':{'value':configuration.WP_ADMIN_USER}},
    {'param':{'value':configuration.WP_ADMIN_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);
    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(configuration.WP_ADMIN_USER, mr.fault[0].value[0].struct[0].member[1].value[0].string[0]));
    } else {
    return callback(new Error(mr.fault[0].value[0].struct[0].member[1].value[0].string[0]));
    }
    } else {
    var userdatas = mr.params[0].param[0].value[0].array[0].data[0].value;
    var userlist = userdatas.map(function(userdata) {
    var result = {
    user_id: null,
    username: null,
    nickname: null,
    email: null,
    display_name: null,
    nicename: null,
    first_name: null,
    last_name: null
    };

    userdata.struct[0].member.forEach(function(prop) {
    if(prop.name[0] in result) {
    result[prop.name[0]] = prop.value[0].string[0];
    }
    });

    result.given_name = result.first_name;
    result.family_name = result.last_name;
    return result;
    });
    var matches = userlist.filter(function(u) {
    return u.email === name || u.username === name;
    });
    if(matches.length > 0) {
    return callback(null, matches[0]);
    }
    return callback(new ValidationError("not-found", "No matching user found"));
    }
    });
    });
    }
  5. dobesv revised this gist Jun 4, 2015. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion login.js
    Original file line number Diff line number Diff line change
    @@ -51,7 +51,7 @@ function login (email, password, callback) {
    result.username === null ||
    result.nickname === null ||
    result.email === null) {
    return callback(new Error("Faield to parse login response: "+JSON.stringify(doc)));
    return callback(new Error("Failed to parse login response: "+JSON.stringify(doc)));
    }
    return callback(null, result);
    }
  6. dobesv renamed this gist Jun 4, 2015. 1 changed file with 4 additions and 3 deletions.
    7 changes: 4 additions & 3 deletions gistfile1.txt → login.js
    Original file line number Diff line number Diff line change
    @@ -25,13 +25,14 @@ function login (email, password, callback) {
    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]));
    return callback(new WrongUsernameOrPasswordError(email, mr.fault[0].value[0].struct[0].member[1].value[0].string[0]));
    } else {
    return callback(new Error(mr.fault[0].value[0].struct[0].member[1].value[0]));
    return callback(new Error(mr.fault[0].value[0].struct[0].member[1].value[0].string[0]));
    }
    } else {
    var result = {
  7. dobesv revised this gist Jun 4, 2015. 1 changed file with 48 additions and 34 deletions.
    82 changes: 48 additions & 34 deletions gistfile1.txt
    Original file line number Diff line number Diff line change
    @@ -1,46 +1,60 @@
    function login (email, password, callback) {
    var escapeXml = function escapeXml(unsafe) {
    return unsafe.replace(/[<>&'"]/g, function (c) {
    switch (c) {
    case '<': return '&lt;';
    case '>': return '&gt;';
    case '&': return '&amp;';
    case '\'': return '&apos;';
    case '"': return '&quot;';
    }
    });
    };
    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://yourdomain.com/xmlrpc.php',
    body: '<?xml version="1.0"?><methodCall>' +
    '<methodName>wp.getProfile</methodName>' +
    '<params>'+
    '<param><value><i4>0</i4></value></param>' +
    '<param><value>'+escapeXml(email)+'</value></param>' +
    '<param><value>'+escapeXml(password)+'</value></param>' +
    '</params></methodCall>',
    url: 'https://www.menoraway.com/xmlrpc.php',
    body: reqXml,
    encoding: 'utf8',
    method: 'POST',
    headers: { 'Content-Type' : 'application/xml' }
    //for more options check:
    //https://github.com/mikeal/request#requestoptions-callback
    }, function (err, response, body) {

    if (err) return callback(err);
    if (response.statusCode !== 200) return callback();
    var user_id = body.match('<member><name>user_id</name><value><string>([^<]*)')[1];
    var nickname = body.match('<member><name>nickname</name><value><string>([^<]*)')[1];
    var email = body.match('<member><name>email</name><value><string>([^<]*)')[1];


    callback(null, {
    user_id: user_id,
    nickname: nickname,
    email: email,
    email_verified: true
    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);
    }
    });

    });

    }
    }
  8. dobesv revised this gist May 27, 2015. 1 changed file with 2 additions and 1 deletion.
    3 changes: 2 additions & 1 deletion gistfile1.txt
    Original file line number Diff line number Diff line change
    @@ -37,7 +37,8 @@ function login (email, password, callback) {
    callback(null, {
    user_id: user_id,
    nickname: nickname,
    email: email
    email: email,
    email_verified: true
    });

    });
  9. dobesv created this gist May 27, 2015.
    45 changes: 45 additions & 0 deletions gistfile1.txt
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,45 @@
    function login (email, password, callback) {
    var escapeXml = function escapeXml(unsafe) {
    return unsafe.replace(/[<>&'"]/g, function (c) {
    switch (c) {
    case '<': return '&lt;';
    case '>': return '&gt;';
    case '&': return '&amp;';
    case '\'': return '&apos;';
    case '"': return '&quot;';
    }
    });
    };

    request.post({
    url: 'https://yourdomain.com/xmlrpc.php',
    body: '<?xml version="1.0"?><methodCall>' +
    '<methodName>wp.getProfile</methodName>' +
    '<params>'+
    '<param><value><i4>0</i4></value></param>' +
    '<param><value>'+escapeXml(email)+'</value></param>' +
    '<param><value>'+escapeXml(password)+'</value></param>' +
    '</params></methodCall>',
    encoding: 'utf8',
    method: 'POST',
    headers: { 'Content-Type' : 'application/xml' }
    //for more options check:
    //https://github.com/mikeal/request#requestoptions-callback
    }, function (err, response, body) {

    if (err) return callback(err);
    if (response.statusCode !== 200) return callback();
    var user_id = body.match('<member><name>user_id</name><value><string>([^<]*)')[1];
    var nickname = body.match('<member><name>nickname</name><value><string>([^<]*)')[1];
    var email = body.match('<member><name>email</name><value><string>([^<]*)')[1];


    callback(null, {
    user_id: user_id,
    nickname: nickname,
    email: email
    });

    });

    }