Update app.py
Browse files
app.py
CHANGED
@@ -1019,23 +1019,18 @@ def get_order_monitop():
|
|
1019 |
|
1020 |
|
1021 |
|
|
|
|
|
1022 |
|
1023 |
|
1024 |
# Функция для валидации подписи ВК приложения
|
1025 |
def is_valid(*, query: dict, secret: str) -> bool:
|
1026 |
"""Check VK Apps signature"""
|
1027 |
-
# Фильтруем параметры, начинающиеся с 'vk_', и сортируем их
|
1028 |
vk_subset = OrderedDict(sorted(x for x in query.items() if x[0][:3] == "vk_"))
|
1029 |
logging.debug(f"Filtered VK params: {vk_subset}")
|
1030 |
-
|
1031 |
-
# Генерируем подпись с использованием секретного ключа и закодированного URL
|
1032 |
hash_code = b64encode(HMAC(secret.encode(), urlencode(vk_subset, doseq=True).encode(), sha256).digest())
|
1033 |
-
|
1034 |
-
# Корректируем код для совместимости с ВК
|
1035 |
decoded_hash_code = hash_code.decode('utf-8')[:-1].replace('+', '-').replace('/', '_')
|
1036 |
logging.debug(f"Calculated signature: {decoded_hash_code}")
|
1037 |
-
|
1038 |
-
# Сравниваем подпись из запроса с вычисленной подписью
|
1039 |
return query["sign"] == decoded_hash_code
|
1040 |
|
1041 |
# Чтение ордера по ключу и ВК ИД для приложения
|
@@ -1047,25 +1042,18 @@ def get_order():
|
|
1047 |
# Читаем параметры из POST-запроса
|
1048 |
vkid = request.form.get('vk_id', '')
|
1049 |
order = request.form.get('order', '')
|
1050 |
-
apps_id = request.form.get('apps_id', '') # ИД ВК приложения
|
1051 |
-
fullUrl = request.form.get('fullUrl', '') # Полный URL
|
1052 |
|
1053 |
logging.debug(f"Received data: vk_id={vkid}, order={order}, apps_id={apps_id}, fullUrl={fullUrl}")
|
1054 |
|
1055 |
# Проверка подписи для приложения
|
1056 |
-
|
1057 |
-
|
1058 |
-
secret = api_key_apps_vk.get(str(apps_id), '') # Приводим apps_id к строке для поиска
|
1059 |
-
logging.debug(f"Using secret: {secret}")
|
1060 |
-
else:
|
1061 |
-
logging.error("api_key_apps_vk is not a dictionary")
|
1062 |
-
return json.dumps({"error": "Configuration error"}), 500
|
1063 |
|
1064 |
# Парсим полный URL для получения параметров запроса
|
1065 |
parsed_url = urlparse(fullUrl)
|
1066 |
logging.debug(f"Parsed URL: {parsed_url}")
|
1067 |
-
|
1068 |
-
# Извлекаем параметры запроса для проверки подписи
|
1069 |
query_params = dict(parse_qsl(parsed_url.query, keep_blank_values=True))
|
1070 |
logging.debug(f"Query params for signature check: {query_params}")
|
1071 |
|
@@ -1091,16 +1079,14 @@ def get_order():
|
|
1091 |
|
1092 |
shop_st = result[0] if result[0] else '{}'
|
1093 |
logging.debug(f"Shop_st: {shop_st}")
|
1094 |
-
|
1095 |
-
# Загружаем данные JSON и ищем ключ
|
1096 |
shop_st_data = json.loads(shop_st)
|
1097 |
logging.debug(f"Existing record found. Loaded JSON: {shop_st_data}")
|
1098 |
|
1099 |
-
#
|
1100 |
value = shop_st_data.get(order, 'not')
|
1101 |
logging.debug(f"Value for order {order}: {value}")
|
1102 |
|
1103 |
-
# Возвращаем
|
1104 |
response = {order: value}
|
1105 |
return jsonify(response), 200
|
1106 |
|
@@ -1129,11 +1115,6 @@ def get_order():
|
|
1129 |
|
1130 |
|
1131 |
|
1132 |
-
|
1133 |
-
|
1134 |
-
|
1135 |
-
|
1136 |
-
|
1137 |
|
1138 |
|
1139 |
|
|
|
1019 |
|
1020 |
|
1021 |
|
1022 |
+
|
1023 |
+
|
1024 |
|
1025 |
|
1026 |
# Функция для валидации подписи ВК приложения
|
1027 |
def is_valid(*, query: dict, secret: str) -> bool:
|
1028 |
"""Check VK Apps signature"""
|
|
|
1029 |
vk_subset = OrderedDict(sorted(x for x in query.items() if x[0][:3] == "vk_"))
|
1030 |
logging.debug(f"Filtered VK params: {vk_subset}")
|
|
|
|
|
1031 |
hash_code = b64encode(HMAC(secret.encode(), urlencode(vk_subset, doseq=True).encode(), sha256).digest())
|
|
|
|
|
1032 |
decoded_hash_code = hash_code.decode('utf-8')[:-1].replace('+', '-').replace('/', '_')
|
1033 |
logging.debug(f"Calculated signature: {decoded_hash_code}")
|
|
|
|
|
1034 |
return query["sign"] == decoded_hash_code
|
1035 |
|
1036 |
# Чтение ордера по ключу и ВК ИД для приложения
|
|
|
1042 |
# Читаем параметры из POST-запроса
|
1043 |
vkid = request.form.get('vk_id', '')
|
1044 |
order = request.form.get('order', '')
|
1045 |
+
apps_id = request.form.get('apps_id', '') # Сюда придёт ИД ВК приложения
|
1046 |
+
fullUrl = request.form.get('fullUrl', '') # Полный URL, который выдаёт ВКонтакте
|
1047 |
|
1048 |
logging.debug(f"Received data: vk_id={vkid}, order={order}, apps_id={apps_id}, fullUrl={fullUrl}")
|
1049 |
|
1050 |
# Проверка подписи для приложения
|
1051 |
+
secret = api_key_apps_vk.get(str(apps_id), '') # Приводим apps_id к строке
|
1052 |
+
logging.debug(f"Using secret: {secret}")
|
|
|
|
|
|
|
|
|
|
|
1053 |
|
1054 |
# Парсим полный URL для получения параметров запроса
|
1055 |
parsed_url = urlparse(fullUrl)
|
1056 |
logging.debug(f"Parsed URL: {parsed_url}")
|
|
|
|
|
1057 |
query_params = dict(parse_qsl(parsed_url.query, keep_blank_values=True))
|
1058 |
logging.debug(f"Query params for signature check: {query_params}")
|
1059 |
|
|
|
1079 |
|
1080 |
shop_st = result[0] if result[0] else '{}'
|
1081 |
logging.debug(f"Shop_st: {shop_st}")
|
|
|
|
|
1082 |
shop_st_data = json.loads(shop_st)
|
1083 |
logging.debug(f"Existing record found. Loaded JSON: {shop_st_data}")
|
1084 |
|
1085 |
+
# Ищем значение по ключу order
|
1086 |
value = shop_st_data.get(order, 'not')
|
1087 |
logging.debug(f"Value for order {order}: {value}")
|
1088 |
|
1089 |
+
# Возвращаем данные из столбца
|
1090 |
response = {order: value}
|
1091 |
return jsonify(response), 200
|
1092 |
|
|
|
1115 |
|
1116 |
|
1117 |
|
|
|
|
|
|
|
|
|
|
|
1118 |
|
1119 |
|
1120 |
|