o
    HEDi                  
   @   s   d dl Z d dlZd dlmZ d dlmZmZmZ d dlm	Z	 de
de
defdd	Zde
d
edef dee
ef fddZde
de
d
edef dee
ef fddZdS )    N)
itemgetter)CallableAnyDict)	parse_qsltoken	init_datareturnc                 C   s   zt t|}W n
 ty   Y dS w d|vrdS |d}ddd t| tddD }tj	d| 
 tjd	}tj	| |
 tjd	 }||kS )
z
    Check incoming WebApp init data signature

    Source: https://core.telegram.org/bots/webapps#validating-data-received-via-the-web-app

    :param token:
    :param init_data:
    :return:
    Fhash
c                 s   s"    | ]\}}| d | V  qdS )=N ).0kvr   r   d/var/www/www-root/data/www/ovozai.pdev.uz/venv/lib/python3.10/site-packages/aiogram/utils/web_app.py	<genexpr>   s    
z)check_webapp_signature.<locals>.<genexpr>r   )keys
   WebAppData)r   msg	digestmod)dictr   
ValueErrorpopjoinsorteditemsr   hmacnewencodehashlibsha256digest	hexdigest)r   r   parsed_datahash_data_check_string
secret_keycalculated_hashr   r   r   check_webapp_signature   s(   


r(   _loads.c                 C   sR   i }t | D ] \}}|dr|ds|dr"|dr"||}|||< q|S )zm
    Parse WebApp init data and return it as dict

    :param init_data:
    :param _loads:
    :return:
    []{})r   
startswithendswith)r   r)   resultr   valuer   r   r   parse_init_data(   s   (
r2   c                 C   s   t | |r
t||S td)z
    Validate WebApp init data and return it as dict

    :param token:
    :param init_data:
    :param _loads:
    :return:
    zInvalid init data signature)r(   r2   r   )r   r   r)   r   r   r   safe_parse_webapp_init_data8   s   
	
r3   )r   r   operatorr   typingr   r   r   urllib.parser   strboolr(   r2   r3   r   r   r   r   <module>   s    & .