DmitrMakeev commited on
Commit
0a1ed42
·
verified ·
1 Parent(s): fd512a4

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +5 -39
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
- secret = api_key_apps_vk[str(apps_id)] # Приводим apps_id к строке
1087
- logging.debug(f"Using secret: {secret}")
1088
-
1089
- # Парсим полный URL для получения параметров запроса
1090
- query_params = dict(parse_qsl(urlparse(fullUrl).query, keep_blank_values=True))
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