view libervia/web/pages/lists/create_from_tpl/page_meta.py @ 1595:7941444c1671

pages: set `own_local_jid` to avoid confusion with `own_jid`: - `own_jid` is the real JID of the user. - `own_local_jid` is the JID used in chat, which can be real JID, or a room JID.
author Goffi <goffi@goffi.org>
date Wed, 13 Dec 2023 22:05:48 +0100
parents eb00d593801d
children
line wrap: on
line source

#!/usr/bin/env python3

from libervia.backend.tools.common import data_format
from libervia.backend.core.log import getLogger
from libervia.backend.core.i18n import D_
from libervia.backend.core import exceptions
from libervia.web.server.constants import Const as C
from libervia.frontends.bridge.bridge_frontend import BridgeException

log = getLogger(__name__)

name = "list_create_from_tpl"
access = C.PAGES_ACCESS_PROFILE
template = "list/create_from_template.html"


def parse_url(self, request):
    self.get_path_args(request, ["template_id"])

async def prepare_render(self, request):
    data = self.get_r_data(request)
    template_id = data["template_id"]
    if not template_id:
        self.page_error(request, C.HTTP_BAD_REQUEST)

    template_data = request.template_data
    profile = self.get_profile(request)
    tpl_raw = await self.host.bridge_call(
        "list_template_get",
        template_id,
        "",
        profile,
    )
    template = data_format.deserialise(tpl_raw)
    template['id'] = template_id
    template_data["list_template"] = template

async def on_data_post(self, request):
    data = self.get_r_data(request)
    template_id = data['template_id']
    name, access = self.get_posted_data(request, ('name', 'access'))
    if access == 'private':
        access_model = 'whitelist'
    elif access == 'public':
        access_model = 'open'
    else:
        log.warning(f"Unknown access for template creation: {access}")
        self.page_error(request, C.HTTP_BAD_REQUEST)
    profile = self.get_profile(request)
    try:
        service, node = await self.host.bridge_call(
            "list_template_create", template_id, name, access_model, profile
        )
    except BridgeException as e:
        if e.condition == "conflict":
            raise exceptions.DataError(D_("A list with this name already exists"))
        else:
            log.error(f"Can't create list from template: {e}")
            raise e
    data["post_redirect_page"] = (
        self.get_page_by_name("lists"),
        service,
        node or "@",
    )