UNPKG

t-comm

Version:

专业、稳定、纯粹的工具库

77 lines (73 loc) 2.49 kB
'use strict'; 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;