diff options
| -rw-r--r-- | debug_toolbar/middleware.py | 4 | ||||
| -rw-r--r-- | debug_toolbar/urls.py | 12 | ||||
| -rw-r--r-- | debug_toolbar/views.py | 17 | 
3 files changed, 23 insertions, 10 deletions
| diff --git a/debug_toolbar/middleware.py b/debug_toolbar/middleware.py index 8dcf454..c3cf5f9 100644 --- a/debug_toolbar/middleware.py +++ b/debug_toolbar/middleware.py @@ -8,6 +8,8 @@ from django.utils.encoding import smart_unicode  from django.conf.urls.defaults import include, patterns  import debug_toolbar.urls  from debug_toolbar.toolbar.loader import DebugToolbar +from debug_toolbar.urls import DEBUG_TB_URL_PREFIX +import os  _HTML_TYPES = ('text/html', 'application/xhtml+xml') @@ -37,7 +39,7 @@ class DebugToolbarMiddleware(object):      def show_toolbar(self, request):          if not settings.DEBUG:              return False -        if request.is_ajax(): +        if request.is_ajax() and not request.path.startswith(os.path.join('/', DEBUG_TB_URL_PREFIX)): #Allow ajax requests from the debug toolbar              return False          if not request.META.get('REMOTE_ADDR') in settings.INTERNAL_IPS:              return False diff --git a/debug_toolbar/urls.py b/debug_toolbar/urls.py index 77d1a80..05233e2 100644 --- a/debug_toolbar/urls.py +++ b/debug_toolbar/urls.py @@ -7,10 +7,12 @@ this into the urlconf for the request.  from django.conf.urls.defaults import *  from django.conf import settings +DEBUG_TB_URL_PREFIX = '__debug__' +  urlpatterns = patterns('', -    url(r'^__debug__/m/(.*)$', 'debug_toolbar.views.debug_media'), -    url(r'^__debug__/sql_select/$', 'debug_toolbar.views.sql_select', name='sql_select'), -    url(r'^__debug__/sql_explain/$', 'debug_toolbar.views.sql_explain', name='sql_explain'), -    url(r'^__debug__/sql_profile/$', 'debug_toolbar.views.sql_profile', name='sql_profile'), -    url(r'^__debug__/template_source/$', 'debug_toolbar.views.template_source', name='template_source'), +    url(r'^%s/m/(.*)$' % DEBUG_TB_URL_PREFIX, 'debug_toolbar.views.debug_media'), +    url(r'^%s/sql_select/$' % DEBUG_TB_URL_PREFIX, 'debug_toolbar.views.sql_select', name='sql_select'), +    url(r'^%s/sql_explain/$' % DEBUG_TB_URL_PREFIX, 'debug_toolbar.views.sql_explain', name='sql_explain'), +    url(r'^%s/sql_profile/$' % DEBUG_TB_URL_PREFIX, 'debug_toolbar.views.sql_profile', name='sql_profile'), +    url(r'^%s/template_source/$' % DEBUG_TB_URL_PREFIX, 'debug_toolbar.views.template_source', name='template_source'),  ) diff --git a/debug_toolbar/views.py b/debug_toolbar/views.py index e3bb5b1..0fb4168 100644 --- a/debug_toolbar/views.py +++ b/debug_toolbar/views.py @@ -8,11 +8,17 @@ import os  import django.views.static  from django.conf import settings  from django.db import connection -from django.http import HttpResponse, HttpResponseBadRequest +from django.http import HttpResponseBadRequest  from django.shortcuts import render_to_response  from django.utils import simplejson  from django.utils.hashcompat import sha_constructor +class InvalidSQLError(Exception): +    def __init__(self, value): +        self.value = value +    def __str__(self): +        return repr(self.value) +      def debug_media(request, path):      root = getattr(settings, 'DEBUG_TOOLBAR_MEDIA_ROOT', None)      if root is None: @@ -36,7 +42,7 @@ def sql_select(request):      hash = sha_constructor(settings.SECRET_KEY + sql + params).hexdigest()      if hash != request.GET.get('hash', ''):          return HttpResponseBadRequest('Tamper alert') # SQL Tampering alert -    if sql.lower().startswith('select'): +    if sql.lower().strip().startswith('select'):          params = simplejson.loads(params)          cursor = connection.cursor()          cursor.execute(sql, params) @@ -50,6 +56,7 @@ def sql_select(request):              'headers': headers,          }          return render_to_response('debug_toolbar/panels/sql_select.html', context) +    raise InvalidSQLError("Only 'select' queries are allowed.")  def sql_explain(request):      """ @@ -67,7 +74,7 @@ def sql_explain(request):      hash = sha_constructor(settings.SECRET_KEY + sql + params).hexdigest()      if hash != request.GET.get('hash', ''):          return HttpResponseBadRequest('Tamper alert') # SQL Tampering alert -    if sql.lower().startswith('select'): +    if sql.lower().strip().startswith('select'):          params = simplejson.loads(params)          cursor = connection.cursor()          cursor.execute("EXPLAIN %s" % (sql,), params) @@ -81,6 +88,7 @@ def sql_explain(request):              'headers': headers,          }          return render_to_response('debug_toolbar/panels/sql_explain.html', context) +    raise InvalidSQLError("Only 'select' queries are allowed.")  def sql_profile(request):      """ @@ -98,7 +106,7 @@ def sql_profile(request):      hash = sha_constructor(settings.SECRET_KEY + sql + params).hexdigest()      if hash != request.GET.get('hash', ''):          return HttpResponseBadRequest('Tamper alert') # SQL Tampering alert -    if sql.lower().startswith('select'): +    if sql.lower().strip().startswith('select'):          params = simplejson.loads(params)          cursor = connection.cursor()          cursor.execute("SET PROFILING=1") # Enable profiling @@ -116,6 +124,7 @@ def sql_profile(request):              'headers': headers,          }          return render_to_response('debug_toolbar/panels/sql_explain.html', context) +    raise InvalidSQLError("Only 'select' queries are allowed.")  def template_source(request):      """ | 
