annotate libervia/web/pages/g/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 197350e8bf3b
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1179
diff changeset
1 #!/usr/bin/env python3
1239
f511f8fbbf8a fixed shebangs
Goffi <goffi@goffi.org>
parents: 1216
diff changeset
2
930
b5490fa65348 pages (g): added g (for guest) page to handle invitations
Goffi <goffi@goffi.org>
parents:
diff changeset
3
1518
eb00d593801d refactoring: rename `libervia` to `libervia.web` + update imports following backend changes
Goffi <goffi@goffi.org>
parents: 1509
diff changeset
4 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
5 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
6 from libervia.web.server import session_iface
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
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1100
diff changeset
8
1145
29eb15062416 pages: set __name__ for imported pages
Goffi <goffi@goffi.org>
parents: 1124
diff changeset
9 log = getLogger(__name__)
930
b5490fa65348 pages (g): added g (for guest) page to handle invitations
Goffi <goffi@goffi.org>
parents:
diff changeset
10
b5490fa65348 pages (g): added g (for guest) page to handle invitations
Goffi <goffi@goffi.org>
parents:
diff changeset
11 access = C.PAGES_ACCESS_PUBLIC
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1179
diff changeset
12 template = "invitation/welcome.html"
930
b5490fa65348 pages (g): added g (for guest) page to handle invitations
Goffi <goffi@goffi.org>
parents:
diff changeset
13
b5490fa65348 pages (g): added g (for guest) page to handle invitations
Goffi <goffi@goffi.org>
parents:
diff changeset
14
1355
6f342b36871c pages (g): set `interests_map` even in case of errors
Goffi <goffi@goffi.org>
parents: 1239
diff changeset
15 async def parse_url(self, request):
930
b5490fa65348 pages (g): added g (for guest) page to handle invitations
Goffi <goffi@goffi.org>
parents:
diff changeset
16 """check invitation id in URL and start session if needed
b5490fa65348 pages (g): added g (for guest) page to handle invitations
Goffi <goffi@goffi.org>
parents:
diff changeset
17
b5490fa65348 pages (g): added g (for guest) page to handle invitations
Goffi <goffi@goffi.org>
parents:
diff changeset
18 if a session already exists for an other guest/profile, it will be purged
b5490fa65348 pages (g): added g (for guest) page to handle invitations
Goffi <goffi@goffi.org>
parents:
diff changeset
19 """
b5490fa65348 pages (g): added g (for guest) page to handle invitations
Goffi <goffi@goffi.org>
parents:
diff changeset
20 try:
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1506
diff changeset
21 invitation_id = self.next_path(request)
930
b5490fa65348 pages (g): added g (for guest) page to handle invitations
Goffi <goffi@goffi.org>
parents:
diff changeset
22 except IndexError:
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1506
diff changeset
23 self.page_error(request)
930
b5490fa65348 pages (g): added g (for guest) page to handle invitations
Goffi <goffi@goffi.org>
parents:
diff changeset
24
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1506
diff changeset
25 web_session, guest_session = self.host.get_session_data(
1518
eb00d593801d refactoring: rename `libervia` to `libervia.web` + update imports following backend changes
Goffi <goffi@goffi.org>
parents: 1509
diff changeset
26 request, session_iface.IWebSession, session_iface.IWebGuestSession
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1100
diff changeset
27 )
930
b5490fa65348 pages (g): added g (for guest) page to handle invitations
Goffi <goffi@goffi.org>
parents:
diff changeset
28 current_id = guest_session.id
b5490fa65348 pages (g): added g (for guest) page to handle invitations
Goffi <goffi@goffi.org>
parents:
diff changeset
29
b5490fa65348 pages (g): added g (for guest) page to handle invitations
Goffi <goffi@goffi.org>
parents:
diff changeset
30 if current_id is not None and current_id != invitation_id:
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1100
diff changeset
31 log.info(
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1100
diff changeset
32 _(
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1179
diff changeset
33 "killing guest session [{old_id}] because it is connecting with an other ID [{new_id}]"
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1100
diff changeset
34 ).format(old_id=current_id, new_id=invitation_id)
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1100
diff changeset
35 )
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1506
diff changeset
36 self.host.purge_session(request)
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1506
diff changeset
37 web_session, guest_session = self.host.get_session_data(
1518
eb00d593801d refactoring: rename `libervia` to `libervia.web` + update imports following backend changes
Goffi <goffi@goffi.org>
parents: 1509
diff changeset
38 request, session_iface.IWebSession, session_iface.IWebGuestSession
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1100
diff changeset
39 )
1179
bfbfe04209e9 pages (g): retrieve interests for events/photo albums/file sharing + only set "include_url" if "main_uri" is set
Goffi <goffi@goffi.org>
parents: 1173
diff changeset
40 current_id = None # FIXME: id not reset here
930
b5490fa65348 pages (g): added g (for guest) page to handle invitations
Goffi <goffi@goffi.org>
parents:
diff changeset
41 profile = None
b5490fa65348 pages (g): added g (for guest) page to handle invitations
Goffi <goffi@goffi.org>
parents:
diff changeset
42
1506
ce879da7fcf7 server: fix `on_signal` callback
Goffi <goffi@goffi.org>
parents: 1355
diff changeset
43 profile = web_session.profile
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1100
diff changeset
44 if profile is not None and current_id is None:
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1100
diff changeset
45 log.info(
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1100
diff changeset
46 _(
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1179
diff changeset
47 "killing current profile session [{profile}] because a guest id is used"
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1100
diff changeset
48 ).format(profile=profile)
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1100
diff changeset
49 )
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1506
diff changeset
50 self.host.purge_session(request)
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1506
diff changeset
51 web_session, guest_session = self.host.get_session_data(
1518
eb00d593801d refactoring: rename `libervia` to `libervia.web` + update imports following backend changes
Goffi <goffi@goffi.org>
parents: 1509
diff changeset
52 request, session_iface.IWebSession, session_iface.IWebGuestSession
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1100
diff changeset
53 )
930
b5490fa65348 pages (g): added g (for guest) page to handle invitations
Goffi <goffi@goffi.org>
parents:
diff changeset
54 profile = None
b5490fa65348 pages (g): added g (for guest) page to handle invitations
Goffi <goffi@goffi.org>
parents:
diff changeset
55
b5490fa65348 pages (g): added g (for guest) page to handle invitations
Goffi <goffi@goffi.org>
parents:
diff changeset
56 if current_id is None:
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1179
diff changeset
57 log.debug(_("checking invitation [{id}]").format(id=invitation_id))
930
b5490fa65348 pages (g): added g (for guest) page to handle invitations
Goffi <goffi@goffi.org>
parents:
diff changeset
58 try:
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1506
diff changeset
59 data = await self.host.bridge_call("invitation_get", invitation_id)
930
b5490fa65348 pages (g): added g (for guest) page to handle invitations
Goffi <goffi@goffi.org>
parents:
diff changeset
60 except Exception:
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1506
diff changeset
61 self.page_error(request, C.HTTP_FORBIDDEN)
930
b5490fa65348 pages (g): added g (for guest) page to handle invitations
Goffi <goffi@goffi.org>
parents:
diff changeset
62 else:
b5490fa65348 pages (g): added g (for guest) page to handle invitations
Goffi <goffi@goffi.org>
parents:
diff changeset
63 guest_session.id = invitation_id
b5490fa65348 pages (g): added g (for guest) page to handle invitations
Goffi <goffi@goffi.org>
parents:
diff changeset
64 guest_session.data = data
b5490fa65348 pages (g): added g (for guest) page to handle invitations
Goffi <goffi@goffi.org>
parents:
diff changeset
65 else:
b5490fa65348 pages (g): added g (for guest) page to handle invitations
Goffi <goffi@goffi.org>
parents:
diff changeset
66 data = guest_session.data
b5490fa65348 pages (g): added g (for guest) page to handle invitations
Goffi <goffi@goffi.org>
parents:
diff changeset
67
b5490fa65348 pages (g): added g (for guest) page to handle invitations
Goffi <goffi@goffi.org>
parents:
diff changeset
68 if profile is None:
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1179
diff changeset
69 log.debug(_("connecting profile [{}]").format(profile))
930
b5490fa65348 pages (g): added g (for guest) page to handle invitations
Goffi <goffi@goffi.org>
parents:
diff changeset
70 # we need to connect the profile
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1100
diff changeset
71 profile = data["guest_profile"]
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1100
diff changeset
72 password = data["password"]
930
b5490fa65348 pages (g): added g (for guest) page to handle invitations
Goffi <goffi@goffi.org>
parents:
diff changeset
73 try:
1355
6f342b36871c pages (g): set `interests_map` even in case of errors
Goffi <goffi@goffi.org>
parents: 1239
diff changeset
74 await self.host.connect(request, profile, password)
930
b5490fa65348 pages (g): added g (for guest) page to handle invitations
Goffi <goffi@goffi.org>
parents:
diff changeset
75 except Exception as e:
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1179
diff changeset
76 log.warning(_("Can't connect profile: {msg}").format(msg=e))
930
b5490fa65348 pages (g): added g (for guest) page to handle invitations
Goffi <goffi@goffi.org>
parents:
diff changeset
77 # FIXME: no good error code correspond
b5490fa65348 pages (g): added g (for guest) page to handle invitations
Goffi <goffi@goffi.org>
parents:
diff changeset
78 # maybe use a custom one?
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1506
diff changeset
79 self.page_error(request, code=C.HTTP_SERVICE_UNAVAILABLE)
930
b5490fa65348 pages (g): added g (for guest) page to handle invitations
Goffi <goffi@goffi.org>
parents:
diff changeset
80
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1100
diff changeset
81 log.info(
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1100
diff changeset
82 _(
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1179
diff changeset
83 "guest session started, connected with profile [{profile}]".format(
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1100
diff changeset
84 profile=profile
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1100
diff changeset
85 )
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1100
diff changeset
86 )
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1100
diff changeset
87 )
930
b5490fa65348 pages (g): added g (for guest) page to handle invitations
Goffi <goffi@goffi.org>
parents:
diff changeset
88
941
aba7208d9d50 pages (g): guest name is added to template data
Goffi <goffi@goffi.org>
parents: 938
diff changeset
89 # we copy data useful in templates
aba7208d9d50 pages (g): guest name is added to template data
Goffi <goffi@goffi.org>
parents: 938
diff changeset
90 template_data = request.template_data
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1100
diff changeset
91 template_data["norobots"] = True
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1179
diff changeset
92 if "name" in data:
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1179
diff changeset
93 template_data["name"] = data["name"]
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1179
diff changeset
94 if "language" in data:
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1179
diff changeset
95 template_data["locale"] = data["language"]
941
aba7208d9d50 pages (g): guest name is added to template data
Goffi <goffi@goffi.org>
parents: 938
diff changeset
96
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1506
diff changeset
97 def handle_event_interest(self, interest):
1179
bfbfe04209e9 pages (g): retrieve interests for events/photo albums/file sharing + only set "include_url" if "main_uri" is set
Goffi <goffi@goffi.org>
parents: 1173
diff changeset
98 if C.bool(interest.get("creator", C.BOOL_FALSE)):
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1179
diff changeset
99 page_name = "event_admin"
1179
bfbfe04209e9 pages (g): retrieve interests for events/photo albums/file sharing + only set "include_url" if "main_uri" is set
Goffi <goffi@goffi.org>
parents: 1173
diff changeset
100 else:
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1179
diff changeset
101 page_name = "event_rsvp"
930
b5490fa65348 pages (g): added g (for guest) page to handle invitations
Goffi <goffi@goffi.org>
parents:
diff changeset
102
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1506
diff changeset
103 interest["url"] = self.get_page_by_name(page_name).get_url(
1179
bfbfe04209e9 pages (g): retrieve interests for events/photo albums/file sharing + only set "include_url" if "main_uri" is set
Goffi <goffi@goffi.org>
parents: 1173
diff changeset
104 interest.get("service", ""),
bfbfe04209e9 pages (g): retrieve interests for events/photo albums/file sharing + only set "include_url" if "main_uri" is set
Goffi <goffi@goffi.org>
parents: 1173
diff changeset
105 interest.get("node", ""),
bfbfe04209e9 pages (g): retrieve interests for events/photo albums/file sharing + only set "include_url" if "main_uri" is set
Goffi <goffi@goffi.org>
parents: 1173
diff changeset
106 interest.get("item"),
bfbfe04209e9 pages (g): retrieve interests for events/photo albums/file sharing + only set "include_url" if "main_uri" is set
Goffi <goffi@goffi.org>
parents: 1173
diff changeset
107 )
bfbfe04209e9 pages (g): retrieve interests for events/photo albums/file sharing + only set "include_url" if "main_uri" is set
Goffi <goffi@goffi.org>
parents: 1173
diff changeset
108
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1179
diff changeset
109 if "thumb_url" not in interest and "image" in interest:
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1179
diff changeset
110 interest["thumb_url"] = interest["image"]
1179
bfbfe04209e9 pages (g): retrieve interests for events/photo albums/file sharing + only set "include_url" if "main_uri" is set
Goffi <goffi@goffi.org>
parents: 1173
diff changeset
111
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1506
diff changeset
112 def handle_fis_interest(self, interest):
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1179
diff changeset
113 path = interest.get('path', '')
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1179
diff changeset
114 path_args = [p for p in path.split('/') if p]
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1179
diff changeset
115 subtype = interest.get('subtype')
1179
bfbfe04209e9 pages (g): retrieve interests for events/photo albums/file sharing + only set "include_url" if "main_uri" is set
Goffi <goffi@goffi.org>
parents: 1173
diff changeset
116
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1179
diff changeset
117 if subtype == 'files':
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1179
diff changeset
118 page_name = "files_view"
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1179
diff changeset
119 elif interest.get('subtype') == 'photos':
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1179
diff changeset
120 page_name = "photos_album"
1179
bfbfe04209e9 pages (g): retrieve interests for events/photo albums/file sharing + only set "include_url" if "main_uri" is set
Goffi <goffi@goffi.org>
parents: 1173
diff changeset
121 else:
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1179
diff changeset
122 log.warning("unknown interest subtype: {subtype}".format(subtype=subtype))
1179
bfbfe04209e9 pages (g): retrieve interests for events/photo albums/file sharing + only set "include_url" if "main_uri" is set
Goffi <goffi@goffi.org>
parents: 1173
diff changeset
123 return False
bfbfe04209e9 pages (g): retrieve interests for events/photo albums/file sharing + only set "include_url" if "main_uri" is set
Goffi <goffi@goffi.org>
parents: 1173
diff changeset
124
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1506
diff changeset
125 interest["url"] = self.get_page_by_name(page_name).get_url(
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1179
diff changeset
126 interest['service'], *path_args)
1179
bfbfe04209e9 pages (g): retrieve interests for events/photo albums/file sharing + only set "include_url" if "main_uri" is set
Goffi <goffi@goffi.org>
parents: 1173
diff changeset
127
1355
6f342b36871c pages (g): set `interests_map` even in case of errors
Goffi <goffi@goffi.org>
parents: 1239
diff changeset
128 async def prepare_render(self, request):
930
b5490fa65348 pages (g): added g (for guest) page to handle invitations
Goffi <goffi@goffi.org>
parents:
diff changeset
129 template_data = request.template_data
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1506
diff changeset
130 profile = self.get_profile(request)
1179
bfbfe04209e9 pages (g): retrieve interests for events/photo albums/file sharing + only set "include_url" if "main_uri" is set
Goffi <goffi@goffi.org>
parents: 1173
diff changeset
131
bfbfe04209e9 pages (g): retrieve interests for events/photo albums/file sharing + only set "include_url" if "main_uri" is set
Goffi <goffi@goffi.org>
parents: 1173
diff changeset
132 # interests
1355
6f342b36871c pages (g): set `interests_map` even in case of errors
Goffi <goffi@goffi.org>
parents: 1239
diff changeset
133 template_data['interests_map'] = interests_map = {}
1179
bfbfe04209e9 pages (g): retrieve interests for events/photo albums/file sharing + only set "include_url" if "main_uri" is set
Goffi <goffi@goffi.org>
parents: 1173
diff changeset
134 try:
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1506
diff changeset
135 interests = await self.host.bridge_call(
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1506
diff changeset
136 "interests_list", "", "", "", profile)
1179
bfbfe04209e9 pages (g): retrieve interests for events/photo albums/file sharing + only set "include_url" if "main_uri" is set
Goffi <goffi@goffi.org>
parents: 1173
diff changeset
137 except Exception:
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1179
diff changeset
138 log.warning(_("Can't get interests list for {profile}").format(
1179
bfbfe04209e9 pages (g): retrieve interests for events/photo albums/file sharing + only set "include_url" if "main_uri" is set
Goffi <goffi@goffi.org>
parents: 1173
diff changeset
139 profile=profile))
bfbfe04209e9 pages (g): retrieve interests for events/photo albums/file sharing + only set "include_url" if "main_uri" is set
Goffi <goffi@goffi.org>
parents: 1173
diff changeset
140 else:
bfbfe04209e9 pages (g): retrieve interests for events/photo albums/file sharing + only set "include_url" if "main_uri" is set
Goffi <goffi@goffi.org>
parents: 1173
diff changeset
141 # we only want known interests (photos and events for now)
bfbfe04209e9 pages (g): retrieve interests for events/photo albums/file sharing + only set "include_url" if "main_uri" is set
Goffi <goffi@goffi.org>
parents: 1173
diff changeset
142 # this dict map namespaces of interest to a callback which can manipulate
bfbfe04209e9 pages (g): retrieve interests for events/photo albums/file sharing + only set "include_url" if "main_uri" is set
Goffi <goffi@goffi.org>
parents: 1173
diff changeset
143 # the data. If it returns False, the interest is skipped
bfbfe04209e9 pages (g): retrieve interests for events/photo albums/file sharing + only set "include_url" if "main_uri" is set
Goffi <goffi@goffi.org>
parents: 1173
diff changeset
144 ns_data = {}
bfbfe04209e9 pages (g): retrieve interests for events/photo albums/file sharing + only set "include_url" if "main_uri" is set
Goffi <goffi@goffi.org>
parents: 1173
diff changeset
145
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1506
diff changeset
146 for short_name, cb in (('event', handle_event_interest),
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1506
diff changeset
147 ('fis', handle_fis_interest),
1179
bfbfe04209e9 pages (g): retrieve interests for events/photo albums/file sharing + only set "include_url" if "main_uri" is set
Goffi <goffi@goffi.org>
parents: 1173
diff changeset
148 ):
bfbfe04209e9 pages (g): retrieve interests for events/photo albums/file sharing + only set "include_url" if "main_uri" is set
Goffi <goffi@goffi.org>
parents: 1173
diff changeset
149 try:
bfbfe04209e9 pages (g): retrieve interests for events/photo albums/file sharing + only set "include_url" if "main_uri" is set
Goffi <goffi@goffi.org>
parents: 1173
diff changeset
150 namespace = self.host.ns_map[short_name]
bfbfe04209e9 pages (g): retrieve interests for events/photo albums/file sharing + only set "include_url" if "main_uri" is set
Goffi <goffi@goffi.org>
parents: 1173
diff changeset
151 except KeyError:
bfbfe04209e9 pages (g): retrieve interests for events/photo albums/file sharing + only set "include_url" if "main_uri" is set
Goffi <goffi@goffi.org>
parents: 1173
diff changeset
152 pass
bfbfe04209e9 pages (g): retrieve interests for events/photo albums/file sharing + only set "include_url" if "main_uri" is set
Goffi <goffi@goffi.org>
parents: 1173
diff changeset
153 else:
bfbfe04209e9 pages (g): retrieve interests for events/photo albums/file sharing + only set "include_url" if "main_uri" is set
Goffi <goffi@goffi.org>
parents: 1173
diff changeset
154 ns_data[namespace] = (cb, short_name)
bfbfe04209e9 pages (g): retrieve interests for events/photo albums/file sharing + only set "include_url" if "main_uri" is set
Goffi <goffi@goffi.org>
parents: 1173
diff changeset
155
bfbfe04209e9 pages (g): retrieve interests for events/photo albums/file sharing + only set "include_url" if "main_uri" is set
Goffi <goffi@goffi.org>
parents: 1173
diff changeset
156 for interest in interests:
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1179
diff changeset
157 namespace = interest.get('namespace')
1179
bfbfe04209e9 pages (g): retrieve interests for events/photo albums/file sharing + only set "include_url" if "main_uri" is set
Goffi <goffi@goffi.org>
parents: 1173
diff changeset
158 if namespace not in ns_data:
bfbfe04209e9 pages (g): retrieve interests for events/photo albums/file sharing + only set "include_url" if "main_uri" is set
Goffi <goffi@goffi.org>
parents: 1173
diff changeset
159 continue
bfbfe04209e9 pages (g): retrieve interests for events/photo albums/file sharing + only set "include_url" if "main_uri" is set
Goffi <goffi@goffi.org>
parents: 1173
diff changeset
160 cb, short_name = ns_data[namespace]
bfbfe04209e9 pages (g): retrieve interests for events/photo albums/file sharing + only set "include_url" if "main_uri" is set
Goffi <goffi@goffi.org>
parents: 1173
diff changeset
161 if cb(self, interest) == False:
bfbfe04209e9 pages (g): retrieve interests for events/photo albums/file sharing + only set "include_url" if "main_uri" is set
Goffi <goffi@goffi.org>
parents: 1173
diff changeset
162 continue
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1179
diff changeset
163 key = interest.get('subtype', short_name)
1179
bfbfe04209e9 pages (g): retrieve interests for events/photo albums/file sharing + only set "include_url" if "main_uri" is set
Goffi <goffi@goffi.org>
parents: 1173
diff changeset
164 interests_map.setdefault(key, []).append(interest)
bfbfe04209e9 pages (g): retrieve interests for events/photo albums/file sharing + only set "include_url" if "main_uri" is set
Goffi <goffi@goffi.org>
parents: 1173
diff changeset
165
bfbfe04209e9 pages (g): retrieve interests for events/photo albums/file sharing + only set "include_url" if "main_uri" is set
Goffi <goffi@goffi.org>
parents: 1173
diff changeset
166 # main URI
1518
eb00d593801d refactoring: rename `libervia` to `libervia.web` + update imports following backend changes
Goffi <goffi@goffi.org>
parents: 1509
diff changeset
167 guest_session = self.host.get_session_data(request, session_iface.IWebGuestSession)
1179
bfbfe04209e9 pages (g): retrieve interests for events/photo albums/file sharing + only set "include_url" if "main_uri" is set
Goffi <goffi@goffi.org>
parents: 1173
diff changeset
168 main_uri = guest_session.data.get("event_uri")
bfbfe04209e9 pages (g): retrieve interests for events/photo albums/file sharing + only set "include_url" if "main_uri" is set
Goffi <goffi@goffi.org>
parents: 1173
diff changeset
169 if main_uri:
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1506
diff changeset
170 include_url = self.get_page_path_from_uri(main_uri)
1179
bfbfe04209e9 pages (g): retrieve interests for events/photo albums/file sharing + only set "include_url" if "main_uri" is set
Goffi <goffi@goffi.org>
parents: 1173
diff changeset
171 if include_url is not None:
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1179
diff changeset
172 template_data["include_url"] = include_url