Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- const validateAppUrl = (url, secret_key) => {
- // достаем параметры из url
- const query_params = url.slice(url.indexOf("?") + 1).split("&").reduce((a, x) => {
- const data = x.split("=");
- a[decodeURIComponent(data[0])] = decodeURIComponent(data[1]);
- return a;
- }, {});
- // выбираем нужные (с приставкой "vk_") и сортируем их
- const sign_params = {};
- Object.keys(query_params).sort()
- .forEach((key) => {
- if(!key.startsWith("vk_")) return;
- sign_params[key] = query_params[key];
- });
- // образуем строку вида param1=value1¶m2=value2...
- const sign_str = Object.keys(sign_params).reduce((a, x) => {
- a.push(x + "=" + sign_params[x]);
- return a;
- }, []).join("&");
- // подписываем
- let sign = require("crypto").createHmac("sha256", secret_key).update(sign_str);
- sign = sign.digest("binary");
- sign = require("buffer").Buffer.from(sign, "binary").toString("base64");
- sign = sign.split("+").join("-");
- sign = sign.split("/").join("_");
- sign = sign.replace(/=+$/, '');
- // сравниваем подпись с оригинальной. если все окей, то возвращаем id пользователя, если нет - null
- return sign === query_params["sign"] ? query_params["vk_user_id"] : null;
- };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement