DmitrMakeev commited on
Commit
7237277
·
verified ·
1 Parent(s): 9e506e3

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +5 -34
app.py CHANGED
@@ -1022,25 +1022,6 @@ def get_order_monitop():
1022
 
1023
 
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
  @app.route('/get_order', methods=['POST'])
@@ -1052,29 +1033,19 @@ def get_order():
1052
  vkid = request.form.get('vk_id', '')
1053
  order = request.form.get('order', '')
1054
  apps_id = request.form.get('apps_id', '') # Сюда придёт ИД ВК приложения
1055
- fullUrl = request.form.get('fullUrl', '') # Полный URL, который выдаёт ВКонтакте
1056
 
1057
- logging.debug(f"Received data: vk_id={vkid}, order={order}, apps_id={apps_id}, fullUrl={fullUrl}")
1058
 
1059
- # Проверка подписи для приложения
1060
- if apps_id not in api_key_apps_vk: # Проверяем, существует ли apps_id в словаре api_key_apps_vk
 
1061
  logging.error("Invalid apps_id")
1062
  return json.dumps({"error": "Invalid apps_id"}), 400
1063
 
1064
- secret = api_key_apps_vk[apps_id] # Достаем секретный ключ по ключу apps_id
1065
  logging.debug(f"Using secret: {secret}")
1066
 
1067
- # Парсим полный URL для получения параметров запроса
1068
- query_params = dict(parse_qsl(urlparse(fullUrl).query, keep_blank_values=True))
1069
- logging.debug(f"Query params for signature check: {query_params}")
1070
-
1071
- # Проверяем подпись
1072
- if not is_valid(query=query_params, secret=secret):
1073
- logging.error("Invalid signature")
1074
- return json.dumps({"error": "Invalid signature"}), 400
1075
-
1076
  # Возвращаем успешный ответ
1077
- response = {"status": "valid"}
1078
  return jsonify(response), 200
1079
 
1080
  except Exception as e:
 
1022
 
1023
 
1024
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1025
 
1026
  # Чтение ордера по ключу и ВК ИД для приложения
1027
  @app.route('/get_order', methods=['POST'])
 
1033
  vkid = request.form.get('vk_id', '')
1034
  order = request.form.get('order', '')
1035
  apps_id = request.form.get('apps_id', '') # Сюда придёт ИД ВК приложения
 
1036
 
1037
+ logging.debug(f"Received data: vk_id={vkid}, order={order}, apps_id={apps_id}")
1038
 
1039
+ # Достаем секретный ключ по ключу apps_id
1040
+ secret = api_key_apps_vk.get(apps_id, None)
1041
+ if not secret:
1042
  logging.error("Invalid apps_id")
1043
  return json.dumps({"error": "Invalid apps_id"}), 400
1044
 
 
1045
  logging.debug(f"Using secret: {secret}")
1046
 
 
 
 
 
 
 
 
 
 
1047
  # Возвращаем успешный ответ
1048
+ response = {"status": "valid", "secret": secret}
1049
  return jsonify(response), 200
1050
 
1051
  except Exception as e: