# HG changeset patch # User Goffi # Date 1448287098 -3600 # Node ID 2b8a975ff7125812c0ee9110eb5bbe6da584941d # Parent 31b96ac3eec293d982abc2d9fc575d18d13ae3e0 plugin XEP-0277: fixed unsecure blog feed diff -r 31b96ac3eec2 -r 2b8a975ff712 src/plugins/plugin_xep_0277.py --- a/src/plugins/plugin_xep_0277.py Mon Nov 23 13:19:42 2015 +0100 +++ b/src/plugins/plugin_xep_0277.py Mon Nov 23 14:58:18 2015 +0100 @@ -17,7 +17,7 @@ # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . -from sat.core.i18n import _ +from sat.core.i18n import _, D_ from sat.core.constants import Const as C from sat.core.log import getLogger log = getLogger(__name__) @@ -859,30 +859,19 @@ node = NS_MICROBLOG items, metadata = yield self._p.getItems(service_jid, node, max_items=max_items, item_ids=item_ids, rsm_request=rsm_request, extra=extra, profile_key=profile_key) - feed = """ - - %(user)s's blogposts - - - %(id)s - %(date)s\n""" % {'user': service_jid.user, - 'feed': 'http://%s/blog/%s/atom.xml' % (service_jid.host, service_jid.user), - 'blog': 'http://%s/blog/%s' % (service_jid.host, service_jid.user), - 'id': node, - 'date': rfc3339.timestamp_from_tf(rfc3339.tf_utc())} + feed_elt = domish.Element((NS_ATOM, 'feed')) + title = D_(u"{user}'s blogposts").format(user=service_jid.user) + feed_elt.addElement('title', content=title) + link_feed_elt = feed_elt.addElement('link') + link_feed_elt['href'] = 'http://{host}/blog/{user}/atom.xml'.format( + host=urllib.quote(service_jid.host,''), + user=urllib.quote(service_jid.user,'')) + link_feed_elt['rel'] = 'self' + link_blog_elt = feed_elt.addElement('link') + link_blog_elt['href'] = 'http://{host}/blog/{user}'.format( + host=urllib.quote(service_jid.host,''), + user=urllib.quote(service_jid.user,'')) + feed_elt.addElement('id', content=node) + feed_elt.addElement('updated', rfc3339.timestamp_from_tf(rfc3339.tf_utc())) - def removeAllURIs(element): - """Recursively remove the URIs of the element and its children. - Without that, the entry would still be valid but not displayed - by Firefox nor Thunderbird (and probably more readers)""" - element.uri = element.defaultUri = None - for child in element.children: - if isinstance(child, domish.Element): - removeAllURIs(child) - - for item in items: - entry = item.firstChildElement() - removeAllURIs(entry) - feed += " " + entry.toXml() + "\n" - defer.returnValue(feed + "") - + defer.returnValue(u''+feed_elt.toXml())