§
    �éÀj  ã            	       ó”  — d dl Z d dlZd dlZd dlmZmZmZmZmZm	Z	m
Z
 d dlmZmZ d dlmZ d dlmZ d dlZ e¦   «         Z ed¬¦  «        Ze j                             e j                             e¦  «        d¦  «        Zd	e j        v re j        d	         Zn­e j                             e¦  «        rK eed
¦  «        5 Ze                     ¦   «                               ¦   «         Zddd¦  «         n# 1 swxY w Y   nH ej!        ¦   «         Z eed¦  «        5 Ze "                    e¦  «         ddd¦  «         n# 1 swxY w Y    e#d¦  «          e#de› �¦  «          e#d¦  «         e j         $                    e j                             e j                             e¦  «        dddd¦  «        ¦  «        Z%d„ Z& e'¦   «         Z( G d„ de)¦  «        Z*e +                    e*¦  «        dede*fd„¦   «         Z,defd„Z-e .                    de¬¦  «        defd„¦   «         Z/e 0                    d¦  «         ed¦  «        fdedede1fd„¦   «         Z2e .                    d¦  «        defd „¦   «         Z3e .                    d!e¬¦  «         ee-¦  «        fdefd"„¦   «         Z4e .                    d#e¬¦  «         ee-¦  «        fded$e1fd%„¦   «         Z5e 0                    d&¦  «         ee-¦  «        fded$e1fd'„¦   «         Z6e 0                    d(¦  «         ee-¦  «        fded$e1fd)„¦   «         Z7e8d*k    rd dl9Z9 e9j:        d+d,d-d.¬/¦  «         dS dS )0é    N)ÚFastAPIÚRequestÚFormÚResponseÚDependsÚHTTPExceptionÚstatus)ÚHTMLResponseÚRedirectResponse)ÚJinja2Templates)ÚStaticFilesÚ	templates)Ú	directoryztotp_secret.txtÚADMIN_TOTP_SECRETÚrÚwz;===========================================================zADMIN TOTP SECRET: z..Údatazgame_design_matrix.dbc                  óZ   — t          j        t          ¦  «        } t           j        | _        | S )N)Úsqlite3ÚconnectÚDB_PATHÚRowÚrow_factory)Úconns    ú.C:\Projects\FreeExile\tools\admin_tool\main.pyÚget_dbr       s    € ÝŒ?�7Ñ#Ô#€DÝ”{€DÔØ€Kó    c                   ó   — e Zd ZdS )ÚAuthExceptionN)Ú__name__Ú
__module__Ú__qualname__© r   r   r   r   '   s   € € € € € Ø€Dr   r   ÚrequestÚexcc              ƒ   ó<   K  — t          dt          j        ¬¦  «        S )Nú/login©ÚurlÚstatus_code)r   r	   ÚHTTP_302_FOUND)r$   r%   s     r   Úauth_exception_handlerr,   *   s   è è € å µfÔ6KÐLÑLÔLÐLr   c                 ól   — | j                              d¦  «        }|r	|t          vrt          ¦   «         ‚d S )NÚ
session_id)ÚcookiesÚgetÚactive_sessionsr   )r$   r.   s     r   Úrequire_authr2   .   s;   € Ø”×$Ò$ \Ñ2Ô2€JØð ˜­?Ð:Ð:Ý‰oŒoÐð ;Ð:r   r'   )Úresponse_classc              ƒ   óL   K  — t                                | ddt          i¦  «        S )Nú
login.htmlÚsecret)r   ÚTemplateResponseÚTOTP_SECRET)r$   s    r   Ú	login_getr9   3   s#   è è € å×%Ò% g¨|¸hÍÐ=TÑUÔUÐUr   .ÚresponseÚcodec              ƒ   óŠ  K  — t          j        t          ¦  «        }|                     |¦  «        rvt	          j        d¦  «                             ¦   «         }t                               |¦  «         t          dt          j        ¬¦  «        }|                     d|dd¬¦  «         |S t                               | dd	d
i¦  «        S )Né   ú/r(   r.   TÚlax)ÚkeyÚvalueÚhttponlyÚsamesiter5   ÚerrorzInvalid 2FA code)ÚpyotpÚTOTPr8   ÚverifyÚosÚurandomÚhexr1   Úaddr   r	   r+   Ú
set_cookier   r7   )r$   r:   r;   Útotpr.   Úress         r   Ú
login_postrO   7   s©   è è € åŒ:•kÑ"Ô"€DØ‡{‚{�4ÑÔð Ý”Z ‘^”^×'Ò'Ñ)Ô)ˆ
Ý×Ò˜JÑ'Ô'Ð'Ý 3µFÔ4IÐJÑJÔJˆØ�Š˜<¨zÀDÐSXˆÑYÔYÐYØˆ
Ý×%Ò% g¨|¸gÐGYÐ=ZÑ[Ô[Ð[r   z/logoutc              ƒ   óÎ   K  — | j                              d¦  «        }|t          v rt                               |¦  «         t	          d¬¦  «        }|                     d¦  «         |S )Nr.   r'   )r)   )r/   r0   r1   Úremover   Údelete_cookie)r$   r.   rN   s      r   ÚlogoutrS   B   sc   è è € à”×$Ò$ \Ñ2Ô2€JØ•_Ð$Ð$Ý×Ò˜zÑ*Ô*Ð*Ý
˜xÐ
(Ñ
(Ô
(€CØ×Ò�lÑ#Ô#Ð#Ø€Jr   r>   c              ƒ   ó  K  — t          ¦   «         }d„ |                     d¦  «                             ¦   «         D ¦   «         }t          j        ¦   «         t          j        ¦   «         j        dœ}t                               | d||dœ¦  «        S )Nc                 ó   — g | ]
}|d          ‘ŒS ©r   r#   ©Ú.0Úrows     r   ú
<listcomp>zindex.<locals>.<listcomp>N   ó   € ÐmÐmÐm˜ˆc�!ŒfÐmÐmÐmr   ú1SELECT name FROM sqlite_master WHERE type='table')ÚcpuÚmemoryzdashboard.html)ÚtablesÚstats)	r   ÚexecuteÚfetchallÚpsutilÚcpu_percentÚvirtual_memoryÚpercentr   r7   )r$   Ú_r   r_   r`   s        r   Úindexrh   K   sˆ   è è € å‰8Œ8€DØmÐm §¢Ð-`Ñ aÔ a× jÒ jÑ lÔ lÐmÑmÔm€Fõ Ô!Ñ#Ô#ÝÔ'Ñ)Ô)Ô1ðð €Eõ
 ×%Ò% gÐ/?ÈFÐ]bÐAcÐAcÑdÔdÐdr   z/table/{table_name}Ú
