UNPKG

sync-alisdk

Version:

Taobao Open API & Message Client.

141 lines (128 loc) 3.79 kB
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() } } }