a
    ތxdh
                     @   s   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 d dlmZ d d	lmZ G d
d dejZdS )    N)forms)settings)ValidationError)connections)constant_time_compare)force_bytes)cached_property)reformat_sqlc                       s   e Zd ZdZe Ze Ze ZejdddZ	e
 Ze Z fddZdd Zd	d
 Zdd Zdd Zdd Zdd Zedd Zedd Z  ZS )SQLSelectFormaO  
    Validate params

        sql: The sql statement with interpolated params
        raw_sql: The sql statement with placeholders
        params: JSON encoded parameter values
        duration: time for SQL to execute passed in from toolbar just for redisplay
        hash: the hash of (secret + sql + params) for tamper checking
    Fdefault)requiredinitialc                    sR   | d}|d ur | ||d< t j|i | | jD ]}t | j| _q8d S )Nr   hash)get	make_hashsuper__init__fieldsr   ZHiddenInputZwidget)selfargskwargsr   name	__class__ V/var/www/html/Ranjet/env/lib/python3.9/site-packages/debug_toolbar/panels/sql/forms.pyr   "   s    

zSQLSelectForm.__init__c                 C   s(   | j d }|  ds$td|S )Nraw_sqlselectz"Only 'select' queries are allowed.)cleaned_datalowerstrip
startswithr   r   valuer   r   r   clean_raw_sql,   s    
zSQLSelectForm.clean_raw_sqlc                 C   s6   | j d }zt|W S  ty0   tdY n0 d S )NparamszIs not valid JSON)r   jsonloads
ValueErrorr   r"   r   r   r   clean_params4   s
    
zSQLSelectForm.clean_paramsc                 C   s"   | j d }|tvrtd| |S )NaliaszDatabase alias '%s' not found)r   r   r   r"   r   r   r   clean_alias<   s    
zSQLSelectForm.clean_aliasc                 C   s(   | j d }t|| | js$td|S )Nr   zTamper alert)r   r   r   datar   )r   r   r   r   r   
clean_hashD   s    
zSQLSelectForm.clean_hashc                 C   s   t | jd ddS )NsqlF)Zwith_toggle)r	   r   r   r   r   r   r	   L   s    zSQLSelectForm.reformat_sqlc                 C   sB   t jttjtjd}|d |d fD ]}|t| q&| S )N)key	digestmodr.   r%   )	hmacnewr   r   Z
SECRET_KEYhashlibsha1update	hexdigest)r   r,   mitemr   r   r   r   O   s    zSQLSelectForm.make_hashc                 C   s   t | jd  S )Nr*   )r   r   r/   r   r   r   
connectionU   s    zSQLSelectForm.connectionc                 C   s
   | j  S )N)r:   cursorr/   r   r   r   r;   Y   s    zSQLSelectForm.cursor)__name__
__module____qualname____doc__r   Z	CharFieldr.   r   r%   r*   Z
FloatFielddurationr   r   r$   r)   r+   r-   r	   r   propertyr:   r   r;   __classcell__r   r   r   r   r
      s$   


r
   )r4   r2   r&   djangor   Zdjango.confr   Zdjango.core.exceptionsr   Z	django.dbr   Zdjango.utils.cryptor   Zdjango.utils.encodingr   Zdjango.utils.functionalr   Zdebug_toolbar.panels.sql.utilsr	   ZFormr
   r   r   r   r   <module>   s   