table_namec           	   ƒ   óN  K  — t          ¦   «         }	 d„ |                     d¦  «                             ¦   «         D ¦   «         }||vrt          dd¬¦  «        S |                     d|› d�¦  «        }|                     ¦   «         }d„ |j        D ¦   «         }|                     d	|› d
�¦  «                             ¦   «         }d„ |D ¦   «         }	|	s|r	|d         g}	n+# t
          $ r}
t          d|
› �d¬¦  «        cY d }
~
S d }
~
ww xY wt                               | d||||	dœ¦  «        S )Nc                 ó   — g | ]
}|d          ‘ŒS rV   r#   rW   s     r   rZ   zview_table.<locals>.<listcomp>[   s   € ÐqÐqÐq˜S�#�a”&ÐqÐqÐqr   r\   úInvalid table nameé�  ©Úcontentr*   zSELECT * FROM z
 LIMIT 100c                 ó   — g | ]
}|d          ‘ŒS rV   r#   )rX   Údescriptions     r   rZ   zview_table.<locals>.<listcomp>a   s   € ÐHÐHÐH k�;˜q”>ÐHÐHÐHr   úPRAGMA table_info(ú)c                 ó6   — g | ]}|d          dk    ¯|d         ‘ŒS ©Úpkr   Únamer#   ©rX   Úcols     r   rZ   zview_table.<locals>.<listcomp>d   s%   € ÐCÐCÐC 3°S¸´YÀ²]°]�3�v”;°]°]°]r   r   zError: iô  z
table.html)ri   ÚcolumnsÚrowsÚpk_cols)r   ra   rb   r
   rq   Ú	Exceptionr   r7   )r$   ri   rg   r   r_   Úcursorr{   rz   Úpk_infor|   Úes              r   Ú
view_tabler�   W   sx  è è € å‰8Œ8€DðDØqÐq D§L¢LÐ1dÑ$eÔ$e×$nÒ$nÑ$pÔ$pÐqÑqÔqˆØ˜VÐ#Ð#ÝÐ(<È#ÐNÑNÔNÐNà—’ÐE¨zÐEÐEÐEÑFÔFˆØ�ŠÑ Ô ˆØHÐH°VÔ5GÐHÑHÔHˆà—,’,ÐA°JÐAÐAÐAÑBÔB×KÒKÑMÔMˆØCÐC¨'ÐCÑCÔCˆØð 	#˜7ð 	#Ø˜q”z�lˆGøøåð Dð Dð DÝ M¨a M M¸sÐCÑCÔCÐCÐCÐCÐCÐCÐCøøøøðDøøøõ ×%Ò% g¨|Ø ØØØð	>ð >ñ ô ð s%   ’AC ÁBC Ã
DÃ%C>Ã8DÃ>Dz/table/{table_name}/editc              ƒ   ó  K  — |                       ¦   «         ƒ d {V —†}t          ¦   «         }d„ |                     d¦  «                             ¦   «         D ¦   «         }||vrt	          dd¬¦  «        S |                     d|› d�¦  «                             ¦   «         }d„ |D ¦   «         }d	„ |D ¦   «         }|s|r	|d
         g}|D ]}	|	|vrt	          d|	› �d¬¦  «        c S Œg }
