utils: Make the embedded image code use mimetypes

This patch makes minor changes to the code that handles embedded images,
mostly to make it use mimetypes, and to remove SVG support (at least for now)
due to security concerns.

Signed-off-by: Alberto Bertogli <albertito@blitiri.com.ar>
This commit is contained in:
Alberto Bertogli 2013-11-02 19:14:36 +00:00
parent 21522f8a3a
commit a42d7da6a4

@ -18,6 +18,7 @@ except ImportError:
markdown = None markdown = None
import base64 import base64
import mimetypes
def shorten(s, width = 60): def shorten(s, width = 60):
if len(s) < 60: if len(s) < 60:
@ -56,9 +57,8 @@ def can_markdown(fname):
def can_embed_image(fname): def can_embed_image(fname):
"""True if we can embed image file in HTML, False otherwise.""" """True if we can embed image file in HTML, False otherwise."""
exts = [ 'jpg', 'jpeg', 'png', 'gif' ]
exts = [ 'jpg', 'jpeg', 'png', 'gif', 'svg' ] if '.' in fname and fname.split('.')[-1].lower() in exts:
if '.' in fname and fname.split('.')[-1] in exts:
return True return True
return False return False
@ -94,13 +94,7 @@ def markdown_blob(s):
return markdown.markdown(s) return markdown.markdown(s)
def embed_image_blob(repo, dirname, fname): def embed_image_blob(repo, dirname, fname):
ext_to_mimetype = {'jpg': 'image/jpeg', mimetype = mimetypes.guess_type(fname)[0]
'jpeg': 'image/jpeg',
'png': 'image/png',
'gif': 'image/gif',
'svg': 'image/svg+xml',}
mimetype = ext_to_mimetype[fname.split('.')[-1]]
# Unfortunately, bottle seems to require utf-8 encoded data. # Unfortunately, bottle seems to require utf-8 encoded data.
# We have to refetch the blob with raw=True, because the utf-8 encoded # We have to refetch the blob with raw=True, because the utf-8 encoded