DmitrMakeev commited on
Commit
4674427
·
verified ·
1 Parent(s): e341120

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +39 -32
app.py CHANGED
@@ -1022,36 +1022,39 @@ def get_order_monitop():
1022
 
1023
 
1024
 
1025
- # Функция для валидации подписи ВКонтакте
1026
  # Функция для валидации подписи ВКонтакте
1027
  def is_valid(*, full_url: str, secret: str) -> bool:
1028
  """Проверка подписи ВКонтакте"""
1029
- # Разбираем URL
1030
- parsed_url = urlparse(full_url)
1031
- query_params = parse_qs(parsed_url.query)
 
1032
 
1033
- # Извлекаем параметры, начинающиеся с "vk_" и исключаем "sign"
1034
- vk_subset = {k: v[0] for k, v in query_params.items() if k.startswith("vk_") and k != "sign"}
1035
-
1036
- # Сортируем параметры по алфавиту
1037
- vk_subset_sorted = sorted(vk_subset.items())
1038
-
1039
- # Формируем строку для подписи
1040
- data_to_sign = urlencode(vk_subset_sorted, doseq=True)
1041
-
1042
- # Создаем подпись
1043
- hash_code = b64encode(HMAC(secret.encode(), data_to_sign.encode(), sha256).digest()).decode('utf-8')
1044
- decoded_hash_code = hash_code[:-1].replace('+', '-').replace('/', '_')
1045
 
1046
- # Получаем подпись из параметра "sign"
1047
- received_sign = query_params.get('sign', [None])[0]
1048
 
1049
- # Логирование для отладки
1050
- logging.debug(f"Строка для подписи: {data_to_sign}")
1051
- logging.debug(f"Вычисленная подпись (Base64): {decoded_hash_code}")
1052
- logging.debug(f"Полученная подпись из запроса: {received_sign}")
1053
 
1054
- return received_sign == decoded_hash_code
 
 
 
1055
 
1056
  # Чтение ордера по ключу и ВК ИД для приложения
1057
  @app.route('/get_order', methods=['POST'])
@@ -1068,6 +1071,11 @@ def get_order():
1068
  # Логирование параметров запроса
1069
  logging.debug(f"Полученные параметры: vk_id: {vkid}, order: {order}, apps_id: {apps_id}")
1070
 
 
 
 
 
 
1071
  # Получение ключей приложения
1072
  api_key_apps_vk_dict = json.loads(api_key_apps_vk)
1073
 
@@ -1082,11 +1090,6 @@ def get_order():
1082
  logging.error(f"Неверная подпись для запроса: {fullUrl}")
1083
  return jsonify({"error": "Invalid signature"}), 400
1084
 
1085
- # Проверка наличия vk_id и order
1086
- if not vkid or not order:
1087
- logging.error("Требуются vk_id и order")
1088
- return jsonify({"error": "VK ID and order are required"}), 400
1089
-
1090
  # Подключение к базе данных
1091
  conn = sqlite3.connect('your_database.db')
1092
  cursor = conn.cursor()
@@ -1097,13 +1100,17 @@ def get_order():
1097
 
1098
  # Если vk_id не найден
1099
  if not result:
1100
- logging.error(f"VK ID {vkid} не найден")
1101
- response = {order: 'not'}
1102
- return jsonify(response), 200
1103
 
1104
  # Извлечение данных о заказах
1105
  shop_st = result[0] if result[0] else '{}'
1106
- shop_st_data = json.loads(shop_st)
 
 
 
 
 
1107
  logging.debug(f"Существующее значение JSON: {shop_st_data}")
1108
 
1109
  # Поиск значения по ключу order
 
1022
 
1023
 
1024
 
 
1025
  # Функция для валидации подписи ВКонтакте
1026
  def is_valid(*, full_url: str, secret: str) -> bool:
1027
  """Проверка подписи ВКонтакте"""
1028
+ try:
1029
+ # Разбираем URL
1030
+ parsed_url = urlparse(full_url)
1031
+ query_params = parse_qs(parsed_url.query)
1032
 
1033
+ # Извлекаем параметры, начинающиеся с "vk_" и исключаем "sign"
1034
+ vk_subset = {k: v[0] for k, v in query_params.items() if k.startswith("vk_") and k != "sign"}
1035
+
1036
+ # Сортируем параметры по алфавиту
1037
+ vk_subset_sorted = sorted(vk_subset.items())
1038
+
1039
+ # Формируем строку для подписи
1040
+ data_to_sign = urlencode(vk_subset_sorted, doseq=True)
1041
+
1042
+ # Создаем подпись
1043
+ hash_code = b64encode(HMAC(secret.encode(), data_to_sign.encode(), sha256).digest()).decode('utf-8')
1044
+ decoded_hash_code = hash_code[:-1].replace('+', '-').replace('/', '_')
1045
 
1046
+ # Получаем подпись из параметра "sign"
1047
+ received_sign = query_params.get('sign', [None])[0]
1048
 
1049
+ # Логирование для отладки
1050
+ logging.debug(f"Строка для подписи: {data_to_sign}")
1051
+ logging.debug(f"Вычисленная подпись (Base64): {decoded_hash_code}")
1052
+ logging.debug(f"Полученная подпись из запроса: {received_sign}")
1053
 
1054
+ return received_sign == decoded_hash_code
1055
+ except Exception as e:
1056
+ logging.error(f"Ошибка при проверке подписи: {str(e)}")
1057
+ return False
1058
 
1059
  # Чтение ордера по ключу и ВК ИД для приложения
1060
  @app.route('/get_order', methods=['POST'])
 
1071
  # Логирование параметров запроса
1072
  logging.debug(f"Полученные параметры: vk_id: {vkid}, order: {order}, apps_id: {apps_id}")
1073
 
1074
+ # Проверка наличия параметров
1075
+ if not fullUrl or not vkid or not order or not apps_id:
1076
+ logging.error("Отсутствуют обязательные параметры")
1077
+ return jsonify({"error": "Missing required parameters"}), 400
1078
+
1079
  # Получение ключей приложения
1080
  api_key_apps_vk_dict = json.loads(api_key_apps_vk)
1081
 
 
1090
  logging.error(f"Неверная подпись для запроса: {fullUrl}")
1091
  return jsonify({"error": "Invalid signature"}), 400
1092
 
 
 
 
 
 
1093
  # Подключение к базе данных
1094
  conn = sqlite3.connect('your_database.db')
1095
  cursor = conn.cursor()
 
1100
 
1101
  # Если vk_id не найден
1102
  if not result:
1103
+ logging.error(f"VK ID {vkid} не найден в базе данных")
1104
+ return jsonify({order: 'not'}), 200
 
1105
 
1106
  # Извлечение данных о заказах
1107
  shop_st = result[0] if result[0] else '{}'
1108
+ try:
1109
+ shop_st_data = json.loads(shop_st)
1110
+ except json.JSONDecodeError:
1111
+ logging.error(f"Не удалось декодировать JSON для orders: {shop_st}")
1112
+ return jsonify({order: 'not'}), 200
1113
+
1114
  logging.debug(f"Существующее значение JSON: {shop_st_data}")
1115
 
1116
  # Поиск значения по ключу order