g }g }|D ]*}	|                     |                     |	¦  «        ¦  «         Œ+|                     ¦   «         D ]A\  }}||vrŒ
||vr3|dk    r-|
                     |› d�¦  «         |                     |¦  «         ŒB|                     d¦  «        }	 |dk    r<d                     d„ |D ¦   «         ¦  «        }|                     d|› d|› �|¦  «         n^|dk    rX|
rVd                     d„ |D ¦   «         ¦  «        }d|› dd                     |
¦  «        › d|› �}|                     |||z   ¦  «         | 	                    ¦   «          n0# t          j        $ r}t	          d|› �d¬¦  «        cY d }~S d }~ww xY wt          d|› �t          j        ¬¦  «        S )Nc                 ó   — g | ]
}|d          ‘ŒS rV   r#   rW   s     r   rZ   zedit_row.<locals>.<listcomp>w   r[   r   r\   rl   rm   rn   rr   rs   c                 ó   — g | ]
}|d          ‘ŒS ©rw   r#   rx   s     r   rZ   zedit_row.<locals>.<listcomp>|   s   € Ð1Ð1Ð1 #�#�f”+Ð1Ð1Ð1r   c                 ó6   — g | ]}|d          dk    ¯|d         ‘ŒS ru   r#   rx   s     r   rZ   zedit_row.<locals>.<listcomp>}   s%   € Ð?Ð?Ð?˜s°°T´¸Q²°ˆs�6Œ{°°°r   r   zMissing primary key: Úactionú = ?Údeletez AND c                 ó   — g | ]}|› d �‘ŒS ©rˆ   r#   rx   s     r   rZ   zedit_row.<locals>.<listcomp>–   s   € Ð(IÐ(IÐ(I¸#¨C¨¨¨Ð(IÐ(IÐ(Ir   zDELETE FROM z WHERE Úupdatec                 ó   — g | ]}|› d �‘ŒS r‹   r#   rx   s     r   rZ   zedit_row.<locals>.<listcomp>š   s   € Ð,MÐ,MÐ,M¸c°¨\¨\¨\Ð,MÐ,MÐ,Mr   zUPDATE z SET ú, úDatabase Error: ú/table/r(   )Úformr   ra   rb   r
   Úappendr0   ÚitemsÚjoinÚcommitr   ÚErrorr   r	   r+   )r$   ri   rg   r‘   r   r_   r   Ú
