t-comm
Version:
专业、稳定、纯粹的工具库
77 lines (73 loc) • 2.49 kB
JavaScript
;
Object.defineProperty(exports, '__esModule', { value: true });
/**
* 密码学随机数
* @private
*/
var randomNum = function randomNum(crypto) {
var buf = crypto.randomBytes(6);
var hexToDec = parseInt(buf.toString('hex'), 16);
return hexToDec;
};
var sha256 = function sha256(secret, content, crypto) {
return crypto.createHmac('sha256', secret).update(content).digest('base64');
};
var sha1 = function sha1(secret, content, crypto) {
return crypto.createHmac('sha1', secret).update(content).digest('base64');
};
/**
* 获取API算法签名,默认sha1
* @private
* @param secret
* @param content
* @param signMethod
*/
var signatureGenerator = function signatureGenerator(secret, content, signMethod, crypto) {
switch (signMethod) {
case 'sha256':
return sha256(secret, content, crypto);
case 'sha1':
default:
return sha1(secret, content, crypto);
}
};
/**
* 请求签名Header生成
* @private
* @param {object} signInfo 密钥信息
*/
function genRainbowHeaderSignature(signInfo) {
var crypto = require('crypto');
var appID = signInfo.appID,
userID = signInfo.userID,
appId = signInfo.appId,
userId = signInfo.userId,
_a = signInfo.signMethod,
signMethod = _a === void 0 ? 'sha1' : _a,
secretKey = signInfo.secretKey;
if (!secretKey) {
return {};
}
var rainbowSgnType = 'apisign';
var rainbowVersion = '2020';
var rainbowAppId = appId || appID;
var rainbowUserId = userId || userID;
var rainbowTimestamp = "".concat(Math.ceil(new Date().getTime() / 1000)); // ms => s
var rainbowNonce = "".concat(randomNum(crypto));
var rainbowSgnMethod = signMethod;
var rainbowSgnBody = '';
var content = "".concat(rainbowVersion, ".").concat(rainbowAppId, ".").concat(rainbowUserId, ".").concat(rainbowTimestamp, ".").concat(rainbowNonce) + ".".concat(rainbowSgnMethod, ".").concat(rainbowSgnBody);
var rainbowSignature = signatureGenerator(secretKey, content, signMethod, crypto);
return {
rainbow_sgn_type: rainbowSgnType,
rainbow_version: rainbowVersion,
rainbow_app_id: rainbowAppId,
rainbow_user_id: rainbowUserId,
rainbow_timestamp: rainbowTimestamp,
rainbow_nonce: rainbowNonce,
rainbow_sgn_method: rainbowSgnMethod,
rainbow_sgn_body: rainbowSgnBody,
rainbow_signature: rainbowSignature // 签名串 如%2BysXvBSshSbHOsCX2zWBE1tapVs68hi5GLdcQtwBUNk%3D
};
}
exports.genRainbowHeaderSignature = genRainbowHeaderSignature;