-
Notifications
You must be signed in to change notification settings - Fork 69
/
Copy pathutils.js
72 lines (68 loc) · 2.57 KB
/
utils.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
'use strict';
var crypto = require('crypto');
var utils = module.exports = {
apiMethod: {
RETRIEVE: 'retrieve',
RETRIEVE_LIST: 'retrieveList',
CREATE: 'create',
DELETE: 'delete',
UPDATE: 'update'
},
generateAuthorizationHeader: function (iyziWsHeaderName, apiKey, separator, secretKey, body, randomString) {
return iyziWsHeaderName + ' ' + apiKey + separator + utils.generateHash(apiKey, randomString, secretKey, body);
},
generateAuthorizationHeaderV2: function (iyziWsHeaderName, apiKey, separator, secretKey, uri, body, randomString) {
return iyziWsHeaderName + ' ' + utils.generateHashV2(apiKey, separator, uri, randomString, secretKey, body);
},
generateHash: function (apiKey, randomString, secretKey, body) {
var shaSum = crypto.createHash('sha1');
shaSum.update(apiKey + randomString + secretKey + body, 'utf8');
return shaSum.digest('base64');
},
generateHashV2: function (apiKey, separator, uri, randomString, secretKey, body) {
var signature = crypto
.createHmac('sha256', secretKey)
.update(randomString + uri + JSON.stringify(body))
.digest('hex');
var authorizationParams = [
'apiKey' + separator + apiKey,
'randomKey' + separator + randomString,
'signature' + separator + signature
];
return new Buffer.from(authorizationParams.join('&')).toString('base64');
},
generateRandomString: function (size) {
return process.hrtime()[0] + Math.random().toString(size).slice(2);
},
formatPrice: function (price) {
if (('number' !== typeof price && 'string' !== typeof price) || !isFinite(price)) {
return price;
}
var resultPrice = parseFloat(price).toString();
if (-1 === resultPrice.indexOf('.')) {
return resultPrice + '.0';
}
return resultPrice;
},
mergeObjects: function (obj1, obj2) {
var mergedObject = {};
for (var key in obj1) {
if (obj1.hasOwnProperty(key)) {
mergedObject[key] = obj1[key];
}
}
for (var key in obj2) {
if (obj2.hasOwnProperty(key)) {
mergedObject[key] = obj2[key];
}
}
return mergedObject;
},
calculateHmacSHA256Signature: (params, secretKey) => {
const dataToCheck = params.join(':');
return crypto
.createHmac('sha256', secretKey)
.update(dataToCheck)
.digest('hex');
}
};