annotate libervia/server/pages_tools.py @ 1203:251eba911d4d

server (websockets): fixed websocket handling on HTTPS connections: Original request used to retrieve a page was stored on dynamic pages, but after the end of it, the channel was deleted, resulting in a isSecure() always returning False, and troubles in chain leading to the the use of the wrong session object. This patch fixes this by reworking the way original request is used, and creating a new wrapping class allowing to keep an API similar to iweb.IRequest, with data coming from both the original request and the websocket request. fix 327
author Goffi <goffi@goffi.org>
date Sun, 14 Jul 2019 14:45:51 +0200
parents 2af117bfe6cc
children b2d067339de3
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1068
5e809a49971c pages: new pages_tools module:
Goffi <goffi@goffi.org>
parents:
diff changeset
1 #!/usr/bin/python
5e809a49971c pages: new pages_tools module:
Goffi <goffi@goffi.org>
parents:
diff changeset
2 # -*- coding: utf-8 -*-
5e809a49971c pages: new pages_tools module:
Goffi <goffi@goffi.org>
parents:
diff changeset
3
5e809a49971c pages: new pages_tools module:
Goffi <goffi@goffi.org>
parents:
diff changeset
4 # Libervia: a Salut à Toi frontend
1144
2af117bfe6cc dates update
Goffi <goffi@goffi.org>
parents: 1124
diff changeset
5 # Copyright (C) 2011-2019 Jérôme Poisson <goffi@goffi.org>
1068
5e809a49971c pages: new pages_tools module:
Goffi <goffi@goffi.org>
parents:
diff changeset
6
5e809a49971c pages: new pages_tools module:
Goffi <goffi@goffi.org>
parents:
diff changeset
7 # This program is free software: you can redistribute it and/or modify
5e809a49971c pages: new pages_tools module:
Goffi <goffi@goffi.org>
parents:
diff changeset
8 # it under the terms of the GNU Affero General Public License as published by
5e809a49971c pages: new pages_tools module:
Goffi <goffi@goffi.org>
parents:
diff changeset
9 # the Free Software Foundation, either version 3 of the License, or
5e809a49971c pages: new pages_tools module:
Goffi <goffi@goffi.org>
parents:
diff changeset
10 # (at your option) any later version.
5e809a49971c pages: new pages_tools module:
Goffi <goffi@goffi.org>
parents:
diff changeset
11
5e809a49971c pages: new pages_tools module:
Goffi <goffi@goffi.org>
parents:
diff changeset
12 # This program is distributed in the hope that it will be useful,
5e809a49971c pages: new pages_tools module:
Goffi <goffi@goffi.org>
parents:
diff changeset
13 # but WITHOUT ANY WARRANTY; without even the implied warranty of
5e809a49971c pages: new pages_tools module:
Goffi <goffi@goffi.org>
parents:
diff changeset
14 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
5e809a49971c pages: new pages_tools module:
Goffi <goffi@goffi.org>
parents:
diff changeset
15 # GNU Affero General Public License for more details.
5e809a49971c pages: new pages_tools module:
Goffi <goffi@goffi.org>
parents:
diff changeset
16
5e809a49971c pages: new pages_tools module:
Goffi <goffi@goffi.org>
parents:
diff changeset
17 # You should have received a copy of the GNU Affero General Public License
5e809a49971c pages: new pages_tools module:
Goffi <goffi@goffi.org>
parents:
diff changeset
18 # along with this program. If not, see <http://www.gnu.org/licenses/>.
5e809a49971c pages: new pages_tools module:
Goffi <goffi@goffi.org>
parents:
diff changeset
19
5e809a49971c pages: new pages_tools module:
Goffi <goffi@goffi.org>
parents:
diff changeset
20 """Helper methods for common operations on pages"""
5e809a49971c pages: new pages_tools module:
Goffi <goffi@goffi.org>
parents:
diff changeset
21
5e809a49971c pages: new pages_tools module:
Goffi <goffi@goffi.org>
parents:
diff changeset
22 from sat.core.i18n import _
5e809a49971c pages: new pages_tools module:
Goffi <goffi@goffi.org>
parents:
diff changeset
23 from libervia.server.constants import Const as C
5e809a49971c pages: new pages_tools module:
Goffi <goffi@goffi.org>
parents:
diff changeset
24 from twisted.internet import defer
5e809a49971c pages: new pages_tools module:
Goffi <goffi@goffi.org>
parents:
diff changeset
25 from sat.core.log import getLogger
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1068
diff changeset
26
1068
5e809a49971c pages: new pages_tools module:
Goffi <goffi@goffi.org>
parents:
diff changeset
27 log = getLogger(__name__)
5e809a49971c pages: new pages_tools module:
Goffi <goffi@goffi.org>
parents:
diff changeset
28 from sat.tools.common import data_objects
5e809a49971c pages: new pages_tools module:
Goffi <goffi@goffi.org>
parents:
diff changeset
29
5e809a49971c pages: new pages_tools module:
Goffi <goffi@goffi.org>
parents:
diff changeset
30
5e809a49971c pages: new pages_tools module:
Goffi <goffi@goffi.org>
parents:
diff changeset
31 def commentsDataToObjects(comments_data):
5e809a49971c pages: new pages_tools module:
Goffi <goffi@goffi.org>
parents:
diff changeset
32 return data_objects.BlogItems(comments_data)
5e809a49971c pages: new pages_tools module:
Goffi <goffi@goffi.org>
parents:
diff changeset
33
5e809a49971c pages: new pages_tools module:
Goffi <goffi@goffi.org>
parents:
diff changeset
34
5e809a49971c pages: new pages_tools module:
Goffi <goffi@goffi.org>
parents:
diff changeset
35 def retrieveComments(self, service, node, profile, pass_exceptions=True):
5e809a49971c pages: new pages_tools module:
Goffi <goffi@goffi.org>
parents:
diff changeset
36 """Retrieve comments from server and convert them to data objects
5e809a49971c pages: new pages_tools module:
Goffi <goffi@goffi.org>
parents:
diff changeset
37
5e809a49971c pages: new pages_tools module:
Goffi <goffi@goffi.org>
parents:
diff changeset
38 @param service(unicode): service holding the comments
5e809a49971c pages: new pages_tools module:
Goffi <goffi@goffi.org>
parents:
diff changeset
39 @param node(unicode): node to retrieve
5e809a49971c pages: new pages_tools module:
Goffi <goffi@goffi.org>
parents:
diff changeset
40 @param profile(unicode): profile of the user willing to find comments
5e809a49971c pages: new pages_tools module:
Goffi <goffi@goffi.org>
parents:
diff changeset
41 @param pass_exceptions(bool): if True bridge exceptions will be ignored but logged
5e809a49971c pages: new pages_tools module:
Goffi <goffi@goffi.org>
parents:
diff changeset
42 else exception will be raised
5e809a49971c pages: new pages_tools module:
Goffi <goffi@goffi.org>
parents:
diff changeset
43 """
5e809a49971c pages: new pages_tools module:
Goffi <goffi@goffi.org>
parents:
diff changeset
44 try:
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1068
diff changeset
45 d = self.host.bridgeCall(u"mbGet", service, node, C.NO_LIMIT, [], {}, profile)
1068
5e809a49971c pages: new pages_tools module:
Goffi <goffi@goffi.org>
parents:
diff changeset
46 except Exception as e:
5e809a49971c pages: new pages_tools module:
Goffi <goffi@goffi.org>
parents:
diff changeset
47 if not pass_exceptions:
5e809a49971c pages: new pages_tools module:
Goffi <goffi@goffi.org>
parents:
diff changeset
48 raise e
5e809a49971c pages: new pages_tools module:
Goffi <goffi@goffi.org>
parents:
diff changeset
49 else:
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1068
diff changeset
50 log.warning(
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1068
diff changeset
51 _(u"Can't get comments at {node} (service: {service}): {msg}").format(
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1068
diff changeset
52 service=service, node=node, msg=e
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1068
diff changeset
53 )
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1068
diff changeset
54 )
1068
5e809a49971c pages: new pages_tools module:
Goffi <goffi@goffi.org>
parents:
diff changeset
55 return defer.succeed([])
5e809a49971c pages: new pages_tools module:
Goffi <goffi@goffi.org>
parents:
diff changeset
56
5e809a49971c pages: new pages_tools module:
Goffi <goffi@goffi.org>
parents:
diff changeset
57 d.addCallback(commentsDataToObjects)
5e809a49971c pages: new pages_tools module:
Goffi <goffi@goffi.org>
parents:
diff changeset
58 return d