celeritas
Version:
This is an API service framework which supports API requests over HTTP & WebSockets.
119 lines (100 loc) • 2.54 kB
JavaScript
class CallUtilities {
//Four possible statuses that a Call can be in.
static get PENDING () { return 'Pending'; }
static get READY () { return 'Ready'; }
static get COMPLETE () { return 'Complete'; }
static get ERROR () { return 'Error'; }
//This method sorts how properties are returned in the output by alphabetical order.
static _sortReturnData (obj) {
var obj = JSON.parse(JSON.stringify(obj));
if (obj !== null && typeof obj === "object") {
if (obj instanceof Array) {
for (var i = 0; i < obj.length; i++) {
obj[i] = CallUtilities._sortReturnData(obj[i]);
}
return obj;
}
else {
var ret = {};
var keys = Object.keys(obj);
keys.sort();
for (var i in keys) {
if (i.indexOf("password") !== -1 && typeof obj[keys[i]] == "string")
obj[keys[i]] = "********";
ret[keys[i]] = CallUtilities._sortReturnData(obj[keys[i]]);
}
return ret;
}
}
else
return obj;
}
static assembleCache (cacheControl) {
var parts = cacheControl.split(",");
var time = 0;
for (var i in parts) {
var part = parts[i].trim();
if (part.indexOf("max-age") !== -1) {
try {
time = part.split("=")[1];
}
catch (err) {}
}
}
return time;
}
static assemblePaging (queryData) {
queryData = queryData || {};
var limit = parseInt(queryData.pagesize) || 0;
var page = parseInt(queryData.page);
if (!isNaN(page))
page--;
else
page = 0;
var skip = page * limit;
if (isNaN(page) || isNaN(limit)) return {limit: 0, skip: 0};
return {
limit: limit,
skip: skip
};
}
static assembleSort (queryData) {
try {
var sortData = JSON.parse(queryData.sort || "{}");
}
catch (err) {
var sortData = queryData.sort || {};
}
return sortData;
}
static assembleAuth (auth) {
if (!auth)
return null;
try {
var supportedTypes = ['basic', 'bearer', 'apikey'];
var authData = {
authenticated: false,
type: auth.split(" ").shift().toLowerCase(),
raw: auth.split(" ").pop()
};
if (supportedTypes.indexOf(authData.type) === -1)
return null;
try {
var value = new Buffer(authData.raw, 'base64').toString();
}
catch (err) {
var value = null;
}
authData.value = value;
if (authData.type.toLowerCase() == "basic") {
authData.username = authData.value.split(":").shift();
authData.password = authData.value.split(":").pop();
}
return authData;
}
catch (err) {
return null;
}
}
}
module.exports = CallUtilities;