Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
@@ -1024,24 +1024,6 @@ def get_order_monitop():
|
|
1024 |
|
1025 |
|
1026 |
# Функция для валидации подписи ВК приложения
|
1027 |
-
def is_valid(*, query: dict, secret: str) -> bool:
|
1028 |
-
"""Check VK Apps signature"""
|
1029 |
-
# Отфильтровываем параметры, начинающиеся с "vk_"
|
1030 |
-
vk_subset = OrderedDict(sorted((k, v) for k, v in query.items() if k.startswith("vk_")))
|
1031 |
-
logging.debug(f"Filtered VK params: {vk_subset}")
|
1032 |
-
|
1033 |
-
# Объединяем параметры в строку
|
1034 |
-
encoded_params = urlencode(vk_subset, doseq=True)
|
1035 |
-
logging.debug(f"Encoded params: {encoded_params}")
|
1036 |
-
|
1037 |
-
# Вычисляем хеш-код с использованием HMAC и SHA256
|
1038 |
-
hash_code = b64encode(HMAC(secret.encode(), encoded_params.encode(), sha256).digest())
|
1039 |
-
decoded_hash_code = hash_code.decode('utf-8')[:-1].replace('+', '-').replace('/', '_')
|
1040 |
-
logging.debug(f"Calculated signature: {decoded_hash_code}")
|
1041 |
-
|
1042 |
-
# Сравниваем с переданной подписью
|
1043 |
-
return query.get("sign") == decoded_hash_code
|
1044 |
-
|
1045 |
# Функция для работы с базой данных
|
1046 |
def get_order_from_db(vkid):
|
1047 |
conn = sqlite3.connect(DATABASE_NEW)
|
@@ -1073,27 +1055,12 @@ def get_order():
|
|
1073 |
# Читаем параметры из POST-запроса
|
1074 |
vkid = request.form.get('vk_id', '')
|
1075 |
order = request.form.get('order', '')
|
1076 |
-
apps_id = request.form.get('apps_id', '') # Сюда придёт ИД ВК приложения
|
1077 |
-
fullUrl = request.form.get('fullUrl', '') # Полный URL, который выдаёт ВКонтакте
|
1078 |
-
|
1079 |
-
logging.debug(f"Received data: vk_id={vkid}, order={order}, apps_id={apps_id}, fullUrl={fullUrl}")
|
1080 |
-
|
1081 |
-
# Проверка подписи для приложения
|
1082 |
-
if str(apps_id) not in api_key_apps_vk: # Приводим apps_id к строке
|
1083 |
-
logging.error("Invalid apps_id")
|
1084 |
-
return json.dumps({"error": "Invalid apps_id"}), 400
|
1085 |
|
1086 |
-
|
1087 |
-
|
1088 |
-
|
1089 |
-
|
1090 |
-
|
1091 |
-
logging.debug(f"Query params for signature check: {query_params}")
|
1092 |
-
|
1093 |
-
# Проверяем подпись
|
1094 |
-
if not is_valid(query=query_params, secret=secret):
|
1095 |
-
logging.error("Invalid signature")
|
1096 |
-
return json.dumps({"error": "Invalid signature"}), 400
|
1097 |
|
1098 |
# Получаем данные из базы данных
|
1099 |
shop_st_data = get_order_from_db(vkid)
|
@@ -1134,7 +1101,6 @@ def get_order():
|
|
1134 |
|
1135 |
|
1136 |
|
1137 |
-
|
1138 |
|
1139 |
|
1140 |
|
|
|
1024 |
|
1025 |
|
1026 |
# Функция для валидации подписи ВК приложения
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1027 |
# Функция для работы с базой данных
|
1028 |
def get_order_from_db(vkid):
|
1029 |
conn = sqlite3.connect(DATABASE_NEW)
|
|
|
1055 |
# Читаем параметры из POST-запроса
|
1056 |
vkid = request.form.get('vk_id', '')
|
1057 |
order = request.form.get('order', '')
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1058 |
|
1059 |
+
# надо проверку подленности добавить, находим в переменной 'api_key_apps_vk' Защищённый ключ по значению apps_id и проверяем подпись sign
|
1060 |
+
# Если подленная продолжаем действие, если нет сразу возвращаем в ответе not
|
1061 |
+
if not vkid or not order:
|
1062 |
+
logging.error("VK ID and order are required")
|
1063 |
+
return json.dumps({"error": "VK ID and order are required"}), 400
|
|
|
|
|
|
|
|
|
|
|
|
|
1064 |
|
1065 |
# Получаем данные из базы данных
|
1066 |
shop_st_data = get_order_from_db(vkid)
|
|
|
1101 |
|
1102 |
|
1103 |
|
|
|
1104 |
|
1105 |
|
1106 |
|