annotate libervia/web/pages/events/_browser/__init__.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
1482
e35151a2cec1 browser (events): delete implementation
Goffi <goffi@goffi.org>
parents:
diff changeset
1 from browser import DOMNode, document, aio
e35151a2cec1 browser (events): delete implementation
Goffi <goffi@goffi.org>
parents:
diff changeset
2 from javascript import JSON
1510
5ea06e8b06ed browser: make bridge API closer to the one use with other frontends:
Goffi <goffi@goffi.org>
parents: 1509
diff changeset
3 from bridge import AsyncBridge as Bridge, BridgeException
1482
e35151a2cec1 browser (events): delete implementation
Goffi <goffi@goffi.org>
parents:
diff changeset
4 import dialog
e35151a2cec1 browser (events): delete implementation
Goffi <goffi@goffi.org>
parents:
diff changeset
5
1510
5ea06e8b06ed browser: make bridge API closer to the one use with other frontends:
Goffi <goffi@goffi.org>
parents: 1509
diff changeset
6 bridge = Bridge()
1482
e35151a2cec1 browser (events): delete implementation
Goffi <goffi@goffi.org>
parents:
diff changeset
7
e35151a2cec1 browser (events): delete implementation
Goffi <goffi@goffi.org>
parents:
diff changeset
8
e35151a2cec1 browser (events): delete implementation
Goffi <goffi@goffi.org>
parents:
diff changeset
9 async def on_delete(evt):
e35151a2cec1 browser (events): delete implementation
Goffi <goffi@goffi.org>
parents:
diff changeset
10 evt.stopPropagation()
e35151a2cec1 browser (events): delete implementation
Goffi <goffi@goffi.org>
parents:
diff changeset
11 evt.preventDefault()
e35151a2cec1 browser (events): delete implementation
Goffi <goffi@goffi.org>
parents:
diff changeset
12 target = evt.currentTarget
e35151a2cec1 browser (events): delete implementation
Goffi <goffi@goffi.org>
parents:
diff changeset
13 item_elt = DOMNode(target.closest('.item'))
e35151a2cec1 browser (events): delete implementation
Goffi <goffi@goffi.org>
parents:
diff changeset
14 item_elt.classList.add("selected_for_deletion")
e35151a2cec1 browser (events): delete implementation
Goffi <goffi@goffi.org>
parents:
diff changeset
15 item = JSON.parse(item_elt.dataset.item)
e35151a2cec1 browser (events): delete implementation
Goffi <goffi@goffi.org>
parents:
diff changeset
16 confirmed = await dialog.Confirm(
e35151a2cec1 browser (events): delete implementation
Goffi <goffi@goffi.org>
parents:
diff changeset
17 f"Event {item['name']!r} will be deleted, are you sure?",
e35151a2cec1 browser (events): delete implementation
Goffi <goffi@goffi.org>
parents:
diff changeset
18 ok_label="delete",
e35151a2cec1 browser (events): delete implementation
Goffi <goffi@goffi.org>
parents:
diff changeset
19 ).ashow()
e35151a2cec1 browser (events): delete implementation
Goffi <goffi@goffi.org>
parents:
diff changeset
20
e35151a2cec1 browser (events): delete implementation
Goffi <goffi@goffi.org>
parents:
diff changeset
21 if not confirmed:
e35151a2cec1 browser (events): delete implementation
Goffi <goffi@goffi.org>
parents:
diff changeset
22 item_elt.classList.remove("selected_for_deletion")
e35151a2cec1 browser (events): delete implementation
Goffi <goffi@goffi.org>
parents:
diff changeset
23 return
e35151a2cec1 browser (events): delete implementation
Goffi <goffi@goffi.org>
parents:
diff changeset
24
e35151a2cec1 browser (events): delete implementation
Goffi <goffi@goffi.org>
parents:
diff changeset
25 try:
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1482
diff changeset
26 await bridge.interest_retract("", item['interest_id'])
1482
e35151a2cec1 browser (events): delete implementation
Goffi <goffi@goffi.org>
parents:
diff changeset
27 except BridgeException as e:
e35151a2cec1 browser (events): delete implementation
Goffi <goffi@goffi.org>
parents:
diff changeset
28 dialog.notification.show(
e35151a2cec1 browser (events): delete implementation
Goffi <goffi@goffi.org>
parents:
diff changeset
29 f"Can't remove list {item['name']!r} from personal interests: {e}",
e35151a2cec1 browser (events): delete implementation
Goffi <goffi@goffi.org>
parents:
diff changeset
30 "error"
e35151a2cec1 browser (events): delete implementation
Goffi <goffi@goffi.org>
parents:
diff changeset
31 )
e35151a2cec1 browser (events): delete implementation
Goffi <goffi@goffi.org>
parents:
diff changeset
32 else:
e35151a2cec1 browser (events): delete implementation
Goffi <goffi@goffi.org>
parents:
diff changeset
33 print(f"{item['name']!r} removed successfuly from list of interests")
e35151a2cec1 browser (events): delete implementation
Goffi <goffi@goffi.org>
parents:
diff changeset
34 item_elt.classList.add("state_deleted")
e35151a2cec1 browser (events): delete implementation
Goffi <goffi@goffi.org>
parents:
diff changeset
35 item_elt.bind("transitionend", lambda evt: item_elt.remove())
e35151a2cec1 browser (events): delete implementation
Goffi <goffi@goffi.org>
parents:
diff changeset
36 if item.get("creator", False):
e35151a2cec1 browser (events): delete implementation
Goffi <goffi@goffi.org>
parents:
diff changeset
37 try:
1509
106bae41f5c8 massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents: 1482
diff changeset
38 await bridge.ps_node_delete(
1482
e35151a2cec1 browser (events): delete implementation
Goffi <goffi@goffi.org>
parents:
diff changeset
39 item['service'],
e35151a2cec1 browser (events): delete implementation
Goffi <goffi@goffi.org>
parents:
diff changeset
40 item['node'],
e35151a2cec1 browser (events): delete implementation
Goffi <goffi@goffi.org>
parents:
diff changeset
41 )
e35151a2cec1 browser (events): delete implementation
Goffi <goffi@goffi.org>
parents:
diff changeset
42 except BridgeException as e:
e35151a2cec1 browser (events): delete implementation
Goffi <goffi@goffi.org>
parents:
diff changeset
43 dialog.notification.show(
e35151a2cec1 browser (events): delete implementation
Goffi <goffi@goffi.org>
parents:
diff changeset
44 f"Error while deleting {item['name']!r}: {e}",
e35151a2cec1 browser (events): delete implementation
Goffi <goffi@goffi.org>
parents:
diff changeset
45 "error"
e35151a2cec1 browser (events): delete implementation
Goffi <goffi@goffi.org>
parents:
diff changeset
46 )
e35151a2cec1 browser (events): delete implementation
Goffi <goffi@goffi.org>
parents:
diff changeset
47 else:
e35151a2cec1 browser (events): delete implementation
Goffi <goffi@goffi.org>
parents:
diff changeset
48 dialog.notification.show(f"{item['name']!r} has been deleted")
e35151a2cec1 browser (events): delete implementation
Goffi <goffi@goffi.org>
parents:
diff changeset
49
e35151a2cec1 browser (events): delete implementation
Goffi <goffi@goffi.org>
parents:
diff changeset
50
e35151a2cec1 browser (events): delete implementation
Goffi <goffi@goffi.org>
parents:
diff changeset
51 for elt in document.select('.action_delete'):
e35151a2cec1 browser (events): delete implementation
Goffi <goffi@goffi.org>
parents:
diff changeset
52 elt.bind("click", lambda evt: aio.run(on_delete(evt)))