jscrambler
Version:
Jscrambler Code Integrity API client.
45 lines (44 loc) • 2.21 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = signedParams;
require("core-js/modules/es.array.sort.js");
require("core-js/modules/es.regexp.exec.js");
require("core-js/modules/es.string.replace.js");
var _lodash = _interopRequireDefault(require("lodash.clone"));
var _crypto = _interopRequireDefault(require("crypto"));
var _lodash2 = _interopRequireDefault(require("lodash.defaults"));
var _lodash3 = _interopRequireDefault(require("lodash.keys"));
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
const debug = !!process.env.DEBUG;
function signedParams(method, path, host, keys) {
let params = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {};
let utc = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : true;
params = (0, _lodash2.default)((0, _lodash.default)(params), {
access_key: keys.accessKey,
timestamp: utc.toString() !== 'false' ? new Date().toISOString() : new Date().toLocaleString()
});
params.signature = generateHmacSignature(method, path, host, keys, params);
return params;
}
function generateHmacSignature(method, path, host, keys, params) {
const paramsCopy = (0, _lodash.default)(params);
const signatureData = "".concat(method.toUpperCase(), ";").concat(host.toLowerCase(), ";").concat(path, ";").concat(buildSortedQuery(paramsCopy));
debug && console.log("Signature data: ".concat(signatureData));
const hmac = _crypto.default.createHmac('sha256', keys.secretKey.toUpperCase());
hmac.update(signatureData);
return hmac.digest('base64');
}
function buildSortedQuery(params) {
// Sorted keys
const _keys = (0, _lodash3.default)(params).sort();
let query = '';
for (let i = 0, l = _keys.length; i < l; i++) {
const value = typeof params[_keys[i]] === 'object' ? JSON.stringify(params[_keys[i]]) : params[_keys[i]];
query += "".concat(encodeURIComponent(_keys[i]), "=").concat(encodeURIComponent(value), "&");
}
query = query.replace(/\*/g, '%2A').replace(/[!'()]/g, escape).replace(/%7E/g, '~').replace(/\+/g, '%20');
// Strip the last separator and return
return query.substring(0, query.length - 1);
}