Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
@@ -1022,19 +1022,34 @@ def get_order_monitop():
|
|
1022 |
|
1023 |
|
1024 |
|
|
|
1025 |
|
1026 |
# Функция для валидации подписи ВКонтакте
|
1027 |
def is_valid(*, query: dict, secret: str) -> bool:
|
1028 |
"""Проверка подписи ВКонтакте"""
|
1029 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1030 |
data_to_sign = urlencode(vk_subset, doseq=True)
|
|
|
|
|
1031 |
hash_code = b64encode(HMAC(secret.encode(), data_to_sign.encode(), sha256).digest()).decode('utf-8')
|
|
|
|
|
1032 |
decoded_hash_code = hash_code[:-1].replace('+', '-').replace('/', '_')
|
1033 |
|
1034 |
logging.debug(f"Строка для подписи: {data_to_sign}")
|
1035 |
logging.debug(f"Вычисленная подпись (Base64): {decoded_hash_code}")
|
1036 |
logging.debug(f"Полученная подпись из запроса: {query.get('sign')}")
|
1037 |
|
|
|
1038 |
return query.get("sign") == decoded_hash_code
|
1039 |
|
1040 |
# Чтение ордера по ключу и ВК ИД для приложения
|
@@ -1047,7 +1062,7 @@ def get_order():
|
|
1047 |
vkid = request.form.get('vk_id', '')
|
1048 |
order = request.form.get('order', '')
|
1049 |
apps_id = request.form.get('apps_id', '')
|
1050 |
-
|
1051 |
|
1052 |
# Логирование параметров запроса
|
1053 |
logging.debug(f"Полученные параметры: vk_id: {vkid}, order: {order}, apps_id: {apps_id}, sign: {sign}")
|
@@ -1108,7 +1123,6 @@ def get_order():
|
|
1108 |
|
1109 |
|
1110 |
|
1111 |
-
|
1112 |
|
1113 |
|
1114 |
|
|
|
1022 |
|
1023 |
|
1024 |
|
1025 |
+
|
1026 |
|
1027 |
# Функция для валидации подписи ВКонтакте
|
1028 |
def is_valid(*, query: dict, secret: str) -> bool:
|
1029 |
"""Проверка подписи ВКонтакте"""
|
1030 |
+
# Извлекаем параметры из строки запроса
|
1031 |
+
parsed_url = urlparse(query.get('fullUrl', ''))
|
1032 |
+
query_params = parse_qs(parsed_url.query)
|
1033 |
+
|
1034 |
+
# Фильтруем только параметры, начинающиеся с 'vk_'
|
1035 |
+
vk_subset = OrderedDict(sorted(
|
1036 |
+
(k, v[0]) for k, v in query_params.items() if k.startswith("vk_") and k != "sign"
|
1037 |
+
))
|
1038 |
+
|
1039 |
+
# Строка для подписи
|
1040 |
data_to_sign = urlencode(vk_subset, doseq=True)
|
1041 |
+
|
1042 |
+
# Вычисление подписи
|
1043 |
hash_code = b64encode(HMAC(secret.encode(), data_to_sign.encode(), sha256).digest()).decode('utf-8')
|
1044 |
+
|
1045 |
+
# Кодируем подпись в нужном формате
|
1046 |
decoded_hash_code = hash_code[:-1].replace('+', '-').replace('/', '_')
|
1047 |
|
1048 |
logging.debug(f"Строка для подписи: {data_to_sign}")
|
1049 |
logging.debug(f"Вычисленная подпись (Base64): {decoded_hash_code}")
|
1050 |
logging.debug(f"Полученная подпись из запроса: {query.get('sign')}")
|
1051 |
|
1052 |
+
# Сравниваем подписи
|
1053 |
return query.get("sign") == decoded_hash_code
|
1054 |
|
1055 |
# Чтение ордера по ключу и ВК ИД для приложения
|
|
|
1062 |
vkid = request.form.get('vk_id', '')
|
1063 |
order = request.form.get('order', '')
|
1064 |
apps_id = request.form.get('apps_id', '')
|
1065 |
+
fullUrl = request.form.get('fullUrl', '')
|
1066 |
|
1067 |
# Логирование параметров запроса
|
1068 |
logging.debug(f"Полученные параметры: vk_id: {vkid}, order: {order}, apps_id: {apps_id}, sign: {sign}")
|
|
|
1123 |
|
1124 |
|
1125 |
|
|
|
1126 |
|
1127 |
|
1128 |
|