Update app.py
Browse files
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
|
1017 |
-
|
1018 |
|
1019 |
-
#
|
1020 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
1021 |
logging.debug(f"Полученная подпись: {query.get('sign')}")
|
1022 |
-
|
1023 |
-
#
|
1024 |
-
return query.get(
|
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 |
|