annotate libervia/web/pages/blog/view/page_meta.py @ 1598:86c7a3a625d5

server: always start a new session on connection: The session was kept when a user was connecting from service profile (but not from other profiles), this was leading to session fixation vulnerability (an attacker on the same machine could get service profile session cookie, and use it when a victim would log-in). This patch fixes it by always starting a new session on connection. fix 443
author Goffi <goffi@goffi.org>
date Fri, 23 Feb 2024 13:35:24 +0100
parents eb00d593801d
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1207
diff changeset
1 #!/usr/bin/env python3
1239
f511f8fbbf8a fixed shebangs
Goffi <goffi@goffi.org>
parents: 1229
diff changeset
2
1229
acec8e9185db pages: replaced deprecated `cgi.escape` by `html.escape`
Goffi <goffi@goffi.org>
parents: 1219
diff changeset
3 import html
1493
1702b8c821c4 pages (blog/view): avoid infinite recursion when comment nodes are making a loop
Goffi <goffi@goffi.org>
parents: 1491
diff changeset
4 from typing import Any, Dict, Optional
1702b8c821c4 pages (blog/view): avoid infinite recursion when comment nodes are making a loop
Goffi <goffi@goffi.org>
parents: 1491
diff changeset
5
1518
eb00d593801d refactoring: rename `libervia` to `libervia.web` + update imports following backend changes
Goffi <goffi@goffi.org>
parents: 1509
diff changeset
6 from libervia.backend.core.i18n import D_, _
eb00d593801d refactoring: rename `libervia` to `libervia.web` + update imports following backend changes
Goffi <goffi@goffi.org>
parents: 1509
diff changeset
7 from libervia.backend.core.log import getLogger
eb00d593801d refactoring: rename `libervia` to `libervia.web` + update imports following backend changes
Goffi <goffi@goffi.org>
parents: 1509
diff changeset
8 from libervia.backend.tools.common import uri
eb00d593801d refactoring: rename `libervia` to `libervia.web` + update imports following backend changes
Goffi <goffi@goffi.org>
parents: 1509
diff changeset
9 from libervia.backend.tools.common import data_format
eb00d593801d refactoring: rename `libervia` to `libervia.web` + update imports following backend changes
Goffi <goffi@goffi.org>
parents: 1509
diff changeset
10 from libervia.backend.tools.common import regex
eb00d593801d refactoring: rename `libervia` to `libervia.web` + update imports following backend changes
Goffi <goffi@goffi.org>
parents: 1509
diff changeset
11 from libervia.backend.tools.common.template import safe
1493
1702b8c821c4 pages (blog/view): avoid infinite recursion when comment nodes are making a loop
Goffi <goffi@goffi.org>
parents: 1491
diff changeset
12 from twisted.web import server
1702b8c821c4 pages (blog/view): avoid infinite recursion when comment nodes are making a loop
Goffi <goffi@goffi.org>
parents: 1491
diff changeset
13 from twisted.words.protocols.jabber import jid
1702b8c821c4 pages (blog/view): avoid infinite recursion when comment nodes are making a loop
Goffi <goffi@goffi.org>
parents: 1491
diff changeset
14
1518
eb00d593801d refactoring: rename `libervia` to `libervia.web` + update imports following backend changes
Goffi <goffi@goffi.org>
parents: 1509
diff changeset
15 from libervia.web.server import utils
eb00d593801d refactoring: rename `libervia` to `libervia.web` + update imports following backend changes
Goffi <goffi@goffi.org>
parents: 1509
diff changeset
16 from libervia.web.server.constants import Const as C
eb00d593801d refactoring: rename `libervia` to `libervia.web` + update imports following backend changes
Goffi <goffi@goffi.org>
parents: 1509
diff changeset
17 from libervia.web.server.utils import SubPage
1156
3048bd137aaf server, browser: changed blog items serialisation following changes in backend
Goffi <goffi@goffi.org>
parents: 1145
diff changeset
18
1145
29eb15062416 pages: set __name__ for imported pages
Goffi <goffi@goffi.org>
parents: 1141
diff changeset
19 log = getLogger(__name__)
1077
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
20
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
21 """generic blog (with service/node provided)"""
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1207
diff changeset
22 name = 'blog_view'
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1207
diff changeset
23 template = "blog/articles.html"
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1207
diff changeset
24 uri_handlers = {('pubsub', 'microblog'): 'microblog_uri'}
1077
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
25
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
26 URL_LIMIT_MARK = 90 # if canonical URL is longer than that, text will not be appended
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
27
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
28
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
29 def microblog_uri(self, uri_data):
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1207
diff changeset
30 args = [uri_data['path'], uri_data['node']]
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1207
diff changeset
31 if 'item' in uri_data:
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1207
diff changeset
32 args.extend(['id', uri_data['item']])
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1493
diff changeset
33 return self.get_url(*args)
1077
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
34
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
35 def parse_url(self, request):
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
36 """URL is /[service]/[node]/[filter_keyword]/[item]|[other]
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
37
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
38 if [node] is '@', default namespace is used
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
39 if a value is unset, default one will be used
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
40 keyword can be one of:
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
41 id: next value is a item id
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
42 tag: next value is a blog tag
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
43 """
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1493
diff changeset
44 data = self.get_r_data(request)
1077
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
45
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
46 try:
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1493
diff changeset
47 service = self.next_path(request)
1077
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
48 except IndexError:
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1207
diff changeset
49 data['service'] = ''
1077
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
50 else:
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
51 try:
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1207
diff changeset
52 data["service"] = jid.JID(service)
1077
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
53 except Exception:
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1207
diff changeset
54 log.warning(_("bad service entered: {}").format(service))
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1493
diff changeset
55 self.page_error(request, C.HTTP_BAD_REQUEST)
1077
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
56
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
57 try:
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1493
diff changeset
58 node = self.next_path(request)
1077
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
59 except IndexError:
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1207
diff changeset
60 node = '@'
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1207
diff changeset
61 data['node'] = '' if node == '@' else node
1077
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
62
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
63 try:
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1493
diff changeset
64 filter_kw = data['filter_keyword'] = self.next_path(request)
1077
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
65 except IndexError:
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1207
diff changeset
66 filter_kw = '@'
1077
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
67 else:
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1207
diff changeset
68 if filter_kw == '@':
1171
469d0de8da0e pages (blog, u): added atom feed link in "links" template data.
Goffi <goffi@goffi.org>
parents: 1156
diff changeset
69 # No filter, this is used when a subpage is needed, notably Atom feed
469d0de8da0e pages (blog, u): added atom feed link in "links" template data.
Goffi <goffi@goffi.org>
parents: 1156
diff changeset
70 pass
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1207
diff changeset
71 elif filter_kw == 'id':
1077
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
72 try:
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1493
diff changeset
73 data['item'] = self.next_path(request)
1077
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
74 except IndexError:
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1493
diff changeset
75 self.page_error(request, C.HTTP_BAD_REQUEST)
1077
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
76 # we get one more argument in case text has been added to have a nice URL
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
77 try:
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1493
diff changeset
78 self.next_path(request)
1077
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
79 except IndexError:
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
80 pass
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1207
diff changeset
81 elif filter_kw == 'tag':
1077
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
82 try:
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1493
diff changeset
83 data['tag'] = self.next_path(request)
1077
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
84 except IndexError:
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1493
diff changeset
85 self.page_error(request, C.HTTP_BAD_REQUEST)
1077
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
86 else:
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
87 # invalid filter keyword
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1207
diff changeset
88 log.warning(_("invalid filter keyword: {filter_kw}").format(
1171
469d0de8da0e pages (blog, u): added atom feed link in "links" template data.
Goffi <goffi@goffi.org>
parents: 1156
diff changeset
89 filter_kw=filter_kw))
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1493
diff changeset
90 self.page_error(request, C.HTTP_BAD_REQUEST)
1077
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
91
1171
469d0de8da0e pages (blog, u): added atom feed link in "links" template data.
Goffi <goffi@goffi.org>
parents: 1156
diff changeset
92 # if URL is parsed here, we'll have atom.xml available and we need to
469d0de8da0e pages (blog, u): added atom feed link in "links" template data.
Goffi <goffi@goffi.org>
parents: 1156
diff changeset
93 # add the link to the page
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1493
diff changeset
94 atom_url = self.get_url_by_path(
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1207
diff changeset
95 SubPage('blog_view'),
1171
469d0de8da0e pages (blog, u): added atom feed link in "links" template data.
Goffi <goffi@goffi.org>
parents: 1156
diff changeset
96 service,
469d0de8da0e pages (blog, u): added atom feed link in "links" template data.
Goffi <goffi@goffi.org>
parents: 1156
diff changeset
97 node,
469d0de8da0e pages (blog, u): added atom feed link in "links" template data.
Goffi <goffi@goffi.org>
parents: 1156
diff changeset
98 filter_kw,
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1207
diff changeset
99 SubPage('blog_feed_atom'),
1171
469d0de8da0e pages (blog, u): added atom feed link in "links" template data.
Goffi <goffi@goffi.org>
parents: 1156
diff changeset
100 )
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1207
diff changeset
101 request.template_data['atom_url'] = atom_url
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1207
diff changeset
102 request.template_data.setdefault('links', []).append({
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1207
diff changeset
103 "href": atom_url,
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1207
diff changeset
104 "type": "application/atom+xml",
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1207
diff changeset
105 "rel": "alternate",
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1207
diff changeset
106 "title": "{service}'s blog".format(service=service)})
1171
469d0de8da0e pages (blog, u): added atom feed link in "links" template data.
Goffi <goffi@goffi.org>
parents: 1156
diff changeset
107
1077
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
108
1419
6fc41f000d24 pages (blog/view, u, files/list): custom breadcrumbs:
Goffi <goffi@goffi.org>
parents: 1406
diff changeset
109 def add_breadcrumb(self, request, breadcrumbs):
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1493
diff changeset
110 data = self.get_r_data(request)
1419
6fc41f000d24 pages (blog/view, u, files/list): custom breadcrumbs:
Goffi <goffi@goffi.org>
parents: 1406
diff changeset
111 breadcrumbs.append({
6fc41f000d24 pages (blog/view, u, files/list): custom breadcrumbs:
Goffi <goffi@goffi.org>
parents: 1406
diff changeset
112 "label": D_("Feed"),
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1493
diff changeset
113 "url": self.get_url(data["service"].full(), data.get("node", "@"))
1419
6fc41f000d24 pages (blog/view, u, files/list): custom breadcrumbs:
Goffi <goffi@goffi.org>
parents: 1406
diff changeset
114 })
6fc41f000d24 pages (blog/view, u, files/list): custom breadcrumbs:
Goffi <goffi@goffi.org>
parents: 1406
diff changeset
115 if "item" in data:
6fc41f000d24 pages (blog/view, u, files/list): custom breadcrumbs:
Goffi <goffi@goffi.org>
parents: 1406
diff changeset
116 breadcrumbs.append({
6fc41f000d24 pages (blog/view, u, files/list): custom breadcrumbs:
Goffi <goffi@goffi.org>
parents: 1406
diff changeset
117 "label": D_("Post"),
6fc41f000d24 pages (blog/view, u, files/list): custom breadcrumbs:
Goffi <goffi@goffi.org>
parents: 1406
diff changeset
118 })
6fc41f000d24 pages (blog/view, u, files/list): custom breadcrumbs:
Goffi <goffi@goffi.org>
parents: 1406
diff changeset
119
6fc41f000d24 pages (blog/view, u, files/list): custom breadcrumbs:
Goffi <goffi@goffi.org>
parents: 1406
diff changeset
120
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1493
diff changeset
121 async def append_comments(
1493
1702b8c821c4 pages (blog/view): avoid infinite recursion when comment nodes are making a loop
Goffi <goffi@goffi.org>
parents: 1491
diff changeset
122 self,
1702b8c821c4 pages (blog/view): avoid infinite recursion when comment nodes are making a loop
Goffi <goffi@goffi.org>
parents: 1491
diff changeset
123 request: server.Request,
1702b8c821c4 pages (blog/view): avoid infinite recursion when comment nodes are making a loop
Goffi <goffi@goffi.org>
parents: 1491
diff changeset
124 blog_items: dict,
1702b8c821c4 pages (blog/view): avoid infinite recursion when comment nodes are making a loop
Goffi <goffi@goffi.org>
parents: 1491
diff changeset
125 profile: str,
1702b8c821c4 pages (blog/view): avoid infinite recursion when comment nodes are making a loop
Goffi <goffi@goffi.org>
parents: 1491
diff changeset
126 _seen: Optional[set] = None
1702b8c821c4 pages (blog/view): avoid infinite recursion when comment nodes are making a loop
Goffi <goffi@goffi.org>
parents: 1491
diff changeset
127 ) -> None:
1702b8c821c4 pages (blog/view): avoid infinite recursion when comment nodes are making a loop
Goffi <goffi@goffi.org>
parents: 1491
diff changeset
128 """Recursively download and append comments of items
1702b8c821c4 pages (blog/view): avoid infinite recursion when comment nodes are making a loop
Goffi <goffi@goffi.org>
parents: 1491
diff changeset
129
1702b8c821c4 pages (blog/view): avoid infinite recursion when comment nodes are making a loop
Goffi <goffi@goffi.org>
parents: 1491
diff changeset
130 @param blog_items: items data
1702b8c821c4 pages (blog/view): avoid infinite recursion when comment nodes are making a loop
Goffi <goffi@goffi.org>
parents: 1491
diff changeset
131 @param profile: Libervia profile
1702b8c821c4 pages (blog/view): avoid infinite recursion when comment nodes are making a loop
Goffi <goffi@goffi.org>
parents: 1491
diff changeset
132 @param _seen: used to avoid infinite recursion. For internal use only
1702b8c821c4 pages (blog/view): avoid infinite recursion when comment nodes are making a loop
Goffi <goffi@goffi.org>
parents: 1491
diff changeset
133 """
1702b8c821c4 pages (blog/view): avoid infinite recursion when comment nodes are making a loop
Goffi <goffi@goffi.org>
parents: 1491
diff changeset
134 if _seen is None:
1702b8c821c4 pages (blog/view): avoid infinite recursion when comment nodes are making a loop
Goffi <goffi@goffi.org>
parents: 1491
diff changeset
135 _seen = set()
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1493
diff changeset
136 await self.fill_missing_identities(
1322
a0954b6610aa pages: identities are not using `data_objects` anymore:
Goffi <goffi@goffi.org>
parents: 1302
diff changeset
137 request, [i['author_jid'] for i in blog_items['items']])
1491
3002ea1d6ae9 pages (blog/view): don't use backend cache when "no cache" is requested
Goffi <goffi@goffi.org>
parents: 1483
diff changeset
138 extra: Dict[str, Any] = {C.KEY_ORDER_BY: C.ORDER_BY_CREATION}
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1493
diff changeset
139 if not self.use_cache(request):
1491
3002ea1d6ae9 pages (blog/view): don't use backend cache when "no cache" is requested
Goffi <goffi@goffi.org>
parents: 1483
diff changeset
140 extra[C.KEY_USE_CACHE] = False
1302
04e7dd6b6f4d pages (blog, tickets, merge-requests): updated code to handle new serialisation, following backend changes
Goffi <goffi@goffi.org>
parents: 1266
diff changeset
141 for blog_item in blog_items['items']:
04e7dd6b6f4d pages (blog, tickets, merge-requests): updated code to handle new serialisation, following backend changes
Goffi <goffi@goffi.org>
parents: 1266
diff changeset
142 for comment_data in blog_item['comments']:
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1207
diff changeset
143 service = comment_data['service']
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1207
diff changeset
144 node = comment_data['node']
1493
1702b8c821c4 pages (blog/view): avoid infinite recursion when comment nodes are making a loop
Goffi <goffi@goffi.org>
parents: 1491
diff changeset
145 service_node = (service, node)
1702b8c821c4 pages (blog/view): avoid infinite recursion when comment nodes are making a loop
Goffi <goffi@goffi.org>
parents: 1491
diff changeset
146 if service_node in _seen:
1702b8c821c4 pages (blog/view): avoid infinite recursion when comment nodes are making a loop
Goffi <goffi@goffi.org>
parents: 1491
diff changeset
147 log.warning(
1702b8c821c4 pages (blog/view): avoid infinite recursion when comment nodes are making a loop
Goffi <goffi@goffi.org>
parents: 1491
diff changeset
148 f"Items from {node!r} at {service} have already been retrieved, "
1702b8c821c4 pages (blog/view): avoid infinite recursion when comment nodes are making a loop
Goffi <goffi@goffi.org>
parents: 1491
diff changeset
149 "there is a recursion at this service"
1702b8c821c4 pages (blog/view): avoid infinite recursion when comment nodes are making a loop
Goffi <goffi@goffi.org>
parents: 1491
diff changeset
150 )
1702b8c821c4 pages (blog/view): avoid infinite recursion when comment nodes are making a loop
Goffi <goffi@goffi.org>
parents: 1491
diff changeset
151 comment_data["items"] = []
1702b8c821c4 pages (blog/view): avoid infinite recursion when comment nodes are making a loop
Goffi <goffi@goffi.org>
parents: 1491
diff changeset
152 continue
1702b8c821c4 pages (blog/view): avoid infinite recursion when comment nodes are making a loop
Goffi <goffi@goffi.org>
parents: 1491
diff changeset
153 else:
1702b8c821c4 pages (blog/view): avoid infinite recursion when comment nodes are making a loop
Goffi <goffi@goffi.org>
parents: 1491
diff changeset
154 _seen.add(service_node)
1077
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
155 try:
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1493
diff changeset
156 comments_data = await self.host.bridge_call('mb_get',
1077
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
157 service,
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
158 node,
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
159 C.NO_LIMIT,
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
160 [],
1447
907f519faaf0 pages: pubsub's `extra` is now serialised, following backend change
Goffi <goffi@goffi.org>
parents: 1419
diff changeset
161 data_format.serialise(
1491
3002ea1d6ae9 pages (blog/view): don't use backend cache when "no cache" is requested
Goffi <goffi@goffi.org>
parents: 1483
diff changeset
162 extra
1447
907f519faaf0 pages: pubsub's `extra` is now serialised, following backend change
Goffi <goffi@goffi.org>
parents: 1419
diff changeset
163 ),
1077
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
164 profile)
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
165 except Exception as e:
1302
04e7dd6b6f4d pages (blog, tickets, merge-requests): updated code to handle new serialisation, following backend changes
Goffi <goffi@goffi.org>
parents: 1266
diff changeset
166 log.warning(
04e7dd6b6f4d pages (blog, tickets, merge-requests): updated code to handle new serialisation, following backend changes
Goffi <goffi@goffi.org>
parents: 1266
diff changeset
167 _("Can't get comments at {node} (service: {service}): {msg}").format(
04e7dd6b6f4d pages (blog, tickets, merge-requests): updated code to handle new serialisation, following backend changes
Goffi <goffi@goffi.org>
parents: 1266
diff changeset
168 service=service,
04e7dd6b6f4d pages (blog, tickets, merge-requests): updated code to handle new serialisation, following backend changes
Goffi <goffi@goffi.org>
parents: 1266
diff changeset
169 node=node,
04e7dd6b6f4d pages (blog, tickets, merge-requests): updated code to handle new serialisation, following backend changes
Goffi <goffi@goffi.org>
parents: 1266
diff changeset
170 msg=e))
1403
1357d04107d1 pages (blog/view): set empty comments when comments node is missing
Goffi <goffi@goffi.org>
parents: 1376
diff changeset
171 comment_data['items'] = []
1077
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
172 continue
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
173
1302
04e7dd6b6f4d pages (blog, tickets, merge-requests): updated code to handle new serialisation, following backend changes
Goffi <goffi@goffi.org>
parents: 1266
diff changeset
174 comments = data_format.deserialise(comments_data)
1493
1702b8c821c4 pages (blog/view): avoid infinite recursion when comment nodes are making a loop
Goffi <goffi@goffi.org>
parents: 1491
diff changeset
175 if comments is None:
1702b8c821c4 pages (blog/view): avoid infinite recursion when comment nodes are making a loop
Goffi <goffi@goffi.org>
parents: 1491
diff changeset
176 log.error(f"Comments should not be None: {comment_data}")
1702b8c821c4 pages (blog/view): avoid infinite recursion when comment nodes are making a loop
Goffi <goffi@goffi.org>
parents: 1491
diff changeset
177 comment_data["items"] = []
1702b8c821c4 pages (blog/view): avoid infinite recursion when comment nodes are making a loop
Goffi <goffi@goffi.org>
parents: 1491
diff changeset
178 continue
1302
04e7dd6b6f4d pages (blog, tickets, merge-requests): updated code to handle new serialisation, following backend changes
Goffi <goffi@goffi.org>
parents: 1266
diff changeset
179 comment_data['items'] = comments['items']
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1493
diff changeset
180 await append_comments(self, request, comments, profile, _seen=_seen)
1077
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
181
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1493
diff changeset
182 async def get_blog_items(
1466
cff720e26089 pages (blog/view): activate pagination when a single item is shown:
Goffi <goffi@goffi.org>
parents: 1419
diff changeset
183 self,
cff720e26089 pages (blog/view): activate pagination when a single item is shown:
Goffi <goffi@goffi.org>
parents: 1419
diff changeset
184 request: server.Request,
cff720e26089 pages (blog/view): activate pagination when a single item is shown:
Goffi <goffi@goffi.org>
parents: 1419
diff changeset
185 service: jid.JID,
cff720e26089 pages (blog/view): activate pagination when a single item is shown:
Goffi <goffi@goffi.org>
parents: 1419
diff changeset
186 node: str,
cff720e26089 pages (blog/view): activate pagination when a single item is shown:
Goffi <goffi@goffi.org>
parents: 1419
diff changeset
187 item_id,
1491
3002ea1d6ae9 pages (blog/view): don't use backend cache when "no cache" is requested
Goffi <goffi@goffi.org>
parents: 1483
diff changeset
188 extra: Dict[str, Any],
1466
cff720e26089 pages (blog/view): activate pagination when a single item is shown:
Goffi <goffi@goffi.org>
parents: 1419
diff changeset
189 profile: str
cff720e26089 pages (blog/view): activate pagination when a single item is shown:
Goffi <goffi@goffi.org>
parents: 1419
diff changeset
190 ) -> dict:
1077
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
191 try:
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
192 if item_id:
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
193 items_id = [item_id]
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
194 else:
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
195 items_id = []
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1493
diff changeset
196 if not self.use_cache(request):
1491
3002ea1d6ae9 pages (blog/view): don't use backend cache when "no cache" is requested
Goffi <goffi@goffi.org>
parents: 1483
diff changeset
197 extra[C.KEY_USE_CACHE] = False
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1493
diff changeset
198 blog_data = await self.host.bridge_call('mb_get',
1077
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
199 service.userhost(),
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
200 node,
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
201 C.NO_LIMIT,
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
202 items_id,
1447
907f519faaf0 pages: pubsub's `extra` is now serialised, following backend change
Goffi <goffi@goffi.org>
parents: 1419
diff changeset
203 data_format.serialise(extra),
1077
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
204 profile)
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
205 except Exception as e:
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
206 # FIXME: need a better way to test errors in bridge errback
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1207
diff changeset
207 if "forbidden" in str(e):
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1493
diff changeset
208 self.page_error(request, 401)
1077
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
209 else:
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1207
diff changeset
210 log.warning(_("can't retrieve blog for [{service}]: {msg}".format(
1077
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
211 service = service.userhost(), msg=e)))
1302
04e7dd6b6f4d pages (blog, tickets, merge-requests): updated code to handle new serialisation, following backend changes
Goffi <goffi@goffi.org>
parents: 1266
diff changeset
212 blog_data = {"items": []}
04e7dd6b6f4d pages (blog, tickets, merge-requests): updated code to handle new serialisation, following backend changes
Goffi <goffi@goffi.org>
parents: 1266
diff changeset
213 else:
04e7dd6b6f4d pages (blog, tickets, merge-requests): updated code to handle new serialisation, following backend changes
Goffi <goffi@goffi.org>
parents: 1266
diff changeset
214 blog_data = data_format.deserialise(blog_data)
1077
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
215
1322
a0954b6610aa pages: identities are not using `data_objects` anymore:
Goffi <goffi@goffi.org>
parents: 1302
diff changeset
216 return blog_data
1077
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
217
1322
a0954b6610aa pages: identities are not using `data_objects` anymore:
Goffi <goffi@goffi.org>
parents: 1302
diff changeset
218 async def prepare_render(self, request):
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1493
diff changeset
219 data = self.get_r_data(request)
1376
1b94a5ab155f pages (blog/view): Full-Text Search is used when `search` query argument is present
Goffi <goffi@goffi.org>
parents: 1322
diff changeset
220 template_data = request.template_data
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1207
diff changeset
221 page_max = data.get("page_max", 10)
1077
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
222 # if the comments are not explicitly hidden, we show them
1376
1b94a5ab155f pages (blog/view): Full-Text Search is used when `search` query argument is present
Goffi <goffi@goffi.org>
parents: 1322
diff changeset
223 service, node, item_id, show_comments = (
1b94a5ab155f pages (blog/view): Full-Text Search is used when `search` query argument is present
Goffi <goffi@goffi.org>
parents: 1322
diff changeset
224 data.get('service', ''),
1b94a5ab155f pages (blog/view): Full-Text Search is used when `search` query argument is present
Goffi <goffi@goffi.org>
parents: 1322
diff changeset
225 data.get('node', ''),
1b94a5ab155f pages (blog/view): Full-Text Search is used when `search` query argument is present
Goffi <goffi@goffi.org>
parents: 1322
diff changeset
226 data.get('item'),
1b94a5ab155f pages (blog/view): Full-Text Search is used when `search` query argument is present
Goffi <goffi@goffi.org>
parents: 1322
diff changeset
227 data.get('show_comments', True)
1b94a5ab155f pages (blog/view): Full-Text Search is used when `search` query argument is present
Goffi <goffi@goffi.org>
parents: 1322
diff changeset
228 )
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1493
diff changeset
229 profile = self.get_profile(request)
1077
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
230 if profile is None:
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
231 profile = C.SERVICE_PROFILE
1133
122dd136d1ab pages (blog/view): allow commenting when profile is connected
Goffi <goffi@goffi.org>
parents: 1124
diff changeset
232 profile_connected = False
122dd136d1ab pages (blog/view): allow commenting when profile is connected
Goffi <goffi@goffi.org>
parents: 1124
diff changeset
233 else:
122dd136d1ab pages (blog/view): allow commenting when profile is connected
Goffi <goffi@goffi.org>
parents: 1124
diff changeset
234 profile_connected = True
1077
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
235
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
236 ## pagination/filtering parameters
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
237 if item_id:
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
238 extra = {}
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
239 else:
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1493
diff changeset
240 extra = self.get_pubsub_extra(request, page_max=page_max)
1077
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
241 tag = data.get('tag')
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
242 if tag:
1376
1b94a5ab155f pages (blog/view): Full-Text Search is used when `search` query argument is present
Goffi <goffi@goffi.org>
parents: 1322
diff changeset
243 extra[f'mam_filter_{C.MAM_FILTER_CATEGORY}'] = tag
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1493
diff changeset
244 self.handle_search(request, extra)
1077
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
245
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
246 ## main data ##
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
247 # we get data from backend/XMPP here
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1493
diff changeset
248 blog_items = await get_blog_items(self, request, service, node, item_id, extra, profile)
1077
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
249
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
250 ## navigation ##
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
251 # no let's fill service, node and pagination URLs
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1207
diff changeset
252 if 'service' not in template_data:
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1207
diff changeset
253 template_data['service'] = service
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1207
diff changeset
254 if 'node' not in template_data:
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1207
diff changeset
255 template_data['node'] = node
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1207
diff changeset
256 target_profile = template_data.get('target_profile')
1077
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
257
1302
04e7dd6b6f4d pages (blog, tickets, merge-requests): updated code to handle new serialisation, following backend changes
Goffi <goffi@goffi.org>
parents: 1266
diff changeset
258 if blog_items:
1466
cff720e26089 pages (blog/view): activate pagination when a single item is shown:
Goffi <goffi@goffi.org>
parents: 1419
diff changeset
259 if item_id:
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1493
diff changeset
260 template_data["previous_page_url"] = self.get_url(
1466
cff720e26089 pages (blog/view): activate pagination when a single item is shown:
Goffi <goffi@goffi.org>
parents: 1419
diff changeset
261 service.full(),
cff720e26089 pages (blog/view): activate pagination when a single item is shown:
Goffi <goffi@goffi.org>
parents: 1419
diff changeset
262 node,
cff720e26089 pages (blog/view): activate pagination when a single item is shown:
Goffi <goffi@goffi.org>
parents: 1419
diff changeset
263 before=item_id,
cff720e26089 pages (blog/view): activate pagination when a single item is shown:
Goffi <goffi@goffi.org>
parents: 1419
diff changeset
264 page_max=1
cff720e26089 pages (blog/view): activate pagination when a single item is shown:
Goffi <goffi@goffi.org>
parents: 1419
diff changeset
265 )
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1493
diff changeset
266 template_data["next_page_url"] = self.get_url(
1466
cff720e26089 pages (blog/view): activate pagination when a single item is shown:
Goffi <goffi@goffi.org>
parents: 1419
diff changeset
267 service.full(),
cff720e26089 pages (blog/view): activate pagination when a single item is shown:
Goffi <goffi@goffi.org>
parents: 1419
diff changeset
268 node,
cff720e26089 pages (blog/view): activate pagination when a single item is shown:
Goffi <goffi@goffi.org>
parents: 1419
diff changeset
269 after=item_id,
cff720e26089 pages (blog/view): activate pagination when a single item is shown:
Goffi <goffi@goffi.org>
parents: 1419
diff changeset
270 page_max=1
cff720e26089 pages (blog/view): activate pagination when a single item is shown:
Goffi <goffi@goffi.org>
parents: 1419
diff changeset
271 )
cff720e26089 pages (blog/view): activate pagination when a single item is shown:
Goffi <goffi@goffi.org>
parents: 1419
diff changeset
272 blog_items["rsm"] = {
cff720e26089 pages (blog/view): activate pagination when a single item is shown:
Goffi <goffi@goffi.org>
parents: 1419
diff changeset
273 "last": item_id,
cff720e26089 pages (blog/view): activate pagination when a single item is shown:
Goffi <goffi@goffi.org>
parents: 1419
diff changeset
274 "first": item_id,
cff720e26089 pages (blog/view): activate pagination when a single item is shown:
Goffi <goffi@goffi.org>
parents: 1419
diff changeset
275 }
cff720e26089 pages (blog/view): activate pagination when a single item is shown:
Goffi <goffi@goffi.org>
parents: 1419
diff changeset
276 blog_items["complete"] = False
cff720e26089 pages (blog/view): activate pagination when a single item is shown:
Goffi <goffi@goffi.org>
parents: 1419
diff changeset
277 else:
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1493
diff changeset
278 self.set_pagination(request, blog_items)
1077
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
279 else:
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
280 if item_id:
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
281 # if item id has been specified in URL and it's not found,
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
282 # we must return an error
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1493
diff changeset
283 self.page_error(request, C.HTTP_NOT_FOUND)
1077
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
284
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
285 ## identities ##
1133
122dd136d1ab pages (blog/view): allow commenting when profile is connected
Goffi <goffi@goffi.org>
parents: 1124
diff changeset
286 # identities are used to show nice nickname or avatars
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1493
diff changeset
287 await self.fill_missing_identities(request, [i['author_jid'] for i in blog_items['items']])
1077
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
288
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
289 ## Comments ##
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
290 # if comments are requested, we need to take them
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
291 if show_comments:
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1493
diff changeset
292 await append_comments(self, request, blog_items, profile)
1077
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
293
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
294 ## URLs ##
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
295 # We will fill items_http_uri and tags_http_uri in template_data with suitable urls
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
296 # if we know the profile, we use it instead of service + blog (nicer url)
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
297 if target_profile is None:
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1493
diff changeset
298 blog_base_url_item = self.get_page_by_name('blog_view').get_url(service.full(), node or '@', 'id')
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1493
diff changeset
299 blog_base_url_tag = self.get_page_by_name('blog_view').get_url(service.full(), node or '@', 'tag')
1077
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
300 else:
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1493
diff changeset
301 blog_base_url_item = self.get_url_by_names([('user', [target_profile]), ('user_blog', ['id'])])
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1493
diff changeset
302 blog_base_url_tag = self.get_url_by_names([('user', [target_profile]), ('user_blog', ['tag'])])
1077
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
303 # we also set the background image if specified by user
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1493
diff changeset
304 bg_img = await self.host.bridge_call('param_get_a_async', 'Background', 'Blog page', 'value', -1, template_data['target_profile'])
1077
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
305 if bg_img:
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1207
diff changeset
306 template_data['dynamic_style'] = safe("""
1077
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
307 :root {
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
308 --bg-img: url("%s");
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
309 }
1229
acec8e9185db pages: replaced deprecated `cgi.escape` by `html.escape`
Goffi <goffi@goffi.org>
parents: 1219
diff changeset
310 """ % html.escape(bg_img, True))
1077
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
311
1302
04e7dd6b6f4d pages (blog, tickets, merge-requests): updated code to handle new serialisation, following backend changes
Goffi <goffi@goffi.org>
parents: 1266
diff changeset
312 template_data['blog_items'] = data['blog_items'] = blog_items
1219
0f0c36992f3c pages (blog/view, forums/view): fixed encoding of request.args following Python3 port
Goffi <goffi@goffi.org>
parents: 1216
diff changeset
313 if request.args.get(b'reverse') == ['1']:
1302
04e7dd6b6f4d pages (blog, tickets, merge-requests): updated code to handle new serialisation, following backend changes
Goffi <goffi@goffi.org>
parents: 1266
diff changeset
314 template_data['blog_items'].items.reverse()
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1207
diff changeset
315 template_data['items_http_uri'] = items_http_uri = {}
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1207
diff changeset
316 template_data['tags_http_uri'] = tags_http_uri = {}
1077
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
317
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
318
1302
04e7dd6b6f4d pages (blog, tickets, merge-requests): updated code to handle new serialisation, following backend changes
Goffi <goffi@goffi.org>
parents: 1266
diff changeset
319 for item in blog_items['items']:
04e7dd6b6f4d pages (blog, tickets, merge-requests): updated code to handle new serialisation, following backend changes
Goffi <goffi@goffi.org>
parents: 1266
diff changeset
320 blog_canonical_url = '/'.join([blog_base_url_item, utils.quote(item['id'])])
1077
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
321 if len(blog_canonical_url) > URL_LIMIT_MARK:
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
322 blog_url = blog_canonical_url
1406
cffa3ae4d0aa pages (blog/view): move URL friendly code to backend tools:
Goffi <goffi@goffi.org>
parents: 1403
diff changeset
323 elif '-' not in item['id']:
1077
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
324 # we add text from title or body at the end of URL
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
325 # to make it more human readable
1406
cffa3ae4d0aa pages (blog/view): move URL friendly code to backend tools:
Goffi <goffi@goffi.org>
parents: 1403
diff changeset
326 # we do it only if there is no "-", as a "-" probably means that
cffa3ae4d0aa pages (blog/view): move URL friendly code to backend tools:
Goffi <goffi@goffi.org>
parents: 1403
diff changeset
327 # item's id is already user friendly.
cffa3ae4d0aa pages (blog/view): move URL friendly code to backend tools:
Goffi <goffi@goffi.org>
parents: 1403
diff changeset
328 # TODO: to be removed, this is only kept for a transition period until
cffa3ae4d0aa pages (blog/view): move URL friendly code to backend tools:
Goffi <goffi@goffi.org>
parents: 1403
diff changeset
329 # user friendly item IDs are more common.
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1493
diff changeset
330 text = regex.url_friendly_text(item.get('title', item['content']))
1077
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
331 if text:
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1207
diff changeset
332 blog_url = blog_canonical_url + '/' + text
1077
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
333 else:
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
334 blog_url = blog_canonical_url
1406
cffa3ae4d0aa pages (blog/view): move URL friendly code to backend tools:
Goffi <goffi@goffi.org>
parents: 1403
diff changeset
335 else:
cffa3ae4d0aa pages (blog/view): move URL friendly code to backend tools:
Goffi <goffi@goffi.org>
parents: 1403
diff changeset
336 blog_url = blog_canonical_url
1077
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
337
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1493
diff changeset
338 items_http_uri[item['id']] = self.host.get_ext_base_url(request, blog_url)
1302
04e7dd6b6f4d pages (blog, tickets, merge-requests): updated code to handle new serialisation, following backend changes
Goffi <goffi@goffi.org>
parents: 1266
diff changeset
339 for tag in item['tags']:
1077
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
340 if tag not in tags_http_uri:
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1207
diff changeset
341 tag_url = '/'.join([blog_base_url_tag, utils.quote(tag)])
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1493
diff changeset
342 tags_http_uri[tag] = self.host.get_ext_base_url(request, tag_url)
1077
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
343
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
344 # if True, page should display a comment box
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1207
diff changeset
345 template_data['allow_commenting'] = data.get('allow_commenting', profile_connected)
1077
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
346
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
347 # last but not least, we add a xmpp: link to the node
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1207
diff changeset
348 uri_args = {'path': service.full()}
1077
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
349 if node:
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1207
diff changeset
350 uri_args['node'] = node
1077
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
351 if item_id:
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1207
diff changeset
352 uri_args['item'] = item_id
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1493
diff changeset
353 template_data['xmpp_uri'] = uri.build_xmpp_uri(
1478
10ccad665d57 pages (blog/view): use rich content for comments
Goffi <goffi@goffi.org>
parents: 1466
diff changeset
354 'pubsub', subtype='microblog', **uri_args
10ccad665d57 pages (blog/view): use rich content for comments
Goffi <goffi@goffi.org>
parents: 1466
diff changeset
355 )
1077
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
356
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
357
1322
a0954b6610aa pages: identities are not using `data_objects` anymore:
Goffi <goffi@goffi.org>
parents: 1302
diff changeset
358 async def on_data_post(self, request):
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1493
diff changeset
359 profile = self.get_profile(request)
1077
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
360 if profile is None:
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1493
diff changeset
361 self.page_error(request, C.HTTP_FORBIDDEN)
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1493
diff changeset
362 type_ = self.get_posted_data(request, 'type')
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1207
diff changeset
363 if type_ == 'comment':
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1493
diff changeset
364 service, node, body = self.get_posted_data(request, ('service', 'node', 'body'))
1077
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
365
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
366 if not body:
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1493
diff changeset
367 self.page_error(request, C.HTTP_BAD_REQUEST)
1478
10ccad665d57 pages (blog/view): use rich content for comments
Goffi <goffi@goffi.org>
parents: 1466
diff changeset
368 comment_data = {"content_rich": body}
1077
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
369 try:
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1493
diff changeset
370 await self.host.bridge_call('mb_send',
1156
3048bd137aaf server, browser: changed blog items serialisation following changes in backend
Goffi <goffi@goffi.org>
parents: 1145
diff changeset
371 service,
3048bd137aaf server, browser: changed blog items serialisation following changes in backend
Goffi <goffi@goffi.org>
parents: 1145
diff changeset
372 node,
3048bd137aaf server, browser: changed blog items serialisation following changes in backend
Goffi <goffi@goffi.org>
parents: 1145
diff changeset
373 data_format.serialise(comment_data),
3048bd137aaf server, browser: changed blog items serialisation following changes in backend
Goffi <goffi@goffi.org>
parents: 1145
diff changeset
374 profile)
1077
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
375 except Exception as e:
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1207
diff changeset
376 if "forbidden" in str(e):
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1493
diff changeset
377 self.page_error(request, 401)
1077
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
378 else:
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
379 raise e
880ea673aaff blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff changeset
380 else:
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1207
diff changeset
381 log.warning(_("Unhandled data type: {}").format(type_))