annotate libervia/server/blog.py @ 1386:83be300d17e3

browser (invitations): handle Pubsub invitation
author Goffi <goffi@goffi.org>
date Sat, 20 Feb 2021 13:58:42 +0100
parents f511f8fbbf8a
children 822bd0139769
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1239
f511f8fbbf8a fixed shebangs
Goffi <goffi@goffi.org>
parents: 1238
diff changeset
1 #!/usr/bin/env python3
f511f8fbbf8a fixed shebangs
Goffi <goffi@goffi.org>
parents: 1238
diff changeset
2
10
c28a4840e1a8 server: microblog resource
Goffi <goffi@goffi.org>
parents:
diff changeset
3
339
2067d6241927 fixed docstrings wrong usage for licence informations
Goffi <goffi@goffi.org>
parents: 331
diff changeset
4 # Libervia: a Salut à Toi frontend
1237
987595a254b0 dates update
Goffi <goffi@goffi.org>
parents: 1216
diff changeset
5 # Copyright (C) 2011-2020 Jérôme Poisson <goffi@goffi.org>
818
f8a7a046ff9c copyright update
Goffi <goffi@goffi.org>
parents: 786
diff changeset
6 # Copyright (C) 2013-2016 Adrien Cossa <souliane@mailoo.org>
10
c28a4840e1a8 server: microblog resource
Goffi <goffi@goffi.org>
parents:
diff changeset
7
339
2067d6241927 fixed docstrings wrong usage for licence informations
Goffi <goffi@goffi.org>
parents: 331
diff changeset
8 # This program is free software: you can redistribute it and/or modify
2067d6241927 fixed docstrings wrong usage for licence informations
Goffi <goffi@goffi.org>
parents: 331
diff changeset
9 # it under the terms of the GNU Affero General Public License as published by
2067d6241927 fixed docstrings wrong usage for licence informations
Goffi <goffi@goffi.org>
parents: 331
diff changeset
10 # the Free Software Foundation, either version 3 of the License, or
2067d6241927 fixed docstrings wrong usage for licence informations
Goffi <goffi@goffi.org>
parents: 331
diff changeset
11 # (at your option) any later version.
10
c28a4840e1a8 server: microblog resource
Goffi <goffi@goffi.org>
parents:
diff changeset
12
339
2067d6241927 fixed docstrings wrong usage for licence informations
Goffi <goffi@goffi.org>
parents: 331
diff changeset
13 # This program is distributed in the hope that it will be useful,
2067d6241927 fixed docstrings wrong usage for licence informations
Goffi <goffi@goffi.org>
parents: 331
diff changeset
14 # but WITHOUT ANY WARRANTY; without even the implied warranty of
2067d6241927 fixed docstrings wrong usage for licence informations
Goffi <goffi@goffi.org>
parents: 331
diff changeset
15 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
2067d6241927 fixed docstrings wrong usage for licence informations
Goffi <goffi@goffi.org>
parents: 331
diff changeset
16 # GNU Affero General Public License for more details.
10
c28a4840e1a8 server: microblog resource
Goffi <goffi@goffi.org>
parents:
diff changeset
17
339
2067d6241927 fixed docstrings wrong usage for licence informations
Goffi <goffi@goffi.org>
parents: 331
diff changeset
18 # You should have received a copy of the GNU Affero General Public License
2067d6241927 fixed docstrings wrong usage for licence informations
Goffi <goffi@goffi.org>
parents: 331
diff changeset
19 # along with this program. If not, see <http://www.gnu.org/licenses/>.
10
c28a4840e1a8 server: microblog resource
Goffi <goffi@goffi.org>
parents:
diff changeset
20
586
3eb3a2c0c011 browser and server side: uses RSM (XEP-0059)
souliane <souliane@mailoo.org>
parents: 487
diff changeset
21 from sat.core.i18n import _, D_
847
330db23d4a44 server (blog): call fixXHTMLLinks on XHTML content
souliane <souliane@mailoo.org>
parents: 831
diff changeset
22 from sat_frontends.tools.strings import addURLToText, fixXHTMLLinks
483
0bbbef1d53a8 server side (blog): use user's avatar a the blog's favicon + small refactorization
souliane <souliane@mailoo.org>
parents: 481
diff changeset
23 from sat.core.log import getLogger
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
24
483
0bbbef1d53a8 server side (blog): use user's avatar a the blog's favicon + small refactorization
souliane <souliane@mailoo.org>
parents: 481
diff changeset
25 log = getLogger(__name__)
898
2d15b484ca33 blog, browser: updated imports to reflect renaming of common.py to common/data_format.py
Goffi <goffi@goffi.org>
parents: 896
diff changeset
26 from sat.tools.common import data_format
879
2e0e9cf9efb4 blog (atom feed): fixed atom handling:
Goffi <goffi@goffi.org>
parents: 855
diff changeset
27 from sat.tools import xml_tools
728
9d35d75566fb server_side (blog): clean error message when unknown profile is requested
souliane <souliane@mailoo.org>
parents: 727
diff changeset
28 from dbus.exceptions import DBusException
388
893451e35686 server_side: display blog banner if it is defined
souliane <souliane@mailoo.org>
parents: 375
diff changeset
29 from twisted.internet import defer
10
c28a4840e1a8 server: microblog resource
Goffi <goffi@goffi.org>
parents:
diff changeset
30 from twisted.web import server
c28a4840e1a8 server: microblog resource
Goffi <goffi@goffi.org>
parents:
diff changeset
31 from twisted.web.resource import Resource
c28a4840e1a8 server: microblog resource
Goffi <goffi@goffi.org>
parents:
diff changeset
32 from twisted.words.protocols.jabber.jid import JID
879
2e0e9cf9efb4 blog (atom feed): fixed atom handling:
Goffi <goffi@goffi.org>
parents: 855
diff changeset
33 from twisted.words.xish import domish
712
bf562fb9c273 server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents: 708
diff changeset
34 from jinja2 import Environment, PackageLoader
10
c28a4840e1a8 server: microblog resource
Goffi <goffi@goffi.org>
parents:
diff changeset
35 from datetime import datetime
388
893451e35686 server_side: display blog banner if it is defined
souliane <souliane@mailoo.org>
parents: 375
diff changeset
36 import re
483
0bbbef1d53a8 server side (blog): use user's avatar a the blog's favicon + small refactorization
souliane <souliane@mailoo.org>
parents: 481
diff changeset
37 import os
823
027139763511 server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents: 818
diff changeset
38 import sys
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1160
diff changeset
39 import urllib.request, urllib.parse, urllib.error
229
e632f77c4219 bridge: asyncGetParamA takes a security_limit argument
souliane <souliane@mailoo.org>
parents: 228
diff changeset
40
588
c8cca1a373dd server_side: static blog: convert \n in raw text message to <br/>
souliane <souliane@mailoo.org>
parents: 586
diff changeset
41 from libervia.server.html_tools import sanitizeHtml, convertNewLinesToXHTML
449
981ed669d3b3 /!\ reorganize all the file hierarchy, move the code and launching script to src:
souliane <souliane@mailoo.org>
parents: 446
diff changeset
42 from libervia.server.constants import Const as C
981ed669d3b3 /!\ reorganize all the file hierarchy, move the code and launching script to src:
souliane <souliane@mailoo.org>
parents: 446
diff changeset
43
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
44 NS_ATOM = "http://www.w3.org/2005/Atom"
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
45 PARAMS_TO_GET = (
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
46 C.STATIC_BLOG_PARAM_TITLE,
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
47 C.STATIC_BLOG_PARAM_BANNER,
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
48 C.STATIC_BLOG_PARAM_KEYWORDS,
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
49 C.STATIC_BLOG_PARAM_DESCRIPTION,
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
50 )
854
0dfb76b13115 server (blog): fixes:
Goffi <goffi@goffi.org>
parents: 847
diff changeset
51 re_strip_empty_div = re.compile(r"<div ?/>|<div> *?</div>")
725
c1abaa91a121 server (blog): update to the new mechanism in XEP-0277 + improvement:
souliane <souliane@mailoo.org>
parents: 717
diff changeset
52
950
67a59552f3e3 server (blog): fixed avatars handling, there is now a well-known URL to SERVICE_PROFILE cache
Goffi <goffi@goffi.org>
parents: 916
diff changeset
53 # TODO: check disco features and use max_items when RSM is not available
879
2e0e9cf9efb4 blog (atom feed): fixed atom handling:
Goffi <goffi@goffi.org>
parents: 855
diff changeset
54 # FIXME: change navigation links handling, this is is fragile
950
67a59552f3e3 server (blog): fixed avatars handling, there is now a well-known URL to SERVICE_PROFILE cache
Goffi <goffi@goffi.org>
parents: 916
diff changeset
55 # XXX: this page will disappear, LiberviaPage will be used instead
67a59552f3e3 server (blog): fixed avatars handling, there is now a well-known URL to SERVICE_PROFILE cache
Goffi <goffi@goffi.org>
parents: 916
diff changeset
56 # TODO: delete this page and create a compatibility page for links
725
c1abaa91a121 server (blog): update to the new mechanism in XEP-0277 + improvement:
souliane <souliane@mailoo.org>
parents: 717
diff changeset
57
827
f1fc7245b910 server (blog): moved _quote and _unquote to module functions, and use them in BlogMessage.url
Goffi <goffi@goffi.org>
parents: 826
diff changeset
58
828
0c824ebe9d87 server (blog): implemented tag/category filtering:
Goffi <goffi@goffi.org>
parents: 827
diff changeset
59 def getDefaultQueryData(request):
0c824ebe9d87 server (blog): implemented tag/category filtering:
Goffi <goffi@goffi.org>
parents: 827
diff changeset
60 """Return query data which must be present in all links
0c824ebe9d87 server (blog): implemented tag/category filtering:
Goffi <goffi@goffi.org>
parents: 827
diff changeset
61
0c824ebe9d87 server (blog): implemented tag/category filtering:
Goffi <goffi@goffi.org>
parents: 827
diff changeset
62 @param request(twisted.web.http.Request): request instance comming from render
0c824ebe9d87 server (blog): implemented tag/category filtering:
Goffi <goffi@goffi.org>
parents: 827
diff changeset
63 @return (dict): a dict with values as expected by urllib.urlencode
0c824ebe9d87 server (blog): implemented tag/category filtering:
Goffi <goffi@goffi.org>
parents: 827
diff changeset
64 """
0c824ebe9d87 server (blog): implemented tag/category filtering:
Goffi <goffi@goffi.org>
parents: 827
diff changeset
65 default_query_data = {}
0c824ebe9d87 server (blog): implemented tag/category filtering:
Goffi <goffi@goffi.org>
parents: 827
diff changeset
66 try:
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
67 default_query_data["tag"] = request.extra_dict[
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
68 "mam_filter_{}".format(C.MAM_FILTER_CATEGORY)
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
69 ].encode("utf-8")
828
0c824ebe9d87 server (blog): implemented tag/category filtering:
Goffi <goffi@goffi.org>
parents: 827
diff changeset
70 except KeyError:
0c824ebe9d87 server (blog): implemented tag/category filtering:
Goffi <goffi@goffi.org>
parents: 827
diff changeset
71 pass
0c824ebe9d87 server (blog): implemented tag/category filtering:
Goffi <goffi@goffi.org>
parents: 827
diff changeset
72 return default_query_data
0c824ebe9d87 server (blog): implemented tag/category filtering:
Goffi <goffi@goffi.org>
parents: 827
diff changeset
73
0c824ebe9d87 server (blog): implemented tag/category filtering:
Goffi <goffi@goffi.org>
parents: 827
diff changeset
74
827
f1fc7245b910 server (blog): moved _quote and _unquote to module functions, and use them in BlogMessage.url
Goffi <goffi@goffi.org>
parents: 826
diff changeset
75 def _quote(value):
f1fc7245b910 server (blog): moved _quote and _unquote to module functions, and use them in BlogMessage.url
Goffi <goffi@goffi.org>
parents: 826
diff changeset
76 """Quote a value for use in url
f1fc7245b910 server (blog): moved _quote and _unquote to module functions, and use them in BlogMessage.url
Goffi <goffi@goffi.org>
parents: 826
diff changeset
77
f1fc7245b910 server (blog): moved _quote and _unquote to module functions, and use them in BlogMessage.url
Goffi <goffi@goffi.org>
parents: 826
diff changeset
78 @param value(unicode): value to quote
f1fc7245b910 server (blog): moved _quote and _unquote to module functions, and use them in BlogMessage.url
Goffi <goffi@goffi.org>
parents: 826
diff changeset
79 @return (str): quoted value
f1fc7245b910 server (blog): moved _quote and _unquote to module functions, and use them in BlogMessage.url
Goffi <goffi@goffi.org>
parents: 826
diff changeset
80 """
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1160
diff changeset
81 return urllib.parse.quote(value.encode("utf-8"), "")
827
f1fc7245b910 server (blog): moved _quote and _unquote to module functions, and use them in BlogMessage.url
Goffi <goffi@goffi.org>
parents: 826
diff changeset
82
f1fc7245b910 server (blog): moved _quote and _unquote to module functions, and use them in BlogMessage.url
Goffi <goffi@goffi.org>
parents: 826
diff changeset
83
f1fc7245b910 server (blog): moved _quote and _unquote to module functions, and use them in BlogMessage.url
Goffi <goffi@goffi.org>
parents: 826
diff changeset
84 def _unquote(quoted_value):
f1fc7245b910 server (blog): moved _quote and _unquote to module functions, and use them in BlogMessage.url
Goffi <goffi@goffi.org>
parents: 826
diff changeset
85 """Unquote a value coming from url
f1fc7245b910 server (blog): moved _quote and _unquote to module functions, and use them in BlogMessage.url
Goffi <goffi@goffi.org>
parents: 826
diff changeset
86
f1fc7245b910 server (blog): moved _quote and _unquote to module functions, and use them in BlogMessage.url
Goffi <goffi@goffi.org>
parents: 826
diff changeset
87 @param unquote_value(str): value to unquote
f1fc7245b910 server (blog): moved _quote and _unquote to module functions, and use them in BlogMessage.url
Goffi <goffi@goffi.org>
parents: 826
diff changeset
88 @return (unicode): unquoted value
f1fc7245b910 server (blog): moved _quote and _unquote to module functions, and use them in BlogMessage.url
Goffi <goffi@goffi.org>
parents: 826
diff changeset
89 """
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1160
diff changeset
90 assert not isinstance(quoted_value, str)
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1160
diff changeset
91 return urllib.parse.unquote(quoted_value).decode("utf-8")
827
f1fc7245b910 server (blog): moved _quote and _unquote to module functions, and use them in BlogMessage.url
Goffi <goffi@goffi.org>
parents: 826
diff changeset
92
f1fc7245b910 server (blog): moved _quote and _unquote to module functions, and use them in BlogMessage.url
Goffi <goffi@goffi.org>
parents: 826
diff changeset
93
893
298fbe562060 blog: escape "&" when encoding URL, so they can be used without escaping in the HTML template
Goffi <goffi@goffi.org>
parents: 892
diff changeset
94 def _urlencode(query):
298fbe562060 blog: escape "&" when encoding URL, so they can be used without escaping in the HTML template
Goffi <goffi@goffi.org>
parents: 892
diff changeset
95 """Same as urllib.urlencode, but use '&amp;' instead of '&'"""
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
96 return "&amp;".join(
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
97 [
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1160
diff changeset
98 "{}={}".format(urllib.parse.quote_plus(str(k)), urllib.parse.quote_plus(str(v)))
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1160
diff changeset
99 for k, v in query.items()
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
100 ]
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
101 )
893
298fbe562060 blog: escape "&" when encoding URL, so they can be used without escaping in the HTML template
Goffi <goffi@goffi.org>
parents: 892
diff changeset
102
298fbe562060 blog: escape "&" when encoding URL, so they can be used without escaping in the HTML template
Goffi <goffi@goffi.org>
parents: 892
diff changeset
103
704
5319110a862c server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents: 702
diff changeset
104 class TemplateProcessor(object):
5319110a862c server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents: 702
diff changeset
105
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
106 THEME = "default"
704
5319110a862c server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents: 702
diff changeset
107
5319110a862c server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents: 702
diff changeset
108 def __init__(self, host):
5319110a862c server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents: 702
diff changeset
109 self.host = host
5319110a862c server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents: 702
diff changeset
110
5319110a862c server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents: 702
diff changeset
111 # add Libervia's themes directory to the python path
823
027139763511 server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents: 818
diff changeset
112 sys.path.append(os.path.dirname(os.path.normpath(self.host.themes_dir)))
712
bf562fb9c273 server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents: 708
diff changeset
113 themes = os.path.basename(os.path.normpath(self.host.themes_dir))
bf562fb9c273 server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents: 708
diff changeset
114 self.env = Environment(loader=PackageLoader(themes, self.THEME))
704
5319110a862c server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents: 702
diff changeset
115
5319110a862c server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents: 702
diff changeset
116 def useTemplate(self, request, tpl, data=None):
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
117 theme_url = os.path.join("/", C.THEMES_URL, self.THEME)
10
c28a4840e1a8 server: microblog resource
Goffi <goffi@goffi.org>
parents:
diff changeset
118
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
119 data_ = {
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
120 "images": os.path.join(theme_url, "images"),
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
121 "styles": os.path.join(theme_url, "styles"),
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
122 }
704
5319110a862c server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents: 702
diff changeset
123 if data:
5319110a862c server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents: 702
diff changeset
124 data_.update(data)
712
bf562fb9c273 server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents: 708
diff changeset
125
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
126 template = self.env.get_template("{}.html".format(tpl))
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
127 return template.render(**data_).encode("utf-8")
704
5319110a862c server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents: 702
diff changeset
128
5319110a862c server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents: 702
diff changeset
129
5319110a862c server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents: 702
diff changeset
130 class MicroBlog(Resource, TemplateProcessor):
5319110a862c server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents: 702
diff changeset
131 isLeaf = True
10
c28a4840e1a8 server: microblog resource
Goffi <goffi@goffi.org>
parents:
diff changeset
132
243
63e9b680d3e7 browser_side, blog: better PEP8 compliance
souliane <souliane@mailoo.org>
parents: 229
diff changeset
133 def __init__(self, host):
10
c28a4840e1a8 server: microblog resource
Goffi <goffi@goffi.org>
parents:
diff changeset
134 self.host = host
c28a4840e1a8 server: microblog resource
Goffi <goffi@goffi.org>
parents:
diff changeset
135 Resource.__init__(self)
704
5319110a862c server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents: 702
diff changeset
136 TemplateProcessor.__init__(self, host)
484
ae86b32b959c server side (blog): manage our own avatars cache because existing entity data are not updated
souliane <souliane@mailoo.org>
parents: 483
diff changeset
137 self.avatars_cache = {}
483
0bbbef1d53a8 server side (blog): use user's avatar a the blog's favicon + small refactorization
souliane <souliane@mailoo.org>
parents: 481
diff changeset
138
950
67a59552f3e3 server (blog): fixed avatars handling, there is now a well-known URL to SERVICE_PROFILE cache
Goffi <goffi@goffi.org>
parents: 916
diff changeset
139 def _avatarPathToUrl(self, avatar, request, bare_jid_s):
67a59552f3e3 server (blog): fixed avatars handling, there is now a well-known URL to SERVICE_PROFILE cache
Goffi <goffi@goffi.org>
parents: 916
diff changeset
140 filename = os.path.basename(avatar)
67a59552f3e3 server (blog): fixed avatars handling, there is now a well-known URL to SERVICE_PROFILE cache
Goffi <goffi@goffi.org>
parents: 916
diff changeset
141 avatar_url = os.path.join(self.host.service_cache_url, filename)
67a59552f3e3 server (blog): fixed avatars handling, there is now a well-known URL to SERVICE_PROFILE cache
Goffi <goffi@goffi.org>
parents: 916
diff changeset
142 self.avatars_cache[bare_jid_s] = avatar_url
67a59552f3e3 server (blog): fixed avatars handling, there is now a well-known URL to SERVICE_PROFILE cache
Goffi <goffi@goffi.org>
parents: 916
diff changeset
143 return avatar_url
746
25984ca4aef2 server side: special handling of Connection/JabberID and Connection/autoconnect parameter which has needed by QuickApp but restricted by security limit
Goffi <goffi@goffi.org>
parents: 743
diff changeset
144
950
67a59552f3e3 server (blog): fixed avatars handling, there is now a well-known URL to SERVICE_PROFILE cache
Goffi <goffi@goffi.org>
parents: 916
diff changeset
145 def getAvatarURL(self, pub_jid, request):
727
3bd097380da7 server side (blog): fixes displaying the avatar
souliane <souliane@mailoo.org>
parents: 726
diff changeset
146 """Return avatar of a jid if in cache, else ask for it.
483
0bbbef1d53a8 server side (blog): use user's avatar a the blog's favicon + small refactorization
souliane <souliane@mailoo.org>
parents: 481
diff changeset
147
727
3bd097380da7 server side (blog): fixes displaying the avatar
souliane <souliane@mailoo.org>
parents: 726
diff changeset
148 @param pub_jid (JID): publisher JID
3bd097380da7 server side (blog): fixes displaying the avatar
souliane <souliane@mailoo.org>
parents: 726
diff changeset
149 @return: deferred avatar URL (unicode)
483
0bbbef1d53a8 server side (blog): use user's avatar a the blog's favicon + small refactorization
souliane <souliane@mailoo.org>
parents: 481
diff changeset
150 """
727
3bd097380da7 server side (blog): fixes displaying the avatar
souliane <souliane@mailoo.org>
parents: 726
diff changeset
151 bare_jid_s = pub_jid.userhost()
483
0bbbef1d53a8 server side (blog): use user's avatar a the blog's favicon + small refactorization
souliane <souliane@mailoo.org>
parents: 481
diff changeset
152 try:
727
3bd097380da7 server side (blog): fixes displaying the avatar
souliane <souliane@mailoo.org>
parents: 726
diff changeset
153 url = self.avatars_cache[bare_jid_s]
3bd097380da7 server side (blog): fixes displaying the avatar
souliane <souliane@mailoo.org>
parents: 726
diff changeset
154 except KeyError:
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
155 self.avatars_cache[
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
156 bare_jid_s
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
157 ] = "" # avoid to request the vcard several times
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
158 d = self.host.bridgeCall(
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
159 "avatarGet", bare_jid_s, False, False, C.SERVICE_PROFILE
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
160 )
950
67a59552f3e3 server (blog): fixed avatars handling, there is now a well-known URL to SERVICE_PROFILE cache
Goffi <goffi@goffi.org>
parents: 916
diff changeset
161 d.addCallback(self._avatarPathToUrl, request, bare_jid_s)
727
3bd097380da7 server side (blog): fixes displaying the avatar
souliane <souliane@mailoo.org>
parents: 726
diff changeset
162 return d
3bd097380da7 server side (blog): fixes displaying the avatar
souliane <souliane@mailoo.org>
parents: 726
diff changeset
163 return defer.succeed(url if url else C.DEFAULT_AVATAR_URL)
10
c28a4840e1a8 server: microblog resource
Goffi <goffi@goffi.org>
parents:
diff changeset
164
c28a4840e1a8 server: microblog resource
Goffi <goffi@goffi.org>
parents:
diff changeset
165 def render_GET(self, request):
823
027139763511 server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents: 818
diff changeset
166 if not request.postpath or len(request.postpath) > 2:
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
167 return self.useTemplate(
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
168 request, "static_blog_error", {"message": "You must indicate a nickname"}
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
169 )
704
5319110a862c server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents: 702
diff changeset
170
827
f1fc7245b910 server (blog): moved _quote and _unquote to module functions, and use them in BlogMessage.url
Goffi <goffi@goffi.org>
parents: 826
diff changeset
171 prof_requested = _unquote(request.postpath[0])
823
027139763511 server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents: 818
diff changeset
172
728
9d35d75566fb server_side (blog): clean error message when unknown profile is requested
souliane <souliane@mailoo.org>
parents: 727
diff changeset
173 try:
915
e9e9d9d893a8 server: renamed getProfileName to profileNameGet following core change and new conventions.
Goffi <goffi@goffi.org>
parents: 914
diff changeset
174 prof_found = self.host.bridge.profileNameGet(prof_requested)
728
9d35d75566fb server_side (blog): clean error message when unknown profile is requested
souliane <souliane@mailoo.org>
parents: 727
diff changeset
175 except DBusException:
9d35d75566fb server_side (blog): clean error message when unknown profile is requested
souliane <souliane@mailoo.org>
parents: 727
diff changeset
176 prof_found = None
704
5319110a862c server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents: 702
diff changeset
177 if not prof_found or prof_found == C.SERVICE_PROFILE:
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
178 return self.useTemplate(
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
179 request, "static_blog_error", {"message": "Invalid nickname"}
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
180 )
704
5319110a862c server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents: 702
diff changeset
181
5319110a862c server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents: 702
diff changeset
182 d = defer.Deferred()
823
027139763511 server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents: 818
diff changeset
183 # TODO: jid caching
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
184 self.host.bridge.asyncGetParamA(
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
185 "JabberID",
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
186 "Connection",
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
187 "value",
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
188 profile_key=prof_found,
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
189 callback=d.callback,
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
190 errback=d.errback,
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
191 )
823
027139763511 server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents: 818
diff changeset
192 d.addCallback(self.render_gotJID, request, prof_found)
704
5319110a862c server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents: 702
diff changeset
193 return server.NOT_DONE_YET
5319110a862c server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents: 702
diff changeset
194
823
027139763511 server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents: 818
diff changeset
195 def render_gotJID(self, pub_jid_s, request, profile):
704
5319110a862c server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents: 702
diff changeset
196 pub_jid = JID(pub_jid_s)
5319110a862c server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents: 702
diff changeset
197
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
198 request.extra_dict = {} # will be used for RSM and MAM
708
e9a6cbb924e6 server_side: fixes static blog navigation links
souliane <souliane@mailoo.org>
parents: 705
diff changeset
199 self.parseURLParams(request)
725
c1abaa91a121 server (blog): update to the new mechanism in XEP-0277 + improvement:
souliane <souliane@mailoo.org>
parents: 717
diff changeset
200 if request.item_id:
879
2e0e9cf9efb4 blog (atom feed): fixed atom handling:
Goffi <goffi@goffi.org>
parents: 855
diff changeset
201 # FIXME: this part seems useless
823
027139763511 server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents: 818
diff changeset
202 # we want a specific item
879
2e0e9cf9efb4 blog (atom feed): fixed atom handling:
Goffi <goffi@goffi.org>
parents: 855
diff changeset
203 # item_ids = [request.item_id]
825
a3e888ac4964 server (blog): removed another max_items
Goffi <goffi@goffi.org>
parents: 824
diff changeset
204 # max_items = 1
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
205 max_items = C.NO_LIMIT # FIXME
725
c1abaa91a121 server (blog): update to the new mechanism in XEP-0277 + improvement:
souliane <souliane@mailoo.org>
parents: 717
diff changeset
206 else:
823
027139763511 server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents: 818
diff changeset
207 # max_items = int(request.extra_dict['rsm_max']) # FIXME
954
7892f1a1e2cf server (blog): temporary fix for atom feed:
Goffi <goffi@goffi.org>
parents: 950
diff changeset
208 max_items = C.NO_LIMIT
823
027139763511 server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents: 818
diff changeset
209 # TODO: use max_items only when RSM is not available
586
3eb3a2c0c011 browser and server side: uses RSM (XEP-0059)
souliane <souliane@mailoo.org>
parents: 487
diff changeset
210
708
e9a6cbb924e6 server_side: fixes static blog navigation links
souliane <souliane@mailoo.org>
parents: 705
diff changeset
211 if request.atom:
828
0c824ebe9d87 server (blog): implemented tag/category filtering:
Goffi <goffi@goffi.org>
parents: 827
diff changeset
212 request.extra_dict.update(request.mam_extra)
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
213 self.getAtom(
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
214 pub_jid,
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
215 max_items,
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
216 request.extra_dict,
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
217 request.extra_comments_dict,
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
218 request,
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
219 profile,
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
220 )
879
2e0e9cf9efb4 blog (atom feed): fixed atom handling:
Goffi <goffi@goffi.org>
parents: 855
diff changeset
221
725
c1abaa91a121 server (blog): update to the new mechanism in XEP-0277 + improvement:
souliane <souliane@mailoo.org>
parents: 717
diff changeset
222 elif request.item_id:
828
0c824ebe9d87 server (blog): implemented tag/category filtering:
Goffi <goffi@goffi.org>
parents: 827
diff changeset
223 # we can't merge mam_extra now because we'll use item_ids
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
224 self.getItemById(
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
225 pub_jid,
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
226 request.item_id,
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
227 request.extra_dict,
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
228 request.extra_comments_dict,
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
229 request,
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
230 profile,
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
231 )
704
5319110a862c server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents: 702
diff changeset
232 else:
828
0c824ebe9d87 server (blog): implemented tag/category filtering:
Goffi <goffi@goffi.org>
parents: 827
diff changeset
233 request.extra_dict.update(request.mam_extra)
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
234 self.getItems(
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
235 pub_jid,
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
236 max_items,
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
237 request.extra_dict,
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
238 request.extra_comments_dict,
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
239 request,
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
240 profile,
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
241 )
746
25984ca4aef2 server side: special handling of Connection/JabberID and Connection/autoconnect parameter which has needed by QuickApp but restricted by security limit
Goffi <goffi@goffi.org>
parents: 743
diff changeset
242
823
027139763511 server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents: 818
diff changeset
243 ## URL parsing
027139763511 server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents: 818
diff changeset
244
708
e9a6cbb924e6 server_side: fixes static blog navigation links
souliane <souliane@mailoo.org>
parents: 705
diff changeset
245 def parseURLParams(self, request):
e9a6cbb924e6 server_side: fixes static blog navigation links
souliane <souliane@mailoo.org>
parents: 705
diff changeset
246 """Parse the request URL parameters.
e9a6cbb924e6 server_side: fixes static blog navigation links
souliane <souliane@mailoo.org>
parents: 705
diff changeset
247
e9a6cbb924e6 server_side: fixes static blog navigation links
souliane <souliane@mailoo.org>
parents: 705
diff changeset
248 @param request: HTTP request
e9a6cbb924e6 server_side: fixes static blog navigation links
souliane <souliane@mailoo.org>
parents: 705
diff changeset
249 """
e9a6cbb924e6 server_side: fixes static blog navigation links
souliane <souliane@mailoo.org>
parents: 705
diff changeset
250 if len(request.postpath) > 1:
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
251 if request.postpath[1] == "atom.xml": # return the atom feed
708
e9a6cbb924e6 server_side: fixes static blog navigation links
souliane <souliane@mailoo.org>
parents: 705
diff changeset
252 request.atom = True
823
027139763511 server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents: 818
diff changeset
253 request.item_id = None
708
e9a6cbb924e6 server_side: fixes static blog navigation links
souliane <souliane@mailoo.org>
parents: 705
diff changeset
254 else:
823
027139763511 server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents: 818
diff changeset
255 request.atom = False
827
f1fc7245b910 server (blog): moved _quote and _unquote to module functions, and use them in BlogMessage.url
Goffi <goffi@goffi.org>
parents: 826
diff changeset
256 request.item_id = _unquote(request.postpath[1])
823
027139763511 server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents: 818
diff changeset
257 else:
027139763511 server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents: 818
diff changeset
258 request.item_id = None
027139763511 server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents: 818
diff changeset
259 request.atom = False
708
e9a6cbb924e6 server_side: fixes static blog navigation links
souliane <souliane@mailoo.org>
parents: 705
diff changeset
260
e9a6cbb924e6 server_side: fixes static blog navigation links
souliane <souliane@mailoo.org>
parents: 705
diff changeset
261 self.parseURLParamsRSM(request)
823
027139763511 server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents: 818
diff changeset
262 # XXX: request.display_single is True when only one blog post is visible
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
263 request.display_single = (request.item_id is not None) or int(
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
264 request.extra_dict["rsm_max"]
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
265 ) == 1
725
c1abaa91a121 server (blog): update to the new mechanism in XEP-0277 + improvement:
souliane <souliane@mailoo.org>
parents: 717
diff changeset
266 self.parseURLParamsCommentsRSM(request)
828
0c824ebe9d87 server (blog): implemented tag/category filtering:
Goffi <goffi@goffi.org>
parents: 827
diff changeset
267 self.parseURLParamsMAM(request)
708
e9a6cbb924e6 server_side: fixes static blog navigation links
souliane <souliane@mailoo.org>
parents: 705
diff changeset
268
e9a6cbb924e6 server_side: fixes static blog navigation links
souliane <souliane@mailoo.org>
parents: 705
diff changeset
269 def parseURLParamsRSM(self, request):
725
c1abaa91a121 server (blog): update to the new mechanism in XEP-0277 + improvement:
souliane <souliane@mailoo.org>
parents: 717
diff changeset
270 """Parse RSM request data from the URL parameters for main items
708
e9a6cbb924e6 server_side: fixes static blog navigation links
souliane <souliane@mailoo.org>
parents: 705
diff changeset
271
823
027139763511 server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents: 818
diff changeset
272 fill request.extra_dict accordingly
708
e9a6cbb924e6 server_side: fixes static blog navigation links
souliane <souliane@mailoo.org>
parents: 705
diff changeset
273 @param request: HTTP request
e9a6cbb924e6 server_side: fixes static blog navigation links
souliane <souliane@mailoo.org>
parents: 705
diff changeset
274 """
725
c1abaa91a121 server (blog): update to the new mechanism in XEP-0277 + improvement:
souliane <souliane@mailoo.org>
parents: 717
diff changeset
275 if request.item_id: # XXX: item_id and RSM are not compatible
c1abaa91a121 server (blog): update to the new mechanism in XEP-0277 + improvement:
souliane <souliane@mailoo.org>
parents: 717
diff changeset
276 return
704
5319110a862c server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents: 702
diff changeset
277 try:
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
278 rsm_max = int(request.args["max"][0])
823
027139763511 server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents: 818
diff changeset
279 if rsm_max > C.STATIC_RSM_MAX_LIMIT:
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1160
diff changeset
280 log.warning("Request with rsm_max over limit ({})".format(rsm_max))
823
027139763511 server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents: 818
diff changeset
281 rsm_max = C.STATIC_RSM_MAX_LIMIT
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1160
diff changeset
282 request.extra_dict["rsm_max"] = str(rsm_max)
704
5319110a862c server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents: 702
diff changeset
283 except (ValueError, KeyError):
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1160
diff changeset
284 request.extra_dict["rsm_max"] = str(C.STATIC_RSM_MAX_DEFAULT)
704
5319110a862c server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents: 702
diff changeset
285 try:
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
286 request.extra_dict["rsm_index"] = request.args["index"][0]
704
5319110a862c server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents: 702
diff changeset
287 except (ValueError, KeyError):
5319110a862c server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents: 702
diff changeset
288 try:
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
289 request.extra_dict["rsm_before"] = request.args["before"][0].decode(
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
290 "utf-8"
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
291 )
704
5319110a862c server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents: 702
diff changeset
292 except KeyError:
5319110a862c server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents: 702
diff changeset
293 try:
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
294 request.extra_dict["rsm_after"] = request.args["after"][0].decode(
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
295 "utf-8"
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
296 )
704
5319110a862c server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents: 702
diff changeset
297 except KeyError:
5319110a862c server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents: 702
diff changeset
298 pass
725
c1abaa91a121 server (blog): update to the new mechanism in XEP-0277 + improvement:
souliane <souliane@mailoo.org>
parents: 717
diff changeset
299
c1abaa91a121 server (blog): update to the new mechanism in XEP-0277 + improvement:
souliane <souliane@mailoo.org>
parents: 717
diff changeset
300 def parseURLParamsCommentsRSM(self, request):
c1abaa91a121 server (blog): update to the new mechanism in XEP-0277 + improvement:
souliane <souliane@mailoo.org>
parents: 717
diff changeset
301 """Parse RSM request data from the URL parameters for comments
746
25984ca4aef2 server side: special handling of Connection/JabberID and Connection/autoconnect parameter which has needed by QuickApp but restricted by security limit
Goffi <goffi@goffi.org>
parents: 743
diff changeset
302
823
027139763511 server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents: 818
diff changeset
303 fill request.extra_dict accordingly
725
c1abaa91a121 server (blog): update to the new mechanism in XEP-0277 + improvement:
souliane <souliane@mailoo.org>
parents: 717
diff changeset
304 @param request: HTTP request
c1abaa91a121 server (blog): update to the new mechanism in XEP-0277 + improvement:
souliane <souliane@mailoo.org>
parents: 717
diff changeset
305 """
c1abaa91a121 server (blog): update to the new mechanism in XEP-0277 + improvement:
souliane <souliane@mailoo.org>
parents: 717
diff changeset
306 request.extra_comments_dict = {}
c1abaa91a121 server (blog): update to the new mechanism in XEP-0277 + improvement:
souliane <souliane@mailoo.org>
parents: 717
diff changeset
307 if request.display_single:
c1abaa91a121 server (blog): update to the new mechanism in XEP-0277 + improvement:
souliane <souliane@mailoo.org>
parents: 717
diff changeset
308 try:
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
309 rsm_max = int(request.args["comments_max"][0])
823
027139763511 server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents: 818
diff changeset
310 if rsm_max > C.STATIC_RSM_MAX_LIMIT:
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1160
diff changeset
311 log.warning("Request with rsm_max over limit ({})".format(rsm_max))
823
027139763511 server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents: 818
diff changeset
312 rsm_max = C.STATIC_RSM_MAX_LIMIT
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1160
diff changeset
313 request.extra_comments_dict["rsm_max"] = str(rsm_max)
725
c1abaa91a121 server (blog): update to the new mechanism in XEP-0277 + improvement:
souliane <souliane@mailoo.org>
parents: 717
diff changeset
314 except (ValueError, KeyError):
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1160
diff changeset
315 request.extra_comments_dict["rsm_max"] = str(
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
316 C.STATIC_RSM_MAX_COMMENTS_DEFAULT
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
317 )
725
c1abaa91a121 server (blog): update to the new mechanism in XEP-0277 + improvement:
souliane <souliane@mailoo.org>
parents: 717
diff changeset
318 else:
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
319 request.extra_comments_dict["rsm_max"] = "0"
725
c1abaa91a121 server (blog): update to the new mechanism in XEP-0277 + improvement:
souliane <souliane@mailoo.org>
parents: 717
diff changeset
320
828
0c824ebe9d87 server (blog): implemented tag/category filtering:
Goffi <goffi@goffi.org>
parents: 827
diff changeset
321 def parseURLParamsMAM(self, request):
0c824ebe9d87 server (blog): implemented tag/category filtering:
Goffi <goffi@goffi.org>
parents: 827
diff changeset
322 """Parse MAM request data from the URL parameters for main items
0c824ebe9d87 server (blog): implemented tag/category filtering:
Goffi <goffi@goffi.org>
parents: 827
diff changeset
323
0c824ebe9d87 server (blog): implemented tag/category filtering:
Goffi <goffi@goffi.org>
parents: 827
diff changeset
324 fill request.extra_dict accordingly
0c824ebe9d87 server (blog): implemented tag/category filtering:
Goffi <goffi@goffi.org>
parents: 827
diff changeset
325 @param request: HTTP request
0c824ebe9d87 server (blog): implemented tag/category filtering:
Goffi <goffi@goffi.org>
parents: 827
diff changeset
326 """
0c824ebe9d87 server (blog): implemented tag/category filtering:
Goffi <goffi@goffi.org>
parents: 827
diff changeset
327 # XXX: we use a separate dict for MAM as the filters are not used
0c824ebe9d87 server (blog): implemented tag/category filtering:
Goffi <goffi@goffi.org>
parents: 827
diff changeset
328 # when display_single is set (because it then use item_ids which
0c824ebe9d87 server (blog): implemented tag/category filtering:
Goffi <goffi@goffi.org>
parents: 827
diff changeset
329 # can't be used with MAM), but it is still used in this case
0c824ebe9d87 server (blog): implemented tag/category filtering:
Goffi <goffi@goffi.org>
parents: 827
diff changeset
330 # for navigation links.
0c824ebe9d87 server (blog): implemented tag/category filtering:
Goffi <goffi@goffi.org>
parents: 827
diff changeset
331 request.mam_extra = {}
0c824ebe9d87 server (blog): implemented tag/category filtering:
Goffi <goffi@goffi.org>
parents: 827
diff changeset
332 try:
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
333 request.mam_extra[
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
334 "mam_filter_{}".format(C.MAM_FILTER_CATEGORY)
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
335 ] = request.args["tag"][0].decode("utf-8")
828
0c824ebe9d87 server (blog): implemented tag/category filtering:
Goffi <goffi@goffi.org>
parents: 827
diff changeset
336 except KeyError:
0c824ebe9d87 server (blog): implemented tag/category filtering:
Goffi <goffi@goffi.org>
parents: 827
diff changeset
337 pass
0c824ebe9d87 server (blog): implemented tag/category filtering:
Goffi <goffi@goffi.org>
parents: 827
diff changeset
338
823
027139763511 server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents: 818
diff changeset
339 ## Items retrieval
027139763511 server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents: 818
diff changeset
340
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
341 def getItemById(
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
342 self, pub_jid, item_id, extra_dict, extra_comments_dict, request, profile
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
343 ):
725
c1abaa91a121 server (blog): update to the new mechanism in XEP-0277 + improvement:
souliane <souliane@mailoo.org>
parents: 717
diff changeset
344 """
746
25984ca4aef2 server side: special handling of Connection/JabberID and Connection/autoconnect parameter which has needed by QuickApp but restricted by security limit
Goffi <goffi@goffi.org>
parents: 743
diff changeset
345
725
c1abaa91a121 server (blog): update to the new mechanism in XEP-0277 + improvement:
souliane <souliane@mailoo.org>
parents: 717
diff changeset
346 @param pub_jid (jid.JID): publisher JID
c1abaa91a121 server (blog): update to the new mechanism in XEP-0277 + improvement:
souliane <souliane@mailoo.org>
parents: 717
diff changeset
347 @param item_id(unicode): ID of the item to retrieve
c1abaa91a121 server (blog): update to the new mechanism in XEP-0277 + improvement:
souliane <souliane@mailoo.org>
parents: 717
diff changeset
348 @param extra_dict (dict): extra configuration for initial items only
c1abaa91a121 server (blog): update to the new mechanism in XEP-0277 + improvement:
souliane <souliane@mailoo.org>
parents: 717
diff changeset
349 @param extra_comments_dict (dict): extra configuration for comments only
c1abaa91a121 server (blog): update to the new mechanism in XEP-0277 + improvement:
souliane <souliane@mailoo.org>
parents: 717
diff changeset
350 @param request: HTTP request
c1abaa91a121 server (blog): update to the new mechanism in XEP-0277 + improvement:
souliane <souliane@mailoo.org>
parents: 717
diff changeset
351 @param profile
c1abaa91a121 server (blog): update to the new mechanism in XEP-0277 + improvement:
souliane <souliane@mailoo.org>
parents: 717
diff changeset
352 """
c1abaa91a121 server (blog): update to the new mechanism in XEP-0277 + improvement:
souliane <souliane@mailoo.org>
parents: 717
diff changeset
353
c1abaa91a121 server (blog): update to the new mechanism in XEP-0277 + improvement:
souliane <souliane@mailoo.org>
parents: 717
diff changeset
354 def gotItems(items):
c1abaa91a121 server (blog): update to the new mechanism in XEP-0277 + improvement:
souliane <souliane@mailoo.org>
parents: 717
diff changeset
355 items, metadata = items
1156
3048bd137aaf server, browser: changed blog items serialisation following changes in backend
Goffi <goffi@goffi.org>
parents: 1144
diff changeset
356 items = [data_format.deserialise(i) for i in items]
725
c1abaa91a121 server (blog): update to the new mechanism in XEP-0277 + improvement:
souliane <souliane@mailoo.org>
parents: 717
diff changeset
357 item = items[0] # assume there's only one item
c1abaa91a121 server (blog): update to the new mechanism in XEP-0277 + improvement:
souliane <souliane@mailoo.org>
parents: 717
diff changeset
358
823
027139763511 server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents: 818
diff changeset
359 def gotMetadata(result):
1238
f55056bb67d4 replaced former use of "dummy" by "__"
Goffi <goffi@goffi.org>
parents: 1237
diff changeset
360 __, rsm_metadata = result
823
027139763511 server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents: 818
diff changeset
361 try:
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
362 metadata["rsm_count"] = rsm_metadata["rsm_count"]
823
027139763511 server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents: 818
diff changeset
363 except KeyError:
027139763511 server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents: 818
diff changeset
364 pass
027139763511 server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents: 818
diff changeset
365 try:
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1160
diff changeset
366 metadata["rsm_index"] = str(int(rsm_metadata["rsm_index"]) - 1)
823
027139763511 server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents: 818
diff changeset
367 except KeyError:
027139763511 server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents: 818
diff changeset
368 pass
027139763511 server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents: 818
diff changeset
369
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
370 metadata["rsm_first"] = metadata["rsm_last"] = item["id"]
746
25984ca4aef2 server side: special handling of Connection/JabberID and Connection/autoconnect parameter which has needed by QuickApp but restricted by security limit
Goffi <goffi@goffi.org>
parents: 743
diff changeset
371
725
c1abaa91a121 server (blog): update to the new mechanism in XEP-0277 + improvement:
souliane <souliane@mailoo.org>
parents: 717
diff changeset
372 def gotComments(comments):
828
0c824ebe9d87 server (blog): implemented tag/category filtering:
Goffi <goffi@goffi.org>
parents: 827
diff changeset
373 # at this point we can merge mam dict
0c824ebe9d87 server (blog): implemented tag/category filtering:
Goffi <goffi@goffi.org>
parents: 827
diff changeset
374 request.extra_dict.update(request.mam_extra)
823
027139763511 server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents: 818
diff changeset
375 # build the items as self.getItems would do it (and as self.renderHTML expects them to be)
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
376 comments = [
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
377 (
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
378 item["comments_service"],
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
379 item["comments_node"],
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
380 "",
1156
3048bd137aaf server, browser: changed blog items serialisation following changes in backend
Goffi <goffi@goffi.org>
parents: 1144
diff changeset
381 [data_format.deserialise(c) for c in comments[0]],
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
382 comments[1],
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
383 )
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
384 ]
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
385 self.renderHTML(
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
386 [(item, comments)], metadata, request, pub_jid, profile
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
387 )
10
c28a4840e1a8 server: microblog resource
Goffi <goffi@goffi.org>
parents:
diff changeset
388
725
c1abaa91a121 server (blog): update to the new mechanism in XEP-0277 + improvement:
souliane <souliane@mailoo.org>
parents: 717
diff changeset
389 # get the comments
823
027139763511 server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents: 818
diff changeset
390 # max_comments = int(extra_comments_dict['rsm_max']) # FIXME
954
7892f1a1e2cf server (blog): temporary fix for atom feed:
Goffi <goffi@goffi.org>
parents: 950
diff changeset
391 max_comments = C.NO_LIMIT
823
027139763511 server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents: 818
diff changeset
392 # TODO: use max_comments only when RSM is not available
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
393 self.host.bridge.mbGet(
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
394 item["comments_service"],
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
395 item["comments_node"],
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
396 max_comments,
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
397 [],
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
398 extra_comments_dict,
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
399 C.SERVICE_PROFILE,
826
70939916dc80 server (blog): added unhandler errback in getItemById
Goffi <goffi@goffi.org>
parents: 825
diff changeset
400 callback=gotComments,
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
401 errback=lambda failure: self.renderError(failure, request, pub_jid),
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
402 )
725
c1abaa91a121 server (blog): update to the new mechanism in XEP-0277 + improvement:
souliane <souliane@mailoo.org>
parents: 717
diff changeset
403
c1abaa91a121 server (blog): update to the new mechanism in XEP-0277 + improvement:
souliane <souliane@mailoo.org>
parents: 717
diff changeset
404 # XXX: retrieve RSM information related to the main item. We can't do it while
c1abaa91a121 server (blog): update to the new mechanism in XEP-0277 + improvement:
souliane <souliane@mailoo.org>
parents: 717
diff changeset
405 # retrieving the item, because item_ids and rsm should not be used together.
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
406 self.host.bridge.mbGet(
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
407 pub_jid.userhost(),
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
408 "",
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
409 0,
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
410 [],
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
411 {"rsm_max": "1", "rsm_after": item["id"]},
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
412 C.SERVICE_PROFILE,
826
70939916dc80 server (blog): added unhandler errback in getItemById
Goffi <goffi@goffi.org>
parents: 825
diff changeset
413 callback=gotMetadata,
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
414 errback=lambda failure: self.renderError(failure, request, pub_jid),
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
415 )
725
c1abaa91a121 server (blog): update to the new mechanism in XEP-0277 + improvement:
souliane <souliane@mailoo.org>
parents: 717
diff changeset
416
c1abaa91a121 server (blog): update to the new mechanism in XEP-0277 + improvement:
souliane <souliane@mailoo.org>
parents: 717
diff changeset
417 # get the main item
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
418 self.host.bridge.mbGet(
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
419 pub_jid.userhost(),
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
420 "",
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
421 0,
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
422 [item_id],
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
423 extra_dict,
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
424 C.SERVICE_PROFILE,
826
70939916dc80 server (blog): added unhandler errback in getItemById
Goffi <goffi@goffi.org>
parents: 825
diff changeset
425 callback=gotItems,
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
426 errback=lambda failure: self.renderError(failure, request, pub_jid),
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
427 )
725
c1abaa91a121 server (blog): update to the new mechanism in XEP-0277 + improvement:
souliane <souliane@mailoo.org>
parents: 717
diff changeset
428
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
429 def getItems(
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
430 self, pub_jid, max_items, extra_dict, extra_comments_dict, request, profile
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
431 ):
725
c1abaa91a121 server (blog): update to the new mechanism in XEP-0277 + improvement:
souliane <souliane@mailoo.org>
parents: 717
diff changeset
432 """
746
25984ca4aef2 server side: special handling of Connection/JabberID and Connection/autoconnect parameter which has needed by QuickApp but restricted by security limit
Goffi <goffi@goffi.org>
parents: 743
diff changeset
433
725
c1abaa91a121 server (blog): update to the new mechanism in XEP-0277 + improvement:
souliane <souliane@mailoo.org>
parents: 717
diff changeset
434 @param pub_jid (jid.JID): publisher JID
c1abaa91a121 server (blog): update to the new mechanism in XEP-0277 + improvement:
souliane <souliane@mailoo.org>
parents: 717
diff changeset
435 @param max_items(int): maximum number of item to get, C.NO_LIMIT for no limit
c1abaa91a121 server (blog): update to the new mechanism in XEP-0277 + improvement:
souliane <souliane@mailoo.org>
parents: 717
diff changeset
436 @param extra_dict (dict): extra configuration for initial items only
c1abaa91a121 server (blog): update to the new mechanism in XEP-0277 + improvement:
souliane <souliane@mailoo.org>
parents: 717
diff changeset
437 @param extra_comments_dict (dict): extra configuration for comments only
c1abaa91a121 server (blog): update to the new mechanism in XEP-0277 + improvement:
souliane <souliane@mailoo.org>
parents: 717
diff changeset
438 @param request: HTTP request
c1abaa91a121 server (blog): update to the new mechanism in XEP-0277 + improvement:
souliane <souliane@mailoo.org>
parents: 717
diff changeset
439 @param profile
c1abaa91a121 server (blog): update to the new mechanism in XEP-0277 + improvement:
souliane <souliane@mailoo.org>
parents: 717
diff changeset
440 """
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
441
725
c1abaa91a121 server (blog): update to the new mechanism in XEP-0277 + improvement:
souliane <souliane@mailoo.org>
parents: 717
diff changeset
442 def getResultCb(data, rt_session):
c1abaa91a121 server (blog): update to the new mechanism in XEP-0277 + improvement:
souliane <souliane@mailoo.org>
parents: 717
diff changeset
443 remaining, results = data
824
d990ae5612df server (blog): better handling of mbGetFromManyWithCommentsRTResult in getItems
Goffi <goffi@goffi.org>
parents: 823
diff changeset
444 # we have requested one node only
d990ae5612df server (blog): better handling of mbGetFromManyWithCommentsRTResult in getItems
Goffi <goffi@goffi.org>
parents: 823
diff changeset
445 assert remaining == 0
d990ae5612df server (blog): better handling of mbGetFromManyWithCommentsRTResult in getItems
Goffi <goffi@goffi.org>
parents: 823
diff changeset
446 assert len(results) == 1
d990ae5612df server (blog): better handling of mbGetFromManyWithCommentsRTResult in getItems
Goffi <goffi@goffi.org>
parents: 823
diff changeset
447 service, node, failure, items, metadata = results[0]
1160
1276452c0d32 server (legacy blog): fixed items deserialisation
Goffi <goffi@goffi.org>
parents: 1156
diff changeset
448 items = [(data_format.deserialise(i), m) for i,m in items]
824
d990ae5612df server (blog): better handling of mbGetFromManyWithCommentsRTResult in getItems
Goffi <goffi@goffi.org>
parents: 823
diff changeset
449 if failure:
d990ae5612df server (blog): better handling of mbGetFromManyWithCommentsRTResult in getItems
Goffi <goffi@goffi.org>
parents: 823
diff changeset
450 self.renderError(failure, request, pub_jid)
d990ae5612df server (blog): better handling of mbGetFromManyWithCommentsRTResult in getItems
Goffi <goffi@goffi.org>
parents: 823
diff changeset
451 else:
d990ae5612df server (blog): better handling of mbGetFromManyWithCommentsRTResult in getItems
Goffi <goffi@goffi.org>
parents: 823
diff changeset
452 self.renderHTML(items, metadata, request, pub_jid, profile)
746
25984ca4aef2 server side: special handling of Connection/JabberID and Connection/autoconnect parameter which has needed by QuickApp but restricted by security limit
Goffi <goffi@goffi.org>
parents: 743
diff changeset
453
725
c1abaa91a121 server (blog): update to the new mechanism in XEP-0277 + improvement:
souliane <souliane@mailoo.org>
parents: 717
diff changeset
454 def getResult(rt_session):
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
455 self.host.bridge.mbGetFromManyWithCommentsRTResult(
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
456 rt_session,
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
457 C.SERVICE_PROFILE,
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
458 callback=lambda data: getResultCb(data, rt_session),
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
459 errback=lambda failure: self.renderError(failure, request, pub_jid),
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
460 )
725
c1abaa91a121 server (blog): update to the new mechanism in XEP-0277 + improvement:
souliane <souliane@mailoo.org>
parents: 717
diff changeset
461
823
027139763511 server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents: 818
diff changeset
462 # max_comments = int(extra_comments_dict['rsm_max']) # FIXME
027139763511 server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents: 818
diff changeset
463 max_comments = 0
027139763511 server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents: 818
diff changeset
464 # TODO: use max_comments only when RSM is not available
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
465 self.host.bridge.mbGetFromManyWithComments(
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
466 C.JID,
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
467 [pub_jid.userhost()],
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
468 max_items,
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
469 max_comments,
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
470 extra_dict,
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
471 extra_comments_dict,
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
472 C.SERVICE_PROFILE,
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
473 callback=getResult,
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
474 )
746
25984ca4aef2 server side: special handling of Connection/JabberID and Connection/autoconnect parameter which has needed by QuickApp but restricted by security limit
Goffi <goffi@goffi.org>
parents: 743
diff changeset
475
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
476 def getAtom(
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
477 self, pub_jid, max_items, extra_dict, extra_comments_dict, request, profile
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
478 ):
879
2e0e9cf9efb4 blog (atom feed): fixed atom handling:
Goffi <goffi@goffi.org>
parents: 855
diff changeset
479 """
2e0e9cf9efb4 blog (atom feed): fixed atom handling:
Goffi <goffi@goffi.org>
parents: 855
diff changeset
480
2e0e9cf9efb4 blog (atom feed): fixed atom handling:
Goffi <goffi@goffi.org>
parents: 855
diff changeset
481 @param pub_jid (jid.JID): publisher JID
2e0e9cf9efb4 blog (atom feed): fixed atom handling:
Goffi <goffi@goffi.org>
parents: 855
diff changeset
482 @param max_items(int): maximum number of item to get, C.NO_LIMIT for no limit
2e0e9cf9efb4 blog (atom feed): fixed atom handling:
Goffi <goffi@goffi.org>
parents: 855
diff changeset
483 @param extra_dict (dict): extra configuration for initial items only
2e0e9cf9efb4 blog (atom feed): fixed atom handling:
Goffi <goffi@goffi.org>
parents: 855
diff changeset
484 @param extra_comments_dict (dict): extra configuration for comments only
2e0e9cf9efb4 blog (atom feed): fixed atom handling:
Goffi <goffi@goffi.org>
parents: 855
diff changeset
485 @param request: HTTP request
2e0e9cf9efb4 blog (atom feed): fixed atom handling:
Goffi <goffi@goffi.org>
parents: 855
diff changeset
486 @param profile
2e0e9cf9efb4 blog (atom feed): fixed atom handling:
Goffi <goffi@goffi.org>
parents: 855
diff changeset
487 """
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
488
879
2e0e9cf9efb4 blog (atom feed): fixed atom handling:
Goffi <goffi@goffi.org>
parents: 855
diff changeset
489 def gotItems(data):
2e0e9cf9efb4 blog (atom feed): fixed atom handling:
Goffi <goffi@goffi.org>
parents: 855
diff changeset
490 # Generate a clean atom feed with uri linking to this blog
2e0e9cf9efb4 blog (atom feed): fixed atom handling:
Goffi <goffi@goffi.org>
parents: 855
diff changeset
491 # from microblog data
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
492 items, metadata = data
1156
3048bd137aaf server, browser: changed blog items serialisation following changes in backend
Goffi <goffi@goffi.org>
parents: 1144
diff changeset
493 items = [data_format.deserialise(i) for i in items]
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1160
diff changeset
494 feed_elt = domish.Element((NS_ATOM, "feed"))
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1160
diff changeset
495 title = _("{user}'s blog").format(user=profile)
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1160
diff changeset
496 feed_elt.addElement("title", content=title)
884
763da94ba28b blog (atom): base_url_ext can now only specify scheme, or netloc, or path, it will be used to complete data coming from request's path
Goffi <goffi@goffi.org>
parents: 882
diff changeset
497
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
498 base_blog_url = self.host.getExtBaseURL(
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1160
diff changeset
499 request, "blog/{user}".format(user=profile)
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
500 )
879
2e0e9cf9efb4 blog (atom feed): fixed atom handling:
Goffi <goffi@goffi.org>
parents: 855
diff changeset
501
2e0e9cf9efb4 blog (atom feed): fixed atom handling:
Goffi <goffi@goffi.org>
parents: 855
diff changeset
502 # atom link
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
503 link_feed_elt = feed_elt.addElement("link")
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1160
diff changeset
504 link_feed_elt["href"] = "{base}/atom.xml".format(base=base_blog_url)
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1160
diff changeset
505 link_feed_elt["type"] = "application/atom+xml"
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1160
diff changeset
506 link_feed_elt["rel"] = "self"
879
2e0e9cf9efb4 blog (atom feed): fixed atom handling:
Goffi <goffi@goffi.org>
parents: 855
diff changeset
507
2e0e9cf9efb4 blog (atom feed): fixed atom handling:
Goffi <goffi@goffi.org>
parents: 855
diff changeset
508 # blog link
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
509 link_blog_elt = feed_elt.addElement("link")
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1160
diff changeset
510 link_blog_elt["rel"] = "alternate"
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1160
diff changeset
511 link_blog_elt["type"] = "text/html"
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
512 link_blog_elt["href"] = base_blog_url
879
2e0e9cf9efb4 blog (atom feed): fixed atom handling:
Goffi <goffi@goffi.org>
parents: 855
diff changeset
513
2e0e9cf9efb4 blog (atom feed): fixed atom handling:
Goffi <goffi@goffi.org>
parents: 855
diff changeset
514 # blog link XMPP uri
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
515 blog_xmpp_uri = metadata["uri"]
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
516 link_blog_elt = feed_elt.addElement("link")
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1160
diff changeset
517 link_blog_elt["rel"] = "alternate"
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1160
diff changeset
518 link_blog_elt["type"] = "application/atom+xml"
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
519 link_blog_elt["href"] = blog_xmpp_uri
879
2e0e9cf9efb4 blog (atom feed): fixed atom handling:
Goffi <goffi@goffi.org>
parents: 855
diff changeset
520
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
521 feed_elt.addElement("id", content=_quote(blog_xmpp_uri))
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
522 updated_unix = max([float(item["updated"]) for item in items])
879
2e0e9cf9efb4 blog (atom feed): fixed atom handling:
Goffi <goffi@goffi.org>
parents: 855
diff changeset
523 updated_dt = datetime.fromtimestamp(updated_unix)
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
524 feed_elt.addElement(
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1160
diff changeset
525 "updated", content="{}Z".format(updated_dt.isoformat("T"))
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
526 )
879
2e0e9cf9efb4 blog (atom feed): fixed atom handling:
Goffi <goffi@goffi.org>
parents: 855
diff changeset
527
2e0e9cf9efb4 blog (atom feed): fixed atom handling:
Goffi <goffi@goffi.org>
parents: 855
diff changeset
528 for item in items:
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1160
diff changeset
529 entry_elt = feed_elt.addElement("entry")
879
2e0e9cf9efb4 blog (atom feed): fixed atom handling:
Goffi <goffi@goffi.org>
parents: 855
diff changeset
530
2e0e9cf9efb4 blog (atom feed): fixed atom handling:
Goffi <goffi@goffi.org>
parents: 855
diff changeset
531 # Title
2e0e9cf9efb4 blog (atom feed): fixed atom handling:
Goffi <goffi@goffi.org>
parents: 855
diff changeset
532 try:
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
533 title = item["title"]
879
2e0e9cf9efb4 blog (atom feed): fixed atom handling:
Goffi <goffi@goffi.org>
parents: 855
diff changeset
534 except KeyError:
2e0e9cf9efb4 blog (atom feed): fixed atom handling:
Goffi <goffi@goffi.org>
parents: 855
diff changeset
535 # for microblog (without title), we use an abstract of content as title
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1160
diff changeset
536 title = "{}…".format(" ".join(item["content"][:70].split()))
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1160
diff changeset
537 entry_elt.addElement("title", content=title)
879
2e0e9cf9efb4 blog (atom feed): fixed atom handling:
Goffi <goffi@goffi.org>
parents: 855
diff changeset
538
2e0e9cf9efb4 blog (atom feed): fixed atom handling:
Goffi <goffi@goffi.org>
parents: 855
diff changeset
539 # HTTP link
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1160
diff changeset
540 http_link_elt = entry_elt.addElement("link")
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1160
diff changeset
541 http_link_elt["rel"] = "alternate"
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1160
diff changeset
542 http_link_elt["type"] = "text/html"
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1160
diff changeset
543 http_link_elt["href"] = "{base}/{quoted_id}".format(
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
544 base=base_blog_url, quoted_id=_quote(item["id"])
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
545 )
879
2e0e9cf9efb4 blog (atom feed): fixed atom handling:
Goffi <goffi@goffi.org>
parents: 855
diff changeset
546 # XMPP link
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1160
diff changeset
547 xmpp_link_elt = entry_elt.addElement("link")
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1160
diff changeset
548 xmpp_link_elt["rel"] = "alternate"
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1160
diff changeset
549 xmpp_link_elt["type"] = "application/atom+xml"
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1160
diff changeset
550 xmpp_link_elt["href"] = "{blog_uri};item={item_id}".format(
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
551 blog_uri=blog_xmpp_uri, item_id=item["id"]
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
552 )
879
2e0e9cf9efb4 blog (atom feed): fixed atom handling:
Goffi <goffi@goffi.org>
parents: 855
diff changeset
553
2e0e9cf9efb4 blog (atom feed): fixed atom handling:
Goffi <goffi@goffi.org>
parents: 855
diff changeset
554 # date metadata
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1160
diff changeset
555 entry_elt.addElement("id", content=item["atom_id"])
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
556 updated = datetime.fromtimestamp(float(item["updated"]))
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
557 entry_elt.addElement(
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1160
diff changeset
558 "updated", content="{}Z".format(updated.isoformat("T"))
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
559 )
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
560 published = datetime.fromtimestamp(float(item["published"]))
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
561 entry_elt.addElement(
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1160
diff changeset
562 "published", content="{}Z".format(published.isoformat("T"))
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
563 )
879
2e0e9cf9efb4 blog (atom feed): fixed atom handling:
Goffi <goffi@goffi.org>
parents: 855
diff changeset
564
2e0e9cf9efb4 blog (atom feed): fixed atom handling:
Goffi <goffi@goffi.org>
parents: 855
diff changeset
565 # author metadata
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1160
diff changeset
566 author_elt = entry_elt.addElement("author")
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
567 author_elt.addElement("name", content=item.get("author", profile))
879
2e0e9cf9efb4 blog (atom feed): fixed atom handling:
Goffi <goffi@goffi.org>
parents: 855
diff changeset
568 try:
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
569 author_elt.addElement(
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1160
diff changeset
570 "uri", content="xmpp:{}".format(item["author_jid"])
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
571 )
879
2e0e9cf9efb4 blog (atom feed): fixed atom handling:
Goffi <goffi@goffi.org>
parents: 855
diff changeset
572 except KeyError:
2e0e9cf9efb4 blog (atom feed): fixed atom handling:
Goffi <goffi@goffi.org>
parents: 855
diff changeset
573 pass
2e0e9cf9efb4 blog (atom feed): fixed atom handling:
Goffi <goffi@goffi.org>
parents: 855
diff changeset
574 try:
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
575 author_elt.addElement("email", content=item["author_email"])
879
2e0e9cf9efb4 blog (atom feed): fixed atom handling:
Goffi <goffi@goffi.org>
parents: 855
diff changeset
576 except KeyError:
2e0e9cf9efb4 blog (atom feed): fixed atom handling:
Goffi <goffi@goffi.org>
parents: 855
diff changeset
577 pass
2e0e9cf9efb4 blog (atom feed): fixed atom handling:
Goffi <goffi@goffi.org>
parents: 855
diff changeset
578
899
bc3a3e804a7a blog(atom): added categories (tags) in Atom feed
Goffi <goffi@goffi.org>
parents: 898
diff changeset
579 # categories
1156
3048bd137aaf server, browser: changed blog items serialisation following changes in backend
Goffi <goffi@goffi.org>
parents: 1144
diff changeset
580 for tag in item.get('tags', []):
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1160
diff changeset
581 category_elt = entry_elt.addElement("category")
899
bc3a3e804a7a blog(atom): added categories (tags) in Atom feed
Goffi <goffi@goffi.org>
parents: 898
diff changeset
582 category_elt["term"] = tag
bc3a3e804a7a blog(atom): added categories (tags) in Atom feed
Goffi <goffi@goffi.org>
parents: 898
diff changeset
583
879
2e0e9cf9efb4 blog (atom feed): fixed atom handling:
Goffi <goffi@goffi.org>
parents: 855
diff changeset
584 # content
2e0e9cf9efb4 blog (atom feed): fixed atom handling:
Goffi <goffi@goffi.org>
parents: 855
diff changeset
585 try:
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
586 content_xhtml = item["content_xhtml"]
879
2e0e9cf9efb4 blog (atom feed): fixed atom handling:
Goffi <goffi@goffi.org>
parents: 855
diff changeset
587 except KeyError:
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
588 content_elt = entry_elt.addElement("content", content="content")
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
589 content_elt["type"] = "text"
879
2e0e9cf9efb4 blog (atom feed): fixed atom handling:
Goffi <goffi@goffi.org>
parents: 855
diff changeset
590 else:
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
591 content_elt = entry_elt.addElement("content")
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
592 content_elt["type"] = "xhtml"
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
593 content_elt.addChild(
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
594 xml_tools.ElementParser()(content_xhtml, namespace=C.NS_XHTML)
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
595 )
879
2e0e9cf9efb4 blog (atom feed): fixed atom handling:
Goffi <goffi@goffi.org>
parents: 855
diff changeset
596
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1160
diff changeset
597 atom_feed = '<?xml version="1.0" encoding="utf-8"?>\n{}'.format(
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
598 feed_elt.toXml()
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
599 )
879
2e0e9cf9efb4 blog (atom feed): fixed atom handling:
Goffi <goffi@goffi.org>
parents: 855
diff changeset
600 self.renderAtomFeed(atom_feed, request),
2e0e9cf9efb4 blog (atom feed): fixed atom handling:
Goffi <goffi@goffi.org>
parents: 855
diff changeset
601
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
602 self.host.bridge.mbGet(
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
603 pub_jid.userhost(),
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
604 "",
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
605 max_items,
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
606 [],
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
607 extra_dict,
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
608 C.SERVICE_PROFILE,
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
609 callback=gotItems,
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
610 )
879
2e0e9cf9efb4 blog (atom feed): fixed atom handling:
Goffi <goffi@goffi.org>
parents: 855
diff changeset
611
823
027139763511 server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents: 818
diff changeset
612 ## rendering
027139763511 server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents: 818
diff changeset
613
027139763511 server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents: 818
diff changeset
614 def _updateDict(self, value, dict_, key):
027139763511 server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents: 818
diff changeset
615 dict_[key] = value
027139763511 server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents: 818
diff changeset
616
027139763511 server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents: 818
diff changeset
617 def _getImageParams(self, options, key, default, alt):
027139763511 server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents: 818
diff changeset
618 """regexp from http://answers.oreilly.com/topic/280-how-to-validate-urls-with-regular-expressions/"""
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
619 url = options[key] if key in options else ""
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
620 regexp = (
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
621 r"^(https?|ftp)://[a-z0-9-]+(\.[a-z0-9-]+)+(/[\w-]+)*/[\w-]+\.(gif|png|jpg)$"
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
622 )
823
027139763511 server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents: 818
diff changeset
623 if re.match(regexp, url):
027139763511 server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents: 818
diff changeset
624 url = url
027139763511 server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents: 818
diff changeset
625 else:
027139763511 server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents: 818
diff changeset
626 url = default
027139763511 server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents: 818
diff changeset
627 return BlogImage(url, alt)
027139763511 server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents: 818
diff changeset
628
027139763511 server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents: 818
diff changeset
629 def renderError(self, failure, request, pub_jid):
891
14e611e38b67 server (blog): set HTTP status code to 500 on renderError
Goffi <goffi@goffi.org>
parents: 890
diff changeset
630 request.setResponseCode(500)
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
631 request.write(
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
632 self.useTemplate(
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
633 request, "static_blog_error", {"message": "Can't access requested data"}
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
634 )
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
635 )
823
027139763511 server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents: 818
diff changeset
636 request.finish()
027139763511 server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents: 818
diff changeset
637
027139763511 server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents: 818
diff changeset
638 def renderHTML(self, items, metadata, request, pub_jid, profile):
441
63017904c4d4 server_side: static blog retrieve page's title, meta description and keywords from the parameters
souliane <souliane@mailoo.org>
parents: 436
diff changeset
639 """Retrieve the user parameters before actually rendering the static blog
586
3eb3a2c0c011 browser and server side: uses RSM (XEP-0059)
souliane <souliane@mailoo.org>
parents: 487
diff changeset
640
823
027139763511 server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents: 818
diff changeset
641 @param items(list[tuple(dict, list)]): same as in self._renderHTML
725
c1abaa91a121 server (blog): update to the new mechanism in XEP-0277 + improvement:
souliane <souliane@mailoo.org>
parents: 717
diff changeset
642 @param metadata(dict): original node metadata
389
2d782349b88a server_side: display blog comments when you click on a main item header or title
souliane <souliane@mailoo.org>
parents: 388
diff changeset
643 @param request: HTTP request
727
3bd097380da7 server side (blog): fixes displaying the avatar
souliane <souliane@mailoo.org>
parents: 726
diff changeset
644 @param pub_jid (JID): publisher JID
3bd097380da7 server side (blog): fixes displaying the avatar
souliane <souliane@mailoo.org>
parents: 726
diff changeset
645 @param profile (unicode): %(doc_profile)s
389
2d782349b88a server_side: display blog comments when you click on a main item header or title
souliane <souliane@mailoo.org>
parents: 388
diff changeset
646 """
441
63017904c4d4 server_side: static blog retrieve page's title, meta description and keywords from the parameters
souliane <souliane@mailoo.org>
parents: 436
diff changeset
647 d_list = []
483
0bbbef1d53a8 server side (blog): use user's avatar a the blog's favicon + small refactorization
souliane <souliane@mailoo.org>
parents: 481
diff changeset
648 options = {}
441
63017904c4d4 server_side: static blog retrieve page's title, meta description and keywords from the parameters
souliane <souliane@mailoo.org>
parents: 436
diff changeset
649
950
67a59552f3e3 server (blog): fixed avatars handling, there is now a well-known URL to SERVICE_PROFILE cache
Goffi <goffi@goffi.org>
parents: 916
diff changeset
650 d = self.getAvatarURL(pub_jid, request)
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
651 d.addCallback(self._updateDict, options, "avatar")
823
027139763511 server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents: 818
diff changeset
652 d.addErrback(self.renderError, request, pub_jid)
027139763511 server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents: 818
diff changeset
653 d_list.append(d)
441
63017904c4d4 server_side: static blog retrieve page's title, meta description and keywords from the parameters
souliane <souliane@mailoo.org>
parents: 436
diff changeset
654
823
027139763511 server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents: 818
diff changeset
655 for param_name in PARAMS_TO_GET:
027139763511 server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents: 818
diff changeset
656 d = defer.Deferred()
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
657 self.host.bridge.asyncGetParamA(
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
658 param_name,
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
659 C.STATIC_BLOG_KEY,
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
660 "value",
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
661 C.SERVER_SECURITY_LIMIT,
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
662 profile,
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
663 callback=d.callback,
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
664 errback=d.errback,
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
665 )
823
027139763511 server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents: 818
diff changeset
666 d.addCallback(self._updateDict, options, param_name)
027139763511 server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents: 818
diff changeset
667 d.addErrback(self.renderError, request, pub_jid)
027139763511 server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents: 818
diff changeset
668 d_list.append(d)
441
63017904c4d4 server_side: static blog retrieve page's title, meta description and keywords from the parameters
souliane <souliane@mailoo.org>
parents: 436
diff changeset
669
823
027139763511 server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents: 818
diff changeset
670 dlist_d = defer.DeferredList(d_list)
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
671 dlist_d.addCallback(
1238
f55056bb67d4 replaced former use of "dummy" by "__"
Goffi <goffi@goffi.org>
parents: 1237
diff changeset
672 lambda __: self._renderHTML(items, metadata, options, request, pub_jid)
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
673 )
388
893451e35686 server_side: display blog banner if it is defined
souliane <souliane@mailoo.org>
parents: 375
diff changeset
674
823
027139763511 server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents: 818
diff changeset
675 def _renderHTML(self, items, metadata, options, request, pub_jid):
725
c1abaa91a121 server (blog): update to the new mechanism in XEP-0277 + improvement:
souliane <souliane@mailoo.org>
parents: 717
diff changeset
676 """Actually render the static blog.
746
25984ca4aef2 server side: special handling of Connection/JabberID and Connection/autoconnect parameter which has needed by QuickApp but restricted by security limit
Goffi <goffi@goffi.org>
parents: 743
diff changeset
677
725
c1abaa91a121 server (blog): update to the new mechanism in XEP-0277 + improvement:
souliane <souliane@mailoo.org>
parents: 717
diff changeset
678 If mblog_data is a list of dict, we are missing the comments items so we just
c1abaa91a121 server (blog): update to the new mechanism in XEP-0277 + improvement:
souliane <souliane@mailoo.org>
parents: 717
diff changeset
679 display the main items. If mblog_data is a list of couple, each couple is
c1abaa91a121 server (blog): update to the new mechanism in XEP-0277 + improvement:
souliane <souliane@mailoo.org>
parents: 717
diff changeset
680 associating a main item data with the list of its comments, so we render all.
c1abaa91a121 server (blog): update to the new mechanism in XEP-0277 + improvement:
souliane <souliane@mailoo.org>
parents: 717
diff changeset
681 @param items(list[tuple(dict, list)]): list of 2-tuple with
c1abaa91a121 server (blog): update to the new mechanism in XEP-0277 + improvement:
souliane <souliane@mailoo.org>
parents: 717
diff changeset
682 - item(dict): item microblog data
c1abaa91a121 server (blog): update to the new mechanism in XEP-0277 + improvement:
souliane <souliane@mailoo.org>
parents: 717
diff changeset
683 - comments_list(list[tuple]): list of 5-tuple with
c1abaa91a121 server (blog): update to the new mechanism in XEP-0277 + improvement:
souliane <souliane@mailoo.org>
parents: 717
diff changeset
684 - service (unicode): pubsub service where the comments node is
c1abaa91a121 server (blog): update to the new mechanism in XEP-0277 + improvement:
souliane <souliane@mailoo.org>
parents: 717
diff changeset
685 - node (unicode): comments node
c1abaa91a121 server (blog): update to the new mechanism in XEP-0277 + improvement:
souliane <souliane@mailoo.org>
parents: 717
diff changeset
686 - failure (unicode): empty in case of success, else error message
c1abaa91a121 server (blog): update to the new mechanism in XEP-0277 + improvement:
souliane <souliane@mailoo.org>
parents: 717
diff changeset
687 - comments(list[dict]): list of microblog data
c1abaa91a121 server (blog): update to the new mechanism in XEP-0277 + improvement:
souliane <souliane@mailoo.org>
parents: 717
diff changeset
688 - comments_metadata(dict): metadata of the comment node
c1abaa91a121 server (blog): update to the new mechanism in XEP-0277 + improvement:
souliane <souliane@mailoo.org>
parents: 717
diff changeset
689 @param metadata(dict): original node metadata
483
0bbbef1d53a8 server side (blog): use user's avatar a the blog's favicon + small refactorization
souliane <souliane@mailoo.org>
parents: 481
diff changeset
690 @param options: dict defining the blog's parameters
388
893451e35686 server_side: display blog banner if it is defined
souliane <souliane@mailoo.org>
parents: 375
diff changeset
691 @param request: the HTTP request
727
3bd097380da7 server side (blog): fixes displaying the avatar
souliane <souliane@mailoo.org>
parents: 726
diff changeset
692 @param pub_jid (JID): publisher JID
388
893451e35686 server_side: display blog banner if it is defined
souliane <souliane@mailoo.org>
parents: 375
diff changeset
693 """
483
0bbbef1d53a8 server side (blog): use user's avatar a the blog's favicon + small refactorization
souliane <souliane@mailoo.org>
parents: 481
diff changeset
694 if not isinstance(options, dict):
0bbbef1d53a8 server side (blog): use user's avatar a the blog's favicon + small refactorization
souliane <souliane@mailoo.org>
parents: 481
diff changeset
695 options = {}
727
3bd097380da7 server side (blog): fixes displaying the avatar
souliane <souliane@mailoo.org>
parents: 726
diff changeset
696 user = sanitizeHtml(pub_jid.user)
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
697 base_url = os.path.join("/blog/", user)
441
63017904c4d4 server_side: static blog retrieve page's title, meta description and keywords from the parameters
souliane <souliane@mailoo.org>
parents: 436
diff changeset
698
483
0bbbef1d53a8 server side (blog): use user's avatar a the blog's favicon + small refactorization
souliane <souliane@mailoo.org>
parents: 481
diff changeset
699 def getOption(key):
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
700 return sanitizeHtml(options[key]) if key in options else ""
441
63017904c4d4 server_side: static blog retrieve page's title, meta description and keywords from the parameters
souliane <souliane@mailoo.org>
parents: 436
diff changeset
701
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
702 avatar = os.path.normpath("/{}".format(getOption("avatar")))
702
d94feb0d849e server_side: give a better look to the static blog
souliane <souliane@mailoo.org>
parents: 694
diff changeset
703 title = getOption(C.STATIC_BLOG_PARAM_TITLE) or user
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
704 query_data = _urlencode(getDefaultQueryData(request)).decode("utf-8")
880
ccbad50e1426 blog, themes(default): added <link> element referencing xmpp: uri of the item
Goffi <goffi@goffi.org>
parents: 879
diff changeset
705
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
706 xmpp_uri = metadata["uri"]
880
ccbad50e1426 blog, themes(default): added <link> element referencing xmpp: uri of the item
Goffi <goffi@goffi.org>
parents: 879
diff changeset
707 if len(items) == 1:
ccbad50e1426 blog, themes(default): added <link> element referencing xmpp: uri of the item
Goffi <goffi@goffi.org>
parents: 879
diff changeset
708 # FIXME: that's really not a good way to get item id
ccbad50e1426 blog, themes(default): added <link> element referencing xmpp: uri of the item
Goffi <goffi@goffi.org>
parents: 879
diff changeset
709 # this must be changed after static blog refactorisation
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
710 item_id = items[0][0]["id"]
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1160
diff changeset
711 xmpp_uri += ";item={}".format(_quote(item_id))
880
ccbad50e1426 blog, themes(default): added <link> element referencing xmpp: uri of the item
Goffi <goffi@goffi.org>
parents: 879
diff changeset
712
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
713 data = {
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
714 "url_base": base_url,
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
715 "xmpp_uri": xmpp_uri,
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1160
diff changeset
716 "url_query": "?{}".format(query_data) if query_data else "",
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
717 "keywords": getOption(C.STATIC_BLOG_PARAM_KEYWORDS),
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
718 "description": getOption(C.STATIC_BLOG_PARAM_DESCRIPTION),
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
719 "title": title,
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
720 "favicon": avatar,
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
721 "banner_img": self._getImageParams(
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
722 options, C.STATIC_BLOG_PARAM_BANNER, avatar, title
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
723 ),
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
724 }
586
3eb3a2c0c011 browser and server side: uses RSM (XEP-0059)
souliane <souliane@mailoo.org>
parents: 487
diff changeset
725
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
726 data["navlinks"] = NavigationLinks(request, items, metadata, base_url)
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
727 data["messages"] = []
725
c1abaa91a121 server (blog): update to the new mechanism in XEP-0277 + improvement:
souliane <souliane@mailoo.org>
parents: 717
diff changeset
728 for item in items:
c1abaa91a121 server (blog): update to the new mechanism in XEP-0277 + improvement:
souliane <souliane@mailoo.org>
parents: 717
diff changeset
729 item, comments_list = item
c1abaa91a121 server (blog): update to the new mechanism in XEP-0277 + improvement:
souliane <souliane@mailoo.org>
parents: 717
diff changeset
730 comments, comments_count = [], 0
c1abaa91a121 server (blog): update to the new mechanism in XEP-0277 + improvement:
souliane <souliane@mailoo.org>
parents: 717
diff changeset
731 for node_comments in comments_list:
c1abaa91a121 server (blog): update to the new mechanism in XEP-0277 + improvement:
souliane <souliane@mailoo.org>
parents: 717
diff changeset
732 comments.extend(node_comments[3])
c1abaa91a121 server (blog): update to the new mechanism in XEP-0277 + improvement:
souliane <souliane@mailoo.org>
parents: 717
diff changeset
733 try:
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
734 comments_count += int(node_comments[4]["rsm_count"])
725
c1abaa91a121 server (blog): update to the new mechanism in XEP-0277 + improvement:
souliane <souliane@mailoo.org>
parents: 717
diff changeset
735 except KeyError:
c1abaa91a121 server (blog): update to the new mechanism in XEP-0277 + improvement:
souliane <souliane@mailoo.org>
parents: 717
diff changeset
736 pass
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
737 data["messages"].append(
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
738 BlogMessage(request, base_url, item, comments, comments_count)
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
739 )
586
3eb3a2c0c011 browser and server side: uses RSM (XEP-0059)
souliane <souliane@mailoo.org>
parents: 487
diff changeset
740
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
741 request.write(self.useTemplate(request, "static_blog", data))
10
c28a4840e1a8 server: microblog resource
Goffi <goffi@goffi.org>
parents:
diff changeset
742 request.finish()
243
63e9b680d3e7 browser_side, blog: better PEP8 compliance
souliane <souliane@mailoo.org>
parents: 229
diff changeset
743
823
027139763511 server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents: 818
diff changeset
744 def renderAtomFeed(self, feed, request):
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
745 request.write(feed.encode("utf-8"))
712
bf562fb9c273 server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents: 708
diff changeset
746 request.finish()
bf562fb9c273 server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents: 708
diff changeset
747
bf562fb9c273 server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents: 708
diff changeset
748
bf562fb9c273 server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents: 708
diff changeset
749 class NavigationLinks(object):
880
ccbad50e1426 blog, themes(default): added <link> element referencing xmpp: uri of the item
Goffi <goffi@goffi.org>
parents: 879
diff changeset
750 def __init__(self, request, items, metadata, base_url):
704
5319110a862c server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents: 702
diff changeset
751 """Build the navigation links.
5319110a862c server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents: 702
diff changeset
752
725
c1abaa91a121 server (blog): update to the new mechanism in XEP-0277 + improvement:
souliane <souliane@mailoo.org>
parents: 717
diff changeset
753 @param items (list): list of items
880
ccbad50e1426 blog, themes(default): added <link> element referencing xmpp: uri of the item
Goffi <goffi@goffi.org>
parents: 879
diff changeset
754 @param metadata (dict): rsm data
704
5319110a862c server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents: 702
diff changeset
755 @param base_url (unicode): the base URL for this user's blog
5319110a862c server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents: 702
diff changeset
756 @return: dict
5319110a862c server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents: 702
diff changeset
757 """
880
ccbad50e1426 blog, themes(default): added <link> element referencing xmpp: uri of the item
Goffi <goffi@goffi.org>
parents: 879
diff changeset
758 # FIXME: this code must be refactorized, it is fragile
ccbad50e1426 blog, themes(default): added <link> element referencing xmpp: uri of the item
Goffi <goffi@goffi.org>
parents: 879
diff changeset
759 # and difficult to maintain
ccbad50e1426 blog, themes(default): added <link> element referencing xmpp: uri of the item
Goffi <goffi@goffi.org>
parents: 879
diff changeset
760
828
0c824ebe9d87 server (blog): implemented tag/category filtering:
Goffi <goffi@goffi.org>
parents: 827
diff changeset
761 # query data which must be present in all links
0c824ebe9d87 server (blog): implemented tag/category filtering:
Goffi <goffi@goffi.org>
parents: 827
diff changeset
762 default_query_data = getDefaultQueryData(request)
0c824ebe9d87 server (blog): implemented tag/category filtering:
Goffi <goffi@goffi.org>
parents: 827
diff changeset
763
0c824ebe9d87 server (blog): implemented tag/category filtering:
Goffi <goffi@goffi.org>
parents: 827
diff changeset
764 # which links we need to display
823
027139763511 server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents: 818
diff changeset
765 if request.display_single:
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
766 links = ("later_message", "older_message")
823
027139763511 server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents: 818
diff changeset
767 # key must exist when using the template
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
768 self.later_messages = self.older_messages = ""
823
027139763511 server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents: 818
diff changeset
769 else:
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
770 links = ("later_messages", "older_messages")
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
771 self.later_message = self.older_message = ""
704
5319110a862c server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents: 702
diff changeset
772
828
0c824ebe9d87 server (blog): implemented tag/category filtering:
Goffi <goffi@goffi.org>
parents: 827
diff changeset
773 # now we set the links according to RSM
823
027139763511 server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents: 818
diff changeset
774 for key in links:
828
0c824ebe9d87 server (blog): implemented tag/category filtering:
Goffi <goffi@goffi.org>
parents: 827
diff changeset
775 query_data = default_query_data.copy()
704
5319110a862c server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents: 702
diff changeset
776
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
777 if key.startswith("later_message"):
823
027139763511 server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents: 818
diff changeset
778 try:
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
779 index = int(metadata["rsm_index"])
823
027139763511 server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents: 818
diff changeset
780 except (KeyError, ValueError):
027139763511 server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents: 818
diff changeset
781 pass
027139763511 server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents: 818
diff changeset
782 else:
027139763511 server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents: 818
diff changeset
783 if index == 0:
027139763511 server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents: 818
diff changeset
784 # we don't show this link on first page
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
785 setattr(self, key, "")
823
027139763511 server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents: 818
diff changeset
786 continue
027139763511 server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents: 818
diff changeset
787 try:
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
788 query_data["before"] = metadata["rsm_first"].encode("utf-8")
823
027139763511 server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents: 818
diff changeset
789 except KeyError:
027139763511 server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents: 818
diff changeset
790 pass
704
5319110a862c server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents: 702
diff changeset
791 else:
823
027139763511 server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents: 818
diff changeset
792 try:
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
793 index = int(metadata["rsm_index"])
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
794 count = int(metadata.get("rsm_count"))
823
027139763511 server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents: 818
diff changeset
795 except (KeyError, ValueError):
027139763511 server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents: 818
diff changeset
796 # XXX: if we don't have index or count, we can't know if we
027139763511 server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents: 818
diff changeset
797 # are on the last page or not
027139763511 server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents: 818
diff changeset
798 pass
027139763511 server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents: 818
diff changeset
799 else:
027139763511 server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents: 818
diff changeset
800 # if we have index, we don't show the after link
027139763511 server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents: 818
diff changeset
801 # on the last page
027139763511 server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents: 818
diff changeset
802 if index + len(items) >= count:
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
803 setattr(self, key, "")
823
027139763511 server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents: 818
diff changeset
804 continue
027139763511 server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents: 818
diff changeset
805 try:
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
806 query_data["after"] = metadata["rsm_last"].encode("utf-8")
823
027139763511 server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents: 818
diff changeset
807 except KeyError:
027139763511 server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents: 818
diff changeset
808 pass
704
5319110a862c server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents: 702
diff changeset
809
708
e9a6cbb924e6 server_side: fixes static blog navigation links
souliane <souliane@mailoo.org>
parents: 705
diff changeset
810 if request.display_single:
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
811 query_data["max"] = 1
704
5319110a862c server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents: 702
diff changeset
812
893
298fbe562060 blog: escape "&" when encoding URL, so they can be used without escaping in the HTML template
Goffi <goffi@goffi.org>
parents: 892
diff changeset
813 link = "{}?{}".format(base_url, _urlencode(query_data))
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
814 setattr(self, key, BlogLink(link, key, key.replace("_", " ")))
704
5319110a862c server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents: 702
diff changeset
815
712
bf562fb9c273 server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents: 708
diff changeset
816
bf562fb9c273 server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents: 708
diff changeset
817 class BlogImage(object):
bf562fb9c273 server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents: 708
diff changeset
818 def __init__(self, url_, alt):
bf562fb9c273 server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents: 708
diff changeset
819 self.url = url_
bf562fb9c273 server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents: 708
diff changeset
820 self.alt = alt
bf562fb9c273 server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents: 708
diff changeset
821
704
5319110a862c server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents: 702
diff changeset
822
712
bf562fb9c273 server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents: 708
diff changeset
823 class BlogLink(object):
bf562fb9c273 server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents: 708
diff changeset
824 def __init__(self, url_, style, text):
bf562fb9c273 server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents: 708
diff changeset
825 self.url = url_
bf562fb9c273 server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents: 708
diff changeset
826 self.style = style
bf562fb9c273 server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents: 708
diff changeset
827 self.text = text
704
5319110a862c server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents: 702
diff changeset
828
5319110a862c server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents: 702
diff changeset
829
712
bf562fb9c273 server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents: 708
diff changeset
830 class BlogMessage(object):
725
c1abaa91a121 server (blog): update to the new mechanism in XEP-0277 + improvement:
souliane <souliane@mailoo.org>
parents: 717
diff changeset
831 def __init__(self, request, base_url, entry, comments=None, comments_count=0):
712
bf562fb9c273 server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents: 708
diff changeset
832 """
bf562fb9c273 server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents: 708
diff changeset
833
bf562fb9c273 server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents: 708
diff changeset
834 @param request: HTTP request
bf562fb9c273 server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents: 708
diff changeset
835 @param base_url (unicode): the base URL
725
c1abaa91a121 server (blog): update to the new mechanism in XEP-0277 + improvement:
souliane <souliane@mailoo.org>
parents: 717
diff changeset
836 @param entry(dict): item microblog data
c1abaa91a121 server (blog): update to the new mechanism in XEP-0277 + improvement:
souliane <souliane@mailoo.org>
parents: 717
diff changeset
837 @param comments(list[dict]): list of microblog data
c1abaa91a121 server (blog): update to the new mechanism in XEP-0277 + improvement:
souliane <souliane@mailoo.org>
parents: 717
diff changeset
838 @param comments_count (int): total number of comments
712
bf562fb9c273 server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents: 708
diff changeset
839 """
854
0dfb76b13115 server (blog): fixes:
Goffi <goffi@goffi.org>
parents: 847
diff changeset
840 if comments is None:
0dfb76b13115 server (blog): fixes:
Goffi <goffi@goffi.org>
parents: 847
diff changeset
841 comments = []
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
842 timestamp = float(entry.get("published", 0))
746
25984ca4aef2 server side: special handling of Connection/JabberID and Connection/autoconnect parameter which has needed by QuickApp but restricted by security limit
Goffi <goffi@goffi.org>
parents: 743
diff changeset
843
725
c1abaa91a121 server (blog): update to the new mechanism in XEP-0277 + improvement:
souliane <souliane@mailoo.org>
parents: 717
diff changeset
844 # FIXME: for now we assume that the comments' depth is only 1
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
845 is_comment = not entry.get("comments", False)
712
bf562fb9c273 server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents: 708
diff changeset
846
bf562fb9c273 server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents: 708
diff changeset
847 self.date = datetime.fromtimestamp(timestamp)
725
c1abaa91a121 server (blog): update to the new mechanism in XEP-0277 + improvement:
souliane <souliane@mailoo.org>
parents: 717
diff changeset
848 self.type = "comment" if is_comment else "main_item"
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
849 self.style = "mblog_comment" if is_comment else ""
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
850 self.content = self.getText(entry, "content")
704
5319110a862c server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents: 702
diff changeset
851
712
bf562fb9c273 server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents: 708
diff changeset
852 if is_comment:
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1160
diff changeset
853 self.author = _("from {}").format(entry["author"])
712
bf562fb9c273 server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents: 708
diff changeset
854 else:
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
855 self.author = "&nbsp;"
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
856 self.url = "{}/{}".format(base_url, _quote(entry["id"]))
828
0c824ebe9d87 server (blog): implemented tag/category filtering:
Goffi <goffi@goffi.org>
parents: 827
diff changeset
857 query_data = getDefaultQueryData(request)
0c824ebe9d87 server (blog): implemented tag/category filtering:
Goffi <goffi@goffi.org>
parents: 827
diff changeset
858 if query_data:
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
859 self.url += "?{}".format(_urlencode(query_data))
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
860 self.title = self.getText(entry, "title")
1156
3048bd137aaf server, browser: changed blog items serialisation following changes in backend
Goffi <goffi@goffi.org>
parents: 1144
diff changeset
861 self.tags = [sanitizeHtml(tag) for tag in entry.get('tags', [])]
712
bf562fb9c273 server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents: 708
diff changeset
862
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1160
diff changeset
863 count_text = lambda count: D_("comments") if count > 1 else D_("comment")
704
5319110a862c server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents: 702
diff changeset
864
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1160
diff changeset
865 self.comments_text = "{} {}".format(
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
866 comments_count, count_text(comments_count)
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
867 )
712
bf562fb9c273 server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents: 708
diff changeset
868
bf562fb9c273 server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents: 708
diff changeset
869 delta = comments_count - len(comments)
bf562fb9c273 server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents: 708
diff changeset
870 if request.display_single and delta > 0:
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
871 prev_url = "{}?{}".format(
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
872 self.url, _urlencode({"comments_max": comments_count})
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
873 )
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1160
diff changeset
874 prev_text = D_("show {count} previous {comments}").format(
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
875 count=delta, comments=count_text(delta)
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
876 )
712
bf562fb9c273 server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents: 708
diff changeset
877 self.all_comments_link = BlogLink(prev_url, "comments_link", prev_text)
bf562fb9c273 server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents: 708
diff changeset
878
bf562fb9c273 server_side: use Jinja2 template engine for static blog
souliane <souliane@mailoo.org>
parents: 708
diff changeset
879 if comments:
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
880 self.comments = [
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
881 BlogMessage(request, base_url, comment) for comment in comments
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
882 ]
704
5319110a862c server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents: 702
diff changeset
883
5319110a862c server_side: static blog uses the default template
souliane <souliane@mailoo.org>
parents: 702
diff changeset
884 def getText(self, entry, key):
823
027139763511 server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents: 818
diff changeset
885 try:
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
886 xhtml = entry["{}_xhtml".format(key)]
823
027139763511 server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents: 818
diff changeset
887 except KeyError:
027139763511 server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents: 818
diff changeset
888 try:
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1054
diff changeset
889 processor = addURLToText if key.startswith("content") else sanitizeHtml
823
027139763511 server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents: 818
diff changeset
890 return convertNewLinesToXHTML(processor(entry[key]))
027139763511 server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents: 818
diff changeset
891 except KeyError:
027139763511 server (blog): cleaning & improvments:
Goffi <goffi@goffi.org>
parents: 818
diff changeset
892 return None
854
0dfb76b13115 server (blog): fixes:
Goffi <goffi@goffi.org>
parents: 847
diff changeset
893 else:
0dfb76b13115 server (blog): fixes:
Goffi <goffi@goffi.org>
parents: 847
diff changeset
894 # FIXME: empty <div /> elements provoke rendering issue
0dfb76b13115 server (blog): fixes:
Goffi <goffi@goffi.org>
parents: 847
diff changeset
895 # this regex is a temporary workadound, need more investigation
0dfb76b13115 server (blog): fixes:
Goffi <goffi@goffi.org>
parents: 847
diff changeset
896 xhtml = re_strip_empty_div.sub("", xhtml)
0dfb76b13115 server (blog): fixes:
Goffi <goffi@goffi.org>
parents: 847
diff changeset
897 return fixXHTMLLinks(xhtml)