UNPKG

check-sign

Version:

Модуль, для проверки подписи.

44 lines (42 loc) 1.34 kB
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; }; export default index; //# sourceMappingURL=index.es.js.map