valid_colsr|   Úpk_colÚupdatesÚparamsÚ	pk_paramsr@   rA   r‡   Úwhere_clauseÚqueryr€   s                      r   Úedit_rowrž   r   s/  è è € à—’‘”ÐÐÐÐÐÐ€DÝ‰8Œ8€DàmÐm §¢Ð-`Ñ aÔ a× jÒ jÑ lÔ lÐmÑmÔm€FØ˜ÐÐÝÐ$8ÀcÐJÑJÔJÐJà�lŠlÐ=°
Ð=Ð=Ð=Ñ>Ô>×GÒGÑIÔI€GØ1Ð1¨Ð1Ñ1Ô1€JØ?Ð? gÐ?Ñ?Ô?€GØð "�zð "Ø˜a”=�/ˆàð [ð [ˆØ˜ÐÐÝÐ(HÀÐ(HÐ(HÐVYÐZÑZÔZÐZÐZÐZð ð €GØ€FØ€Iàð +ð +ˆØ×Ò˜Ÿš &Ñ)Ô)Ñ*Ô*Ð*Ð*à—j’j‘l”lð !ð !‰
ˆˆUØ�jÐ Ð ØØ�gÐÐ #¨¢/ /Ø�NŠN˜c˜<˜<˜<Ñ(Ô(Ð(Ø�MŠM˜%Ñ Ô Ð øà�XŠX�hÑÔ€FðMØ�XÒÐØ"Ÿ<š<Ð(IÐ(IÀÐ(IÑ(IÔ(IÑJÔJˆLØ�LŠLÐI¨
ÐIÐI¸<ÐIÐIÈ9ÑUÔUÐUÐUØ�xÒÐØð 8Ø&Ÿ|š|Ð,MÐ,MÀWÐ,MÑ,MÔ,MÑNÔN�Ø\ *Ð\Ð\°4·9²9¸WÑ3EÔ3EÐ\Ð\ÈlÐ\Ð\�Ø—’˜U F¨YÑ$6Ñ7Ô7Ð7Ø�Š‰ŒˆˆøÝŒ=ð Mð Mð MÝÐ$:°qÐ$:Ð$:ÈÐLÑLÔLÐLÐLÐLÐLÐLÐLøøøøðMøøøõ Ð 6¨*Ð 6Ð 6ÅFÔDYÐZÑZÔZÐZs   Å?B4H4 È4I!ÉIÉI!ÉI!z/table/{table_name}/addc              ƒ   ó�  K  — |                       ¦   «         ƒ d {V —†}t          ¦   «         }d„ |                     d¦  «                             ¦   «         D ¦   «         }||vrt	          dd¬¦  «        S d„ |                     d|› d�¦  «                             ¦   «         D ¦   «         }g }g }g }	|                     ¦   «         D ]H\  }
}|
|v r?|                     |
¦  «         |                     |¦  «         |	                     d	¦  «         ŒI|st	          d
d¬¦  «        S 	 d|› dd                     |¦  «        › dd                     |	¦  «        › d�}|                     ||¦  «         |                     ¦   «          n0# t          j
        $ r}t	          d|› �d¬¦  «        cY d }~S d }~ww xY wt          d|› �t          j        ¬¦  «        S )Nc                 ó   — g | ]
}|d          ‘ŒS rV   r#   rW   s     r   rZ   zadd_row.<locals>.<listcomp>¨   r[   r   r\   rl   rm   rn   c                 ó   — g | ]
}|d          ‘ŒS r…   r#   rx   s     r   rZ   zadd_row.<locals>.<listcomp>¬   s   € ÐeÐeÐe #�#�f”+ÐeÐeÐer   rr   rs   ú?zNo valid columns providedzINSERT INTO z (rŽ   z
) VALUES (r�   r�   r(   )r‘   r   ra   rb   r
   r“   r’   r”   r•   r   r–   r   r	   r+   )r$   ri   rg   r‘   r   r_   r—   rz   rš   Úplaceholdersr@   rA   r�   r€   s                 r   Úadd_rowr¤   £   s  è è € à—’‘”ÐÐÐÐÐÐ€DÝ‰8Œ8€DàmÐm §¢Ð-`Ñ aÔ a× jÒ jÑ lÔ lÐmÑmÔm€FØ˜ÐÐÝÐ$8ÀcÐJÑJÔJÐJàeÐe¨¯ªÐ6XÈ:Ð6XÐ6XÐ6XÑ)YÔ)Y×)bÒ)bÑ)dÔ)dÐeÑeÔe€Jà€GØ€FØ€Là—j’j‘l”lð %ð %‰
