view 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
line wrap: on
line source

from browser import DOMNode, document, aio
from javascript import JSON
from bridge import AsyncBridge as Bridge, BridgeException
import dialog

bridge = Bridge()


async def on_delete(evt):
    evt.stopPropagation()
    evt.preventDefault()
    target = evt.currentTarget
    item_elt = DOMNode(target.closest('.item'))
    item_elt.classList.add("selected_for_deletion")
    item = JSON.parse(item_elt.dataset.item)
    confirmed = await dialog.Confirm(
        f"Event {item['name']!r} will be deleted, are you sure?",
        ok_label="delete",
    ).ashow()

    if not confirmed:
        item_elt.classList.remove("selected_for_deletion")
        return

    try:
        await bridge.interest_retract("", item['interest_id'])
    except BridgeException as e:
        dialog.notification.show(
            f"Can't remove list {item['name']!r} from personal interests: {e}",
            "error"
        )
    else:
        print(f"{item['name']!r} removed successfuly from list of interests")
        item_elt.classList.add("state_deleted")
        item_elt.bind("transitionend", lambda evt: item_elt.remove())
        if item.get("creator", False):
            try:
                await bridge.ps_node_delete(
                    item['service'],
                    item['node'],
                )
            except BridgeException as e:
                dialog.notification.show(
                    f"Error while deleting {item['name']!r}: {e}",
                    "error"
                )
            else:
                dialog.notification.show(f"{item['name']!r} has been deleted")


for elt in document.select('.action_delete'):
    elt.bind("click", lambda evt: aio.run(on_delete(evt)))