
    G˝i              	       .   d dl Z d dlZd dlZd dlmZ d dlmZ d dlmZ d dlm	Z	 d dl
mZ d dlmZ  G d d	e      Z G d
 de      Z G d de      ZdededefdZej(                  ddedede	f   defdZej(                  ddededede	f   defdZy)    N)Callable)datetime)
itemgetter)Any)	parse_qsl)TelegramObjectc                   `    e Zd ZU dZeed<   	 eed<   	 eed<   	 dZedz  ed<   	 dZedz  ed<   y)
WebAppChatzg
    This object represents a chat.

    Source: https://core.telegram.org/bots/webapps#webappchat
    idtypetitleNusername	photo_url)	__name__
__module____qualname____doc__int__annotations__strr   r        N/home/leshdev/mybot/venv/lib/python3.12/site-packages/aiogram/utils/web_app.pyr
   r
      sJ     	G8 ITJHcDj IsTz Er   r
   c                       e Zd ZU dZeed<   	 dZedz  ed<   	 eed<   	 dZ	edz  ed<   	 dZ
edz  ed<   	 dZedz  ed<   	 dZedz  ed	<   	 dZedz  ed
<   	 dZedz  ed<   	 dZedz  ed<   y)
WebAppUserz{
    This object contains the data of the Web App user.

    Source: https://core.telegram.org/bots/webapps#webappuser
    r   Nis_bot
first_name	last_namer   language_code
is_premiumadded_to_attachment_menuallows_write_to_pmr   )r   r   r   r   r   r   r   boolr   r   r   r   r    r!   r"   r   r   r   r   r   r   $   s     	G, FD4KJO( IsTz 'HcDj& $M3:$O"Jt"8,0dTk0B&*t*= IsTz Er   r   c                       e Zd ZU dZdZedz  ed<   	 dZedz  ed<   	 dZ	edz  ed<   	 dZ
edz  ed<   	 dZedz  ed<   	 dZedz  ed<   	 dZedz  ed	<   	 dZedz  ed
<   	 eed<   	 eed<   y)WebAppInitDataz
    This object contains data that is transferred to the Web App when it is opened.
    It is empty if the Web App was launched from a keyboard button.

    Source: https://core.telegram.org/bots/webapps#webappinitdata
    Nquery_iduserreceiverchat	chat_typechat_instancestart_paramcan_send_after	auth_datehash)r   r   r   r   r&   r   r   r'   r   r(   r)   r
   r*   r+   r,   r-   r   r   r   r   r   r%   r%   E   s      HcDj)"D*t
";"&Hj4&D #D*t
" !IsTz > !%M3:$?"Kt"U "&NC$J%^-
I`r   r%   token	init_datareturnc           	      "   	 t        t        |d            }d|vry|j                  d      }dj	                  d t        |j                         t        d            D              }t        j                  d	| j                         t        j                  
      }t        j                  |j                         |j                         t        j                  
      j                         }t        j                  ||      S # t        $ r Y yw xY w)z
    Check incoming WebApp init data signature

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

    :param token: bot Token
    :param init_data: data from frontend to be validated
    :return:
    T)strict_parsingFr/   
c              3   0   K   | ]  \  }}| d |   yw)=Nr   ).0kvs      r   	<genexpr>z)check_webapp_signature.<locals>.<genexpr>   s#      "q!1#Qqc
"s   r   )keys
   WebAppData)r<   msg	digestmod)dictr   
ValueErrorpopjoinsorteditemsr   hmacnewencodehashlibsha256digest	hexdigestcompare_digest)r0   r1   parsed_datahash_data_check_string
secret_keycalculated_hashs          r   check_webapp_signaturerR   o   s    9YtDE [ OOF#E		 "%k&7&7&9z!}M"  m7>>ZJhh$$&.. ik	 
 66#  s   D 	DDloadsrT   .c                    i }t        |       D ]V  \  }}|j                  d      r|j                  d      s"|j                  d      r|j                  d      r ||      }|||<   X t        di |S )a)  
    Parse WebApp init data and return it as WebAppInitData object

    This method doesn't make any security check, so you shall not trust to this data,
    use :code:`safe_parse_webapp_init_data` instead.

    :param init_data: data from frontend to be parsed
    :param loads:
    :return:
    []{}r   )r   
startswithendswithr%   )r1   rT   resultr<   values        r   parse_webapp_init_datar^      su     F	* 
US!ennS&9S!ennS&9%LEs #F##r   c                N    t        | |      rt        ||      S d}t        |      )a   
    Validate raw WebApp init data and return it as WebAppInitData object

    Raise :obj:`ValueError` when data is invalid

    :param token: bot token
    :param init_data: data from frontend to be parsed and validated
    :param loads:
    :return:
    rS   zInvalid init data signature)rR   r^   r@   )r0   r1   rT   r=   s       r   safe_parse_webapp_init_datar`      s*      eY/%iu==
'C
S/r   )rH   rE   jsoncollections.abcr   r   operatorr   typingr   urllib.parser   aiogram.typesr   r
   r   r%   r   r#   rR   rT   r^   r`   r   r   r   <module>rg      s       $    " (E E.E EB'a^ 'aT7# 7# 7$ 7F !%

$$ CH$ 	$: !%

	 CH	
 r   