Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- const fastify = require('fastify')({
- logger: true
- });
- const crypto = require('crypto');
- /* По вопросам улучшения: https://vk.com/devgg */
- const key = '********************'; // секретный ключ из настроек приложения
- const chars = { // перечень символов, которые надо заменять
- '+': '-',
- '/': '_',
- '=': '',
- };
- const checkSign = (params) => { // алгоритм проверки подписи
- const paramsSign = params.sign;
- const sortedParams = Object.keys(params).sort().reduce((r, k) => (k.substr(0,3)==='vk_'&&(r[k] = params[k]), r), {});
- const sortedParamsString = Object.keys(sortedParams).map((key) => key + '=' + sortedParams[key]).join('&');
- const rawSign = crypto.createHmac('sha256', key).update(sortedParamsString).digest('base64');
- const sign = rawSign.replace(/\+|\/|=$/gi, (char) => chars[char]);
- return sign === paramsSign;
- }
- fastify.addHook('onRequest', (request, reply, done) => { // hook, который будет проверять запросы перед их приходом
- reply.headers({
- 'Access-Control-Allow-Origin': '*',
- 'Access-Control-Allow-Headers': '*',
- })
- if (!checkSign(request.query)) { // передаём данные для проверки и смотрим, что бы они были валидны
- reply.code(401).send({error:{code:23,msg:'Подпись не действительна'}}) // иначе возвращаем ошибку
- }
- done();
- })
Add Comment
Please, Sign In to add comment