annotate libervia/web/server/pages_tools.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
1239
f511f8fbbf8a fixed shebangs
Goffi <goffi@goffi.org>
parents: 1237
diff changeset
1 #!/usr/bin/env python3
f511f8fbbf8a fixed shebangs
Goffi <goffi@goffi.org>
parents: 1237
diff changeset
2
1447
907f519faaf0 pages: pubsub's `extra` is now serialised, following backend change
Goffi <goffi@goffi.org>
parents: 1396
diff changeset
3 # Libervia Web frontend
1396
822bd0139769 date update
Goffi <goffi@goffi.org>
parents: 1302
diff changeset
4 # Copyright (C) 2011-2021 Jérôme Poisson <goffi@goffi.org>
1068
5e809a49971c pages: new pages_tools module:
Goffi <goffi@goffi.org>
parents:
diff changeset
5
5e809a49971c pages: new pages_tools module:
Goffi <goffi@goffi.org>
parents:
diff changeset
6 # 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
7 # 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
8 # the Free Software Foundation, either version 3 of the License, or
5e809a49971c pages: new pages_tools module:
Goffi <goffi@goffi.org>
parents:
diff changeset
9 # (at your option) any later version.
5e809a49971c pages: new pages_tools module:
Goffi <goffi@goffi.org>
parents:
diff changeset
10
5e809a49971c pages: new pages_tools module:
Goffi <goffi@goffi.org>
parents:
diff changeset
11 # 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
12 # but WITHOUT ANY WARRANTY; without even the implied warranty of
5e809a49971c pages: new pages_tools module:
Goffi <goffi@goffi.org>
parents:
diff changeset
13 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
5e809a49971c pages: new pages_tools module:
Goffi <goffi@goffi.org>
parents:
diff changeset
14 # GNU Affero General Public License for more details.
5e809a49971c pages: new pages_tools module:
Goffi <goffi@goffi.org>
parents:
diff changeset
15
5e809a49971c pages: new pages_tools module:
Goffi <goffi@goffi.org>
parents:
diff changeset
16 # 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
17 # 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
18
5e809a49971c pages: new pages_tools module:
Goffi <goffi@goffi.org>
parents:
diff changeset
19 """Helper methods for common operations on pages"""
5e809a49971c pages: new pages_tools module:
Goffi <goffi@goffi.org>
parents:
diff changeset
20
1302
04e7dd6b6f4d pages (blog, tickets, merge-requests): updated code to handle new serialisation, following backend changes
Goffi <goffi@goffi.org>
parents: 1239
diff changeset
21 from twisted.internet import defer
1518
eb00d593801d refactoring: rename `libervia` to `libervia.web` + update imports following backend changes
Goffi <goffi@goffi.org>
parents: 1509
diff changeset
22 from libervia.backend.core.i18n import _
eb00d593801d refactoring: rename `libervia` to `libervia.web` + update imports following backend changes
Goffi <goffi@goffi.org>
parents: 1509
diff changeset
23 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
24 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
25 from libervia.web.server.constants import Const as C
1302
04e7dd6b6f4d pages (blog, tickets, merge-requests): updated code to handle new serialisation, following backend changes
Goffi <goffi@goffi.org>
parents: 1239
diff changeset
26
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1068
diff changeset
27
1068
5e809a49971c pages: new pages_tools module:
Goffi <goffi@goffi.org>
parents:
diff changeset
28 log = getLogger(__name__)
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
1302
04e7dd6b6f4d pages (blog, tickets, merge-requests): updated code to handle new serialisation, following backend changes
Goffi <goffi@goffi.org>
parents: 1239
diff changeset
31 def deserialise(comments_data_s):
04e7dd6b6f4d pages (blog, tickets, merge-requests): updated code to handle new serialisation, following backend changes
Goffi <goffi@goffi.org>
parents: 1239
diff changeset
32 return data_format.deserialise(comments_data_s)
1068
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
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1447
diff changeset
35 def retrieve_comments(self, service, node, profile, pass_exceptions=True):
1068
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:
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1447
diff changeset
45 d = self.host.bridge_call(
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1447
diff changeset
46 "mb_get", service, node, C.NO_LIMIT, [], data_format.serialise({}), profile
1447
907f519faaf0 pages: pubsub's `extra` is now serialised, following backend change
Goffi <goffi@goffi.org>
parents: 1396
diff changeset
47 )
1068
5e809a49971c pages: new pages_tools module:
Goffi <goffi@goffi.org>
parents:
diff changeset
48 except Exception as e:
5e809a49971c pages: new pages_tools module:
Goffi <goffi@goffi.org>
parents:
diff changeset
49 if not pass_exceptions:
5e809a49971c pages: new pages_tools module:
Goffi <goffi@goffi.org>
parents:
diff changeset
50 raise e
5e809a49971c pages: new pages_tools module:
Goffi <goffi@goffi.org>
parents:
diff changeset
51 else:
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1068
diff changeset
52 log.warning(
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1144
diff changeset
53 _("Can't get comments at {node} (service: {service}): {msg}").format(
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1068
diff changeset
54 service=service, node=node, msg=e
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1068
diff changeset
55 )
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1068
diff changeset
56 )
1068
5e809a49971c pages: new pages_tools module:
Goffi <goffi@goffi.org>
parents:
diff changeset
57 return defer.succeed([])
5e809a49971c pages: new pages_tools module:
Goffi <goffi@goffi.org>
parents:
diff changeset
58
1302
04e7dd6b6f4d pages (blog, tickets, merge-requests): updated code to handle new serialisation, following backend changes
Goffi <goffi@goffi.org>
parents: 1239
diff changeset
59 d.addCallback(deserialise)
1068
5e809a49971c pages: new pages_tools module:
Goffi <goffi@goffi.org>
parents:
diff changeset
60 return d