sync-alisdk
Version:
Taobao Open API & Message Client.
141 lines (128 loc) • 3.79 kB
JavaScript
var crypto = require('crypto');
var util = require('util');
var stream = require('stream');
/**
* hash
*
* @param {String} method hash method, e.g.: 'md5', 'sha1'
* @param {String|Buffer} s
* @param {String} [format] output string format, could be 'hex' or 'base64'. default is 'hex'.
* @return {String} md5 hash string
* @public
*/
exports.hash = function hash(method, s, format) {
var sum = crypto.createHash(method);
var isBuffer = Buffer.isBuffer(s);
if (!isBuffer && typeof s === 'object') {
s = JSON.stringify(sortObject(s));
}
sum.update(s, isBuffer ? 'binary' : 'utf8');
return sum.digest(format || 'hex');
};
exports.hmac = function hmac(method, s, secret, format) {
var sum = crypto.createHmac(method, secret);
var isBuffer = Buffer.isBuffer(s);
if (!isBuffer && typeof s === 'object') {
s = JSON.stringify(sortObject(s));
}
sum.update(s, isBuffer ? 'binary' : 'utf8');
return sum.digest(format || 'hex');
};
/**
* md5 hash
*
* @param {String|Buffer} s
* @param {String} [format] output string format, could be 'hex' or 'base64'. default is 'hex'.
* @return {String} md5 hash string
* @public
*/
exports.md5 = function md5(s, format) {
return exports.hash('md5', s, format);
};
exports.hmac_sha256 = function hmac_sha256(s, secret, format) {
return exports.hmac('sha256', s, secret, format);
};
exports.YYYYMMDDHHmmss = function (d, options) {
d = d || new Date();
if (!(d instanceof Date)) {
d = new Date(d);
}
var dateSep = '-';
var timeSep = ':';
if (options) {
if (options.dateSep) {
dateSep = options.dateSep;
}
if (options.timeSep) {
timeSep = options.timeSep;
}
}
var date = d.getDate();
if (date < 10) {
date = '0' + date;
}
var month = d.getMonth() + 1;
if (month < 10) {
month = '0' + month;
}
var hours = d.getHours();
if (hours < 10) {
hours = '0' + hours;
}
var mintues = d.getMinutes();
if (mintues < 10) {
mintues = '0' + mintues;
}
var seconds = d.getSeconds();
if (seconds < 10) {
seconds = '0' + seconds;
}
return d.getFullYear() + dateSep + month + dateSep + date + ' ' +
hours + timeSep + mintues + timeSep + seconds;
};
exports.checkRequired = function (params, keys) {
if (!Array.isArray(keys)) {
keys = [keys];
}
for (var i = 0, l = keys.length; i < l; i++) {
var k = keys[i];
if (!params.hasOwnProperty(k)) {
var err = new Error('`' + k + '` required');
err.name = "ParameterMissingError";
return err;
}
}
};
exports.getApiResponseName = function(apiName){
var reg = /\./g;
if(apiName.match("^taobao"))
apiName = apiName.substr(7);
return apiName.replace(reg,'_')+"_response";
}
exports.getLocalIPAdress = function (){
var interfaces = require('os').networkInterfaces();
for(var devName in interfaces){
var iface = interfaces[devName];
for(var i=0;i<iface.length;i++){
var alias = iface[i];
if(alias.family === 'IPv4' && alias.address !== '127.0.0.1' && !alias.internal){
return alias.address;
}
}
}
}
/**
* Simple Utility Methods for checking information about a value.
*
* @param {Mixed} value Could be anything.
* @return {Object}
*/
exports.is = function(value) {
return {
a: function (check) {
if (check.prototype) check = check.prototype.constructor.name
var type = Object.prototype.toString.call(value).slice(8, -1).toLowerCase()
return value != null && type === check.toLowerCase()
}
}
}