From 2709f73f9415b5888c2f5dd09b0c41f1c1968a34 Mon Sep 17 00:00:00 2001 From: Helmut Merz Date: Thu, 22 Sep 2011 08:51:35 +0200 Subject: [PATCH] allow for images that exceed maximum allowed widht or height if the total number of pixels does not exceed a limit given as the third element in the list for 'media.unauthorized_max_size' --- browser/resource.py | 17 +++++++++++------ media/browser/asset.py | 5 ++++- 2 files changed, 15 insertions(+), 7 deletions(-) diff --git a/browser/resource.py b/browser/resource.py index 9d499eb..88125da 100644 --- a/browser/resource.py +++ b/browser/resource.py @@ -48,7 +48,7 @@ from loops.browser.concept import BaseRelationView, ConceptRelationView from loops.browser.concept import ConceptConfigureView from loops.browser.node import NodeView, node_macros from loops.common import adapted, NameChooser -from loops.interfaces import IBaseResource, IDocument, IMediaAsset, ITextDocument +from loops.interfaces import IBaseResource, IDocument, ITextDocument from loops.interfaces import IMediaAsset as legacy_IMediaAsset from loops.interfaces import ITypeConcept from loops.media.interfaces import IMediaAsset @@ -179,13 +179,21 @@ class ResourceView(BaseView): # if self.adapted.isProtected(): # raise Unauthorized() context = self.context + ct = context.contentType + response = self.request.response self.recordAccess('show', target=self.uniqueId) + if ct.startswith('image/'): + #response.setHeader('Cache-Control', 'public,max-age=86400') + response.setHeader('Cache-Control', 'max-age=86400') + adobj = adapted(context) + if IMediaAsset.providedBy(adobj): + from loops.media.browser.asset import MediaAssetView + view = MediaAssetView(context, self.request) + return view.show(useAttachment) ti = IType(context).typeInterface if ti is not None: context = ti(context) data = context.data - response = self.request.response - ct = context.contentType if useAttachment: filename = adapted(self.context).localFilename or getName(self.context) filename = NameChooser(getParent(self.context)).normalizeName(filename) @@ -195,9 +203,6 @@ class ResourceView(BaseView): if ct.startswith('text/') and not useAttachment: response.setHeader('Content-Type', 'text/html') return self.renderText(data, ct) - if ct.startswith('image/') and not useAttachment: - #response.setHeader('Cache-Control', 'public,max-age=86400') - response.setHeader('Cache-Control', 'max-age=86400') response.setHeader('Content-Type', ct) # set Last-Modified header modified = self.modifiedRaw diff --git a/media/browser/asset.py b/media/browser/asset.py index 8797b46..630a1c8 100644 --- a/media/browser/asset.py +++ b/media/browser/asset.py @@ -76,9 +76,12 @@ class MediaAssetView(ResourceView): maxSize = self.typeOptions('media.unauthorized_max_size') if maxSize: (w, h) = self.adapted.getImageSize(data=data) + if len(maxSize) > 2 and maxSize[2]: + if w * h <= int(maxSize[2]): # number of pixels + return True if w > int(maxSize[0]): return False - if len(maxSize) > 1 and h > int(maxSize[1]): + if len(maxSize) > 1 and maxSize[1] and h > int(maxSize[1]): return False return True