
    "j                        d Z ddlmZ ddlZddlZddlZddlZddlmZ ddl	m
Z
mZ ddlmZmZmZmZ ddlmZmZmZ dZdd	Zddd
ZddZddZy)uQ   Проверка Telegram Mini App initData и роли пользователя.    )annotationsN)	parse_qsl)HTTPExceptionRequest)count_adminsget_app_useris_panel_workerupsert_app_user)ADMIN_TG_IDS	BOT_TOKENPANEL_BOT_TOKENi  c                     t               } g }t        t        fD ]I  }t        |xs d      j	                         }|s#|| vs(| j                  |       |j                  |       K |S )N )setr   r   strstripaddappend)seentokenstokenvalues       -/var/www/oz-panel.ru/ozpay-pub/server/auth.py_bot_tokensr      sa    UDF!9- !EKR &&(U$&HHUOMM% 	!
 M    c                   | rt        |       j                         st        d      t        t	        | d            }|j                  dd       }|st        d      dj                  d t        |j                               D              }|r|gn	t               }d}|D ]  }t        |xs d	      j                         }|s#t        j                  d
|j                  d      t        j                        j                         }t        j                  ||j                  d      t        j                        j!                         }	t        j"                  |	|      sd} n |st        d      |j%                  d      }
|
r@	 t'        |
      }|r2t+        t-        j,                         |z
        t.        kD  rt        d      |j%                  d      xs d	}	 |rt1        j2                  |      ni }t7        |t              r|j%                  d      st        d      |S # t(        t        f$ r d}Y w xY w# t0        j4                  $ r}t        d      |d }~ww xY w)Nu   Нет initDataT)keep_blank_valueshashu   Нет подписи Telegram
c              3  0   K   | ]  \  }}| d |   yw)=N ).0kvs      r   	<genexpr>z,validate_webapp_init_data.<locals>.<genexpr>%   s     !PAQCq*!Ps   Fr   s
   WebAppDatazutf-8u6   Подпись Telegram недействительна	auth_dater   uU   Сессия Telegram устарела — откройте панель зановоuseruH   Не удалось прочитать пользователя Telegramidu+   В initData нет пользователя)r   r   
ValueErrordictr   popjoinsorteditemsr   hmacnewencodehashlibsha256digest	hexdigestcompare_digestgetint	TypeErrorabstimeMAX_AUTH_AGEjsonloadsJSONDecodeError
isinstance)	init_data	bot_tokenparsedreceived_hashdata_check_stringr   matchedr   
secret_key
calculatedr'   issueduser_rawr(   excs                  r   validate_webapp_init_datarM      s   C	N002*++)I>?FJJvt,M9::		!P9O!PP%i[;=FG EKR &&(XXmU\\'-BGNNSZZ\
XXj*;*B*B7*KW^^\ffh
z=9G QRR

;'I	^F c$))+./,>tuuzz&!'RHn'/tzz(#R dD!$FGGK :& 	F	  ncdjmmns*   H H5 H21H25IIIc                   t        | d         }| j                  d      }| j                  d      }|t        t        xs d      v }t	        |      }|r|j                  d      rd}|st        st               dk(  rd}t        ||||      }t        |xr |j                  d            }| xr t        |      }||||xs i j                  d      xs |xs d	|xs i j                  d      xs |xs d	d
S )Nr)   username
first_namer"   is_adminTr   )rO   rP   rQ   r   )r)   rQ   	is_workerrO   rP   )	r9   r8   r   r   r   r   r
   boolr	   )	r(   tg_idrO   rP   rQ   existingrowadminworkers	            r   resolve_userrY   G   s    T
OExx
#H,'JL.B//HE"HHLL,L\^q-@
%(zT\
]C,,-Ei3_U3FYBOOJ/A8Arybool3GzGR r   c                V   | j                   j                  d      xsJ | j                   j                  dj                               xs | j                  j                  d      xs d}	 t	        |      }t        |      S # t
        $ r }t        dt        |      xs d      |d }~ww xY w)NzX-Telegram-Init-DatainitDatar   i  u+   Откройте панель из Telegram)status_codedetail)	headersr8   lowerquery_paramsrM   r*   r   r   rY   )requestrB   tg_userrL   s       r   current_user_from_requestrc   ]   s    23 	??5;;=>	##J/	 	 x+I6     xCH4m@mntwwxs   )A? ?	B(B##B()returnz	list[str])N)rB   r   rC   z
str | Nonerd   r+   )r(   r+   rd   r+   )ra   r   rd   r+   )__doc__
__future__r   r3   r0   r>   r<   urllib.parser   fastapir   r   
api.db_apir   r   r	   r
   server.configr   r   r   r=   r   rM   rY   rc   r"   r   r   <module>rk      sC    W "     " * S S B B&R,!r   