UNPKG

1.89 kBJavaScriptView Raw
1'use strict';
2
3Object.defineProperty(exports, "__esModule", {
4 value: true
5});
6exports.default = signedParams;
7
8var _lodash = require('lodash.clone');
9
10var _lodash2 = _interopRequireDefault(_lodash);
11
12var _crypto = require('crypto');
13
14var _crypto2 = _interopRequireDefault(_crypto);
15
16var _lodash3 = require('lodash.defaults');
17
18var _lodash4 = _interopRequireDefault(_lodash3);
19
20var _lodash5 = require('lodash.keys');
21
22var _lodash6 = _interopRequireDefault(_lodash5);
23
24function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
25
26var debug = !!process.env.DEBUG;
27
28function signedParams(method, path, host, keys) {
29 var params = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {};
30
31 params = (0, _lodash4.default)((0, _lodash2.default)(params), {
32 access_key: keys.accessKey,
33 timestamp: new Date().toISOString()
34 });
35 params.signature = generateHmacSignature(method, path, host, keys, params);
36 return params;
37}
38
39function generateHmacSignature(method, path, host, keys, params) {
40 var paramsCopy = (0, _lodash2.default)(params);
41 var signatureData = method.toUpperCase() + ';' + host.toLowerCase() + ';' + path + ';' + buildSortedQuery(paramsCopy);
42 debug && console.log('Signature data: ' + signatureData);
43 var hmac = _crypto2.default.createHmac('sha256', keys.secretKey.toUpperCase());
44 hmac.update(signatureData);
45 return hmac.digest('base64');
46}
47
48function buildSortedQuery(params) {
49 // Sorted keys
50 var _keys = (0, _lodash6.default)(params).sort();
51 var query = '';
52 for (var i = 0, l = _keys.length; i < l; i++) {
53 query += encodeURIComponent(_keys[i]) + '=' + encodeURIComponent(params[_keys[i]]) + '&';
54 }
55 query = query.replace(/\*/g, '%2A').replace(/[!'()]/g, escape).replace(/%7E/g, '~').replace(/\+/g, '%20');
56 // Strip the last separator and return
57 return query.substring(0, query.length - 1);
58}
\No newline at end of file