Skip to content

Remove signed_data_view decorator to support url type checking. #1658

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 2 commits into from
Aug 4, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 1 addition & 19 deletions debug_toolbar/decorators.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import functools

from django.http import Http404, HttpResponseBadRequest
from django.http import Http404


def require_show_toolbar(view):
Expand All @@ -15,21 +15,3 @@ def inner(request, *args, **kwargs):
return view(request, *args, **kwargs)

return inner


def signed_data_view(view):
"""Decorator that handles unpacking a signed data form"""

@functools.wraps(view)
def inner(request, *args, **kwargs):
from debug_toolbar.forms import SignedDataForm

data = request.GET if request.method == "GET" else request.POST
signed_form = SignedDataForm(data)
if signed_form.is_valid():
return view(
request, *args, verified_data=signed_form.verified_data(), **kwargs
)
return HttpResponseBadRequest("Invalid signature")

return inner
1 change: 0 additions & 1 deletion debug_toolbar/forms.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,6 @@ class PanelForm(forms.Form):
panel_form = PanelForm(signed_form.verified_data)
if panel_form.is_valid():
# Success
Or wrap the FBV with ``debug_toolbar.decorators.signed_data_view``
"""

salt = "django_debug_toolbar"
Expand Down
30 changes: 23 additions & 7 deletions debug_toolbar/panels/sql/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,15 +2,27 @@
from django.template.loader import render_to_string
from django.views.decorators.csrf import csrf_exempt

from debug_toolbar.decorators import require_show_toolbar, signed_data_view
from debug_toolbar.decorators import require_show_toolbar
from debug_toolbar.forms import SignedDataForm
from debug_toolbar.panels.sql.forms import SQLSelectForm


def get_signed_data(request):
"""Unpack a signed data form, if invalid returns None"""
data = request.GET if request.method == "GET" else request.POST
signed_form = SignedDataForm(data)
if signed_form.is_valid():
return signed_form.verified_data()
return None


@csrf_exempt
@require_show_toolbar
@signed_data_view
def sql_select(request, verified_data):
def sql_select(request):
"""Returns the output of the SQL SELECT statement"""
verified_data = get_signed_data(request)
if not verified_data:
return HttpResponseBadRequest("Invalid signature")
form = SQLSelectForm(verified_data)

if form.is_valid():
Expand All @@ -35,9 +47,11 @@ def sql_select(request, verified_data):

@csrf_exempt
@require_show_toolbar
@signed_data_view
def sql_explain(request, verified_data):
def sql_explain(request):
"""Returns the output of the SQL EXPLAIN on the given query"""
verified_data = get_signed_data(request)
if not verified_data:
return HttpResponseBadRequest("Invalid signature")
form = SQLSelectForm(verified_data)

if form.is_valid():
Expand Down Expand Up @@ -71,9 +85,11 @@ def sql_explain(request, verified_data):

@csrf_exempt
@require_show_toolbar
@signed_data_view
def sql_profile(request, verified_data):
def sql_profile(request):
"""Returns the output of running the SQL and getting the profiling statistics"""
verified_data = get_signed_data(request)
if not verified_data:
return HttpResponseBadRequest("Invalid signature")
form = SQLSelectForm(verified_data)

if form.is_valid():
Expand Down
6 changes: 6 additions & 0 deletions docs/changes.rst
Original file line number Diff line number Diff line change
@@ -1,6 +1,12 @@
Change log
==========

Pending
-------

* Remove decorator ``signed_data_view`` as it was causing issues with
`django-urlconfchecks <https://github.com/AliSayyah/django-urlconfchecks/>`__.

3.5.0 (2022-06-23)
------------------

Expand Down