DmitrMakeev commited on
Commit
f7afb99
·
verified ·
1 Parent(s): dc2d29b

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +17 -3
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
- vk_subset = OrderedDict(sorted((k, v) for k, v in query.items() if k.startswith("vk_") and k != "sign"))
 
 
 
 
 
 
 
 
 
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
- sign = request.form.get('sign', '')
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