Spaces:
Running
Running
Update app.py
Browse files
app.py
CHANGED
@@ -1018,9 +1018,12 @@ def get_order_monitop():
|
|
1018 |
# Функция для валидации подписи ВК приложения
|
1019 |
def is_valid(*, query: dict, secret: str) -> bool:
|
1020 |
"""Check VK Apps signature"""
|
|
|
1021 |
vk_subset = OrderedDict(sorted(x for x in query.items() if x[0][:3] == "vk_"))
|
|
|
1022 |
hash_code = b64encode(HMAC(secret.encode(), urlencode(vk_subset, doseq=True).encode(), sha256).digest())
|
1023 |
decoded_hash_code = hash_code.decode('utf-8')[:-1].replace('+', '-').replace('/', '_')
|
|
|
1024 |
return query.get("sign") == decoded_hash_code
|
1025 |
|
1026 |
# Чтение ордера по ключу и ВК ИД для приложения
|
@@ -1035,6 +1038,8 @@ def get_order():
|
|
1035 |
apps_id = request.form.get('apps_id', '') # Сюда придёт ИД ВК приложения
|
1036 |
sign = request.form.get('sign', '') # Подпись приложения
|
1037 |
|
|
|
|
|
1038 |
# Проверяем наличие обязательных параметров
|
1039 |
if not vkid or not order:
|
1040 |
logging.error("VK ID and order are required")
|
@@ -1046,20 +1051,24 @@ def get_order():
|
|
1046 |
return json.dumps({"error": "Invalid apps_id"}), 400
|
1047 |
|
1048 |
secret = api_key_apps_vk[apps_id]
|
|
|
1049 |
|
1050 |
# Проверяем подпись
|
1051 |
query_params = request.form.to_dict()
|
|
|
1052 |
if not is_valid(query=query_params, secret=secret):
|
1053 |
logging.error("Invalid signature")
|
1054 |
return json.dumps({"error": "Invalid signature"}), 400
|
1055 |
|
1056 |
# Подключаемся к базе данных
|
|
|
1057 |
conn = sqlite3.connect(DATABASE_NEW)
|
1058 |
cursor = conn.cursor()
|
1059 |
|
1060 |
# Ищем запись по vk_id
|
1061 |
cursor.execute("SELECT orders FROM contacts WHERE vk_id = ?", (vkid,))
|
1062 |
result = cursor.fetchone()
|
|
|
1063 |
|
1064 |
# Если запись по vk_id не найдена, возвращаем значение "not" для ордера
|
1065 |
if not result:
|
@@ -1069,11 +1078,17 @@ def get_order():
|
|
1069 |
|
1070 |
# Извлекаем данные из результата
|
1071 |
shop_st = result[0] if result[0] else '{}'
|
1072 |
-
|
1073 |
-
|
|
|
|
|
|
|
|
|
|
|
1074 |
|
1075 |
# Ищем значение по ключу order
|
1076 |
value = shop_st_data.get(order, 'not')
|
|
|
1077 |
|
1078 |
# Возвращаем данные из столбца
|
1079 |
response = {order: value}
|
|
|
1018 |
# Функция для валидации подписи ВК приложения
|
1019 |
def is_valid(*, query: dict, secret: str) -> bool:
|
1020 |
"""Check VK Apps signature"""
|
1021 |
+
logging.debug(f"Checking signature for query: {query}")
|
1022 |
vk_subset = OrderedDict(sorted(x for x in query.items() if x[0][:3] == "vk_"))
|
1023 |
+
logging.debug(f"Filtered VK params: {vk_subset}")
|
1024 |
hash_code = b64encode(HMAC(secret.encode(), urlencode(vk_subset, doseq=True).encode(), sha256).digest())
|
1025 |
decoded_hash_code = hash_code.decode('utf-8')[:-1].replace('+', '-').replace('/', '_')
|
1026 |
+
logging.debug(f"Calculated signature: {decoded_hash_code}")
|
1027 |
return query.get("sign") == decoded_hash_code
|
1028 |
|
1029 |
# Чтение ордера по ключу и ВК ИД для приложения
|
|
|
1038 |
apps_id = request.form.get('apps_id', '') # Сюда придёт ИД ВК приложения
|
1039 |
sign = request.form.get('sign', '') # Подпись приложения
|
1040 |
|
1041 |
+
logging.debug(f"Received data: vk_id={vkid}, order={order}, apps_id={apps_id}, sign={sign}")
|
1042 |
+
|
1043 |
# Проверяем наличие обязательных параметров
|
1044 |
if not vkid or not order:
|
1045 |
logging.error("VK ID and order are required")
|
|
|
1051 |
return json.dumps({"error": "Invalid apps_id"}), 400
|
1052 |
|
1053 |
secret = api_key_apps_vk[apps_id]
|
1054 |
+
logging.debug(f"Using secret: {secret}")
|
1055 |
|
1056 |
# Проверяем подпись
|
1057 |
query_params = request.form.to_dict()
|
1058 |
+
logging.debug(f"Query params for signature check: {query_params}")
|
1059 |
if not is_valid(query=query_params, secret=secret):
|
1060 |
logging.error("Invalid signature")
|
1061 |
return json.dumps({"error": "Invalid signature"}), 400
|
1062 |
|
1063 |
# Подключаемся к базе данных
|
1064 |
+
logging.debug(f"Connecting to database {DATABASE_NEW}")
|
1065 |
conn = sqlite3.connect(DATABASE_NEW)
|
1066 |
cursor = conn.cursor()
|
1067 |
|
1068 |
# Ищем запись по vk_id
|
1069 |
cursor.execute("SELECT orders FROM contacts WHERE vk_id = ?", (vkid,))
|
1070 |
result = cursor.fetchone()
|
1071 |
+
logging.debug(f"Database query result: {result}")
|
1072 |
|
1073 |
# Если запись по vk_id не найдена, возвращаем значение "not" для ордера
|
1074 |
if not result:
|
|
|
1078 |
|
1079 |
# Извлекаем данные из результата
|
1080 |
shop_st = result[0] if result[0] else '{}'
|
1081 |
+
logging.debug(f"Raw shop_st data: {shop_st}")
|
1082 |
+
try:
|
1083 |
+
shop_st_data = json.loads(shop_st)
|
1084 |
+
logging.debug(f"Parsed shop_st data: {shop_st_data}")
|
1085 |
+
except json.JSONDecodeError as e:
|
1086 |
+
logging.error(f"Error parsing JSON: {e}")
|
1087 |
+
return json.dumps({"error": "Error parsing JSON"}), 500
|
1088 |
|
1089 |
# Ищем значение по ключу order
|
1090 |
value = shop_st_data.get(order, 'not')
|
1091 |
+
logging.debug(f"Order value: {value}")
|
1092 |
|
1093 |
# Возвращаем данные из столбца
|
1094 |
response = {order: value}
|