|
@@ -1,42 +1,20 @@
|
|
|
-import base64
|
|
|
-import hashlib
|
|
|
-import hmac
|
|
|
import imghdr
|
|
|
from wsgiref.util import FileWrapper
|
|
|
|
|
|
-from django.conf import settings
|
|
|
from django.core.exceptions import ImproperlyConfigured, PermissionDenied
|
|
|
from django.http import HttpResponse, HttpResponsePermanentRedirect, StreamingHttpResponse
|
|
|
from django.shortcuts import get_object_or_404
|
|
|
from django.urls import reverse
|
|
|
from django.utils.decorators import classonlymethod
|
|
|
-from django.utils.encoding import force_str
|
|
|
from django.views.generic import View
|
|
|
|
|
|
from wagtail.images import get_image_model
|
|
|
from wagtail.images.exceptions import InvalidFilterSpecError
|
|
|
from wagtail.images.models import SourceImageIOError
|
|
|
+from wagtail.images.utils import generate_signature, verify_signature
|
|
|
from wagtail.utils.sendfile import sendfile
|
|
|
|
|
|
|
|
|
-def generate_signature(image_id, filter_spec, key=None):
|
|
|
- if key is None:
|
|
|
- key = settings.SECRET_KEY
|
|
|
-
|
|
|
- # Key must be a bytes object
|
|
|
- if isinstance(key, str):
|
|
|
- key = key.encode()
|
|
|
-
|
|
|
- # Based on libthumbor hmac generation
|
|
|
- # https://github.com/thumbor/libthumbor/blob/b19dc58cf84787e08c8e397ab322e86268bb4345/libthumbor/crypto.py#L50
|
|
|
- url = '{}/{}/'.format(image_id, filter_spec)
|
|
|
- return force_str(base64.urlsafe_b64encode(hmac.new(key, url.encode(), hashlib.sha1).digest()))
|
|
|
-
|
|
|
-
|
|
|
-def verify_signature(signature, image_id, filter_spec, key=None):
|
|
|
- return force_str(signature) == generate_signature(image_id, filter_spec, key=key)
|
|
|
-
|
|
|
-
|
|
|
def generate_image_url(image, filter_spec, viewname='wagtailimages_serve', key=None):
|
|
|
signature = generate_signature(image.id, filter_spec, key)
|
|
|
url = reverse(viewname, args=(signature, image.id, filter_spec))
|