UNPKG

cerberus-api

Version:

Node module for interacting with the Cerberus API

158 lines (135 loc) 3.64 kB
var _ = require("underscore"), async = require("async"), defaults = require('../config/options'), request = require('request'); var API = function( options ){ // prerequisites options = options || {}; options.callback = options.callback || function(){ return }; return this; } API.prototype = { // mirror of passport's authentication method auth: function(){ }, // add as a middleware for every subsequent request... // initialize app middleware middleware: function( app ){ }, // Item methods data: {}, get: function( key ){ return this.data[key] || null; }, set: function( data ){ _.extend( this.data, data ); // allow chainability return this; }, // CRUD create: function( params ){ // query }, read: function( params, callback ){ // query var self = this; var url = this.options.url +"/api/"; var token = this._token; // use this.token()? // if(typeof params == "string"){ // this is the complete api uri var path = params; // FIX: remove leading slash if( path.substring(0, 1) === "/" ) path = path.substring(1); url += path; } else if(typeof params == "object"){ // assume it's an object // schema #1 if( params.path ){ // FIX: remove leading slash var path = params.path; if( path.substring(0, 1) === "/" ) path = path.substring(1); url += path; } // version 2 if( params.name ) url += params.name; if( params.id ) url += "/"+ params.id; if( params.type ) url += "/"+ params.type; // use user token if passed if( params.token ) token = params.token; // or user.token ? } else { // exit now callback({ code: 400, message: "not a valid query" }); } //var request = {}; // save in memory //this.set( request ); request.get( url, { 'auth': { 'bearer': token } }, function( error, response, result ){ var data; if( self.options.format == "json"){ data = result; } else { // assume obj try { data = JSON.parse( result ); } catch(e) { // output error? data = {}; } } callback( null, data ); }); }, update: function( params ){ // query }, destroy: function( params ){ // query }, // alias for destroy (delete)... del: function( params ){ return this.destroy( params ); }, // request application-level token token: function(){ // return existing token, if available if( this._token ) return this._token; // variables var self = this; // application only authentication, executed on the server-side request.get( this.options.url +"/oauth/token?client_id="+ this.options.key +"&client_secret="+ this.options.secret +"&grant_type=client_credentials", function( error, response, result ){ // output error if( error ) return console.log(error); if( !result ) return; // parse token var data = JSON.parse( result ); if( data.error ) return console.log( data.message ); // save for later self._token = data.access_token; }); }, // user login using username/password login: function( creds, callback ){ var self = this; // filter data? // request.get( this.options.url +"/oauth/token?client_id="+ this.options.key +"&client_secret="+ this.options.secret +"&username="+ creds.username +"&password="+ creds.password +"&grant_type=password", function( error, response, result ){ // output error if( error ) return callback(error); if( !result ) return callback("no_valid_creds"); // parse token var data = JSON.parse( result ); // save for later callback(null, data); }); } } module.exports = function( options ){ return new API( options ); }