
    dh              	       *   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mZ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)datetime)
itemgetter)AnyCallableOptional)	parse_qsl)TelegramObjectc                   `    e Zd ZU dZeed<   	 eed<   	 eed<   	 dZee   ed<   	 dZ	ee   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   r        O/var/www/netwell/bot/venv/lib/python3.12/site-packages/aiogram/utils/web_app.pyr   r      sJ     	G8 ITJ"Hhsm"#Ix}#Er   r   c                       e Zd ZU dZeed<   	 dZee   ed<   	 e	ed<   	 dZ
ee	   ed<   	 dZee	   ed<   	 dZee	   ed<   	 dZee   ed	<   	 dZee   ed
<   	 dZee   ed<   	 dZee	   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   r   boolr   r   r   r    r!   r"   r#   r   r   r   r   r   r   #   s     	G, "FHTN!JO(#Ix}#'"Hhsm"&#'M8C='O!%J%8/3htn3B)--=#Ix}#Er   r   c                       e Zd ZU dZdZee   ed<   	 dZee	   ed<   	 dZ
ee	   ed<   	 dZee   ed<   	 dZee   ed<   	 dZee   ed<   	 dZee   ed	<   	 dZee   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&   r&   D   s     #Hhsm")!%D(:
%;%)Hhz")D "&D(:
%  $Ix}#> $(M8C='?!%K#%U %)NHSM(^-
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_parsingFr0   
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)r1   r2   parsed_datahash_data_check_string
secret_keycalculated_hashs          r   check_webapp_signaturerS   n   s    9YtDE [ OOF#E		 "%k&7&7&9z!}M"  m7>>ZJhh%6%=%=%?7>>ik  66  s   D 	DDloadsrU   .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&   )r2   rU   resultr=   values        r   parse_webapp_init_datar_      su     F	* 
US!ennS&9S!ennS&9%LEs #F##r   c                J    t        | |      rt        ||      S t        d      )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:
    rT   zInvalid init data signature)rS   r_   rA   )r1   r2   rU   s      r   safe_parse_webapp_init_datara      s'      eY/%iu==
2
33r   )rI   rF   jsonr   operatorr   typingr   r   r   urllib.parser   aiogram.typesr	   r   r   r&   r   r$   rS   rU   r_   ra   r   r   r   <module>rg      s         * * " (E E.E EB'a^ 'aT7# 7# 7$ 7B !%

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

	444 CH	4
 4r   