Advertisement
Guest User

Untitled

a guest
Jun 17th, 2019
75
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.42 KB | None | 0 0
  1. const validateAppUrl = (url, secret_key) => {
  2. // достаем параметры из url
  3. const query_params = url.slice(url.indexOf("?") + 1).split("&").reduce((a, x) => {
  4. const data = x.split("=");
  5. a[decodeURIComponent(data[0])] = decodeURIComponent(data[1]);
  6. return a;
  7. }, {});
  8.  
  9. // выбираем нужные (с приставкой "vk_") и сортируем их
  10. const sign_params = {};
  11. Object.keys(query_params).sort()
  12. .forEach((key) => {
  13. if(!key.startsWith("vk_")) return;
  14. sign_params[key] = query_params[key];
  15. });
  16.  
  17. // образуем строку вида param1=value1&param2=value2...
  18. const sign_str = Object.keys(sign_params).reduce((a, x) => {
  19. a.push(x + "=" + sign_params[x]);
  20. return a;
  21. }, []).join("&");
  22.  
  23. // подписываем
  24. let sign = require("crypto").createHmac("sha256", secret_key).update(sign_str);
  25. sign = sign.digest("binary");
  26. sign = require("buffer").Buffer.from(sign, "binary").toString("base64");
  27. sign = sign.split("+").join("-");
  28. sign = sign.split("/").join("_");
  29. sign = sign.replace(/=+$/, '');
  30.  
  31. // сравниваем подпись с оригинальной. если все окей, то возвращаем id пользователя, если нет - null
  32. return sign === query_params["sign"] ? query_params["vk_user_id"] : null;
  33. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement