î
à^Q\¨
  ã               @   s×   d  d l  m Z m Z 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 Gd d „  d e j ƒ Z d S)é    )Úabsolute_importÚunicode_literalsN)Úforms)Úsettings)ÚValidationError)Úconnections)Úconstant_time_compare)Úforce_bytes)Úcached_property)Úreformat_sqlc                   sè   e  Z d  Z d Z e j ƒ  Z e j ƒ  Z e j ƒ  Z e j d d d d ƒ Z	 e j
 ƒ  Z e j ƒ  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 ‡  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
    ÚrequiredFÚinitialÚdefaultc                s{   | j  d d  ƒ } | d  k	 r4 |  j | ƒ | d <n  t t |  ƒ j | | Ž  x' |  j D] } t j ƒ  |  j | _ qW Wd  S)Nr   Úhash)	ÚgetÚ	make_hashÚsuperr   Ú__init__Úfieldsr   ZHiddenInputZwidget)ÚselfÚargsÚkwargsr   Úname)Ú	__class__© úR/var/www/dbchiro/venv/build/django-debug-toolbar/debug_toolbar/panels/sql/forms.pyr   #   s    zSQLSelectForm.__init__c             C   s;   |  j  d } | j ƒ  j ƒ  j d ƒ s7 t d ƒ ‚ n  | 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   sC   |  j  d } y t j | ƒ SWn t k
 r> t d ƒ ‚ Yn Xd  S)NÚparamszIs not valid JSON)r   ÚjsonÚloadsÚ
ValueErrorr   )r   r#   r   r   r   Úclean_params6   s
    zSQLSelectForm.clean_paramsc             C   s0   |  j  d } | t k r, t d | ƒ ‚ n  | S)NÚaliaszDatabase alias '%s' not found)r   r   r   )r   r#   r   r   r   Úclean_alias>   s    zSQLSelectForm.clean_aliasc             C   s;   |  j  d } t | |  j |  j ƒ ƒ s7 t d ƒ ‚ n  | S)Nr   zTamper alert)r   r   r   Údatar   )r   r   r   r   r   Ú
clean_hashF   s    zSQLSelectForm.clean_hashc             C   s   t  |  j d ƒ S)NÚsql)r   r   )r   r   r   r   r   N   s    zSQLSelectForm.reformat_sqlc             C   s`   t  j d t t j ƒ d t j ƒ } x/ | d | d g D] } | j t | ƒ ƒ q9 W| j ƒ  S)NÚkeyZ	digestmodr.   r%   )	ÚhmacÚnewr	   r   Z
SECRET_KEYÚhashlibÚsha1ÚupdateÚ	hexdigest)r   r,   ÚmÚitemr   r   r   r   Q   s    $zSQLSelectForm.make_hashc             C   s   t  |  j d S)Nr*   )r   r   )r   r   r   r   Ú
connectionW   s    zSQLSelectForm.connectionc             C   s   |  j  j ƒ  S)N)r8   Úcursor)r   r   r   r   r9   [   s    zSQLSelectForm.cursor)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   Z	CharFieldr.   r   r%   r*   Z
FloatFieldÚdurationr   r   r$   r)   r+   r-   r   r   Úpropertyr8   r
   r9   r   r   )r   r   r      s    	r   )Ú
__future__r   r   r2   r0   r&   Z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   