import http.client
import ipaddress
import logging
+import magic
+import mimetypes
import time
import tornado.locale
import tornado.web
except KeyError:
return None
+ # Initialize libmagic
+ magic = magic.Magic(mime=True, uncompress=True)
+
+ # File
+
+ def _deliver_file(self, data, filename=None, prefix=None):
+ # Guess content type
+ mimetype = self.magic.from_buffer(data)
+
+ # Send the mimetype
+ self.set_header("Content-Type", mimetype or "application/octet-stream")
+
+ # Fetch the file extension
+ if not filename and prefix:
+ ext = mimetypes.guess_extension(mimetype)
+
+ # Compose a new filename
+ filename = "%s%s" % (prefix, ext)
+
+ # Set filename
+ if filename:
+ self.set_header("Content-Disposition", "inline; filename=\"%s\"" % filename)
+
+ # Set size
+ if data:
+ self.set_header("Content-Length", len(data))
+
+ # Deliver payload
+ self.finish(data)
+
# Login stuff
def get_current_user(self):
else:
blob = file.blob
- # Set headers
- self.set_header("Content-Type", file.mimetype or "application/octet-stream")
- self.set_header("Content-Length", len(blob))
-
# Set expires
self.set_expires(3600)
- # Deliver content
- self.finish(blob)
+ # Send the payload
+ self._deliver_file(blob, filename=file.filename)
class EditHandler(base.BaseHandler):
import io
import ldap
import logging
-import magic
-import mimetypes
import os.path
import tornado.web
# Generate a random avatar with only one letter
avatar = await self._get_avatar(account, size=size, format=format)
- m = magic.Magic(mime=True, uncompress=True)
-
- # Guess content type
- mimetype = m.from_buffer(avatar)
-
- # Fetch the file extension
- ext = mimetypes.guess_extension(mimetype)
-
- # Set headers about content
- self.set_header("Content-Disposition", "inline; filename=\"%s%s\"" % (account.uid, ext))
- if mimetype:
- self.set_header("Content-Type", mimetype)
-
- # Deliver payload
- self.finish(avatar)
+ # Deliver the data
+ self._deliver_file(avatar, prefix=account.uid)
async def _get_avatar(self, account, size=None, format=None, **args):
letters = account.initials