DmitrMakeev commited on
Commit
4968f03
·
verified ·
1 Parent(s): e4e4af8

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +22 -11
app.py CHANGED
@@ -18,7 +18,7 @@ import time
18
  import csv
19
  import io
20
  from unidecode import unidecode
21
-
22
  from base import replace_null_with_empty_string
23
 
24
 
@@ -1009,19 +1009,31 @@ def get_order_monitop():
1009
 
1010
  # Функция для валидации подписи ВК приложения
1011
  def is_valid(*, query: dict, secret: str) -> bool:
1012
- """Проверяем подпись ВК приложения"""
1013
  logging.debug(f"Проверка подписи для запроса: {query}")
 
 
 
 
 
 
1014
 
1015
- # Сортировка параметров и вычисление хеша
1016
- data_to_sign = '&'.join([f"{key}={value}" for key, value in sorted(query.items()) if key != 'sign'])
1017
- hash_code = hmac.new(secret.encode(), data_to_sign.encode(), sha256).hexdigest()
1018
 
1019
- # Логируем вычисленную и присланную подпись
1020
- logging.debug(f"Вычисленная подпись: {hash_code}")
 
 
 
 
 
 
1021
  logging.debug(f"Полученная подпись: {query.get('sign')}")
1022
-
1023
- # Сравниваем подпись из запроса с вычисленной
1024
- return query.get("sign") == hash_code
1025
 
1026
  # Чтение ордера по ключу и ВК ИД для приложения
1027
  @app.route('/get_order', methods=['POST'])
@@ -1096,7 +1108,6 @@ def get_order():
1096
 
1097
 
1098
 
1099
-
1100
 
1101
 
1102
 
 
18
  import csv
19
  import io
20
  from unidecode import unidecode
21
+ import base64
22
  from base import replace_null_with_empty_string
23
 
24
 
 
1009
 
1010
  # Функция для валидации подписи ВК приложения
1011
  def is_valid(*, query: dict, secret: str) -> bool:
1012
+ """Проверяем подпись ВК приложения с учётом алгоритма подписи ВКонтакте."""
1013
  logging.debug(f"Проверка подписи для запроса: {query}")
1014
+
1015
+ # Шаг 1: Сортировка параметров по имени ключа и исключение параметра 'sign'
1016
+ sorted_params = sorted(
1017
+ ((key, value) for key, value in query.items() if key.startswith('vk_') and key != 'sign'),
1018
+ key=lambda x: x[0]
1019
+ )
1020
 
1021
+ # Шаг 2: Формирование строки с параметрами
1022
+ data_to_sign = '&'.join([f"{key}={urllib.parse.quote(str(value))}" for key, value in sorted_params])
1023
+ logging.debug(f"Строка для подписи: {data_to_sign}")
1024
 
1025
+ # Шаг 3: Вычисление хеша с использованием HMAC и SHA256
1026
+ hash_code = hmac.new(secret.encode(), data_to_sign.encode(), hashlib.sha256).digest()
1027
+
1028
+ # Шаг 4: Закодировать хеш в base64
1029
+ base64_hash = base64.b64encode(hash_code).decode('utf-8')
1030
+
1031
+ # Логируем вычисленную и полученную подпись
1032
+ logging.debug(f"Вычисленная подпись (Base64): {base64_hash}")
1033
  logging.debug(f"Полученная подпись: {query.get('sign')}")
1034
+
1035
+ # Сравнение подписи из запроса с вычисленной
1036
+ return query.get('sign') == base64_hash
1037
 
1038
  # Чтение ордера по ключу и ВК ИД для приложения
1039
  @app.route('/get_order', methods=['POST'])
 
1108
 
1109
 
1110
 
 
1111
 
1112
 
1113