Use etags with cached avatars

merge-requests/30/head
Bob Mottram 2020-04-13 21:57:18 +01:00
parent 377c47740b
commit 94bb081428
1 changed files with 34 additions and 11 deletions

View File

@ -1642,6 +1642,11 @@ class PubServer(BaseHTTPRequestHandler):
mediaFilename = \ mediaFilename = \
self.server.baseDir + '/sharefiles/' + mediaStr self.server.baseDir + '/sharefiles/' + mediaStr
if os.path.isfile(mediaFilename): if os.path.isfile(mediaFilename):
if self._etag_exists(mediaFilename):
# The file has not changed
self._304()
return
mediaFileType = 'png' mediaFileType = 'png'
if mediaFilename.endswith('.png'): if mediaFilename.endswith('.png'):
mediaFileType = 'png' mediaFileType = 'png'
@ -1653,9 +1658,10 @@ class PubServer(BaseHTTPRequestHandler):
mediaFileType = 'gif' mediaFileType = 'gif'
with open(mediaFilename, 'rb') as avFile: with open(mediaFilename, 'rb') as avFile:
mediaBinary = avFile.read() mediaBinary = avFile.read()
self._set_headers('image/' + mediaFileType, self._set_headers_etag(mediaFilename,
len(mediaBinary), 'image/' + mediaFileType,
cookie, callingDomain) mediaBinary, cookie,
callingDomain)
self._write(mediaBinary) self._write(mediaBinary)
return return
self._404() self._404()
@ -1704,21 +1710,38 @@ class PubServer(BaseHTTPRequestHandler):
mediaFilename = \ mediaFilename = \
self.server.baseDir + '/cache/' + self.path self.server.baseDir + '/cache/' + self.path
if os.path.isfile(mediaFilename): if os.path.isfile(mediaFilename):
if self._etag_exists(mediaFilename):
# The file has not changed
self._304()
return
with open(mediaFilename, 'rb') as avFile: with open(mediaFilename, 'rb') as avFile:
mediaBinary = avFile.read() mediaBinary = avFile.read()
if mediaFilename.endswith('.png'): if mediaFilename.endswith('.png'):
self._set_headers('image/png', len(mediaBinary), self._set_headers_etag(mediaFilename,
cookie, callingDomain) 'image/png',
mediaBinary, cookie,
callingDomain)
elif mediaFilename.endswith('.jpg'): elif mediaFilename.endswith('.jpg'):
self._set_headers('image/jpeg', len(mediaBinary), self._set_headers_etag(mediaFilename,
cookie, callingDomain) 'image/jpeg',
mediaBinary, cookie,
callingDomain)
elif mediaFilename.endswith('.gif'): elif mediaFilename.endswith('.gif'):
self._set_headers('image/gif', len(mediaBinary), self._set_headers_etag(mediaFilename,
cookie, callingDomain) 'image/gif',
mediaBinary, cookie,
callingDomain)
elif mediaFilename.endswith('.webp'):
self._set_headers_etag(mediaFilename,
'image/webp',
mediaBinary, cookie,
callingDomain)
else: else:
# default to jpeg # default to jpeg
self._set_headers('image/jpeg', len(mediaBinary), self._set_headers_etag(mediaFilename,
cookie, callingDomain) 'image/jpeg',
mediaBinary, cookie,
callingDomain)
# self._404() # self._404()
return return
self._write(mediaBinary) self._write(mediaBinary)