Mercurial > libervia-web
changeset 388:893451e35686
server_side: display blog banner if it is defined
author | souliane <souliane@mailoo.org> |
---|---|
date | Tue, 25 Feb 2014 11:31:11 +0100 |
parents | 933bce4cb816 |
children | 2d782349b88a |
files | libervia_server/blog.py |
diffstat | 1 files changed, 28 insertions(+), 6 deletions(-) [+] |
line wrap: on
line diff
--- a/libervia_server/blog.py Tue Feb 25 07:56:05 2014 +0100 +++ b/libervia_server/blog.py Tue Feb 25 11:31:11 2014 +0100 @@ -19,13 +19,13 @@ from sat_frontends.tools.strings import addURLToText from libervia_server.html_tools import sanitizeHtml -from twisted.internet import reactor, defer +from twisted.internet import defer from twisted.web import server from twisted.web.resource import Resource from twisted.words.protocols.jabber.jid import JID from datetime import datetime -from feed import atom from constants import Const +import re class MicroBlog(Resource): @@ -65,7 +65,7 @@ d2.addCallbacks(self.render_atom_feed, self.render_error_blog, [request], None, [request, prof_found], None) self.host.bridge.getLastGroupBlogsAtom(pub_jid.userhost(), 10, 'libervia', d2.callback, d2.errback) else: - d2.addCallbacks(self.render_html_blog, self.render_error_blog, [request, prof_found], None, [request, prof_found], None) + d2.addCallbacks(self._render_html_blog, self.render_error_blog, [request, prof_found], None, [request, prof_found], None) self.host.bridge.getLastGroupBlogs(pub_jid.userhost(), 10, 'libervia', d2.callback, d2.errback) d1 = defer.Deferred() @@ -74,8 +74,30 @@ return server.NOT_DONE_YET - def render_html_blog(self, mblog_data, request, profile): + def _render_html_blog(self, mblog_data, request, profile): + """Retrieve the blog banner or other user's specific stuff before actually rendering the static blog""" + def check_banner(banner): + """Regexp from http://answers.oreilly.com/topic/280-how-to-validate-urls-with-regular-expressions/""" + if re.match(r"^(https?|ftp)://[a-z0-9-]+(\.[a-z0-9-]+)+(/[\w-]+)*/[\w-]+\.(gif|png|jpg)$", banner): + style = {'banner': banner} + else: + style = {} + self.render_html_blog(mblog_data, style, request, profile) + eb = lambda failure: self.render_error_blog(failure, request, profile) + self.host.bridge.asyncGetParamA('Blog banner', 'Misc', 'value', Const.SERVER_SECURITY_LIMIT, profile, callback=check_banner, errback=eb) + + def render_html_blog(self, mblog_data, style, request, profile): + """Actually rendering the static blog + @param mblog_data: list of microblog data + @param style: dict defining the blog's rendering parameters + @param request: the HTTP request + @profile + """ + if not isinstance(style, dict): + style = {} user = sanitizeHtml(profile).encode('utf-8') + banner = style['banner'].encode('utf-8') if 'banner' in style else '' + banner_elt = "<img src='%(banner)s' alt='%(user)s'/>" % {'user': user, 'banner': banner} if banner else user request.write(""" <html> <head> @@ -85,8 +107,8 @@ <title>%(user)s's microblog</title> </head> <body> - <div class='mblog_title'>%(user)s</div> - """ % {'user': user}) + <div class='mblog_title'>%(banner_elt)s</div> + """ % {'user': user, 'banner_elt': banner_elt}) mblog_data = sorted(mblog_data, key=lambda entry: (-float(entry.get('published', 0)))) for entry in mblog_data: timestamp = float(entry.get('published', 0))