From 689b802fbca41a5fc7f846b0c462fe1ac320884f Mon Sep 17 00:00:00 2001 From: bashmak Date: Fri, 25 May 2018 17:31:12 +0300 Subject: [PATCH] Fix bug when create new task --- djing/__init__.py | 15 ++++++++++++++- taskapp/views.py | 7 ++++++- 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/djing/__init__.py b/djing/__init__.py index 68af668..ad2964a 100644 --- a/djing/__init__.py +++ b/djing/__init__.py @@ -2,10 +2,14 @@ import os import re import importlib import typing as t +from urllib.parse import unquote -from django.shortcuts import _get_queryset +from django.http import HttpResponseRedirect, HttpResponse from netaddr import mac_unix, mac_eui48 +from django.shortcuts import _get_queryset +from django.utils.http import is_safe_url + MAC_ADDR_REGEX = r'^([0-9A-Fa-f]{1,2}[:-]){5}([0-9A-Fa-f]{1,2})$' IP_ADDR_REGEX = r'^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.' \ @@ -76,3 +80,12 @@ _JSONType_1 = t.Union[str, int, float, bool, None, t.Dict[str, _JSONType_0], t.L _JSONType_2 = t.Union[str, int, float, bool, None, t.Dict[str, _JSONType_1], t.List[_JSONType_1]] _JSONType_3 = t.Union[str, int, float, bool, None, t.Dict[str, _JSONType_2], t.List[_JSONType_2]] JSONType = t.Union[str, int, float, bool, None, t.Dict[str, _JSONType_3], t.List[_JSONType_3]] + + +def httpresponse_to_referrer(request): + next = request.META.get('HTTP_REFERER') + if next: + next = unquote(next) + if not is_safe_url(url=next, allowed_hosts={request.get_host()}, require_https=request.is_secure()): + next = '/' + return HttpResponseRedirect(next) if next else HttpResponse(status=204) diff --git a/taskapp/views.py b/taskapp/views.py index 970bb01..949e521 100644 --- a/taskapp/views.py +++ b/taskapp/views.py @@ -17,6 +17,7 @@ from django.views.generic.edit import FormMixin, DeleteView, UpdateView from guardian.decorators import permission_required_or_403 as permission_required from chatbot.models import MessageQueue from abonapp.models import Abon +from djing import httpresponse_to_referrer from .handle import TaskException from .models import Task, ExtraComment from mydefs import only_admins, safe_int, MultipleException, RuTimedelta @@ -137,7 +138,11 @@ class TaskUpdateView(UpdateView): else: if not request.user.has_perm('taskapp.change_task'): raise PermissionDenied - return super(TaskUpdateView, self).dispatch(request, *args, **kwargs) + try: + return super(TaskUpdateView, self).dispatch(request, *args, **kwargs) + except TaskException as e: + messages.error(request, e) + return httpresponse_to_referrer(request) def get_form_kwargs(self): kwargs = super(TaskUpdateView, self).get_form_kwargs()