
    ]h                        S SK r S SKrS SKrS SKrS SKJr  S SKJr  S SKJ	r	J
r
JrJrJrJr  S SKJrJrJr  S SKJrJrJr   " S S5      r " S	 S
5      r\" 5       r\	" S\SSS9rSS jrS rS r\R?                  S5      \S 5       5       r \R?                  S5      \S 5       5       r!\R?                  S5      \S 5       5       r"\R?                  SS/S9\S 5       5       r#g)    Nwraps)Path)	Blueprintrequestjsonifyrender_templatecurrent_appResponse)inspecttextexc)SQLiteSnapshotProviderPostgresSnapshotProviderMySQLSnapshotProviderc                   ,    \ rS rSrS rS rS rS rSrg)MockAuth   c                     S U l         g Ncurrent_userselfs    0/root/zotify-API/Gonk/GonkUI/views/db_browser.py__init__MockAuth.__init__   s
         c                     Xl         g r   r   )r   users     r   loginMockAuth.login   s    t,r   c                     S U l         g r   r   r   s    r   logoutMockAuth.logout   s	    $d'r   c                     U R                   $ r   r   r   s    r   get_userMockAuth.get_user   s    t000r   r   N)	__name__
__module____qualname____firstlineno__r   r!   r$   r'   __static_attributes__ r   r   r   r      s    !3.0r   r   c                       \ rS rSrSS jrSrg)MockUser   c                     Xl         X l        g r   )usernameis_admin)r   r3   r4   s      r   r   MockUser.__init__   s      r   )r4   r3   N)F)r)   r*   r+   r,   r   r-   r.   r   r   r0   r0      s    !r   r0   
db_browserz/dbz../templates/db_browser)
url_prefixtemplate_folderc                     [        [        R                  R                  SS5      5      nUR	                  SSS9  US-  n[
        R
                  " 5       U (       a  U R                  OS[        R                  UUUUUS.nUR                  S5       n	U	R                  [        R                  " UR                  5        V
Vs0 s H  u  pUc  M
  X_M     snn
5      S	-   5        S S S 5        g s  snn
f ! , (       d  f       g = f)
NDB_AUDIT_LOG_DIRlogsT)exist_okparentszdb_browser_audit.log	anonymous)	timestampr    	client_ipsqlparamssnapshot_pathrows_affectederrora
)r   r
   configgetmkdirtimer3   r   remote_addropenwritejsondumpsitems)r    rA   rB   rC   rD   rE   log_dirlog_file	log_entryfkvs               r   	log_auditrX      s    ;%%))*<fEFGMM4M.//H YY[!%;((&&	I 
s	q	

Y__->P->TQ!DAD->PQTXXY 
	P 
	s$   /C/>	C)C)C/)C//
C=c                 0   ^  [        T 5      U 4S j5       nU$ )Nc                  \   > [         R                  5       c  [        SS05      S4$ T" U 0 UD6$ )NrE   zAuthentication requiredi  )auth_managerr'   r   )argskwargsrU   s     r   decorated_function*login_required.<locals>.decorated_function2   s8      "*G%>?@#EE$!&!!r   r   )rU   r^   s   ` r   login_requiredr`   1   s!    
1X" " r   c                 f    U R                  5       R                  5       R                  S5      (       + $ )Nselect)striplower
startswith)rA   s    r   is_write_queryrf   ;   s%    yy{  "--h777r   /c                  :    [        S[        R                  5       S9$ )Nzbrowser.html)r    )r	   r[   r'   r.   r   r   indexri   @   s     >0E0E0GHHr   z/api/tablesc                       [        [        R                  5      n [        U R	                  5       5      $ ! [
         a"  n[        S[        U5      05      S4s S nA$ S nAff = f)NrE     )r   r
   	db_enginer   get_table_names	Exceptionstr)	inspectores     r   
