DmitrMakeev commited on
Commit
6de7c5e
·
verified ·
1 Parent(s): b0c7790

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +14 -31
app.py CHANGED
@@ -1023,37 +1023,20 @@ def get_order_monitop():
1023
 
1024
 
1025
  # Функция для валидации подписи ВКонтакте
1026
- def is_valid(*, full_url: str, secret: str) -> bool:
1027
- try:
1028
- # Разбираем URL
1029
- parsed_url = urlparse(full_url)
1030
- query_params = parse_qs(parsed_url.query)
1031
-
1032
- # Извлекаем параметры, начинающиеся с "vk_" и исключаем "sign"
1033
- vk_subset = {k: v[0] for k, v in query_params.items() if k.startswith("vk_") and k != "sign"}
1034
-
1035
- # Сортируем параметры по алфавиту
1036
- vk_subset_sorted = sorted(vk_subset.items())
1037
-
1038
- # Формируем строку для подписи
1039
- data_to_sign = urlencode(vk_subset_sorted, doseq=True)
1040
-
1041
- # Создаем подпись
1042
- hash_code = b64encode(HMAC(secret.encode(), data_to_sign.encode(), sha256).digest()).decode('utf-8')
1043
- decoded_hash_code = hash_code[:-1].replace('+', '-').replace('/', '_')
1044
-
1045
- # Получаем подпись из параметра "sign"
1046
- received_sign = query_params.get('sign', [None])[0]
1047
-
1048
- # Логирование для отладки
1049
- logging.debug(f"Строка для подписи: {data_to_sign}")
1050
- logging.debug(f"Вычисленная подпись (Base64): {decoded_hash_code}")
1051
- logging.debug(f"Полученная подпись из запроса: {received_sign}")
1052
-
1053
- return received_sign == decoded_hash_code
1054
- except Exception as e:
1055
- logging.error(f"Ошибка при проверке подписи: {str(e)}")
1056
- return False
1057
 
1058
  # Маршрут для получения заказа
1059
  @app.route('/get_order', methods=['POST'])
 
1023
 
1024
 
1025
  # Функция для валидации подписи ВКонтакте
1026
+ def is_valid(*, query: dict, secret: str) -> bool:
1027
+ """Check VK Apps signature"""
1028
+ # Сортируем параметры, начинающиеся с "vk_"
1029
+ vk_subset = OrderedDict(sorted((k, v) for k, v in query.items() if k.startswith("vk_")))
1030
+
1031
+ # Формируем строку для подписи и вычисляем подпись HMAC
1032
+ data_to_sign = urlencode(vk_subset, doseq=True)
1033
+ hash_code = b64encode(HMAC(secret.encode(), data_to_sign.encode(), sha256).digest())
1034
+
1035
+ # Декодируем и преобразуем подпись
1036
+ decoded_hash_code = hash_code.decode('utf-8')[:-1].replace('+', '-').replace('/', '_')
1037
+
1038
+ # Сравниваем полученную подпись с подписью из запроса
1039
+ return query["sign"] == decoded_hash_code
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1040
 
1041
  # Маршрут для получения заказа
1042
  @app.route('/get_order', methods=['POST'])