· 5 years ago · Feb 26, 2020, 06:30 PM
1TELEGRAM_BOT_TOKEN = "токен бота"
2
3def is_hash_from_telegram(
4 data: dict, timedelta_min: Union[int, float] = 1
5) -> bool:
6 """
7 Пороверка наличия токена в редисе
8 :param data: данные полученные от телеграма
9 :param timedelta_min: кол-во минут в течении которых считать данные валидными
10 :return: bool
11 """
12 data_alphabetical_order = OrderedDict(sorted(data.dict(exclude_unset=True).items()))
13 data_check_string = "\n".join([f"{key}={value}" for key, value in data_alphabetical_order.items() if key != "hash"])
14
15 secret_key = hashlib.sha256(TELEGRAM_BOT_TOKEN.encode()).digest()
16 check_hash = hmac.new(secret_key, data_check_string.encode(), digestmod=hashlib.sha256).hexdigest()
17
18 if data.hash != check_hash:
19 return False
20
21
22 if (int(datetime.now().timestamp()) - data.auth_date) > timedelta(minutes=timedelta_min).total_seconds():
23 return False
24
25 return True