get_tablesrr   E   sT    /K112	y00233 /Q()3../s   14 
A AA A z/api/table/<table>c                     [         R                  R                  5        nUR                  [	        SU  S35      5      R                  5       nU Vs/ s H  n[        UR                  5      PM     nn[        U5      sS S S 5        $ s  snf ! , (       d  f       g = f! [         a"  n[        S[        U5      05      S4s S nA$ S nAff = f)NzSELECT * FROM z
 LIMIT 100rE   rk   )r
   rl   connectexecuter   fetchalldict_mappingr   rn   ro   )table
connectionrowsrowdatarq   s         r   get_table_datar~   N   s    /""**,
%%d^E7*+M&NOXXZD267$3D&$D74= -,7 -,  /Q()3../sL   B 1BB0B<	B B
BB B 
C&C=CCz
/api/queryPOST)methodsc            
         [         R                  5       n [        R                  nUR	                  SS5      nUR	                  S0 5      n[        U5      (       Ga  U R                  (       d  [        SS05      S4$ S n [        [        R                  R                  5      n[        R                  R	                  SS5      nS nUR                  S	5      (       a  [        [        R                  U5      nOaUR                  S
5      (       a  [        [        R                  U5      nO0UR                  S5      (       a  [!        [        R                  U5      nU(       a  UR#                  5       n[        R                  R%                  5        nUR'                  5       n	UR)                  [+        U5      U5      n
U	R-                  5         S S S 5        [/        XX4W
R0                  S9  [        U
R0                   S3US.5      $  [        R                  R%                  5        nUR)                  [+        U5      U5      n
U
R9                  5       nU Vs/ s H  n[;        UR<                  5      PM     nnS S S 5        [/        XU[?        U5      S9  [        U5      $ ! , (       d  f       N= f! [2        R4                  [6        4 a0  n[/        XX4[        U5      S9  [        SSU 305      S4s S nA$ S nAff = fs  snf ! , (       d  f       N= f! [2        R4                   a0  n[/        XU[        U5      S9  [        SSU 305      S4s S nA$ S nAff = f)NrA    rB   rE   z,Admin privileges required for write queries.i  DB_BROWSER_SNAPSHOT_DIR	snapshotssqlite
postgresqlmysql)rC   rD   z rows affected.)messagerC   )rC   rE   zSQL Error: i  )rD   )rE   ) r[   r'   r   rO   rI   rf   r4   r   ro   r
   rl   urlrH   re   r   r   r   create_snapshotrt   beginru   r   commitrX   rowcountr   SQLAlchemyErrorRuntimeErrorrv   rw   rx   len)r    r}   rA   rB   rC   engine_url_strsnapshot_dirsnapshot_providerrz   transactionresultrq   r{   r|   s                 r   execute_queryr   Y   s      "D<<D
((5"
CXXh#Fc}}G%STUWZZZ	> !6!6!:!:;N&--112K[YL $((22H^_j_t_t  wC  ID4E**<88Nfgrg|g|  K  OL:K**733I^_j_t_t  wC  JD5F 2C2S2S2U- &&..0J(..0#++DIv>""$ 1
 dTZTcTcd&//):/'J]jkll		>&&..0J#++DIv>(6:;dsS\\*d; 1 ds4yA4= ' 10 ##\2 	>dCPQFSG{1#%678#==	> < 10 "" 	>ds1v6G{1#%678#==	>s   =DJ% 	<J7J% >L 0K7K2+K7-&L 
J"J% %K/?%K*$K/*K/2K77
LL M%MMM)NNN)$osrO   rK   logging	functoolsr   pathlibr   flaskr   r   r   r	   r
   r   
sqlalchemyr   r   r   GonkUI.db_snapshotr   r   r   r   r0   r[   r)   db_browser_bprX   r`   rf   routeri   rr   r~   r   r.   r   r   <module>r      s   	      U U ) ) f f1 1! !
 z ,UTmnZ&8
 SI  I ]#/  $/ )*/  +/ \F84,>  5,>r   