check-sign
Version:
Модуль, для проверки подписи.
48 lines (44 loc) • 1.42 kB
JavaScript
Object.defineProperty(exports, '__esModule', { value: true });
const crypto = require('crypto');
const getQueryParams = (url) => {
var queryParams = {};
var sign = '';
let queryStrings = url.match(/\?/) ? url.split('?') : url;
if (typeof queryStrings === 'object') {
queryStrings = queryStrings[queryStrings.length - 1];
}
let urlParams = new URLSearchParams(queryStrings);
urlParams.sort();
const entries = urlParams.entries();
for (const pair of entries) {
if (pair[0].slice(0, 3) === 'vk_') {
queryParams[pair[0]] = pair[1];
}
else if (pair[0] === 'sign') {
sign = pair[1];
}
}
return { sign, queryParams };
};
const getQueryParamsString = (queryParams) => {
return Object.keys(queryParams)
.map((key) => key + '=' + queryParams[key])
.join('&');
};
const chars = {
'+': '-',
'/': '_',
'=': '',
};
var index = ({ url, key }) => {
const params = getQueryParams(url);
const paramsString = getQueryParamsString(params.queryParams);
const rawSign = crypto.createHmac('sha256', key).update(paramsString).digest('base64');
const sign = rawSign.replace(/\+|\/|=$/gi, (char) => {
return chars[char];
});
return sign === params.sign;
};
exports.default = index;
//# sourceMappingURL=index.js.map
;