Check that fonts and favicon are delivered on html requests

main
Bob Mottram 2020-05-29 13:53:58 +01:00
parent 41feec3c1e
commit c321c00e44
1 changed files with 80 additions and 80 deletions

160
daemon.py
View File

@ -1103,8 +1103,87 @@ class PubServer(BaseHTTPRequestHandler):
if self.headers.get('Cookie'):
cookie = self.headers['Cookie']
self._benchmarkGETtimings(GETstartTime, GETtimings, 4)
# check authorization
authorized = self._isAuthorized()
if self.server.debug:
if authorized:
print('GET Authorization granted')
else:
print('GET Not authorized')
self._benchmarkGETtimings(GETstartTime, GETtimings, 5)
if not self.server.session:
print('Starting new session')
self.server.session = createSession(self.server.useTor)
self._benchmarkGETtimings(GETstartTime, GETtimings, 6)
# is this a html request?
htmlGET = False
if self.headers.get('Accept'):
if self._requestHTTP():
htmlGET = True
else:
if self.headers.get('Connection'):
# https://developer.mozilla.org/en-US/
# docs/Web/HTTP/Protocol_upgrade_mechanism
if self.headers.get('Upgrade'):
print('HTTP Connection request: ' +
self.headers['Upgrade'])
else:
print('HTTP Connection request: ' +
self.headers['Connection'])
self._200()
else:
print('WARN: No Accept header ' + str(self.headers))
self._400()
return
# favicon image
if htmlGET and '/favicon.ico' in self.path:
# custom favicon
faviconFilename = \
self.server.baseDir + '/favicon.ico'
if not os.path.isfile(faviconFilename):
# default favicon
faviconFilename = \
self.server.baseDir + '/img/icons/favicon.ico'
print('favicon: ' + faviconFilename)
if self._etag_exists(faviconFilename):
print('favicon etag exists')
# The file has not changed
self._304()
return
if self.server.iconsCache.get('favicon.ico'):
favBinary = self.server.iconsCache['favicon.ico']
self._set_headers_etag(faviconFilename,
'image/x-icon',
favBinary, cookie,
callingDomain)
self._write(favBinary)
print('favicon sent from cache')
return
else:
if os.path.isfile(faviconFilename):
print('favicon image file exists')
with open(faviconFilename, 'rb') as favFile:
favBinary = favFile.read()
self._set_headers_etag(faviconFilename,
'image/x-icon',
favBinary, cookie,
callingDomain)
self._write(favBinary)
self.server.iconsCache['favicon.ico'] = favBinary
print('favicon sent')
return
self._404()
return
# get fonts
if '/fonts/' in self.path:
if htmlGET and '/fonts/' in self.path:
fontStr = self.path.split('/fonts/')[1]
if fontStr.endswith('.otf') or \
fontStr.endswith('.ttf') or \
@ -1146,45 +1225,6 @@ class PubServer(BaseHTTPRequestHandler):
self._404()
return
self._benchmarkGETtimings(GETstartTime, GETtimings, 4)
# check authorization
authorized = self._isAuthorized()
if self.server.debug:
if authorized:
print('GET Authorization granted')
else:
print('GET Not authorized')
self._benchmarkGETtimings(GETstartTime, GETtimings, 5)
if not self.server.session:
print('Starting new session')
self.server.session = createSession(self.server.useTor)
self._benchmarkGETtimings(GETstartTime, GETtimings, 6)
# is this a html request?
htmlGET = False
if self.headers.get('Accept'):
if self._requestHTTP():
htmlGET = True
else:
if self.headers.get('Connection'):
# https://developer.mozilla.org/en-US/
# docs/Web/HTTP/Protocol_upgrade_mechanism
if self.headers.get('Upgrade'):
print('HTTP Connection request: ' +
self.headers['Upgrade'])
else:
print('HTTP Connection request: ' +
self.headers['Connection'])
self._200()
else:
print('WARN: No Accept header ' + str(self.headers))
self._400()
return
self._benchmarkGETtimings(GETstartTime, GETtimings, 7)
# treat shared inbox paths consistently
@ -1815,46 +1855,6 @@ class PubServer(BaseHTTPRequestHandler):
self._404()
return
# favicon image
if '/favicon.ico' in self.path:
# custom favicon
faviconFilename = \
self.server.baseDir + '/favicon.ico'
if not os.path.isfile(faviconFilename):
# default favicon
faviconFilename = \
self.server.baseDir + '/img/icons/favicon.ico'
print('favicon: ' + faviconFilename)
if self._etag_exists(faviconFilename):
print('favicon etag exists')
# The file has not changed
self._304()
return
if self.server.iconsCache.get('favicon.ico'):
favBinary = self.server.iconsCache['favicon.ico']
self._set_headers_etag(faviconFilename,
'image/x-icon',
favBinary, cookie,
callingDomain)
self._write(favBinary)
print('favicon sent from cache')
return
else:
if os.path.isfile(faviconFilename):
print('favicon image file exists')
with open(faviconFilename, 'rb') as favFile:
favBinary = favFile.read()
self._set_headers_etag(faviconFilename,
'image/x-icon',
favBinary, cookie,
callingDomain)
self._write(favBinary)
self.server.iconsCache['favicon.ico'] = favBinary
print('favicon sent')
return
self._404()
return
self._benchmarkGETtimings(GETstartTime, GETtimings, 22)
# cached avatar images