mirror of
https://github.com/wagtail/wagtail.git
synced 2024-11-30 01:46:24 +01:00
Moved action validation to as_view method
This commit is contained in:
parent
231523d3f4
commit
430a3a2dae
@ -17,7 +17,7 @@ from wagtail.wagtailimages.formats import Format, get_image_format, register_ima
|
|||||||
from wagtail.wagtailimages.forms import get_image_form
|
from wagtail.wagtailimages.forms import get_image_form
|
||||||
from wagtail.wagtailimages.models import Image as WagtailImage
|
from wagtail.wagtailimages.models import Image as WagtailImage
|
||||||
from wagtail.wagtailimages.rect import Rect, Vector
|
from wagtail.wagtailimages.rect import Rect, Vector
|
||||||
from wagtail.wagtailimages.views.serve import generate_signature, verify_signature
|
from wagtail.wagtailimages.views.serve import ServeView, generate_signature, verify_signature
|
||||||
|
|
||||||
from .utils import Image, get_test_image_file
|
from .utils import Image, get_test_image_file
|
||||||
|
|
||||||
@ -273,11 +273,9 @@ class TestFrontendServeView(TestCase):
|
|||||||
|
|
||||||
self.assertRedirects(response, expected_redirect_url, status_code=301, fetch_redirect_response=False)
|
self.assertRedirects(response, expected_redirect_url, status_code=301, fetch_redirect_response=False)
|
||||||
|
|
||||||
def test_get_with_unknown_action(self):
|
def test_init_with_unknown_action_raises_error(self):
|
||||||
signature = generate_signature(self.image.id, 'fill-800x600')
|
|
||||||
|
|
||||||
with self.assertRaises(ImproperlyConfigured):
|
with self.assertRaises(ImproperlyConfigured):
|
||||||
self.client.get(reverse('wagtailimages_serve_action_unknown', args=(signature, self.image.id, 'fill-800x600')))
|
ServeView.as_view(action='unknown')
|
||||||
|
|
||||||
def test_get_with_custom_key(self):
|
def test_get_with_custom_key(self):
|
||||||
"""
|
"""
|
||||||
|
@ -8,6 +8,5 @@ from wagtail.wagtailimages.views.serve import ServeView
|
|||||||
urlpatterns = [
|
urlpatterns = [
|
||||||
url(r'^actions/serve/(.*)/(\d*)/(.*)/[^/]*', ServeView.as_view(action='serve'), name='wagtailimages_serve_action_serve'),
|
url(r'^actions/serve/(.*)/(\d*)/(.*)/[^/]*', ServeView.as_view(action='serve'), name='wagtailimages_serve_action_serve'),
|
||||||
url(r'^actions/redirect/(.*)/(\d*)/(.*)/[^/]*', ServeView.as_view(action='redirect'), name='wagtailimages_serve_action_redirect'),
|
url(r'^actions/redirect/(.*)/(\d*)/(.*)/[^/]*', ServeView.as_view(action='redirect'), name='wagtailimages_serve_action_redirect'),
|
||||||
url(r'^actions/unknown/(.*)/(\d*)/(.*)/[^/]*', ServeView.as_view(action='unknown'), name='wagtailimages_serve_action_unknown'),
|
|
||||||
url(r'^custom_key/(.*)/(\d*)/(.*)/[^/]*', ServeView.as_view(key='custom'), name='wagtailimages_serve_custom_key'),
|
url(r'^custom_key/(.*)/(\d*)/(.*)/[^/]*', ServeView.as_view(key='custom'), name='wagtailimages_serve_custom_key'),
|
||||||
]
|
]
|
||||||
|
@ -10,6 +10,7 @@ from django.conf import settings
|
|||||||
from django.core.exceptions import ImproperlyConfigured, PermissionDenied
|
from django.core.exceptions import ImproperlyConfigured, PermissionDenied
|
||||||
from django.http import HttpResponse, HttpResponsePermanentRedirect, StreamingHttpResponse
|
from django.http import HttpResponse, HttpResponsePermanentRedirect, StreamingHttpResponse
|
||||||
from django.shortcuts import get_object_or_404
|
from django.shortcuts import get_object_or_404
|
||||||
|
from django.utils.decorators import classonlymethod
|
||||||
from django.utils.six import text_type
|
from django.utils.six import text_type
|
||||||
from django.views.generic import View
|
from django.views.generic import View
|
||||||
|
|
||||||
@ -40,6 +41,14 @@ class ServeView(View):
|
|||||||
action = 'serve'
|
action = 'serve'
|
||||||
key = None
|
key = None
|
||||||
|
|
||||||
|
@classonlymethod
|
||||||
|
def as_view(cls, **initkwargs):
|
||||||
|
if 'action' in initkwargs:
|
||||||
|
if initkwargs['action'] not in ['serve', 'redirect']:
|
||||||
|
raise ImproperlyConfigured("ServeView action must be either 'serve' or 'redirect'")
|
||||||
|
|
||||||
|
return super(ServeView, cls).as_view(**initkwargs)
|
||||||
|
|
||||||
def get(self, request, signature, image_id, filter_spec):
|
def get(self, request, signature, image_id, filter_spec):
|
||||||
if not verify_signature(signature.encode(), image_id, filter_spec, key=self.key):
|
if not verify_signature(signature.encode(), image_id, filter_spec, key=self.key):
|
||||||
raise PermissionDenied
|
raise PermissionDenied
|
||||||
@ -63,8 +72,6 @@ class ServeView(View):
|
|||||||
elif self.action == 'redirect':
|
elif self.action == 'redirect':
|
||||||
# Redirect to the file's public location
|
# Redirect to the file's public location
|
||||||
return HttpResponsePermanentRedirect(rendition.url)
|
return HttpResponsePermanentRedirect(rendition.url)
|
||||||
else:
|
|
||||||
raise ImproperlyConfigured("ServeView action must be either 'serve' or 'redirect'")
|
|
||||||
|
|
||||||
|
|
||||||
serve = ServeView.as_view()
|
serve = ServeView.as_view()
|
||||||
|
Loading…
Reference in New Issue
Block a user