node-echo v0.1.9

Display Filters

file req.js

var https = require("https");
var sha1 = require("./sha1.js").sha1;
var base64 = require("base64");

exports.req = function(){
    /**
     * Post and Get action for Echo.
     * @class req
     * @private
     */
    var my = {};

    my.post = function(options,url,data,callback){
        /**
         * POST method
         * @method post
         * @param {object} options Defines:
         * <ul>
         *     <li>options.consumerKey Echo API Key</li>
         *     <li>options.consumerSecret Echo API Secret</li>
         *     <li>options.apiHost Echo API Url</li>
         *     <li>options.authMethod Authentication method, in ['oauth','basic']</li>
         * </ul>
         * @param {string} url URL representing the "action" of the post (depends on what is being posted)
         * @param {object} data Data to post
         * @param {function} callback callback called with the response of the POST
         */
        switch (options.authMethod){
            case "oauth":
                my.postOAuth(options,url,data,callback);
                break;
            case "basic":
                my.postBasic(options,url,data,callback);
                break;
            default:
                throw {name:'Illegal auth method exception',error:'auth method '+options.authMethod+" not valid"}
        }
    };

    my.get = function(options,url,data,callback){
        /**
         * GET method
         * @method get
         * @param {object} options Defines:
         * <ul>
         *     <li>options.consumerKey Echo API Key</li>
         *     <li>options.consumerSecret Echo API Secret</li>
         *     <li>options.apiHost Echo API Url</li>
         *     <li>options.authMethod Authentication method, in ['oauth','basic']</li>
         * </ul>
         * @param {string} url URL representing the "action" of the get (depends on what is being get-ed)
         * @param {object} data Data to get
         * @param {function} callback callback called with the response of the GET
         */
        switch (options.authMethod){
            case "oauth":
                my.getOAuth(options,url,data,callback);
                break;
            case "basic":
                my.getBasic(options,url,data,callback);
                break;
            default:
                throw {name:'Illegal auth method exception',error:'auth method '+options.authMethod+" not valid"}
        }
    };







    my.getOAuth = function(options,url,data,callback){
        /**
         * GET, OAuth authentication
         * @method getOAuth
         * @private
         */
        var consumerKey = options.consumerKey;
        var consumerSecret = options.consumerSecret;
        var apiHost = options.apiHost;
        var method = "GET";

        var postData = sha1.signRequest(
                method
                ,"https://" + apiHost + url
                ,consumerKey
                ,consumerSecret
                ,data);

        postData = sha1.sortIntoString(postData);

        var reqoptions = {
             'host' : apiHost
            ,'method': method
            ,'path':url+"?"+postData
            ,'headers':{
                 'Content-Type': 'application/x-www-urlencoded'
                ,'Content-Length': postData.length
            }
        };

        var request = https.request(reqoptions);
        request.end();

        request.on('response', function (response) {
            var res = {};
            res.status = response.statusCode;
            res.headers = response.headers;
            res.body = "";
            response.setEncoding('utf8');
            response.on('data', function (chunk) {
                res.body += chunk;
            });
            response.on('end',function(){
                callback(res);
            });
        });
    };


    my.postOAuth = function(options,url,data,callback){
        /**
         * POST, OAuth authentication
         * @method postOAuth
         * @private
         */
        var consumerKey = options.consumerKey;
        var consumerSecret = options.consumerSecret;
        var apiHost = options.apiHost;
        var method = "POST";

        var postData = sha1.signRequest(
                method
                ,"https://"+apiHost + url
                ,consumerKey
                ,consumerSecret
                ,data);

        postData = sha1.sortIntoString(postData);

        var reqoptions = {
             'host' : apiHost
            ,'method': method
            ,'path':url
            ,'headers':{
                 'Content-Type': 'application/x-www-urlencoded'
                ,'Content-Length': postData.length
            }
        };

        var request = https.request(reqoptions);
        request.end(postData);

        request.on('response', function (response) {
            var res = {};
            res.status = response.statusCode;
            res.headers = response.headers;
            res.body = "";
            response.setEncoding('utf8');
            response.on('data', function (chunk) {
                res.body += chunk;
            });
            response.on('end',function(){
                callback(res);
            });
        });

    };


    my.getBasic = function(options,url,data,callback){
        /**
         * GET Method, Basic authentication
         * @method getBasic
         * @private
         */
        var consumerKey = options.consumerKey;
        var consumerSecret = options.consumerSecret;
        var apiHost = options.apiHost;
        var method = "GET";
        var loginfo = base64.encode(consumerKey+":"+consumerSecret);

        var postData = sha1.sortIntoString(data);
        if (postData.length > 0){
            postData = "?"+postData;
        }

        var reqoptions = {
             'host' : apiHost
            ,'method': method
            ,'path':url+postData
            ,'headers':{
                 'Content-Type': 'application/x-www-urlencoded'
                ,'Content-Length': postData.length
                ,'Authorization':'Basic '+loginfo
            }
        };

        var request = https.request(reqoptions);
        request.end();

        request.on('response', function (response) {
            var res = {};
            res.status = response.statusCode;
            res.headers = response.headers;
            res.body = "";
            response.setEncoding('utf8');
            response.on('data', function (chunk) {
                res.body += chunk;
            });
            response.on('end',function(){
                callback(res);
            });
        });
    };

    my.postBasic = function(options,url,data,callback){
        /**
         * POST Method, Basic authentication
         * @method postBasic
         * @private
         */
        var consumerKey = options.consumerKey;
        var consumerSecret = options.consumerSecret;
        var apiHost = options.apiHost;
        var method = "POST";

        var loginfo = base64.encode(consumerKey+":"+consumerSecret);

        var postData = sha1.sortIntoString(data);

        var reqoptions = {
             'host' : apiHost
            ,'method': method
            ,'path':url
            ,'headers':{
                 'Authorization':'Basic '+loginfo
                ,'Content-Type': 'application/x-www-urlencoded'
                ,'Content-Length': postData.length
            }
        };

        var request = https.request(reqoptions);
        request.end(postData);

        request.on('response', function (response) {
            var res = {};
            res.status = response.statusCode;
            res.headers = response.headers;
            res.body = "";
            response.setEncoding('utf8');
            response.on('data', function (chunk) {
                res.body += chunk;
            });
            response.on('end',function(){
                callback(res);
            });
        });
    };

    return my;
}();