ˆˆUØ�*ÐÐØ�NŠN˜3ÑÔÐØ�MŠM˜%Ñ Ô Ð Ø×Ò Ñ$Ô$Ð$øàð RÝÐ$?ÈSÐQÑQÔQÐQðMØe˜zÐeÐe¨T¯YªY°wÑ-?Ô-?ÐeÐeÈ4Ï9Ê9ÐUaÑKbÔKbÐeÐeÐeˆØ�Š�U˜FÑ#Ô#Ð#Ø�Š‰ŒˆˆøÝŒ=ð Mð Mð MÝÐ$:°qÐ$:Ð$:ÈÐLÑLÔLÐLÐLÐLÐLÐLÐLøøøøðMøøøõ Ð 6¨*Ð 6Ð 6ÅFÔDYÐZÑZÔZÐZs   ÄAE: Å:F'Æ	F"ÆF'Æ"F'Ú__main__zmain:appz	127.0.0.1iƒ#  T)ÚhostÚportÚreload);rH   r   rE   Úfastapir   r   r   r   r   r   r	   Úfastapi.responsesr
   r   Úfastapi.templatingr   Úfastapi.staticfilesr   rc   Úappr   Úpathr”   ÚdirnameÚ__file__ÚTOTP_SECRET_FILEÚenvironr8   ÚexistsÚopenÚfÚreadÚstripÚrandom_base32ÚwriteÚprintÚabspathr   r   Úsetr1   r}   r   Úexception_handlerr,   r2   r0   r9   ÚpostÚstrrO   rS   rh   r�   rž   r¤   r    ÚuvicornÚrunr#   r   r   ú<module>rÂ      s‡  ðØ 	€	€	€	Ø €€€Ø €€€Ø TÐ TÐ TÐ TÐ TÐ TÐ TÐ TÐ TÐ TÐ TÐ TÐ TÐ TÐ TÐ TÐ TÐ TØ <Ð <Ð <Ð <Ð <Ð <Ð <Ð <Ø .Ð .Ð .Ð .Ð .Ð .Ø +Ð +Ð +Ð +Ð +Ð +Ø €€€à€g�i„i€ØˆO kÐ2Ñ2Ô2€	à”7—<’< ¤§¢°Ñ 9Ô 9Ð;LÑMÔMÐ à˜"œ*Ð$Ð$Ø”*Ð0Ô1€K€Kà	„w‡~‚~Ð&Ñ'Ô'ð !ØˆTÐ" CÑ(Ô(ð 	+¨AØŸ&š&™(œ(Ÿ.š.Ñ*Ô*ˆKð	+ð 	+ð 	+ñ 	+ô 	+ð 	+ð 	+ð 	+ð 	+ð 	+ð 	+øøøð 	+ð 	+ð 	+ð 	+øð *�eÔ)Ñ+Ô+ˆØˆTÐ" CÑ(Ô(ð 	!¨AØ�GŠG�KÑ Ô Ð ð	!ð 	!ð 	!ñ 	!ô 	!ð 	!ð 	!ð 	!ð 	!ð 	!ð 	!øøøð 	!ð 	!ð 	!ð 	!ð €ÐDÑ EÔ EÐ EØ €Ð)˜KÐ)Ð)Ñ *Ô *Ð *Ø €ÐDÑ EÔ EÐ Eà
Œ'�/Š/˜"œ'Ÿ,š, r¤w§¢°xÑ'@Ô'@À$ÈÈfÐVmÑnÔnÑ
oÔ
o€ðð ð ð
 �#‘%”%€ð	ð 	ð 	ð 	ð 	�Iñ 	ô 	ð 	ð ×Ò�}Ñ%Ô%ðM¨'ð M¸ð Mð Mð Mñ &Ô%ðMð˜'ð ð ð ð ð
 ‡‚ˆ ,€Ñ/Ô/ðV˜Wð Vð Vð Vñ 0Ô/ðVð ‡‚ˆ(ÑÔØGKÀtÈCÁyÄyð \ð \˜gð \°ð \Àð \ð \ð \ñ Ôð\ð ‡‚ˆÑÔð˜'ð ð ð ñ Ôðð ‡‚ˆ˜\€Ñ*Ô*Ø$+ G¨LÑ$9Ô$9ð 	eð 	e˜ð 	eð 	eð 	eñ +Ô*ð	eð ‡‚Ð	¨|€Ñ<Ô<Ø:A¸'À,Ñ:OÔ:Oð ð ˜gð °3ð ð ð ñ =Ô<ðð4 ‡‚Ð
$Ñ%Ô%Ø8?¸ÀÑ8MÔ8Mð .[ð .[˜Gð .[°ð .[ð .[ð .[ñ &Ô%ð.[ð` ‡‚Ð
#Ñ$Ô$Ø7>°w¸|Ñ7LÔ7Lð [ð [˜7ð [°ð [ð [ð [ñ %Ô$ð[ð@ ˆzÒÐØ€N€N€NØ€G„K�
 °4ÀÐEÑEÔEÐEÐEÐEð Ðs$   Â='C0Ã0C4Ã7C4ÄD9Ä9D=Å D=