Skip to content

Instantly share code, notes, and snippets.

@kuhel
Created March 21, 2019 15:14
Show Gist options
  • Save kuhel/4d09d5f9d59e70e9af04624613aeda55 to your computer and use it in GitHub Desktop.
Save kuhel/4d09d5f9d59e70e9af04624613aeda55 to your computer and use it in GitHub Desktop.
const crypto = require('crypto') //модуль для криптографии Nodejs
const { stringify } = require('querystring') //методы для парсинга строки
const url = require('url')
const URL =
'https://example.com/?vk_user_id=494075&vk_app_id=6736218&vk_is_app_user=1&vk_are_notifications_enabled=1&vk_language=ru&vk_access_token_settings=&vk_platform=android&sign=exTIBPYTrAKDTHLLm2AwJkmcVcvFCzQUNyoa6wAjvW6k',
CLIENT_SECRET = 'wvl68m4dR1UpLrVRli'
const checkVKQueryParamsSign = params => {
const query = url.parse(params, true).query
const list_of_params = Object.entries(query) //перевод в обьекта параметро в список
.filter(e => e[0].startsWith('vk_')) //фильтрация параметров VK
.sort((a, b) => {
if (a[0] < b[0]) {
return -1
}
if (a[0] > b[0]) {
return 1
}
return 0
}) //сортировка по алфавиту
const params_str = stringify(
list_of_params.reduce((obj, [k, v]) => ({ ...obj, [k]: v }), {})
) //перевод параметров в строковый вид
const hmac = crypto.createHmac('sha256', CLIENT_SECRET) //инициализация генератора подписи
hmac.update(params_str) //добавление строки с параметрами
const sign = hmac
.digest('base64')
.replace(/\+/g, '-')
.replace(/\//g, '_')
.replace(/=/g, '') //генерация подписи
return sign === query.sign //сравнение подписей
}
console.log(checkVKQueryParamsSign(URL))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment